蟻群算法簡介及matlab實現

2021-02-20 WHUT數學建模

蟻群算法原理 

自1991年由義大利學者 M. Dorigo,V. Maniezzo 和 A. Colorni 通過模擬蟻群覓食行為提出了一種基於種群的模擬進化算法——蟻群優化。該算法的出現引起了學者們的極大關注,蟻群算法的特點:

    ① 其原理是一種正反饋機制或稱增強型學習系統; 它通過【最優路徑上螞蟻數量的增加→信息素強度增加→後來螞蟻選擇概率增大→最優路徑上螞蟻數量更大增加】達到最終收斂於最優路徑上L

② 它是一種通用型隨機優化方法, 它吸收了螞蟻的行為特(內在搜索機制) , 它是使用人工螞蟻仿真(也稱螞蟻系統) 來求解問題L但人工螞蟻決不是對實際螞蟻的一種簡單模擬, 它融進了人類的智能L人工螞蟻有一定的記憶; 人工螞蟻不完全是瞎的; 人工螞蟻生活的時空是離散的L

③ 它是一種分布式的優化方法, 不僅適合目前的串行計算機, 而且適合未來的並行計算機L

④ 它是一種全局優化的方法, 不僅可用於求解單目標優化問題, 而且可用於求解多目標優化問題L

⑤ 它是一種啟發式算法, 計算複雜性為o (Nc*n2*m) , 其中Nc 是迭代次數, m 是螞蟻數目, n 是目的節點數目L

蟻群發現最短路徑的原理和機制

下面解釋蟻群發現最短路徑的原理和機制。

假設在蟻巢和食物源之間有兩條道路 Nest-A-B-D-Food 和Nest-A-C-D-Food,其長度分別為 4 和 6。單位時間內螞蟻可移動一個單位長度的距離。開始時所有路徑上都沒有外激素。

在 t=0 時刻,20 只螞蟻從蟻巢出發移動到 A。由於路徑上沒有外激素,它們以相同概率選擇左側或右側道路,因此平均有 10 只螞蟻走左側,另外 10 只走右側。

在 t=4 時刻,第一組先到達食物源的螞蟻將折回。

在 t=5 時刻,兩組螞蟻將在 D 點相遇。此時 BD 上的外激素數量與 CD 上的相同,因此返回的 10 只螞蟻中有 5 只選擇 BD 而另 5 只選擇 CD。

在 t=8 時刻,前 5 個螞蟻將返回巢穴,而在 AC、CD 和 AB 上各有 5 個螞蟻。

在 t=9 時刻,前 5 個螞蟻又回到 A 並且再次面對往左還是往右的選擇。這時,AB 上的軌跡數是 20 而 AC 上是 15,因此將有較為多數的螞蟻選擇往右,從而增強了 AB 上外激素的量。隨著該過程的繼續,兩條道路上外激素數量的差距將越來越大,直至絕大多數螞蟻都選擇了最短的路徑。正是由於一條道路要比另一條道路短,因此,在相同的時間間隔內,短的路線會有更多的機會被選擇。

根據仿生學家的研究結果,螞蟻憑藉路徑尋優的能力能夠找到蟻巢與食物之間的最短路徑,其原理在於:螞蟻在所經過的路徑上留下一種揮發性分泌物(pheromone,以下稱為信息素),信息素隨著時間的推移會逐漸揮發消失.螞蟻在覓食過程中能夠感知這種物質的存在及其強度,並以此來指導自己的運動方向,傾向於朝著這種物質強度高的方向移動,即選擇該路徑的概率與當時這條路徑上該物質的強度成正比.信息素強度越高的路徑,選擇它的螞蟻就越多,則在該路徑上留下的信息素的強度就更大,而強度大的信息素又吸引更多的螞蟻,從而形成一種正反饋.通過這種正反饋,螞蟻最終可以發現最佳路徑,導致大部分的螞蟻都會走此路徑.

