簡介
定義
人工魚群算法為山東大學副教授李曉磊2002年從魚找尋食物的現象中表現的種種移動尋覓特點中得到啟發而闡述的仿生學優化方案。在一片水域中,魚往往能自行或尾隨其他魚找到營養物質多的地方,因而魚生存數目最多的地方一般就是本水域中營養物質最多的地方,人工魚群算法就是根據這一特點,通過構造人工魚來模仿魚群的覓食、聚群及追尾行為,從而實現尋優。人工魚擁有以下幾種典型行為: /p>
(1)覓食行為:一般情況下魚在水中隨機地自由游動,當發現食物時,則會向食物逐漸增多的方向快速游去。
(2)聚群行為:魚在游動過程中為了保證自身的生存和躲避危害會自然地聚集成群,魚聚群時所遵守的規則有三條:分隔規則:盡量避免與臨近伙伴過於擁擠;對准規則:盡量與臨近伙伴的平均方向一致;內聚規則:盡量朝臨近伙伴的中心移動。
(3)追尾行為:當魚群中的一條或幾條魚發現食物時,其臨近的伙伴會尾隨其快速到達食物點。
(4)隨機行為:單獨的魚在水中通常都是隨機游動的,這是為了更大范圍地尋找食物點或身邊的伙伴。
步驟
人工魚群算法實現的步驟:
(1)初始化設置,包括種群規模N、每條人工魚的初始位置、人工魚的視野Visual、步長step、擁擠度因子δ、重復次數Trynumber;
(2)計算初始魚群各個體的適應值,取最優人工魚狀態及其值賦予給公告牌;
(3)對每個個體進行評價,對其要執行的行為進行選擇,包括覓食Pray、聚群Swarm、追尾Follow和評價行為bulletin;
(4)執行人工魚的行為,更新自己,生成新魚群;
(5)評價所有個體。若某個體優於公告牌,則將公告牌更新為該個體;
(6)當公告牌上最優解達到滿意誤差界內或者達到迭代次數上限時算法結束,否則轉步驟3。
流程圖
應用
用AFSA求函數最值,這里使用scikit-opt庫。
def func(x): x1, x2 = x return 1 / x1 ** 2 + x1 ** 2 + 1 / x2 ** 2 + x2 ** 2 from sko.ASFA import ASFA asfa = ASFA(func, n_dim=2, size_pop=50, max_iter=300, max_try_num=100, step=0.5, visual=0.3, q=0.98, delta=0.5) best_x, best_y = asfa.run() print(best_x, best_y)
結果如下:
C:\Users\20928\Desktop\數學建模>python AFSA.py
[0.99993543 1.00064329] 4.064333284516939
參考鏈接:
2. 百度百科-人工魚群算法