Info
This question is closed. Reopen it to edit or answer.
Ant Colony algorithm Needs explaination (has no refernece)
    4 views (last 30 days)
  
       Show older comments
    
Hello,
I was searching the google about Ant Colony Optimization Matlab Code and I found this nice code.
I was unlucky to find it in chinese language, It was my first problem. I tried to translate it as I can.
Now I am working to understand its concept but I have some problems, if anyone here could help me about ant colony optimization I will be grateful.
I will paste the code here (in its language) and then I will type my questions:
 ____________________________________________________________________________
function [BESTX,BESTY,ALLX,ALLY]=Ant(K,N,Rho,Q,Lambda,LB,UB,Num,Den,Delay,ts,StepNum,SigType,PIDLB,PIDUB)
%%?????????????????PID?????
%%??????
% K ????
% N ????
% Rho ??????????0?1???????0.7?0.95
% Q ??????????0?????1??
% Lambda ?????????0?1???????0.1?0.5
% LB ????????M×1???
% UB ????????M×1???
% Num ????????????????
% Den ????????????????
% Delay ????
% ts ??????
% StepNum ?????
% SigType ?????1??????2??????3??????
% PIDLB PID???????????
% PIDUB PID???????????
%%??????
% BESTX K×1???????????M×1?????????????
% BESTY K×1???????????????????
% ALLX K×1???????????M×N?????????????
% ALLY K×N????????????????
%%???????
M=length(LB);%???????
%???????
X=zeros(M,N);
for i=1:M
    x=unifrnd(LB(i),UB(i),1,N);%%X?3*10????????????????10?????
    X(i,:)=x;
end
%???????
ALLX=cell(K,1);%???????????M×N???????????
ALLY=zeros(K,N);%K×N?????????????
BESTX=cell(K,1);%???????????M×1?????????????
BESTY=zeros(K,1);%K×1???????????????????
k=1;%????????
Tau=ones(1,N);%??????
Y=zeros(1,N);%??????
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%?????
NN=5;
Rho_min=0.1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%????????
while k<=K
    YY=zeros(1,N);
    for n=1:N
        x=X(:,n);
        [J,u,yout,error]=OBJ(x(1),x(2),x(3),Num,Den,Delay,ts,StepNum,SigType,PIDLB,PIDUB);
        YY(n)=J;
    end
    maxYY=max(YY);
    temppos=find(YY==maxYY);
    POS=temppos(1);
    %??????
    for n=1:N
        if n~=POS
            x=X(:,n);
            [J,u,yout,error]=OBJ(x(1),x(2),x(3),Num,Den,Delay,ts,StepNum,SigType,PIDLB,PIDUB);
            Fx=J;
            mx=GaussMutation(x,LB,UB);
            [J,u,yout,error]=OBJ(mx(1),mx(2),mx(3),Num,Den,Delay,ts,StepNum,SigType,PIDLB,PIDUB);
            Fmx=J;
            if Fmx<Fx
                X(:,n)=mx;
                Y(n)=Fmx;
            elseif rand>1-(1/(sqrt(k)))%%????????????????????????????
                X(:,n)=mx;
                Y(n)=Fmx;
            else
                X(:,n)=x;
                Y(n)=Fx;
            end
        end
    end
    for n=1:N
        if n~=POS
            x=X(:,n);
            [J,u,yout,error]=OBJ(x(1),x(2),x(3),Num,Den,Delay,ts,StepNum,SigType,PIDLB,PIDUB);
            Fx=J;
            mx=GaussMutation(x,LB,UB); 
            [J,u,yout,error]=OBJ(mx(1),mx(2),mx(3),Num,Den,Delay,ts,StepNum,SigType,PIDLB,PIDUB);
            Fmx=J;
            if Fmx<Fx
                X(:,n)=mx;
                Y(n)=Fmx;
            elseif rand>1-(1/(sqrt(k)))%%???????????????????????????????
                X(:,n)=mx;
                Y(n)=Fmx;
            else
                X(:,n)=x;
                Y(n)=Fx;
            end
        end
    end
      %???????????
      for n=1:N
          if n~=POS
              x=X(:,n);
              r=(K+k)/(K+K);
              p=randperm(N);%%?1?N??????
              t=ceil(r*N);%?????????????r*N?????
              pos=p(1:t);%%?p??t???????
              TempTau=Tau(pos);
              maxTempTau=max(TempTau);
              pos2=find(TempTau==maxTempTau);
              pos3=pos(pos2(1));
              x2=X(:,pos3(1));%%%?????????????????
              x3=(1-Lambda)*x+Lambda*x2;%%
              [J,u,yout,error]=OBJ(x(1),x(2),x(3),Num,Den,Delay,ts,StepNum,SigType,PIDLB,PIDUB);
              Fx=J;
              [J,u,yout,error]=OBJ(x(1),x(2),x(3),Num,Den,Delay,ts,StepNum,SigType,PIDLB,PIDUB);%%%????????????x(1),x(2),x(3)??x3(1),x3(2),x3(3)
              Fx3=J;
              if Fx3<Fx
                  X(:,n)=x3;
                  Y(n)=Fx3;
              elseif rand>1-(1/(sqrt(k)))
                  X(:,n)=x3;
                  Y(n)=Fx3;
              else
                  X(:,n)=x;
                  Y(n)=Fx;
              end
          end
      end
      %????????
      Tau=Tau*(1-Rho);
      maxY=max(Y);
      minY=min(Y);
      DeltaTau=(maxY-Y)/(maxY-minY);
      Tau=Tau+Q*DeltaTau;
      ALLX{k}=X;
      ALLY(k,:)=Y;
      minY=min(Y);
      pos4=find(Y==minY);
      BESTX{k}=X(:,pos4(1));
      BESTY(k)=minY;
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     %??????????
     if k>NN
          if BESTY(k)>=BESTY(k-NN)
              if 0.95*Rho>=Rho_min
                  Rho=0.95*Rho
              else
                  Rho=Rho_min;
              end
          end
      end
     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      disp(k);
      k=k+1;
  end
_________________________________________________________________________
I concluded from this code that it is an improved Ant colony algorith that uses Mutation (guass mutation) to be having the genetics characteristics.
in the following portion of code: I can not define how the ant can find its next path pheromone (largest) where is the equation that is known as random probalistic used always ???
_______________________________________________________________________
%???????????
    for n=1:N
        if n~=POS
            x=X(:,n);
            r=(K+k)/(K+K);
            p=randperm(N);%%?1?N??????
            t=ceil(r*N);%?????????????r*N?????
            pos=p(1:t);%%?p??t???????
            TempTau=Tau(pos);
            maxTempTau=max(TempTau);
            pos2=find(TempTau==maxTempTau);
            pos3=pos(pos2(1));
            x2=X(:,pos3(1));%%%?????????????????
            x3=(1-Lambda)*x+Lambda*x2;%%
________________________________________________________________________
what is the use of Lamda ???
what kind of equation you use to update the DeltaTau in the following
_______________________________________________________________________
%????????
    Tau=Tau*(1-Rho);
    maxY=max(Y);
    minY=min(Y);
    DeltaTau=(maxY-Y)/(maxY-minY);
    Tau=Tau+Q*DeltaTau;
    ALLX{k}=X;
    ALLY(k,:)=Y;
    minY=min(Y);
    pos4=find(Y==minY);
    BESTX{k}=X(:,pos4(1));
    BESTY(k)=minY;
_________________________________________________________________
I hope to find a paper in english having this algorithm or if anyone has understood it and has a refernce equation , please help me
Thanks in advance
0 Comments
Answers (0)
This question is closed.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!