Matlab從入門到精通(3)——多目標人工魚群算法

多目標優化問題是優化問題重要分支之一,同樣是是相當大一部分科研問題中的主要問題之一,常用的方法包括

  • 窮舉法(理論可以找到最優解集合,就是太慢了,一般沒人用這種)
  • 解析式推導最優解(大部分情況下推不出來或者解析式很複雜無法應用)
  • 智能優化算法(可以適用於各類優化問題,包括凸和非凸的,良好設計的情況下可以取得較好的效果)

這一章首先介紹智能優化算法中的多目標優化算法–多目標人工魚群算法。



一、 人工魚群算法的尋優原理

人工魚群算法在尋優的過程中,每個都有覓食、聚群,追尾、隨機移動四種行為,通過這四種行為可以使人工魚跳出局部最優解:

  1. 聚群行為能夠促使少出陷於局部最優解的人工魚趨向全局最優解的人工魚方向聚集,從而逃出局部最優解;
  2. 覓食行為中重複次數較少時,為人工魚提供了隨機移動的機會,從而可能跳出局部最優解;
  3. 隨機步長使得人工魚在前往局部最優解的途中,有可能轉向全局最優解;
  4. 擁擠度因子限制了聚群的規模,使得人工魚能夠更廣泛的尋優;
  5. 追尾行為加快了人工魚向更優狀態遊動。

通過以上幾種行為,魚群會逐漸向最優解靠近,對於各種複雜的情況都能得到極好的優化效果。

Matlab從入門到精通(3)——多目標人工魚群算法

Matlab從入門到精通(3)——多目標人工魚群算法


二、多目標 人工魚群算法實現的步驟

多目標人工魚群算法相比單目標魚群算法主要多了一個非支配排序的過程。

  • 初始化設置,包括種群規模N、每條人工魚的初始位置、人工魚的視野Visual、步長step、擁擠度因子δ、重複次數Trynumber;
  • 計算初始魚群各個體的多目標函數和適應度函數,取最優人工魚狀態及其值賦予給公告牌;
  • 對每個個體進行評價,對其要執行的行為進行選擇,包括覓食Pray、聚群Swarm、追尾Follow和評價行為;
  • 執行人工魚的行為,更新自己,生成新魚群;
  • 計算魚群中各個魚群得的多目標函數,執行非支配排序並更新外部集(存儲所有的 Pareto解)
  • 若某個體適應度函數優於公告牌,則將公告牌更新為該個體;
  • 當公告牌上最優解達到滿意誤差界內或者達到迭代次數上限時算法結束,否則轉步驟3。

多目標下的四種行為描述:

Matlab從入門到精通(3)——多目標人工魚群算法

聚群Swarm行為:人工魚探索當前鄰居內的夥伴數量,並計算夥伴的中心位置,若中心位置的目標函數支配當前位置的目標函數,並且不是很擁擠,則當前位置向中心位置移動一步,否則執行覓食行為。此時需遵守兩條規則:一是儘量向鄰近夥伴的中心移動,二是避免過分擁擠。

追尾Follow行為: 人工魚探索周圍鄰居魚的最優位置,當最優位置的目標函數值支配當前位置的目標函數值,並且不是很擁擠,則當前位置向最優鄰居魚移動一步,否則執行覓食行為。

覓食Pray行為:人工魚在當前解基礎上隨機進行選定一個方向單位移動,計算移動後解的多目標函數,並判斷是該解支配當前解,則往該方向移動隨機距離,否則重新選擇方向進行嘗試。多次嘗試覓食失敗後進行隨機移動。

隨機移動行為:人工魚在當前解基礎上隨機進行選定一個方向隨機移動。


三、結果演示

接下來我們用各種多目標測試測試函數來測試我們的多目標人工魚群算法

首先是雙目標測試函數,以下優化中為了體現性能優越,優化向量都是30維,大部分多目標優化算法維度低的時候還行,維度一高複雜度幾何倍上漲就徹底歇菜,從下面結果來看人工魚群還可以。

ZDT1
Matlab從入門到精通(3)——多目標人工魚群算法

Matlab從入門到精通(3)——多目標人工魚群算法

ZDT2
Matlab從入門到精通(3)——多目標人工魚群算法


Matlab從入門到精通(3)——多目標人工魚群算法

ZDT3
Matlab從入門到精通(3)——多目標人工魚群算法

Matlab從入門到精通(3)——多目標人工魚群算法

ZDT4
Matlab從入門到精通(3)——多目標人工魚群算法

Matlab從入門到精通(3)——多目標人工魚群算法

ZDT6
Matlab從入門到精通(3)——多目標人工魚群算法

Matlab從入門到精通(3)——多目標人工魚群算法

往期內容:


分享到:


相關文章: