(完整版)蚁群算法matlab程序实例整理

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

function [y,val]=QACS

tic

load att48 att48;

MAXIT=300; % 最大循环次数

NC=48; % 城市个数

tao=ones(48,48);% 初始时刻各边上的信息最为1

rho=0.2; % 挥发系数

alpha=1;

beta=2;

Q=100;

mant=20; % 蚂蚁数量

iter=0; % 记录迭代次数

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

for j=1:NC

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

end

end

bestroute=zeros(1,48); % 用来记录最优路径

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

% for i=1:mant % 确定各蚂蚁初始的位置

% end

for ite=1:MAXIT

for ka=1:mant %考查第K只蚂蚁

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

[routek,lengthk]=travel(distance,tao,alpha,beta);

if lengthk

routelength=lengthk;

bestroute=routek;

end

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

deltatao(routek(i),routek(i+1))=deltatao(routek(i),routek(i+1))+Q/lengthk ;

end

deltatao(routek(48),1)=deltatao(routek(48),1)+Q/lengthk;

end

for i=1:NC-1

for j=i+1:NC

if deltatao(i,j)==0

deltatao(i,j)=deltatao(j,i); y=bestroute;

end val=routelength;

end toc

end

tao=(1-rho).*tao+deltatao;

end

y=bestroute;

val=routelength;

toc

function [y,val]=travel(distance,tao,alpha,beta) % 某只蚂蚁找到的某条路径[m,n]=size(distance);

p=fix(m*rand)+1; %fix取整函数

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

tabuk=[p]; % 假设该蚂蚁都是从第p 个城市出发的

for i=1:m-1

np=tabuk(length(tabuk)); % 蚂蚁当前所在的城市号

p_sum=0;

for j=1:m

if isin(j,tabuk)

continue;

else

ada=1/distance(np,j);

p_sum=p_sum+tao(np,j)^alpha*ada^beta;

end

end

cp=zeros(1,m); % 转移概率

for j=1:m

if isin(j,tabuk)

continue;

else

ada=1/distance(np,j);

cp(j)=tao(np,j)^alpha*ada^beta/p_sum;

end

end

NextCity=pchoice(cp);

tabuk=[tabuk,NextCity];

val=val+distance(np,NextCity);

end

y=tabuk;

function y=isin(x,A) % 判断数x 是否在向量A 中,如在返回1 ,否则返回0 y=0;

for i=1:length(A)

if A(i)==x

y=1;

break;

end

end

function y=pchoice(A)

a=rand;

tempA=zeros(1,length(A)+1);

for i=1:length(A)

tempA(i+1)=tempA(i)+A(i);

end

for i=2:length(tempA)

if a<=tempA(i)

y=i-1;

break;

end

end

相关文档
最新文档