最近在做尋優算法,到了花朵授粉算法時,發現網上可用的資料不多,大部分爲期刊論文,通過閱讀一些期刊論文稍微瞭解了一點,遂做一個記錄。
花朵授粉算法( Flower Pollination Algorithm,FPA)是由英國劍橋大學學者Yang於2012年提出的,其基本思想來源於對自然界花朵自花授粉、異花授粉的模擬,是一種新的元啓發式羣智能隨機優化技術 。算法中爲了簡便計算,假設每個植物僅有一朵花,每朵花只有一個配子,我們可以認爲每一個配子都是解空間中的一個候選解。
Yang通過對花朵授粉的研究,抽象出以下四大規則:
1) 生物異花授粉被考慮爲算法的全局探測行爲,並由傳粉者通過Levy飛行的機制實現全局授粉;
2)非生物自花授粉被視作算法的局部開採行爲,或稱局部授粉;
3)花朵的常性可以被認爲是繁衍概率,他與兩朵參與授粉花朵的相似性成正比例關係;
4)花朵的全局授粉與局部授粉通過轉換概率 p∈[0,1]進行調節。 由於物理上的鄰近性和風等因素的影響,在整個授粉活動中,轉換概率 p是一個非常重要的參數。 文獻[1]中對該參數的試驗研究認爲,取 p =0.8 更利於算法尋優。
直接上步驟(以多元函數尋優爲例):
目標函數 : min g = f(x1,x2,x3,x4...........xd)
設置參量:N(候選解的個數),iter(最大迭代次數),p(轉換概率),lamda(Levy飛行參數)
初始化花朵,隨機設置一個NXd的矩陣;
計算適應度,即函數值;
獲取最優解和最優解得位置;
A循環 1 : 1 :iter
B循環
if rand < p
全局授粉;
else
局部授粉;
end if
更新新一代的花朵與適應度(函數變量和函數值);
B循環end
獲取新一代的最優解與最優解位置;
A循環end
全局更新公式:xi(t+1) = xi(t) + L(xi(t) - xbest(t)) L服從Levy分佈,具體可以搜索布穀鳥算法。
局部更新公式:xi(t+1) = xi(t) + m(xj(t) - xk(t)) m是服從在[0,1]上均勻分佈的隨機數。