優(yōu)化算法筆記(八)人工蜂群算法

1. 人工蜂群算法簡介

(以下描述,均不是學術(shù)用語,僅供大家快樂的閱讀)
  工蜂群算法(Artificial Bee Colony Algorithm,ABC)是一種模仿蜜蜂采蜜機理而產(chǎn)生的群智能優(yōu)化算法。其原理相對復雜,但實現(xiàn)較為簡單,在許多領(lǐng)域中都有研究和應(yīng)用。
  人工蜂群算法中,每一個蜜源的位置代表了待求問題的一個可行解。蜂群分為采蜜蜂、觀察蜂和偵查蜂。采蜜蜂與蜜源對應(yīng),一個采蜜蜂對應(yīng)一個蜜源。觀察蜂則會根據(jù)采蜜蜂分享的蜜源相關(guān)信息選擇跟隨哪個采蜜蜂去相應(yīng)的蜜源,同時該觀察蜂將轉(zhuǎn)變?yōu)閭刹榉洹刹榉鋭t自由的搜索新的蜜源。每一個蜜源都有開采的限制次數(shù),當一個蜜源被采蜜多次而達到開采限制次數(shù)時,在該蜜源采蜜的采蜜蜂將轉(zhuǎn)變?yōu)閭刹榉洹C總€偵查蜂將隨機尋找一個新蜜源進行開采,并轉(zhuǎn)變成為采蜜蜂。

2. 算法流程


  這次我們的主角是一群勤勞的小蜜蜂。這群小蜜蜂分為三個職業(yè):采蜜蜂、觀察蜂和偵查蜂。
  采蜜蜂:也有叫雇傭蜂,蜜源的發(fā)現(xiàn)者,發(fā)現(xiàn)蜜源后會去招募觀察蜂小伙伴來一同開采這個蜜源。
  觀察蜂:也有叫非雇傭蜂、跟隨蜂等,在等來數(shù)只采蜜蜂來招募時,觀察蜂會在眾多的采蜜蜂中選擇一只跟隨去開采采蜜蜂所發(fā)現(xiàn)的蜜源,直到該蜜源被開采完。
  偵查蜂:不跟隨任何其他蜜蜂,自己尋找蜜源,找到之后則會轉(zhuǎn)變?yōu)椴擅鄯淙フ心加^察蜂。
  每只蜜蜂第t代的位置如下,每一個位置都代表一個蜜源,蜜源值越優(yōu)對蜜蜂的吸引越大。
X_i^t=(x_{i,1}^t,x_{i,2}^t,...,x_{i,D}^t)
  在大多數(shù)書和論文上都是這么描述的,可是,這有什么用?這些描述一點都不具體,完全無法按照這些描述精準的完成算法。

  下面來說一下我的關(guān)鍵問題所在。
  1.三種蜜蜂之間的角色如何轉(zhuǎn)換?都說采蜜蜂能轉(zhuǎn)換成偵查蜂,偵查蜂能轉(zhuǎn)換成采蜜蜂,那么觀察蜂能否轉(zhuǎn)變成采蜜蜂和偵查蜂?
  2.蜜源數(shù)量是否有上限?采蜜蜂每次找到蜜源后即轉(zhuǎn)換為偵查蜂,若偵查蜂又可以搜尋新的蜜源,那么每次迭代后,都會新增采蜜蜂數(shù)量的蜜源,但是對一個蜜源的開采可能并不是一次迭代過程就能夠完成的,那么會擁有大量的未被開采完甚至未被開采的蜜源,是否會造成資源浪費。