選擇蟻群算法最優組合參數的有效方法:

(1) 確定螞蟻數目M,根據 城市規模 / 螞蟻數目 ≈1.5的選擇策略來確定螞蟻的總數目。

(2) 參數粗調,即調整數值範圍較大的信息啟發式因子α、期望啟發式因子β、信息素強度Q等參數,已得到較理想的解。

(3) 參數微調,即調整數值範圍較小的信息素殘留因子1-ρ。

2 目前蟻群算法的應用

雖然對蟻群算法的研究時間不長, 但是初步研究已顯示出它在求解複雜優化問題方面具有很大的優勢, 特別是1998 年在比利時布魯塞爾專門召開了第一屆螞蟻優化國際研討會後, 現在每兩年召開一次這樣的螞蟻優化國際研討會。這標誌著蟻群算法的研究已經得到了國際上的廣泛支持,使得這種新興的智能進化仿生算法展現出了勃勃生機。

以蟻群算法為代表的群體智能已成為當今分布式人工智慧研究的一個熱點,許多源於蜂群和蟻群模型設計的算法已越來越多地被用於企業的運轉模式的研究。美國五角大樓正在資助關於群體智能系統的研究工作--群體戰略(SWARM STRATEGY),它的一個實戰用途是通過運用成群的空中無人駕駛飛行器和地面車輛來轉移敵人的注意力,讓自己的軍隊在敵人後方不被察覺地安全行進。英國電信公司和美國世界通信公司以電子螞蟻為基礎,對新的電信網絡管理方法進行了試驗。群體智能還被應用於工廠生產計劃的制定和運輸部門的後勤管理。美國太平洋西南航空公司採用了一種直接源於螞蟻行為研究成果的運輸管理軟體,結果每年至少節約了1000萬美元費用開支。英國聯合利華公司已率先利用群體智能技術改善其一家牙膏廠的運轉狀況。美國通用汽車公司,法國液氣公司,荷蘭公路交通部和美國一些移民事務機構也都採用這種技術來改善其運轉的機能。又如美國MCIWorld.com公司一直研究人工螞蟻,並用於管理公司的電話網,對用戶記帳收費等工作。另外,還設計「人工螞蟻」打算用於網際網路的路由管理。鑑於群體智能廣闊的應用前景,美國和歐洲聯盟均於近幾年開始出資資助基於群體智能模擬的相關研究項目, 關在一些院校開設群體智能的相關課程.牛津大學出版社1999年版的E.Bonabeau和M.Dorigo等人編寫的專著《群體智能:從自然到人工系統》(Swarm Intelligence:From Natural to Artificial System),以及2001年出版的J.Kennedy和R.Eberhart編著的《群體智能》(Swarm Intelligence)進一步擴大了群體智能的影響.IEEE進化計算會刊也於2002年8月出版了蟻群優化算特刊。國內也有研究者用螞蟻算法求解全國144個城市的最短迴路問題,求得的解同其它方法求到得解一樣精確,這說明螞蟻算法不但是求解組合優化問題的可行方法,而且是一種很有競爭力的算法。國家自然科學基金"十五"期間學科交叉類優先資助領域中的認知科學及其信息處理的研究內容中也明確列出了群體智能領域的進化,自適應與現場認知主題。而且從1999年開始,幾乎每年都會有幾項相關項目獲得資助。蟻群算法是一種新型的模擬進化算法,其在數據挖掘中的應用正逐步引起人們的關注。目前,人工蟻群在知識發現的過程中主要用於發掘聚類模型和分類模型。

2.1蟻群算法在數據挖掘中的應用

聚類是將一組對象分成若干個群體,每個群體構成一個簇,使得簇內的對象儘可能具有最大的相似性,不同簇之間的對象儘可能有最大的相異性。目前,聚類方法主要有K均值法,模糊聚類、神經網絡聚類、基於遺傳算法的聚類、小波變換聚類以及將這些算法有效結合而形成的改進方法。隨著蟻群算法研究的興起,人們發現在某些方面採用蟻群模型進行聚類更加接近實際的聚類問題。將蟻群算法用於聚類分析,靈感源於螞蟻堆積他們的屍體和分類他們的幼體。基於蟻群算法的聚類方法從原理上可分為兩種:一種是基於蟻堆形成原理來實現數據聚類,另一種是運用螞蟻覓食的原理,利用信息來實現聚類分析。

而數據是數據挖掘的另一個重要主題,它是在資料庫對象集合中尋找屬性,並根據分類模式將其劃分為不同類別的過程。分類過程利用歷史數據記錄自動推導出對給定數據的分類樹。分類器構造方法有統計學方法、機器學習法、神經網絡、決策樹等。從知識發現的觀點來看,分類規則的表達方式形如if<條件>then<類>規則前件(if 部分)包含一組條件集合,一般由邏輯連接符連接;規則結論(then部分)定義了樣本的預測類,這些樣本的預測屬性滿足規則前件所定義的所有條件。將蟻群算法引入分類規則的發現,是利用蟻群覓食原理在資料庫中進行搜索,對隨機產生的一組規則進行選擇優化,直到資料庫能被該組規則覆蓋,從而挖掘出隱含在資料庫中的規則,建立最優的分類模型。蟻群算法搜索的初始條件為發現規則的集合為空,且訓練集包含所有的訓練樣本。螞蟻搜索一次要完成規則生成、規則剪枝、信息素更新三個任務。一次搜索生成一條規則,並且將這條規則加入發現規則集合,同時將該條規則所覆蓋的訓練樣本從訓練集中刪除。如果未覆蓋訓練樣本的數目大於用戶定義的閾值,即最大未覆蓋樣本數,就反覆執行上述過程,最終算法將得到一組最優分類規則集合。 

最早在這一領域開展工作的是Deneubourg 等,他們根據數據對象與其周圍對象的相似性,讓螞蟻隨機地移動、拾起或放下數據對象,以達到聚類數據的目的,這個基本模型已成功地應用於機器人領域。Lumer 等首先改進此算法,提出了LF算法。Wu 等、Ramos等、Yang等從不同角度對LF算法進行了改進,在用蟻群算法進行聚類分析方面取得了一定成效。近幾年,學者在這方面的研究從來沒有間斷過,也取得了一定的研究成果。

2.2 結論 

不過,將蟻群算法運用於數據發掘還存在一些問題,需要進一步研究:

(1)如何將現實的挖掘任務轉換成蟻群求解的問題空間,並用適當的方式表達。如何定義「人工螞蟻」以及螞蟻間的非直接通信方式(如路徑上的信息素、對象的分布狀態等)的選擇。

(2)如何建立正反饋機制,定義啟發函數,遞增地進行問題求解,並且使得到的解與問題定義中現實世界的情況相對應。

(3)基於蟻群的算法要初始化大量的參數,這些參數的選擇會對算法的性能產生較大的影響,但其選取的方法和原則目前尚無理論上的依據,只能通過多次實驗調優,因此參數的最佳設置原則還有待進一步研究。

(4)蟻群算法的搜索時間較長,如何將蟻群算法與遺傳算法、免疫算法等優化算法相結合,改善和提高算法性能,以適應海量資料庫的知識發現。

所以如何在數據挖掘中運用蟻群算法快速、高效地獲得高質量的知識越來越受到人們的關注,逐漸成為近期的研究熱點[5]。

 以下是解放軍信息工程大學一個老師編的matlab程序,請尊重原作者勞動,引用時請註明出處。

我經過修改增加了注釋,已經運行過,無誤,

 function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q)

%%---

%% 主要符號說明

%% C n個城市的坐標,n×2的矩陣

%% NC_max 最大迭代次數

%% m 螞蟻個數

%% Alpha 表徵信息素重要程度的參數

%% Beta 表徵啟發式因子重要程度的參數

