人工鱼群算法python实现
人工魚群算法
基本思想
人工魚群算法是一種基于模擬魚群行為的優化算法,是由李曉磊等在2002年提出的一種新型的尋優算法。在一片水域中,魚生存的數目最多的地方就是本水域中富含營養物質最多的地方,依據這一特點來模仿魚群的覓食等行為,從而實現全局尋優,這就是魚群算法的基本思想。
在魚類的活動中,可以分為覓食行為、聚群行為、追尾行為和隨機行為這四種行為,如何利用簡單有效的方式來構造實現這些行為將是算法實施的主要問題。
-
覓食行為主要就是循著食物多的方向游動的一種行為,在尋優中則是向較優方向進行的迭代方式
-
在聚群行為中,借鑒的思想對每條人工魚規定了這樣兩個規則
1.盡量向鄰近伙伴的中心移動
2.避免過分擁擠,這樣就能基本實現人工魚的聚群能力; -
追尾行為就是一種向臨近的最活躍者追逐的行為,在尋優算法中可以理解為是向附近的最優化伙伴前進的過程
-
隨機行為就是人工魚在其視野內隨機移動的行為,在尋優算法中這種行為有助于解跳出局部最優
算法原理
1.覓食行為
指魚循著食物多的方向游動的一種行為,人工魚Xi在其視野內隨機選擇一個狀態Xj,分別計算它們的目標函數值進行比較,如果發現Yj比Yi優,則Xi向Xj方向移動一步,否則Xi繼續選擇Xj,判斷是否滿足前進條件,反復嘗試trynumber次后,仍沒有滿足前進條件,則隨機移動一步使Xi達到新的狀態。
人工魚的視覺描述
看看流程圖
2.聚群行為
魚在游動過程中為了保證自身的生存和躲避危害會自然地聚集成群 。人工魚Xi搜索其視野內的伙伴數目nf及中心位置Xc,若Yc/nf<δYi(求極小值時使用小于號,在求極大值時則相反)表明伙伴中心位置狀態較優且不太擁擠,則Xi朝伙伴的中心位置移動一步,否則執行覓食行為
3.追尾行為
指魚向其視野區域內的最優方向移動的一種行為。人工魚Xi搜索視野內最優的適應度最高的個體Xj,并搜索人工魚Xj的視野內的伙伴數目nf,若Yj/nf<δYi,表明Xj的狀態較優且不太擁擠,Xi朝著Xj一步,否則執行覓食行為
總的來說算法在運算過程中,會同時進行聚群和追尾行為。而覓食行為屬于這兩種行為中發現聚群對象或者追尾對象附近擁擠度過大時,人工魚選擇的行為方式,若在覓食過程中,未發現比自身適應度高的人工魚,則按步長step隨機移動。最后對聚群行為和追尾行為得到的適應度值進行比較,選擇優秀的人工魚作為下一代的個體。其總框架圖如下:
擁擠度因子
擁擠度因子的取值
擁擠度因子的影響
以極大值為例(極小值的情況正好和極大值相反), δ δδ越大,表明允許的擁擠程度越小,人工魚擺脫局部最優的能力越強;但是收斂的速度會有所減緩,這主要因為人工魚在逼近極值的同時,會因避免過分擁擠而隨機走開或者受其它人工魚的排斥作用,不能精確逼近極值點。可見,δ δδ的引入避免了人工魚過度擁擠而陷入局部極值,另一方面,該參數會使得位于極值點附近的人工魚之間存在相互排斥的影響,而難以向極值點精確逼近,所以,對于某些局部極值不是很嚴重的具體問題,可以忽略擁擠的因素,從而在簡化算法的同時也加快了算法的收斂速度和提高結果的精確程度。
python代碼實現
def func(x):x1, x2 = xreturn 1 / x1 ** 2 + x1 ** 2 + 1 / x2 ** 2 + x2 ** 2from sko.AFSA import AFSAafsa = AFSA(func, n_dim=2, size_pop=50, max_iter=300,max_try_num=100, step=0.5, visual=0.3,q=1, delta=0.5) best_x, best_y = afsa.run() print(best_x, best_y)[1.00274898 0.99989597] 4.000030188126589
總結
以上是生活随笔為你收集整理的人工鱼群算法python实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简单线性回归算法
- 下一篇: HDU1856_More is bett