下面是我的實現(xiàn)方式(我的答案):
  1. 三種蜜蜂之間可以相互轉(zhuǎn)化。
  采蜜蜂->觀察蜂:有觀察蜂在采蜜過程中發(fā)現(xiàn)了比當前采蜜蜂更好的蜜源,則采蜜蜂放棄當前蜜源轉(zhuǎn)而變成觀察蜂跟隨優(yōu)質(zhì)蜜源,同時該觀察蜂轉(zhuǎn)變?yōu)椴擅鄯洹?br>   采蜜蜂->觀察蜂:當該采蜜蜂所發(fā)現(xiàn)的蜜源被開采完后,它會轉(zhuǎn)變?yōu)橛^察蜂去跟隨其他采蜜蜂。
  采蜜蜂->偵查蜂:當所有的采蜜蜂發(fā)現(xiàn)的蜜源都被開采完后,采蜜蜂將會變?yōu)閭刹榉洌^察蜂也會變成偵查蜂,因為大家都無蜜可采。
  偵查蜂->采蜜蜂、觀察蜂:偵查蜂隨機搜索蜜源,選擇較好的數(shù)個蜜源位置的蜜蜂為采蜜蜂,其他蜜蜂為觀察蜂。



  2.蜜源的數(shù)量上限
  蜜源的數(shù)量上限等于采蜜蜂的數(shù)量上限。初始化時所有蜜蜂都是偵查蜂,在這些偵查蜂所搜索到的蜜源中選出數(shù)個較優(yōu)的蜜源,發(fā)現(xiàn)這些蜜源的偵查蜂變?yōu)椴擅鄯洌渌鄯渥優(yōu)橛^察蜂。直到所有的蜜源都被開采完之前,蜜源的數(shù)量不會增加,因為這個過程中沒有產(chǎn)生偵查蜂。所有的蜜源都被開采完后,所有的蜜蜂再次全部轉(zhuǎn)化為偵查蜂,新的一輪蜜源搜索開始。也可以在一個蜜源開采完時馬上產(chǎn)生一個新的蜜源補充,保證在整個開采過程中蜜源數(shù)量恒定不變。

2.1蜜源的開采

蜜源的開采實際上就是觀察蜂跟隨采蜜蜂飛向蜜源的過程。得到的下一代的位置公式如下:
X_i^{t+1}=X_i^t+R(X_{g,r}-X_{i})
表示第i只觀察蜂在第t代時隨機選擇第r只采蜜蜂飛行一段距離,其中R為(-1,1)的隨機數(shù)。

2.2蜜源的選擇

一只觀察蜂在一次迭代過程中只能選擇一只采蜜蜂跟隨,它需要從眾多的采蜜蜂中選擇一只來進行跟隨。觀察蜂選擇的策略很簡單,隨機跟隨一只采蜜蜂,該采蜜蜂發(fā)現(xiàn)的蜜源越優(yōu),則選擇它的概率越大。
  是不是很像輪盤賭,對,這就是輪盤賭,同時我們也可以稍作修改,比如將勤勞的小蜜蜂改為懶惰的小蜜蜂,小蜜蜂會根據(jù)蜜源的優(yōu)劣和距離以及開采程度等因素綜合來選擇跟隨哪只采蜜蜂(雖然影響不大,但聊勝于無)。
  忘記了輪盤賭的小伙伴可以看一下優(yōu)化算法筆記(六)遺傳算法
  下面是我的人工蜂群算法流程圖


  其實到最后才會發(fā)現(xiàn),蜜蜂之間如何轉(zhuǎn)換,按照何種策略從偵查蜂中選擇采蜜蜂等等,對算法的性能和結(jié)果影響都不大。
  蜂群算法的核心思想其實是觀察蜂跟隨采蜜蜂在蜜源周圍的采蜜過程,即集中力量發(fā)展生產(chǎn)力才是最重要的,也可以說讓一部分人先富起來,再讓先富帶動后富,實現(xiàn)共同富裕
  其他的參數(shù)如采蜜蜂的數(shù)量以及蜜源的最大開采程度也是只是影響了算法的全局-局部搜索精度和收斂速度。集中力量發(fā)展的方面較多,發(fā)展的速度就會較慢,發(fā)展的深度越深得到的結(jié)果越精確。但是一味最求深度必然會影響廣度,必須在深度和廣度之間做好平衡。

3. 實驗

又到了實驗環(huán)節(jié),參數(shù)實驗較多,全部給出將會占用太多篇幅,僅將結(jié)果進行匯總展示。



實驗1:參數(shù)如下

參數(shù)
問題維度(維度) 2
蜂群數(shù)量(種群數(shù)) 20
迭代次數(shù)(最大迭代次數(shù)) 50
采蜜蜂最大數(shù) 10%,20%,30%,40%,50% 總?cè)簲?shù)
蜜源最大開采次數(shù) 60
取值范圍 (-100,100)
實驗次數(shù) 10
10%為采蜜蜂

50%為采蜜蜂

  上圖分別為采蜜蜂上限為10%總數(shù)和50%總數(shù)的情況,可以看出當采蜜蜂上限為10%總?cè)簲?shù)時,種群收斂的速度較快,但是到最后有一個點死活不動,這是因為該點作為一個蜜源,但由于適應(yīng)度值太差,使用輪盤賭被選擇到的概率太小從而沒有得到更佳的蜜源位置,而因未開采完,采蜜蜂又不能放棄該蜜源。
  看了看采蜜蜂上限為50%總?cè)簲?shù)時的圖,發(fā)現(xiàn)也有幾個點不動的狀態(tài),可以看出,這時不動的點的數(shù)量明顯多于上限為10%總數(shù)的圖,原因很簡單,采蜜蜂太多,“先富”的人太多,而“后富”的人較少,沒有帶動“后富者”的“先富者”也得不到發(fā)展。
  看看結(jié)果

