www.pudn.com > anttsp.rar > AIA_algorithm.m, change:2008-04-22,size:1791b


function AIA=AIA_algorithm(AIA_iter,city_num,dist,X,Y,pc,uc,ps,us,pi,ui) 
%------------------------------人工免疫算法-------------------------------- 
antitrope_num=30;                               %产生的抗体数目 
%产生初始抗体并进行预处理 
for i=1:antitrope_num 
   % antitrope(i).tour=randperm(city_num); 
    temp_anti=cat(2,1,randperm(city_num-1)+1); 
    antitrope(i).tour=preproccess(city_num,dist,temp_anti); 
end 
%计算抗体的长度并返回当前最优抗体 
[antitrope,best_antitrope]=anti_length(city_num,dist,antitrope_num,antitrope); 
for k=1:AIA_iter 
     %通过构造免疫算子产生新抗体群 
    for i=1:antitrope_num                       %产生2倍于原抗体数的新抗体 
        new_antitrope(i).tour=immune_operator(city_num,antitrope(i).tour,pc,uc,ps,us,pi,ui); 
        new_antitrope(i+antitrope_num).tour=immune_operator(city_num,antitrope(i).tour,pc,uc,ps,us,pi,ui); 
    end 
    %计算新抗体的长度及新抗体中的最优抗体 
    [new_antitrope,new_best_antitrope]=anti_length(city_num,dist,2*antitrope_num,new_antitrope); 
    %在原有抗体群和新抗体群中产生下一次免疫迭代的抗体群 
    anti1_length=[antitrope.length];            %保存20个原最优抗体在下一次免疫的抗体群中 
    [no_use,index]=sort(anti1_length); 
    for i=1:20                                 
        temp(i)=antitrope(index(i)); 
    end 
    anti2_length=[new_antitrope.length];        %保存10个新最优抗体在下一次免疫的抗体群中 
    [no_use,index]=sort(anti1_length); 
    for i=21:30                             
        temp(i)=new_antitrope(index(i)); 
    end 
    antitrope=temp;   
end 
result_length=[antitrope.length]; 
[no_use,index]=sort(result_length); 
for i=1:30                                      %人工免疫算法后的30个最优抗体 
    AIA(i)=antitrope(index(i)); 
    AIA(i).tour(city_num+1)=AIA(i).tour(1); 
end