⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shiyan1.m

📁 蚁群算法在求解连续空间优化问题中的应用研究
💻 M
字号:

tic
%初始化
m=10;
nc=1;
Alpha=1;
Beta=1;
rho=0.7;
Q=1;
n=20;
c=18.6;
Delta_tau=0;
xf=2;
x0=-1;
nc_max=20;
 M=zeros(1,m);
 p=zeros(m,n);    %产生一个概率矩阵
 Tau=ones(1,n);   %信息素矩阵
 H=zeros(1,nc_max);   %存放每次迭代搜索到的最大值
%%%-------------------------------------------------------------------
while (nc<=nc_max)   %迭代次数的控制
%将m只蚂蚁随机放在n个城市
Tabu=[];
Randpos=[];
for i=1:(ceil(m/n))
Randpos=[Randpos,randperm(n)];
end
Tabu(:,1)=(Randpos(1,1:m))';   %产生1列m行矩阵,代表每只蚂蚁所在的初始区域
Eta=zeros(n,n);                   %产生初始期望值矩阵(产生一个函数)
 %产生随机数矩阵
 r0=rand(m,n);
 %产生可能的初始位置矩阵
   A0=zeros(m,n);
   f0=zeros(m,n);
   
   % 蚂蚁按概率函数选择下一个区域 
   for k=1:m
     for j=1:n
     A0(k,j)=x0+(xf-x0)/n*((j-1)+r0(k,j));
     f0(k,j)=A0(k,j)+10*sin(5*A0(k,j))+7*cos(4*A0(k,j));
     end
  end
  F=max(f0);
 for i=1:n
    for j=1:n
       if(i==j)
        Eta(i,j)=0;
       else Eta(i,j)=F(j)-F(i);
       end
    end 
 end
%%--------------------------------------------------------------------
    for k=1:m  %蚂蚁循环
      %计算概率转移公式
            for j=1:n
               I=Tabu(k,length(Tabu(k,:)));
               if (Eta(I,j)<=0)
                p(k,j)=0;
               else p(k,j)=(Tau(j)^Alpha)*(Eta(I,j)^Beta);
               end
          end
          J=zeros(1,n);
          y=f0(k,I);
          a=0;
        %------------------------------------------
         while (abs(y-c)>=0.01&a<=100)
             I=Tabu(k,length(Tabu(k,:)));
                  for j=1:n
                  J(j)=p(k,j);
                  end
                  if (max(J)==0)
                   j=I;
                   elseif p(k,j)==max(J)
                   j;
                  end
                  u=j;
          %产生随机数矩阵
             r=rand(m,n);
             A=zeros(m,n);
             f=zeros(m,n);
             for w=1:m    %每只蚂蚁即将到达的位置
                  for j=1:n
                   A(w,j)=x0+(xf-x0)/n*(j-1+r(w,j));
                   f(w,j)=A(w,j)+10*sin(5*A(w,j))+7*cos(4*A(w,j));;
                  end
             end  
             if f(k,u)>y;
                 y=f(k,u);
             end
         F=max(f);
         Eta=zeros(n,n);
         for i=1:n
           for j=1:n
             if ( i==j)
              Eta(i,j)=0;
             else Eta(i,j)=F(j)-F(i);
             end
           end 
         end
       for w=1:m    %计算蚂蚁向其它各个区域转移的概率
           for j=1:n
            if (Eta(u,j)<=0)
              p(w,j)=0;
            else p(w,j)=(Tau(j)^Alpha)*(Eta(u,j)^Beta);
            end
           end
       end
       Tabu(k,1)=u;  %将第k只蚂蚁当前搜索到的位置放在Tabu表中
       a=a+1;
     end
     %----------------------------------
    M(1,k)=y;
   L=f-f0;
   %更新信息素
   if (L(k,u)>0)   %更新当前区域
   Delta_Tau=Q*L(k,u);
    else
   Delta_Tau=0;
   end
   Tau(u)=rho*Tau(u)+Delta_Tau;
   end
%%---------------------------------------------------------------------
%f0=f;    %将当前蚂蚁所在的位置作为可能的初始位置
H(1,nc)=max(M);
nc=nc+1;
end
%%%----------------------------------------------------------------------
H
best_val=max(H)
shijian=toc;
%% 画图
%%------------
%% nc 迭代次数
%% H  每次的最优解
%%=========================================================================
subplot(1,2,1)
%绘制函数图象
x=0:pi/100:10;
y=x+10*sin(5*x)+7*cos(4*x);
plot(x,y)
title('迷恋网络学生问题图');             %加图形标题
subplot(1,2,2)
plot(H,'bp-')
title('波动图');             %加图形标题
xlabel('迭代次数');                 %加X轴说明
ylabel('H的值'); %加Y轴说明
%axis([0,nc_max,3.8490,3.8504])
hold on





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -