1. 程式人生 > >人工蜂群演算法Artificial Bee Colony(ABC演算法)

人工蜂群演算法Artificial Bee Colony(ABC演算法)

為了解決多變數函式優化問題Karaboga在2005年提出了人工蜂群演算法ABC模型。

1、 蜜蜂採蜜機理

蜜蜂是一種群居昆蟲,雖然單個昆蟲的行為極其簡單,但是由單個簡單的個體所組成的群體卻表現出極其複雜的行為。真實的蜜蜂種群能夠在任何環境下,以極高的效率從食物源(花朵)中採集花蜜;同時,它們能適應環境的改變。

蟻群產生群體智慧的最小搜尋模型包含基本的三個組成要素:食物源、被僱傭的蜜蜂和未被僱傭的蜜蜂。兩種最基本的行為模型:為食物源招募蜜蜂和放棄某個食物源。

(1)   食物源

食物源的價值由多方面因素決定,如:離蜂巢的遠近、包含花蜜的豐富程度和獲得花蜜的難易程度。使用單一的引數,食物源的“收益率”來代表以上各個因素。

(2)   被僱傭的蜜蜂

也稱引領蜂,其與所採集的食物源一一對應。引領蜂儲存有食物源的相關資訊(相對與蜂巢的距離、方向和食物源的豐富程度等)並把這些資訊以一定的概率與其他蜜蜂分享。

(3)   未被僱傭的蜜蜂

其主要任務是尋找和開採食物源。有兩種未被僱傭的蜜蜂:偵查蜂和跟隨蜂。偵查蜂搜尋附近的新食物源;跟隨蜂等在蜂巢裡面並通過與引領蜂分享相關資訊找到食物源。一般情況下,偵查蜂的數量是蜂群的5%--20%

在群體智慧形成過程中,蜜蜂間交換資訊是最重要的一環。舞蹈區是蜂巢中最為重要的資訊交換地。蜜蜂的舞蹈也叫搖擺舞。食物源的資訊在舞蹈區通過搖擺舞的形式與其他蜜蜂共享,引領蜂通過搖擺舞的持續時間等來表現食物源的收益率,故跟隨蜂可以觀察到大量的舞蹈並依據收益率來選擇到哪個食物源採蜜。收益率與食物源被選擇的可能性成正比。因而,蜜蜂被招募到一個食物源的概率與食物源的收益率成正比。

初始時刻,蜜蜂以偵查蜂的方式搜尋。其搜尋可以由系統的先驗知識決定,也可以完全隨機。經過一輪偵查後,若蜜蜂找到食物源,蜜蜂利用它本身的儲存能力記錄位置資訊並開始採蜜。此時,蜜蜂將稱為“被僱傭者”。蜜蜂在食物源採蜜後回到蜂巢卸下蜂蜜,然後將有如下選擇:

(1)   放棄食物源而成為非僱傭蜂;

(2)   跳搖擺舞為所對應的食物源招募更多的蜜蜂,然後回到食物源採蜜;

(3)   繼續在食物源採蜜而不進行招募。

對於非僱傭蜂有如下選擇:

(1)   轉變為偵查蜂並搜尋蜂巢附近的食物源,其搜尋可以由先驗知識決定也可以完全隨機;

(2)   在觀察完搖擺舞以後,被僱傭成為跟隨蜂,開始搜尋對應食物源領域並採蜜。

2、 ABC演算法原理

在基本ABC演算法中,人工蜂群包含三種個體:僱傭蜂、觀察蜂和偵查蜂

每個僱傭蜂對應一個確定的蜜源(解向量),並在迭代中對蜜源的領域進行搜尋。

根據蜜源的豐富程度(適應值的大小)採用輪盤賭的方式僱傭觀察蜂採蜜(搜尋新蜜源)

如果蜜源多次更新沒有改進,則放棄該蜜源,僱傭蜂轉為偵查蜂隨機搜尋新蜜源。

(1)   隨機初始化

(2)   新蜜源的更新搜尋公式

(3)   觀察蜂選擇僱傭蜂的概率

(4)   偵查蜂的產生

為了防止演算法陷入區域性最優,當蜜源迭代limit次沒有改進時,便放棄該蜜源,並且將該蜜源記錄在禁忌表中,同時該蜜源對應的僱傭蜂轉變為偵查蜂按式(1)隨機產生一個新的位置代替原蜜源。

3、 控制引數

(1)   蜜源的個數(與僱傭蜂或觀察蜂相等)SN

(2)   演算法終止的最大進化數(maximum evaluation number)MEN

(3)   Limit

 

基本ABC演算法的流程為

(1)   根據式(1)初始化種群解xi,i=1,2,…,SN;

(2)   計算種群中各蜜蜂的適應值

(3)   cycle=1

(4)   repeat

(5)   僱傭蜂根據(2)產生新的解vi並計算適應值

(6)   僱傭蜂根據貪心策略選擇蜜源

(7)   根據(3)式計算選擇蜜源xi的概率pi

(8)   觀察蜂根據概率pi選擇蜜源xi,根據(2)式在該蜜源附近產生新的蜜源vi,並計算新蜜源vi的適應值

(9)   觀察蜂根據貪心演算法選擇蜜源

(10)   決定是否存在需要放棄的蜜源,如果存在,根據(1)式隨機產生一個蜜源代替它

(11)   記錄最優解

(12)   cycle = cycle + 1

(13)   until cycle=MCN

4、 演算法可能的改進方式

(1)   新蜜源的搜尋領域(2)式的改進(如:其他拓撲鄰域)

(2)   觀察蜂選擇僱傭蜂的概率(3)式的改進(如:動態的)

參考:

https://wenku.baidu.com/view/8536032b8e9951e79b8927a7.html

http://blog.csdn.net/google19890102/article/details/26164653