% nt = 209;%碎片个数
full = zeros(nt,nt);
tic;
%初始化距离矩阵
for i =1:nt
for t = 1:nt
if i ~= t
full(i,t) = sum(abs(getend(:,i) - gethead(:,t)));
else
full(i,t) = inf;
end
end
end
% a =full(156,187)
eta = 1./full;%启发因子,取距离的倒数
% eta
% e = eta(4,2)
tau = ones(nt,nt);%信息素矩阵
% tabu = zeros(nt,nt);%禁忌矩阵,取蚂蚁数量和碎片数量一致,以减少迭代次数
nc =1;%初始化迭代次数;
rbest=zeros(nc_max,nt);%各代最佳路线
rbest(:,1) = (linspace(st,st,nc_max))';
rbest(:,nt) =(linspace(sd,sd,nc_max))';
lbest=zeros(nc_max,1);%各代最佳路线的长度
pathlen = 0;%临时记录每代最佳路线长度
stime = 1;%记录代数进度
for i = 1:nc_max % 代数循环
delta_tau=zeros(nt,nt);%初始化改变量
stime
for t = 1:m % 对蚂蚁群体的循环,
ht = 0;
for r = 2:nt-1 %记录了还没访问的图片编号
vp = 1;%visited指示量
pp = [];%置空的概率向量
jc = 0;
%获取尚未访问的位置的向量。
wv = zeros( nt -2 - ht );
for k =1 : nt
if tabu(k) == 0
jc = jc +1;
wv(jc) = k;
end
end
% a =(tau(visited(end),ju(3))^Alpha)*(eta(visited(end),ju(3))^Beta)
% visited(end)
%计算选择的概率
for k=1:length(wv)
pp(k)=(tau(visited(vp),wv(k))^Alpha)*(eta(visited(vp),wv(k))^Beta);%下一张碎片的选择概率计算,p =(信息素^信息素系数)*(启发因子^启发因子系数)
end
pp=pp./(sum(pp));%归一化
pcum =cumsum(pp);
psl = find(pcum >= rand);%轮盘赌法
to_visit= wv(psl(1)) ;%完成选点
tabu(to_visit) =1;
visited(r) = to_visit;
ht =ht +1;%已访问碎片个数变化
vp =vp+1;
end
%路径变化信息
%对单个蚂蚁的路径进行统计
sum1 =0;
for pr = 1:nt -1
x = visited(pr);
y = visited(pr+1) ;
sum1 =sum1 + full(x,y);
end
% vcell{t} =visited;%元胞记录每个蚂蚁的路径,即碎片顺序;
% msum(t) = sum1;
%信息素变化;
for ww=1nt-1)
delta_tau(visited(ww),visited(ww+1))=delta_tau(visited(ww),visited(ww+1)) + Q/sum1;
end
% delta_tau(visited(end),visited(1))=delta_tau(visited(end),visited(1))+Q/(sum1/100);
% if t == m & i == nc_max
% bestqueue = visited
% end
if t == m
bestqueue = visited
end
end
tau=(1-Rho).*tau+delta_tau;
%完成信息素的更新,找出现有的最新的最佳路径,即信息素最多的路径;
stime =stime +1;
end
toc;