蟻群演算法學習

2021-08-29 23:13:27 字數 2124 閱讀 4053

特點:正反饋;不容易陷入區域性最優,易於找到全域性最優解;分布式計算特點;

load('citys');

distance=pdist2(citys,citys); % 構建距離矩陣

[m n]=size(citys);

ant_num=30; % 螞蟻數量

a=1; % 資訊素重要程度

b=5; % 啟發函式重要程度

r=0.1; % 資訊素揮發因子

table=zeros(ant_num,m); % 資訊素矩陣

tau= ones(m,m); % 資訊素矩陣

distance(distance==0)=1e-4;

dta=1./distance; % 啟發函式

min_length=999999999;

for i=1:200 % 迭代次數

table=zeros(ant_num,m);

ant_length=zeros(ant_num,1); % 計算每只螞蟻走過的距離

start=round(rand(ant_num,1)*(m-1)+1); % 隨機產生初始城市

table(:,1)=start;

citys_index=1:m;

for num=1:ant_num % 從每乙隻螞蟻開始

for j=2:m

zhi=table(num,1:(j-1));

allow_index=~ismember(citys_index,zhi); % 判斷哪些城市還沒去過

allow_city=citys_index(allow_index);

p= ((tau(table(num,j-1),allow_city)).^a.*(dta(table(num,j-1),allow_city)).^b)./... % 判斷去每個城市的概率

sum((tau(table(num,j-1),allow_city)).^a.*(dta(table(num,j-1),allow_city)).^b);

pc=cumsum(p);% 輪盤賭法決策下乙個去的城市

target_index=find(pc>=rand);

target_city=allow_city(target_index(1));

table(num,j)=target_city;

ant_length(num,1)=distance(table(num,j-1),table(num,j))+ant_length(num,1); % 更新每乙隻螞蟻的總路徑

if j==m

ant_length(num,1)=distance(table(num,j),table(num,1))+ant_length(num,1);

endend

endif min_length>min(ant_length)

[min_length,min_index]=min(ant_length);

rout=table(min_index,:);

endtau=tau.*(1-r); % 資訊素的揮發

for num=1:ant_num

for j=1:m % 資訊素的累加

tau(table(num,j),table(num,mod(j,m)+1))=tau(table(num,j),table(num,mod(j,m)+1))+1./ant_length(num,1);

endend

end

寫**的時候對結果產生了乙個誤區,就是最好的結果會在最後一次運算中產生,也就是說螞蟻們最後的結果會趨於一致,結果應該是最後一次未必會產生最好的結果,隨機性還是有的,最好的結果會在執行的中間產生。(這個誤區卡了我好久哇)

下面附上原理:

蟻群優化演算法

蟻群優化演算法作為一種全域性最優化搜素方法,同遺傳演算法一樣,靈感都 於自然界,並有良好的搜素效能。然而,從數學的角度來理解分析它們的工作方式是很難的,因為這些演算法都具有很複雜的隨機過程。aco演算法的過程具有一定的隨機性,這就要求初始化螞蟻的數量和更新資訊素的次數必須足夠的多,只有這樣才能最終收...

蟻群演算法詳解

今天開始學習優化演算法,話說蟻群演算法是之前看過的,唉,今天一看都看不懂了,蟻群演算法的思想我就不說了,現在來理解一下這個 吧!該 的主要思想是 for 迭代次數 for 螞蟻個數 每個螞蟻完整的走完一遍 每個點訪問一次 end更新資訊素 end然後根據資訊素的多少找出一條路徑來 tsp的蟻群演算法...

ACO蟻群演算法

aco蟻群演算法 總結一下 在蟻群演算法中有兩個比較重要的引數資訊素濃度a,距離d,主要依靠這兩個特徵引數來推算出蟻群去往地點的概率。在比較早的時候成功解決了tsp旅行商的問題 在後面的例子中也會以這個例子 要用演算法去模擬螞蟻的這種行為,關鍵在於資訊素的在演算法中的設計,以及路徑中資訊素濃度越大的...