%% Rho 信息素蒸發係數

%% Q 信息素增加強度係數

%% R_best 各代最佳路線

%% L_best 各代最佳路線的長度

%%=========================================================================

%%第一步:變量初始化

n=size(C,1);%n表示問題的規模(城市個數)

D=zeros(n,n);%D表示完全圖的賦權鄰接矩陣

for i=1:n

for j=1:n

if i~=j

D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;

else

D(i,j)=eps;      %i=j時不計算,應該為0,但後面的啟發因子要取倒數,用eps(浮點相對精度)表示

end

D(j,i)=D(i,j);   %對稱矩陣

end

end

Eta=1./D;          %Eta為啟發因子,這裡設為距離的倒數

Tau=ones(n,n);     %Tau為信息素矩陣

Tabu=zeros(m,n);   %存儲並記錄路徑的生成

NC=1;               %迭代計數器,記錄迭代次數

R_best=zeros(NC_max,n);       %各代最佳路線

L_best=inf.*ones(NC_max,1);   %各代最佳路線的長度

L_ave=zeros(NC_max,1);        %各代路線的平均長度

while NC<=NC_max        %停止條件之一:達到最大迭代次數,停止

%%第二步:將m只螞蟻放到n個城市上

Randpos=[];   %隨即存取

for i=1:(ceil(m/n))

Randpos=[Randpos,randperm(n)];

end

Tabu(:,1)=(Randpos(1,1:m))';    %此句不太理解?

%%第三步:m只螞蟻按概率函數選擇下一座城市,完成各自的週遊

for j=2:n     %所在城市不計算

for i=1:m    

visited=Tabu(i,1:(j-1)); %記錄已訪問的城市,避免重複訪問

J=zeros(1,(n-j+1));       %待訪問的城市

P=J;                      %待訪問城市的選擇概率分布

Jc=1;

for k=1:n

if length(find(visited==k))==0   %開始時置0

J(Jc)=k;

Jc=Jc+1;                         %訪問的城市個數自加1

end

end

%下面計算待選城市的概率分布

for k=1:length(J)

P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);

end

P=P/(sum(P));

%按概率原則選取下一個城市

Pcum=cumsum(P);     %cumsum,元素累加即求和

Select=find(Pcum>=rand); %若計算的概率大於原來的就選擇這條路線

to_visit=J(Select(1));

Tabu(i,j)=to_visit;

end

end

if NC>=2

Tabu(1,:)=R_best(NC-1,:);

end

%%第四步:記錄本次迭代最佳路線

L=zeros(m,1);     %開始距離為0,m*1的列向量

for i=1:m

R=Tabu(i,:);

for j=1:(n-1)

L(i)=L(i)+D(R(j),R(j+1));    %原距離加上第j個城市到第j+1個城市的距離

end

L(i)=L(i)+D(R(1),R(n));      %一輪下來後走過的距離

end

L_best(NC)=min(L);           %最佳距離取最小

pos=find(L==L_best(NC));

R_best(NC,:)=Tabu(pos(1),:); %此輪迭代後的最佳路線

L_ave(NC)=mean(L);           %此輪迭代後的平均距離

NC=NC+1                      %迭代繼續

%%第五步:更新信息素

Delta_Tau=zeros(n,n);        %開始時信息素為n*n的0矩陣

for i=1:m

for j=1:(n-1)

Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i);          

%此次循環在路徑(i,j)上的信息素增量

end

Delta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);

%此次循環在整個路徑上的信息素增量

end

Tau=(1-Rho).*Tau+Delta_Tau; %考慮信息素揮發,更新後的信息素

%%第六步:禁忌表清零

Tabu=zeros(m,n);             %%直到最大迭代次數

end

%%第七步:輸出結果

Pos=find(L_best==min(L_best)); %找到最佳路徑(非0為真)

Shortest_Route=R_best(Pos(1),:) %最大迭代次數後最佳路徑

Shortest_Length=L_best(Pos(1)) %最大迭代次數後最短距離

