蟻群算法求解TSP問題

2021-02-07 Matlab工作坊

一、蟻群算法簡介

蟻群算法(antcolony optimization, ACO),又稱螞蟻算法,指的是一種源於自然現象的算法,也是一種 metaheuristic,即與具體問題關係不大的優化算法,也就是它是一種用來在圖中尋找優化路徑的機率型技術。它由MarcoDorigo於1992年在他的博士論文中提出,其靈感來源於螞蟻在尋找食物過程中發現路徑的行為。蟻群算法是一種模擬進化算法,初步的研究表明該算法具有許多優良的性質。針對PID控制器參數優化設計問題,將蟻群算法設計的結果與遺傳算法設計的結果進行了比較,數值仿真結果表明,蟻群算法具有一種新的模擬進化優化方法的有效性和應用價值。

二、蟻群算法原理

自然界中的螞蟻是沒有視覺的,既不知道向何處尋找食物,也不知道發現食物後如何返回自己的巢穴,它僅僅依賴於同類散發在周圍環境中的特殊物質—信息素的軌跡,來決定自己何去何從。但是儘管沒有任何先驗的知識,但螞蟻們還是有能力找到從其巢穴到食物源的最佳路徑。所以大量研究發現,同一蟻群中的螞蟻能感知信息素及其強度,後來的螞蟻會傾向於朝信息素濃度高的方向移動,而移動留下的信息素又會對原有信息素進行加強,後續的螞蟻而後續的螞蟻選擇該路徑的可能性也越大。由於在相同時間段內越短的路徑會被越多的螞蟻訪問,所以後續的螞蟻選擇較短路徑的可能性也越大,最後所有的螞蟻都走最短的那條路徑。 應該指出,以蟻群為基礎的方法能夠有效地尋找較短的路徑,但不一定是最短的路徑。

不過,對於那些難於獲得最優解的問題,如那些NP難題,這種近於最優的解法常常已經是綽綽有餘了。事實上,隨著城市數目的增多,尋找精確解很快就會變成一個無法對付的問題。

三、蟻群算法求解步驟

(1)本文要解決的問題(TSP問題)

TSP問題,又稱為旅行商問題、貨郎擔問題、TSP問題,是一個多局部最優的最優化問題:有n個城市,一個推銷員要從其中某一個城市出發,唯一走遍所有的城市,再回到他出發的城市,求最短的路線。也即求一個最短的哈密頓迴路。

TSP問題是一個組合優化問題。該問題可以被證明具有NP計算複雜性。因此,任何能使該問題的求解得以簡化的方法,都將受到高度的評價和關注。

旅行推銷員問題是數圖論中最著名的問題之一,即「已給一個n個點的完全圖,每條邊都有一個長度,求總長度最短的經過每個頂點正好一次的封閉迴路」。Edmonds,Cook和Karp等人發現,這批難題有一個值得注意的性質,對其中一個問題存在有效算法時,每個問題都會有有效算法。

迄今為止,這類問題中沒有一個找到有效算法。傾向於接受NP完全問題(NP-Complet或NPC)和NP難題(NP-Hard或NPH)不存在有效算法這一猜想,認為這類問題的大型實例不能用精確算法求解,必須尋求這類問題的有效的近似算法。

此類問題中,經典的還有子集和問題;Hamilton迴路問題;最大團問題。

本文提出的問題是:我國31個直轄市、省會和自治區首府的巡迴路線應有很多種,試著尋找一條最短路徑。

(2)算法求解步驟



四、求解結果

(1)TSP路線展示


(2)適應度函數變化(目標值變化情況)


總結:(1)蟻群算法具有很強的發現較好解的能力。由於算法本身採用正反饋原理,加快了進化過程,且不易陷入局部最優解; (2)蟻群算法具有很強的並行性,個體之間不斷進行信息交流和傳遞,有利於發現較好解。單個個體容易收斂於局部最優,多個個體通過合作,可很快收斂於解空間的某一子集,有利於對解空間的進一步探索,從而發現較好解。 存在的問題是該算法本身很複雜,一般需要較長的搜索時間;容易出現停滯現象,即搜索進行到一定程度後,所有個體所發現的解完全一致,不能對解空間進一步進行搜索,不利於發現更好的解。

