1、 % 转移概率常数 lower_1=-1; % 设置搜索范围 upper_1=1; % lower_2=-1;upper_2=1;% for i=1 : ant X(i,1)=(lower_1+(upper_1-lower_1)*rand); %随机设置蚂蚁的初值位置 X(i,2)=(lower_2+(upper_2-lower_2)*rand);tau(i)=F(X(i,1),X(i,2);end step=0.05;f=-(x.2+2*y.2-0.3*cos(3*pi*x)-0.4*cos(4*pi*y)+0.7);x,y=meshgrid(lower_1:step:upper_1,low
2、er_2:upper_2);z=eval(f);figure(1);mesh(x,y,z);hold on;plot3(X(:,1),X(:,2),tau,k*) text(0.1,0.8,-0.1,蚂蚁的初始分部位置xlabel(x);ylabel(yzlabel(f(x,y)for t=1:times lamda=1/t;tau_best(t),bestindex=max(tau);for i=1:ant p(t,i)=(tau(bestindex)-tau(i)/tau(bestindex);% 计算状态转移概率 if p(t,i)p0 %局部搜索 temp1=X(i,1)+(2*ran
3、d-1)*lamda;temp2=X(i,2)+(2*rand-1)*lamda;else %全局搜索 temp1=X(i,1)+(upper_1-lower_1)*(rand-0.5);temp2=X(i,2)+(upper_2-lower_2)*(rand-0.5);% 越界处理 if temp1upper_1 temp1=upper_1;if temp2upper_2 temp2=upper_2;% if F(temp1,temp2)F(X(i,1),X(i,2) % 判断蚂蚁是否移动 X(i,1)=temp1;X(i,2)=temp2;tau(i)=(1-rou)*tau(i)+F(X(i,1),X(i,2);% 更新信息量 figure(2);x=X(:,1);y=X(:,2);plot3(x,y,eval(f),蚂蚁的最终分布位置),zlabel(max_value,max_index=max(tau);maxx=X(max_index,1);maxy=X(max_index,2);maxvalue=F(X(max_index,1),X(max_index,2);function F=F(x1,x2) %目标函数 F=-(x1.2+2*x2.2-0.3*cos(3*pi*x1)-0.4*cos(4*pi*x2)+0.7);