subplot(1,2,1)                  %繪製第一個子圖形

DrawRoute(C,Shortest_Route)     %畫路線圖的子函數

subplot(1,2,2)                  %繪製第二個子圖形

plot(L_best)

hold on                         %保持圖形

plot(L_ave,'r')

title('平均距離和最短距離')     %標題

function DrawRoute(C,R)

%%=========================================================================

%% DrawRoute.m

%% 畫路線圖的子函數

%%---

%% C Coordinate 節點坐標,由一個N×2的矩陣存儲

%% R Route 路線

%%=========================================================================

N=length(R);

scatter(C(:,1),C(:,2));

hold on

plot([C(R(1),1),C(R(N),1)],[C(R(1),2),C(R(N),2)],'g')

hold on

for ii=2:N

plot([C(R(ii-1),1),C(R(ii),1)],[C(R(ii-1),2),C(R(ii),2)],'g')

hold on

end

title('旅行商問題優化結果 ')

相關焦點

  • 蟻群算法即相關代碼實現詳解—matlab之智能算法
    蟻群算法即相關代碼實現詳解 一.算法背景 蟻群算法是近年來剛剛誕生的隨機優化方法,它是一種源於大自然的新的仿生類算法.由義大利學者Dorigo最早提出,螞蟻算法主要是通過螞蟻群體之間的信息傳遞而達到尋優的目的,最初又稱蟻群優化方法(Ant Colony
  • ​MATLAB優化算法實例——蟻群算法
    1.1 算法簡介大自然中的真實螞蟻是基本看不見東西的,而且單個螞蟻的行為非常簡單,它們尋找食物的行為帶有隨機性。但是由這些簡單的個體所組成的蟻群卻有著及其縝密的組織性,能夠完成相對複雜的工作。螞蟻能在其走過的路徑上分泌一種叫做信息素的物質,並形成信息素軌跡。
  • 技術分享 | Matlab 蟻群算法應用於三維避障
    這次分享Matlab 中蟻群算法在三維避障方面的應用
  • 蟻群算法求解TSP問題
  • 數學建模必備:Matlab常用15大算法+繪圖工具
    本次課程包含內容豐富,各種繪圖工具介紹(數模獲獎論文圖是非常重要的內容,如果沒有數學圖基本無緣獲獎),各種普通算法實現(數據處理、圖像處理、擬合、插值、概率統計),各種智能算法實現(蟻群算法、SVM、神經網絡、遺傳算法、模擬退火、蒙特卡羅)。還有更多更多豐富的工具。「Matlab從入門到算法實踐」系列已經進行了五期。
  • 基於蟻群算法的網絡結構優化方法
    仿真公式:W_GAIN = rsrp_planned(beam_new)-rsrp_planned(beam_old)Rsrp_planned():為仿真模型,為射線理論Beam_new:為目標權值配置Beam_old:為當前權值配置3) 蟻群算法是一種用來尋找優化路徑的概率型算法。
  • 算法分析|探秘蟻群算法(上)
    var iteratorNum;var antNum;iteratorNum:蟻群算法一共需要迭代的次數,每次迭代都有antNum只螞蟻進行任務分配。antNum:每次迭代中螞蟻的數量。也就是算法過早地收斂至一個局部最優解,無法發現全局最優解。        因此需要部分螞蟻遵循信息素最高的分配策略,還需要一部分螞蟻遵循隨機分配的策略,以發現新的局部最優解。var p = 0.5;var q = 2;p:每完成一次迭代後,信息素衰減的比例。
  • 教程 | matlab實現kmeans聚類算法
    kmeans聚類算法是一種簡單實用的聚類算法,matlab自帶函數kmeans可直接對數據進行kmeans聚類。
  • MATLAB數學建模教學(三) | 史上最強的MATLAB學習網站,你需要的這裡統統都有?
    in Python and MATLAB – Video Tutorial(遺傳算法)https://yarpiz.com/632/ypga191215-practical-genetic-algorithms-in-python-and-matlab2.YPEA: Yarpiz Evolutionary
  • 資料|MATLAB優化算法案例分析與應用(進階篇)
    from=leiphonecolumn_res0817內容簡介 · · · · · ·《MATLAB優化算法案例分析與應用(進階篇)》是深受廣大讀者歡迎的《MATLAB優化算法案例分析與應用》一書的姊妹篇,即進階篇。本書全面、系統、深入地介紹了MATLAB算法及案例應用。
  • 基於matlab的RBFNN的kmeans算法研究
    摘要:在這個信息量爆炸的社會,高效的處理數據成為重中之重,所以聚類算法就為此提供了技術幫助。聚類解析是把數據進行分類匯總的重要手段,被廣泛應用於當今統計學,大數據運行,信號辨別等眾多行業。聚類算法有多種實現方法,其中kmeans算法是基於距離劃分 的方法來實現聚類。
  • 代寫程序代做C++ Java matlab python php留學生設計代碼編程
    41、代做1000以上:做一個射頻開關的模塊實現42、代做螺紋車削仿真,不知道您這能不能做43、代做500左右,基於MATLAB的複雜網絡在44、代做300以上:層次分析,就是設計一個互聯45、代做六軸傳感器算法46、代做可以進行流體計算嗎?
  • MATLAB課程之第五章 走入算法(1)
    大一的學生在學matlab的時候,一般都接觸了C語言,我在課堂上就將這兩種語言進行了比較。怎麼比較?通過編程來舉例說明。
  • python和matlab哪個好?
    一、Python簡介本文引用地址:http://www.eepw.com.cn/article/201808/388133.htmPython是一種面向對象的解釋型電腦程式設計語言。
  • [優化] 《MATLAB高效編程技巧與應用:25個案例分析》源程序+數據
    《MATLAB高效編程技巧與應用:25個案例分析》源程序+數據 所屬分類:計算機 > 計算機輔助設計與工程計算 > Matlab 內容簡介本書是作者八年matlab使用經驗的總結,精心設計的所有案例均來自於國內各大matlab技術論壇網友的切身需求,其中不少案例涉及的內容和求解方法在國內現已出版的matlab書籍中鮮有介紹
  • 關於matlab程序運行時間計算方法的思考
    簡介:在matlab中,為了驗證比較兩個算法直接的效率,我們常常需要計算某段程序的運行時間,而常用的也就是三種方法:本文引用地址:http://www.eepw.com.cn/
  • matlab和c語言的區別
    一、MATLAB簡介本文引用地址:http://www.eepw.com.cn/article/201808/388129.htmMATLAB是美國MathWorks公司出品的商業數學軟體,用於算法開發
  • 機器學習算法KNN簡介及實現
    算法簡介KNN(K近鄰算法)是一種不需要學習任何參數同時也非常簡單的機器學習算法,既可以用來解決分類問題也可以用來解決回歸問題。直觀解釋這個算法就是'近朱者赤,近墨者黑',當輸入一個新樣本時,根據與其相近的樣本值來估計新輸入的樣本。如下圖所示新輸入的樣本會被分類為W1。影響算法的幾個因子在了解算法大體的思路後,其實還有幾個問題需要繼續深究:1、如何表達兩個樣本的距離(相似度)? 2、KNN中的K值應該如何選取?
  • 學習matlab必去的10大網站
    Help Center是MathWorks公司推出的集matlab參考文檔、程序示例、函數集合、視頻簡介、疑難解答於一體的綜合matlab學習平臺。在這裡不僅學習基礎matlab編程,還包括simulink、工具箱等高階matlab知識,是提升matlab編程能力不可不去的地方。
  • 人生苦短,不如學學MATLAB
    松實現SVMSVMModel =  fitcsvm(X,indx,'ClassNames',[false true],'Standardize',true,'KernelFunction','rbf','BoxConstraint