3、<1)表示信息素的揮發(fā)度,當(dāng)所有螞蟻完成一次循環(huán)后,各個城市間連接路徑上的信息素濃度,需要實時更新。tij(t+1)=(1-r)tij(t)+Dtij,Dtij=其中:Dtijk表示螞蟻k在城市i與城市j的連接路徑上,釋放的信息素濃度Dtij表示所有螞蟻在城市i與城市j的連接路徑上,釋放的信息素濃度。(2)、Dtijk的計算方法Dtijk=其中:Q為常數(shù),表示螞蟻循環(huán)一次釋放的信息素的總量;dij為第k只螞蟻經(jīng)過路徑的長度,Length;4.相關(guān)程序1、訪問每個城市一次也僅一次的最短路徑,共有30個2、城市的坐標(biāo)c
4、itys,這是直角坐標(biāo),根據(jù)二個城市的坐標(biāo)值,可以用D=可計算出任意二個城市間的距離。citys=1304231236391315417722443712139934881535332615563238122941961004431279043865703007197025621756278814912381167613326953715167839182179406123703780221236762578402928384263293134291908350723673394264334393201293532
5、403140355025452357277828263、代碼clearallclcloadcitys_data.mat%計算城市間相互距離n=size(citys,1);%城市的個數(shù)D=zeros(n,n);%n行n列的矩陣,即任意二個城市之間的距離fori=1:nforj=1:nifi~=jD(i,j)=sqrt(sum((citys(i,:)-citys(j,:)).^2));elseD(i,j)=1e-4;endendend%%初始化參數(shù)m=50;%螞蟻數(shù)量alpha=1;%信息素重要程度因子beta=5;%
6、啟發(fā)函數(shù)重要程度因子rho=0.1;%信息素揮發(fā)因子Q=1;%常系數(shù)Eta=1./D;%啟發(fā)函數(shù)Tau=ones(n,n);%信息素矩陣,全1矩陣Table=zeros(m,n);%路徑記錄表,全0矩陣,每只螞蟻依次走過的城市iter=1;%迭代次數(shù)初值iter_max=200;%最大迭代次數(shù)Route_best=zeros(iter_max,n);%各代最佳路徑Length_best=zeros(iter_max,1);%各代最佳路徑的長度Length_ave=zeros(iter_max,1);%各代路徑的平均
7、長度%%迭代尋找最佳路徑whileiter<=iter_max%隨機產(chǎn)生各個螞蟻的起點城市start=zeros(m,1);%m是螞蟻的個數(shù),m行1列的矩陣,記錄每個螞蟻的城市編號fori=1:mtemp=randperm(n);start(i)=temp(1);endTable(:,1)=start;%路徑記錄表的1列,為每個螞蟻的起點城市%構(gòu)建解空間citys_index=1:n;%逐個螞蟻路徑選擇fori=1:m%逐個城市路徑選擇forj=2:ntabu=Table(i,1:(j-1));%已訪問的城市集合(
8、禁忌表)allow_index=~ismember(citys_index,tabu);%不是tabu的城市就是要訪問的城市allow=citys_index(allow_index);%待訪問的城市集合P=allow;fork=1:length(allow)%計算城市間轉(zhuǎn)移概率P(k)=Tau(tabu(end),allow(k))^alpha*Eta(t