算法描述
在一片水域中,魚往往能自行或尾隨其他魚找到營養物質多的地方,因而魚生存數目最多的地方一般就是本水域中營養物質最多的地方,人工魚群算法就是根據這一特點,通過構造人工魚來模仿魚群的覓食、聚群及追尾行為,從而實現尋優,以下是魚的幾種典型行為:
(1)
覓食行為:一般情況下魚在水中隨機地自由遊動,當發現食物時,則會向食物逐漸增多的方向快速游去。
(2)聚群行為:魚在遊動過程中為了保證自身的生存和躲避危害會自然地聚集成群,魚聚群時所遵守的規則有三條:分隔規則:儘量避免與臨近夥伴過於擁擠;對準規則:儘量與臨近夥伴的平均方向一致;內聚規則:儘量朝臨近夥伴的中心移動。
(3)追尾行為:當魚群中的一條或幾條魚發現食物時,其臨近的夥伴會尾隨其快速到達食物點。
(4)隨機行為:單獨的魚在水中通常都是
隨機遊動的,這是為了更大範圍地尋找食物點或身邊的夥伴。
特點
1)具有較快的收斂速度,可以用於解決有實時性要求的問題;
2)對於一些精度要求不高的場合,可以用它快速的得到一個
可行解;
3)不需要問題的嚴格機理模型,甚至不需要問題的精確描述,這使得它的套用範圍得以延伸。
停止條件
1) 判斷連續多次所得的均方差小於允許的誤差;
2)判斷某個區域的人工魚群的數目達到某個比率;
3)連續多次所獲取的值均不能超過已找到的極值。
4)疊代次數達到預設次數
Python代碼實現
step1:在GitHub上下載常用的 scikit-opt庫。
step2:定義目標函式並執行人工魚群算法
def func(x): x1, x2 = x return 1 / x1 ** 2 + x1 ** 2 + 1 / x2 ** 2 + x2 ** 2from sko.ASFA import ASFAasfa = 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.fit()
套用領域
1)電力系統規劃
電力系統規劃的重要組成部分是輸電網規劃,其目的是根據規劃期間的負荷增長及電源規劃方案構建相應的最佳電網結構,來滿足經濟可靠地輸送電能的要求。目前,人工智慧算法的快速發展為解決輸電網規劃問題提供了新的方法。人工智慧算法適於求解
組合最佳化問題或者目標函式與一些約束條件不可微的最佳化問題。人工魚群算法通過引入
禁忌搜尋( Tabu)和對人工魚部分行為的改進,使人工魚在探尋過程中具有記憶能力,對探索過的位置設為禁區,從而避免重複搜尋;同時記錄禁區中的一些優良狀態,保證搜尋的高效性和多樣性,進而通過人工魚群算解決輸電網規劃問題的速度和效率。
在關於此問題的最佳化模型中,需要同時考慮變數的約束條件和求解精度,將所需要求解的空間
離散化,把變數空間轉變為合適大小的格線,每一級中轉站的最優位置將在限定區域內的某些已知點上選取,該問題向量維數很高,用人工魚群算法建立各級中轉站與格線點關係矩陣和相鄰兩級中轉站間的關係矩陣來消除約束條件和壓縮變數數,通過對算法的一些改進使其更適合於該問題的最佳化,套用結果表明該算法在處理多級梯階物流中轉運輸系最佳化問題效果顯著。