摘要:自話粒子群算法超簡(jiǎn)單實(shí)例自話遺傳算法帶實(shí)例簡(jiǎn)單蟻群算法模擬實(shí)驗(yàn)這個(gè)模擬實(shí)驗(yàn)比較簡(jiǎn)單,并沒(méi)有對(duì)信息素路徑選擇等做優(yōu)化,主要是方便大家查看簡(jiǎn)單的螞蟻系統(tǒng)能夠帶來(lái)一個(gè)什么樣的效果詳細(xì)說(shuō)明見(jiàn)后文。
原文地址:http://breezedust.com/2016/07/10/zi-hua-yi-qun-suan-fa-jian-dan-mo-ni-shi-li/
這算是填3年前的一個(gè)坑吧,已經(jīng)懶癌晚期了,想必也還是要掙扎下,那今天先從蟻群算法這個(gè)坑說(shuō)起,如果你是要尋找怎么優(yōu)化蟻群算法,可以直接跳過(guò)本文,如果你還不了解什么是蟻群算法,或許本文能夠提起你的興趣。
如果你同樣對(duì)遺傳算法和粒子群算法感興趣,請(qǐng)查看3年前我對(duì)于這兩個(gè)算法見(jiàn)解的文章。
自話粒子群算法(超簡(jiǎn)單實(shí)例)
自話遺傳算法(帶實(shí)例)
簡(jiǎn)單蟻群算法模擬實(shí)驗(yàn):
Demo
Github
這個(gè)模擬實(shí)驗(yàn)比較簡(jiǎn)單,并沒(méi)有對(duì)信息素、路徑選擇等做優(yōu)化,主要是方便大家查看簡(jiǎn)單的螞蟻系統(tǒng)能夠帶來(lái)一個(gè)什么樣的效果,詳細(xì)說(shuō)明見(jiàn)后文。
什么是蟻群算法按百度百科的話來(lái)說(shuō),蟻群算法(ant colony optimization, ACO),又稱螞蟻算法,是一種用來(lái)在圖中尋找優(yōu)化路徑的機(jī)率型算法。它由Marco Dorigo于1992年在他的博士論文中提出,其靈感來(lái)源于螞蟻在尋找食物過(guò)程中發(fā)現(xiàn)路徑的行為。蟻群算法是一種模擬進(jìn)化算法,初步的研究表明該算法具有許多優(yōu)良的性質(zhì),并且現(xiàn)在已用于我們生活的方方面面。
基本原理螞蟻在運(yùn)動(dòng)過(guò)程中,會(huì)留下一種稱為信息素的東西,并且會(huì)隨著移動(dòng)的距離,播散的信息素越來(lái)越少,所以往往在家或者食物的周圍,信息素的濃度是最強(qiáng)的,而螞蟻?zhàn)陨頃?huì)根據(jù)信息素去選擇方向,當(dāng)然信息素越濃,被選擇的概率也就越大,并且信息素本身具有一定的揮發(fā)作用。 螞蟻的運(yùn)動(dòng)過(guò)程可以簡(jiǎn)單歸納如下:
當(dāng)周圍沒(méi)有信息素指引時(shí),螞蟻的運(yùn)動(dòng)具有一定的慣性,并有一定的概率選擇其他方向
當(dāng)周圍有信息素的指引時(shí),按照信息素的濃度強(qiáng)度概率性的選擇運(yùn)動(dòng)方向
找食物時(shí),螞蟻留下家相關(guān)的A信息素,找家時(shí),螞蟻留下食物相關(guān)的B信息素,并隨著移動(dòng)距離的增加,灑播的信息素越來(lái)越少
隨著時(shí)間推移,信息素會(huì)自行揮發(fā)
一個(gè)簡(jiǎn)單的例子,如果現(xiàn)在有兩條通往食物的路徑,一條較長(zhǎng)路徑A,一條較短路徑B,雖然剛開(kāi)始A,B路徑上都有螞蟻,又因?yàn)锽比A短,螞蟻通過(guò)B花費(fèi)的時(shí)間較短,隨著時(shí)間的推移和信息素的揮發(fā),逐漸的B上的信息素濃度會(huì)強(qiáng)于A,這時(shí)候因?yàn)锽的濃度比A強(qiáng),越來(lái)越多多螞蟻會(huì)選擇B,而這時(shí)候B上的濃度只會(huì)越來(lái)越強(qiáng)。如果螞蟻一開(kāi)始只在A上呢,注意螞蟻的移動(dòng)具有一定小概率的隨機(jī)性,所以當(dāng)一部分螞蟻找到B時(shí),隨著時(shí)間的推移,螞蟻會(huì)收斂到B上,從而可以跳出局部最優(yōu)。
實(shí)驗(yàn)上面的描述可能不是很形象,現(xiàn)在我們來(lái)模擬做個(gè)小實(shí)驗(yàn),實(shí)驗(yàn)地址Demo,源碼已放在 Github
簡(jiǎn)單蟻群實(shí)驗(yàn)環(huán)境:
滿足上面4點(diǎn)基本規(guī)則,信息素散播規(guī)則按照屏幕斜線距離/螞蟻移動(dòng)距離,移動(dòng)距離在找到食物或者家清0(言外之意式,螞蟻?zhàn)疃嗄軌蛞苿?dòng)斜線這么遠(yuǎn)的距離,這個(gè)公式比較簡(jiǎn)單)
超過(guò)一定的移動(dòng)步數(shù)未找到食物或窩的螞蟻進(jìn)行重置
選擇方向的計(jì)算公式采用單元格濃度/8個(gè)方向單元格濃度總和,用輪盤賭進(jìn)行概率選擇
信息素在每次迭代時(shí),進(jìn)行統(tǒng)一揮發(fā)一個(gè)常量值
現(xiàn)在我們來(lái)看看螞蟻是否能夠找到最近的食物。
1.首先我們放置一個(gè)較遠(yuǎn)的食物A,圖中的綠色為食物,白色為螞蟻,暗藍(lán)色為家相關(guān)的信息素,顏色深淺代表濃度。
注意:我們上面采用的信息素灑播規(guī)則,會(huì)讓家相關(guān)的信息素濃度圍繞著家呈梯形分布,這樣螞蟻在回家時(shí),能夠根據(jù)濃度找到家,食物相關(guān)信息素也一樣。感興趣的朋友可以在源碼里修改信息素顯示參數(shù),顯示食物相關(guān)的信息素分布圖。
2.過(guò)一會(huì)兒,我們發(fā)現(xiàn)螞蟻都聚集在這條路徑上,然后我們放一個(gè)離得很近的食物B
3.最后我們會(huì)發(fā)現(xiàn)這條路徑上的螞蟻越來(lái)越多,再過(guò)一會(huì)兒,A路徑上基本沒(méi)有什么螞蟻了。
你有可能問(wèn),那障礙是干嘛用的,我當(dāng)時(shí)只是想干一件小時(shí)候經(jīng)常干的事情,如
1.一群螞蟻找到了食物
2.我攔住了他們的去路
3.最后他們還是找到了食物,壞笑
如果你親自動(dòng)手做實(shí)驗(yàn),你會(huì)發(fā)現(xiàn),當(dāng)螞蟻在一條路徑上覓食很久時(shí),你再放置一個(gè)近的食物基本沒(méi)啥效果,你也可以理解為當(dāng)一只螞蟻找到一條路徑時(shí),過(guò)了很久的時(shí)間,大多數(shù)螞蟻都選擇了這條路徑,就在這時(shí)候,突然有一只螞蟻找到了較近的食物,但因?yàn)闀r(shí)間過(guò)得太久,兩條路徑上濃度相差太大(濃度越大,被選擇的概率就越大),整個(gè)系統(tǒng)基本已經(jīng)停滯了,陷入了局部最優(yōu)。所以簡(jiǎn)單的螞蟻系統(tǒng)是存在一些問(wèn)題的,如:
搜索到一定程度,會(huì)出現(xiàn)停滯狀態(tài),陷入局部最優(yōu)的情況
盲目的隨機(jī)搜索,搜索時(shí)間較長(zhǎng)
而影響螞蟻是否能夠找到好的最優(yōu)解,依賴這幾個(gè)關(guān)鍵因素:
信息素怎么灑播(比如維持在一個(gè)特地范圍的值等)
信息素怎么揮發(fā)(除了全局揮發(fā),可以讓螞蟻?zhàn)陨磉M(jìn)行局部揮發(fā)等手段)
通過(guò)怎樣的方式讓螞蟻選擇運(yùn)動(dòng)方向,減少盲目性和不必要性(給螞蟻一點(diǎn)點(diǎn)智能和經(jīng)驗(yàn))
給螞蟻和環(huán)境一定的記憶能力能夠幫助減少搜索空間
如果你感興趣,可以去看看諸如最大最小蟻群算法、排序蟻群算法、基于遺傳算法的蟻群算法等一系列在基本蟻群系統(tǒng)上的優(yōu)化和改進(jìn),他們對(duì)于信息素的使用、螞蟻方向選擇等都有一套成熟的數(shù)學(xué)模型和經(jīng)驗(yàn)優(yōu)化參數(shù)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/86371.html
摘要:為我們提供了許多內(nèi)置函數(shù),例如并提供了創(chuàng)建用戶定義函數(shù)的能力。會(huì)將該變量視為函數(shù)級(jí)作用域中的局部變量。回到目錄中函數(shù)的用途是什么是中的內(nèi)置函數(shù)之一。請(qǐng)注意,這種類型的參數(shù)語(yǔ)法不允許將命名參數(shù)傳遞給函數(shù)。函數(shù)接受一個(gè)稱為的可選參數(shù)。 ...
閱讀 2278·2023-04-25 23:15
閱讀 1943·2021-11-22 09:34
閱讀 1564·2021-11-15 11:39
閱讀 971·2021-11-15 11:37
閱讀 2166·2021-10-14 09:43
閱讀 3506·2021-09-27 13:59
閱讀 1517·2019-08-30 15:43
閱讀 3480·2019-08-30 15:43