clear all
close all
Gen=300;%迭代次数
n=20;%优化函数的维数
N=50;%蚂蚁个数
a1=1;%信息素量的重要性
Q=20;%沉积常数
rou=0.9;%挥发率
B=-10:0.2:10;%每个维度上的划分区间
[~,k2]=size(B);
Xmin=-5;
Xmax=5;
ant=[];
de=1;
tao=[];
for i=1:n
for j=1:k2-1
tao(i,j)=10^(-6);
end
end
P1=[];
delt_tao=[];
P1=zeros(n,k2-1);
Lk=[];
num=1:1:100;
for i=1:n
for j=1:50
ant(i,j)=Xmin+(Xmax-Xmin)*rand(1);
end
end
bestsol0=[];
bestfit0=100000;
while de<Gen
%以概率选出
for k=1:N
for i=1:n
for j=1:k2-1
P1(i,j,k)=(tao(i,j)^a1)/sum(tao(i,:).^a1);
end
R=randsrc(1,1,[num;P1(i,:,k)]);
ant(k,i)=(B(R)+B(R+1))/2;
end
end
%变异
for k=1:N
for i=1:n
r=rand(1);
if r<0.01
ant(k,i)=Xmin+(Xmax-Xmin)*rand(1);
end
end
end
%求适应度函数值,并选出最优解
for k=1:N
Lk(k)=Ackley(ant(k,:));
end
[l1,l2]=sort(Lk);
lu=l2(:,1:10);
[~,N1]=size(lu);
ant_s=ant(lu,:);
bestfit1=l1(1);
bestsol1=ant(l2(1),:);
if bestfit1<bestfit0
bestfit=bestfit1;
bestfit0=bestfit1;
bestsol=bestsol1;
bestsol0=bestsol1;
else
bestfit=bestfit0;
bestsol=bestsol0;
end
bestplot(de)=bestfit;
%每个区间信息素更新
for i=1:n
for j=1:k2-1
for k=1:N1
if ant(k,i)>=B(j) && ant_s(k,i)<=B(j+1)
delt_tao(i,j,k)=Q/Lk(k) ;
else
delt_tao(i,j,k)=0;
end
tao(i,j)=(1-rou)*tao(i,j)+sum(delt_tao(i,j,:));
end
end
end
de=de+1;
end
plot(bestplot,'b','linewidth',2)
评论0