蚁群算法路径优化算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

其中,表示在t时刻蚂蚁k由元素(城市)i转移到元素(城市)j的状态转移概率。allowedk = C − tabuk表示蚂蚁k下一步允许选择的城市。α为启发式因子,表示轨迹的相对重要性,反映了蚂蚁在运动过程中所积累的信息在蚂蚁运动时所起的作用,其值越大,则该蚂蚁越倾向于选择其他蚂蚁经过的路径,蚂蚁之间的协作性越强。β为期望启发式因子,表示能见度的相对重要性,反映了蚂蚁在运动过程中启发信息在蚂蚁选择路径中的受重视程度,其值越

大,则该状态转移概率越接近于贪心规则;ηij(t) 为启发函数,表达式为。式中,dij表示相邻两个城市之间的距离。(6)修改禁忌表指针,即选择好之后将蚂蚁移动到新的元素(城市),并把该元素(城市)移动到该蚂蚁个体的禁忌表中。(7)若集合C中元素(城市)未遍历完,即k

更新每条路径上的信息量:τij(t + n) = (1 − ρ) * τij(t) + Δτij(t),

(9)若满足结束条件,即如果循环次数,则循环结束并输出程序计算结果,否则清空禁忌表并跳转到第(2)步。

蚁群算法的matlab源程序

1.蚁群算法主程序:main.m

%function [bestroute,routelength]=Ant

Clc

clear

tic

% 读入城市间距离矩阵数据文件

CooCity = load( 'CooCity.txt' ) ;% 城市网络图坐标数据文件,txt形式给出NC=length(CooCity); % 城市个数

for i=1:NC % 计算各城市间的距离

for j=1:NC

distance(i,j)=sqrt((CooCity(i,2)-CooCity(j,2))^2+(CooCity(i,3)-CooCity(j,3))^2);

end

end

MAXIT=10;%最大循环次数

Citystart=[]; % 起点城市编号

tau=ones(NC,NC); % 初始时刻各边上的信息痕迹为1

rho=0.5; % 挥发系数

alpha=1; % 残留信息相对重要度

beta=5; % 预见值的相对重要度

Q=10; % 蚁环常数

NumAnt=20; % 蚂蚁数量

routelength=inf; % 用来记录当前找到的最优路径长度

for n=1:MAXIT

for k=1:NumAnt %考查第K只蚂蚁

deltatau=zeros(NC,NC); % 第K只蚂蚁移动前各边上的信息增量为零

%[routek,lengthk]=path(distance,tau,alpha,beta,[]); % 不靠率起始点[routek,lengthk]=path(distance,tau,alpha,beta,Citystart); % 指定起始点if lengthk

:::routelength=lengthk;

:::bestroute=routek;

end

for i=1:NC-1 % 第K只蚂蚁在路径上释放的信息量

deltatau(routek(i),routek(i+1))=deltatau(routek(i),routek(i+1))+Q/lengthk; % 信息素更新

end

%deltatau(routek(NC),1)=deltatau(routek(NC),1)+Q/lengthk; %

end

length_n(n)=routelength; % 记录路径收敛

tau=(1-rho).*tau; % 信息素挥发

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

costtime=toc;

subplot(1,2,1),plot([CooCity(bestroute,2)],[CooCity(bestroute,3)],'-*')

subplot(1,2,2),plot([1:MAXIT],length_n,'-*')

[routelength,costtime]

2.蚁群算法寻找路径程序:path.m

% 某只蚂蚁找到的某条路径routek,lengthk

function [routek,lengthk]=path(distance,tau,alpha,beta,Citystart)

[m,n]=size(distance);

if isempty(Citystart) % 如果不确定起点

p=fix(m*rand)+1; % 随机方式初始化起点,均匀概率

else

p=Citystart; % 外部给定确定起点 end

lengthk=0; % 初始路径长度设为 0

routek=[p]; % 蚂蚁路径点序列,即该蚂蚁已经过的城市集合,路径初始起点for i=1:m-1

np=routek(end); % 蚂蚁路径城市序号,依次经过的城市编号

np_sum=0; % 路由长度初始为 0

for j=1:m

if inroute(j,routek) % 判断城市节点j是否属于tabuk,即是否已经过

continue;

else % j为还未经过的点

ada=1/distance(np,j); % 预见度

np_sum=np_sum+tau(np,j)^alpha*ada^beta; % 路由表:信息痕迹、预见度 end

end

cp=zeros(1,m); % 转移概率,基于路径长度及路由表

for j=1:m

ifinroute(j,routek)

continue;

else

ada=1/distance(np,j); % 预见度

cp(j)=tau(np,j)^alpha*ada^beta/np_sum; % np到j的转移概率end

end

NextCity=nextcitychoose2(cp); % 根据转移概率确定下一个城市,

% 直观地,取转移概率最大值方向方法,决策结果稳定且收敛快

routek=[routek,NextCity]; % 更新路径

lengthk=lengthk+distance(np,NextCity); % 更新路径长度

end

蚁群算法仿真结果:

其中左边是蚂蚁行走的最短路径,右边是最短路径的值的收敛情况。

相关文档
最新文档