Matlab蚁群算法代码

主要是帮助理解蚁群算法在matlab中的实现过程

function[R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q)

C=[1304 3639 4177 3712 3488 3326 3238 4196 4312 4386;2312 1315 2244 1399 1535 1556 1229 1004 790 570]'; % n*2矩阵 用于存储城市坐标

m=31;Alpha=1;Beta=5;Rho=0.1;NC_max=200;Q=100; % m 蚂蚁个数 Alpha 信息素重要程度 Beta 启发式因子重要程度 Rho 信息素蒸发系数 Q 信息素增加强度系数

n=size(C,1); % n为城市个数,取C的行数

D=zeros(n,n); % 用于存储城市之间距离矩阵,初始为n*n的0矩阵

for i=1:n

for j=1:n

if i~=j

D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5; % 城市之间欧氏距离的计算

else

D(i,j)=eps; % 如i=j,则取极小的正数,因为后面Eta=1./D, D为0,无意义

end

D(j,i)=D(i,j); %此处设定为无向图,距离矩阵为对称阵,这个语句貌似有点多余 end

end

Eta=1./D; %城市之间的可见度

Tau=ones(n,n); %信息素,初始为n*n的1矩阵

Tabu=zeros(m,n); % m*n的0矩阵,用于存储禁忌城市,形成每个蚂蚁的路线 NC=1; % 迭代次数初始为1

R_best=zeros(NC_max,n); %最佳路径矩阵,用于存储每次迭代的最佳路径

L_best=inf.*ones(NC_max,1); %最佳路线长度矩阵,用于存储每次迭代的最佳路径长度 L_ave=zeros(NC_max,1); % 平均路线长度

while NC<=NC_max

Randpos=[]; %初始为空

for i=1:(ceil(m/n)) % ceil 向右取整数值,一共循环[m/n]+1次

Randpos=[Randpos,randperm(n)]; % 用于存储每个蚂蚁初始被安排的城市,randperm为随机打乱一个序列,此时Randpos的大小为1*(ceil(m/n)*n)的矩阵

end

Tabu(:,1)=(Randpos(1,1:m))'; % 取Randpos的前m个元素,即m个蚂蚁的初始被安排的

城市,禁忌表第1列存储每个蚂蚁的初始位置

for j=2:n %应注意,此处j是从2开始遍历的,意味着第j列为还未赋值,第j-1列已

赋值,因此后面的很多矩阵为列数j-1或者(n-j+1)

for i=1:m

visited=Tabu(i,1:(j-1)); % 将禁忌表中的第i行的1~(j-1)列元素赋予visited

J=zeros(1,(n-j+1)); % 1*(n-j+1)的0矩阵,用于存储未访问城市

P=J; % P用于存储未访问城市的转移概率。由于和J有相同的矩阵结构,

因此令P=J,将P初始化

Jc=1; %Jc为J中的第Jc个城市,初始值为1

for k=1:n,

if length(find(visited==k))==0 % find 返回visited=k的城市位置,如果返回的城市位置的个

数为空,则

Matlab蚁群算法代码相关文档

最新文档

返回顶部