采蜜蜂上限 最優(yōu)值 均值 最差值
10% 2.7246701609773516E-4 0.03148418695322249 0.14939095776515166
20% 2.738392784607894E-5 0.034678207336322917 0.22487475255209172
30% 2.0064357050454994E-5 0.030860813779668102 0.16996661317938938
40% 1.453883912235495E-4 0.02199654087939065 0.07422594736502292
50% 9.28501533821353E-4 0.19582266625078354 0.7879489746465032

嗯,感覺結(jié)果并沒有什么差別,可能由于問題較簡單,迭代次數(shù)較少,無法體現(xiàn)出采蜜蜂數(shù)對于結(jié)果的影響,也可能由于蜜源的搜索次數(shù)為60較大,總?cè)阂还仓荒軐ψ疃?0*50/60=16個蜜源進行搜索。我們將最大迭代次數(shù)調(diào)大至200代再看看結(jié)果

采蜜蜂上限 最優(yōu)值 均值 最差值
10% 3.734568294857327E-11 4.2729655428076835E-7 2.033165476252375E-6
20% 4.813275393712557E-10 8.800554109847244E-7 4.369403717638076E-6
30% 7.53183905542997E-10 4.671766666435679E-7 2.044803420983268E-6
40% 9.491398322676551E-9 2.5663373709208893E-6 9.861923272267325E-6
50% 3.1942404020660714E-9 3.819585072332345E-6 3.0717059125095225E-5

當最大迭代次數(shù)為200時,人工蜂群算法的結(jié)果如上圖,我們可以明顯的看出,隨著采蜜蜂上限的上升,算法結(jié)果的精度在不斷的下降,這也印證了之前的結(jié)果,由于蜜源搜索次數(shù)較大(即搜索深度較深)采蜜蜂數(shù)量越多(搜索廣度越多),結(jié)果的精度越低。不過影響也不算太大,下面我們再來看看蜜源最大開采次數(shù)對結(jié)果的影響。
實驗2:參數(shù)如下

參數(shù)
問題維度(維度) 2
蜂群數(shù)量(種群數(shù)) 20
迭代次數(shù)(最大迭代次數(shù)) 200
采蜜蜂最大數(shù) 20% 總?cè)簲?shù)
蜜源最大開采次數(shù) 1,2,5,10,20
取值范圍 (-100,100)
實驗次數(shù) 10
蜜源開采限度為1

蜜源開采限度為20

蜜源開采限度為4000

上圖分別是蜜源開采限度為1,20和4000的實驗。
  當蜜源開采上限為1時,即一個蜜源只能被開采一次,即此時的人工蜂群算法只有偵查蜂隨機搜索的過程,沒有觀察蜂跟隨采蜜蜂的過程,可以看出圖中的蜜蜂一直在不斷的隨機出現(xiàn)在新位置不會向某個點收斂。
  當蜜源開采上限為20時,我們可以看到此時種群中的蜜蜂都會向一個點飛行。在一段時間內(nèi),有數(shù)個點一動不動,這些點可能就是采蜜蜂發(fā)現(xiàn)的位置不怎么好的蜜源,但是在幾次迭代之后,它們?nèi)詴挥^察蜂開采,從而更新位置,蜜源開采上限越高,它們停頓的代數(shù)也會越長。在所有蜜蜂都收斂于一個點之后,我們可以看到仍會不斷的出現(xiàn)其他的隨機點,這些點是偵查蜂進行隨機搜索產(chǎn)生的新的蜜源位置,這些是人工蜂群算法跳出局部最優(yōu)能力的體現(xiàn)。
當蜜源開采上限為4000時,即不會出現(xiàn)偵查蜂的搜索過程,觀察蜂只會開采初始化時出現(xiàn)的蜜源而不會采蜜蜂不會有新的蜜源產(chǎn)生,可以看出在蜂群收斂后沒有出現(xiàn)新的蜜源位置。