相關焦點

  • 蟻群算法簡介及matlab實現
    2 目前蟻群算法的應用雖然對蟻群算法的研究時間不長, 但是初步研究已顯示出它在求解複雜優化問題方面具有很大的優勢, 特別是1998 年在比利時布魯塞爾專門召開了第一屆螞蟻優化國際研討會後, 現在每兩年召開一次這樣的螞蟻優化國際研討會。這標誌著蟻群算法的研究已經得到了國際上的廣泛支持,使得這種新興的智能進化仿生算法展現出了勃勃生機。
  • 啟發式算法在最優化問題求解中的應用與實踐
    本文介紹了最優化問題的常見應用場景和求解方式,並重點對啟發式算法在求解NP問題的次優解過程進行了分析。最後通過模擬退火算法和蟻群算法尋求最優化路徑的實例,實踐了通過啟發式算法來求解NP問題的次優解,為我們在日常生產活動中解決此類時間複雜度具有不確定性的最優化問題提供一種成本可控,目標效益更高的解決方案。
  • ​MATLAB優化算法實例——蟻群算法
    其它螞蟻在運動過程中能夠感知這種物質的存在和強度,並以此指導自己的運動路線,使之朝著信息素強度大的方向運動,這使得蟻群在食物源與蟻穴之間的最短路徑上來去自如。蟻群算法就是受到蟻群這種行為的啟發,而提出的一種啟發式搜索算法。作為一種現代智能算法,蟻群算法不需要任何先驗知識,最初只是隨機地選擇搜索路徑,隨著對解空間的了解,搜索更加具有規律性,並逐漸得到全局最優解。
  • 算法分析|探秘蟻群算法(上)
    var iteratorNum;var antNum;iteratorNum:蟻群算法一共需要迭代的次數,每次迭代都有antNum只螞蟻進行任務分配。antNum:每次迭代中螞蟻的數量。也就是算法過早地收斂至一個局部最優解,無法發現全局最優解。        因此需要部分螞蟻遵循信息素最高的分配策略,還需要一部分螞蟻遵循隨機分配的策略,以發現新的局部最優解。var p = 0.5;var q = 2;p:每完成一次迭代後,信息素衰減的比例。
  • 基於蟻群算法的網絡結構優化方法
    【問題描述】NR當前已在建設中期,為保障覆蓋性能,現網逐漸推廣8波束的配置,但8波束配置共涉及32個權值參數,天饋權值優化複雜度非常高,而且對外場的能力要求很高,所以權值優化是當前外場進行覆蓋調整工作中的難點。
  • 實驗三 遺傳算法解決TSP問題實驗
    2.利用遺傳求解函數優化問題,理解求解TSP問題的流程並測試主要參數對結果的影響。3.用遺傳算法對TSP問題進行了求解,熟悉遺傳算法的算法流程,證明遺傳算法在求解TSP問題時具有可行性。遺傳算法在本質上是一種不依賴具體問題的直接搜索方法,是一種求解問題的高效並行全局搜索方法。其假設常描述為二進位位串,位串的含義依賴於具體應用。搜索合適的假設從若干初始假設的群體集合開始。當前種群成員通過模仿生物進化的方式來產生下一代群體,如隨機變異和交叉。每一步,根據給定的適應度評估當前群體的假設,而後使用概率方法選出適應度最高的假設作為產生下一代的種子。
  • 技術分享 | Matlab 蟻群算法應用於三維避障
    這次分享Matlab 中蟻群算法在三維避障方面的應用
  • [算法系列]最優化問題綜述
    無約束優化問題含等式約束的優化問題含不等式約束的優化問題2 求解策略針對以上三種情形,各有不同的處理策略:無約束的優化問題:可直接對其求導,並使其為0,這樣便能得到最終的最優解;含等式約束的優化問題:主要通過拉格朗日乘數法將含等式約束的優化問題轉換成為無約束優化問題求解;含有不等式約束的優化問題
  • 蟻群算法即相關代碼實現詳解—matlab之智能算法
    蟻群算法即相關代碼實現詳解 一.算法背景 蟻群算法是近年來剛剛誕生的隨機優化方法,它是一種源於大自然的新的仿生類算法.由義大利學者Dorigo最早提出,螞蟻算法主要是通過螞蟻群體之間的信息傳遞而達到尋優的目的,最初又稱蟻群優化方法(Ant Colony
  • 數學建模必備:Matlab常用15大算法+繪圖工具
    本次課程包含內容豐富,各種繪圖工具介紹(數模獲獎論文圖是非常重要的內容,如果沒有數學圖基本無緣獲獎),各種普通算法實現(數據處理、圖像處理、擬合、插值、概率統計),各種智能算法實現(蟻群算法、SVM、神經網絡、遺傳算法、模擬退火、蒙特卡羅)。還有更多更多豐富的工具。「Matlab從入門到算法實踐」系列已經進行了五期。
  • 理論物理所基於統計物理思想確定性算法求解壓縮感知問題研究獲進展
    由於測量數M遠小於數據維數N,壓縮感知的目標是構造一個包含最多零元素的解x,即尋找欠定線性問題的最稀疏解。這是極困難的組合優化問題。雖然文獻中已經有基於貪心思想、線性規劃、消息傳遞等不同思路的各類近似求解算法,但它們能發揮效果的前提是測量矩陣滿足苛刻的隨機不相干條件,即限制等距特性(restricted isometry property,RIP)。
  • 經典算法—模擬退火算法
    模擬退火算法模擬退火算法在處理全局優化、離散變量優化等困難問題中,具有傳統優化算法無可比擬的優勢。這裡描述模擬退火算法的原理及其基本框架結構,給出用模擬退火算法求解TSP問題的具體實現方法算法背景在管理科學、計算機科學、分子物理學和生物學以及超大規模集成電路設計、代碼設計、圖像處理和電子工程等科技領域中,存在著大量的組合優化問題,其中的NP完全問題,其求解時間隨問題規模呈指數級增長,當規模稍大時就會因時間限制而失去可行性。
  • 10.裴蜀定理和歐幾裡得算法快速求解倒水問題
    怎麼求倒水的步驟,在介紹BFS(廣度優先搜索)算法的時候再講。雖然水杯沒有刻度, 但我們總是可以倒入整杯的水 +a,+b,或者倒出整杯的水 -a,-b。 那麼我們可以把問題簡化為一個表達式。(注意,x,y可以是負數)比如3升,5升倒出4升,就是求解x * 3 + y * 5 = 4 是否成立。
  • 人工智慧-啟發式算法(Heuristic Algorithm)簡談
    解決實際的問題,要建模型,在求解。求解要選擇算法,只有我們對各種算法的優缺點都很熟悉後才能根據實際問題選出有效的算法。但是對各種算法都了如指掌是不現實的,但多知道一些,會使你的選擇集更大,找出最好算法的概率越大。大自然是神奇的,它造就了很多巧妙的手段和運行機制。受大自然的啟發,人們從大自然的運行規律中找到了許多解決實際問題的方法。
  • 用MATLAB求解0-1 規劃問題
    需要注意的有兩點,一點是要對目標函數求極小,另一點是不等式約束形式為"≤",如果不滿足這兩點要求,則需要對原問題進行轉化。1.輸入參數MATLAB工具箱中的bintprog函數在求0-1規劃問題時,提供的參數為模型參數、初始解參數和算法控制參數。
  • 優化 | 利用SciPy求解非線性規劃問題
    編者按:本文使用SciPy的optimize模塊來求解非線性規劃問題,結合實際例子,引入非線性規劃問題的求解算法及相應函數的調用。將目標函數梯度作為搜索方向,對非線性規劃問題的求解具有重要的意義。這些函數或其導數\梯度的不連續性給許多現有的非線性優化問題的求解帶來了困難。在下文中,我們假設這些函數是連續且光滑的。
  • 混合算法(GA+TS)求解作業車間調度問題代碼解讀+完整JAVA代碼
    前兩篇文章中,我們介紹了FJSP問題,並梳理了一遍HA算法。這一篇文章對小編實現的(很亂很爛的)代碼進行簡單解讀。往期回顧:種群進化+鄰域搜索的混合算法(GA+TS)求解作業車間調度問題(JSP)-算法介紹混合算法(GA+TS)求解作業車間調度問題(JSP)-禁忌搜索部分代碼下載請關注公眾號,後臺回復【FJSPHA】即可,不包括【】代碼框架
  • 遺傳算法解決TSP問題(原理與主函數)
    原理:遺傳算法解決
  • 通過Heuristics/Relaxations/Partitioning求解整數規劃問題
    求解整數規劃的策略包括:預處理分枝定界(Branch-and-bound)/分枝定價(Branch-and-price)/分枝切割(Branch-and-cut)啟發式算法(Heuristics):近似解/緊的下界(最大化問題)
  • [Python] geatpy 多目標遺傳算法求解最短路
    進化算法geatpy調包俠養成文章最後開了個坑,說有空的時候要補上遺傳算法在路徑求解問題中的應用,這次就給大家整一個。問題描述簡單來說,本次的例子是一個多目標無向圖求最短路徑的問題(該問題的原型來自於我同門的論文,危貨的路徑優化)。