蜜源開采上限 最優(yōu)值 均值 最差值
1 6.337994185481664E-8 0.05861357186812096 0.49990188473311625
2 5.293512648483095E-41 4.230581226891911E-6 4.163020392599152E-5
5 1.4674611682904505E-44 1.5470665541636557E-32 1.5390674100134358E-31
10 3.921568363593575E-27 1.1008071173291054E-22 6.647404140842794E-22
20 3.939678224553763E-18 2.0461861284987338E-14 1.7279556385292846E-13
4000 1.9806615835705686E-9 5.980622770720888E-5 3.3351556713991E-4

看看最終結(jié)果,我們發(fā)現(xiàn),當蜜源開采上線大于1時的結(jié)果提升,但是好像開采上限為5時結(jié)果明顯好于開采次數(shù)上限為其他的結(jié)果,而且隨著開采次數(shù)不斷上升,結(jié)果在不斷的變差。為什么會出現(xiàn)這樣的結(jié)果呢?原因可能還是因為問題較為簡單,在5次開采的限度內(nèi),觀察蜂已經(jīng)能找到更好的蜜源進行開采,當問題較為復雜時,我們無法知曉開采發(fā)現(xiàn)新蜜源的難度,蜜源開采上限應(yīng)該取一個相對較大的值。當蜜源開采限度為4000時,即一個蜜源不可能被開采完(開采次數(shù)為20(種群數(shù))*200(迭代次數(shù))),搜索的深度有了但是其結(jié)果反而不如開采限度為幾次幾十次來的好,而且這樣不會有偵查蜂隨機搜索的過程,失去了跳出局部最優(yōu)的能力。
  我們應(yīng)該如何選擇蜜源的最大開采次數(shù)限制呢?其實,沒有最佳的開采次數(shù)限制,當適應(yīng)度函數(shù)較為簡單時,開采次數(shù)較小時能得到比較好的結(jié)果,但是適應(yīng)度函數(shù)較復雜時,經(jīng)過試驗,得出的結(jié)果遠差于開采次數(shù)較大時。當然,前面就說過,適應(yīng)度函數(shù)是一個黑盒模型,我們無法判斷問題的難易。那么我們應(yīng)該選擇一個適中的值,個人的選擇是種群數(shù)的0.5倍到總?cè)簲?shù)的2倍作為蜜源的最大開采次數(shù),這樣可以保證極端情況下,1-2個迭代周期內(nèi)小蜜蜂們能將一個蜜源開采完。

4. 總結(jié)

人工蜂群算法算是一個困擾我比較長時間的算法,幾年時間里,我根據(jù)文獻實現(xiàn)的人工蜂群算法都有數(shù)十種,只能說人工蜂群算法的描述太過模糊,或者說太過抽象,研究者怎么實現(xiàn)都說的通。但是通過實現(xiàn)多次之后發(fā)現(xiàn)雖然實現(xiàn)細節(jié)大不相同,但效果相差不多,所以我們可以認為人工蜂群算法的穩(wěn)定性比較強,只要實現(xiàn)其主要思想即可,細節(jié)對于結(jié)果的影響不太大。
  對于人工蜂群算法影響最大的因素還是蜜源的開采次數(shù)限制,開采次數(shù)限制越大,對同一蜜源的開發(fā)力度越大,但是分配給其他蜜源的搜索力度會相對減少,也會降低蜂群算法的跳出局部最優(yōu)能力。可以動態(tài)修改蜜源的開采次數(shù)限制來實現(xiàn)對算法的改進,不過效果不顯著。
  其次對于人工蜂群算法影響是三類蜜蜂的搜索行為,我們可以重新設(shè)計蜂群的搜索方式來對算法進行改進,比如采蜜蜂在開采蜜源時是隨機飛向其他蜜源,而觀察蜂向所選的蜜源靠近。這樣改進有一定效果但是在高維問題上效果仍不明顯。
  以下指標純屬個人yy,僅供參考

指標 星數(shù)
復雜度 ★★★★☆☆☆☆☆☆
收斂速度 ★★★★★★☆☆☆☆
全局搜索 ★★★★★★★★☆☆
局部搜索 ★★★★★☆☆☆☆☆
優(yōu)化性能 ★★★★★★☆☆☆☆
跳出局部最優(yōu) ★★★★★★☆☆☆☆
改進點 ★★★★★☆☆☆☆☆

目錄
上一篇 優(yōu)化算法筆記(七)差分進化算法
下一篇 優(yōu)化算法筆記(九)杜鵑搜索算法

優(yōu)化算法matlab實現(xiàn)(八)人工蜂群算法matlab實現(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內(nèi)容