【多目標優化演算法】非支配的精英策略遺傳演算法:NSGA-II
多目標優化演算法,非支配的精英策略遺傳演算法:NSGA-II
1.演算法簡介
-
NSGA-II演算法特點:快速非支配排序演算法、精英保留策略、擁擠度分配策略。
-
相比於NSGA的優勢:
-
排序演算法的時間複雜度
-
精英保留策略
-
無需要共享的引數
2.演算法相關概念
2.1 Pareto optimum
Pareto解又稱非支配解或不受支配解(nondominated solutions):在有多個目標時,由於存在目標之間的衝突和無法比較的現象,一個解在某個目標上是最好的,在其他的目標上可能是最差的。這些在改進任何目標函式的同時,必然會削弱至少一個其他目標函式的解稱為非支配解或Pareto解。一組目標函式最優解的集合稱為Pareto最優集。最優集在空間上形成的曲面稱為Pareto前沿面。一組目標函式最優解的集合稱為Pareto最優集。
2.2 非支配的快速排序
整個種群的大小為P,首先需要計算出種群中的每個個體的和被支配個數和該個體支配解的集合。
- 生成和的演算法過程
for each (遍歷種群中的每個個體)
for each
if( )then (如果p能支配q)
= (將q加入到被p支配的解集中)
else if() then
(增加p的支配數)
if then
- 排序演算法過程
while
(用來儲存下一個的集合)
for each
for each (遍歷支配解)
if then (q屬於下一個集合)
2.3 擁擠度分配
我們引入了擁擠距離KaTeX parse error: Expected '}', got 'EOF' at end of input: I[i]_{distance}$來代替使用者定義的共享引數,為了使解在目標空間更加均勻,並且提高了計算複雜度。演算法步驟如下:
crowding-distance-assignment()
-
,記錄的數量
-
for each , 設
-
for each objective (對每個目標函式):
- 根據目標函式對該種群進行個體排序,其中為目標函式的最大值,為最小值
- 排序後的前邊界和後便捷擁擠距離設為
- for to ,計算除邊界外所有點
該擁擠距離度,就是使目標能生成最大的矩陣,且不干擾到其他點。
![螢幕快照 2018-12-22 下午4.54.20](/Users/IngeTeng/Desktop/螢幕快照 2018-12-22 下午4.54.20.png)
2.4 精英保留策略
演算法步驟如下:
-
將父代種群和子代種群合併成,此時種群數量為
-
根據Pareto進行排序,根據Pareto的等級,將等級最低的優先放入新的父代種群,直到此代放滿既定種群數量N
-
在第二步放入排序中,按照擁擠距離從大到小放入到
2.5 錦標賽選擇
演算法步驟如下:
-
確定每次選擇的個體數量,種群總數為,
-
從種群中隨機選擇個個體(每個個體被選中的概率相同),根據每個個體的適應度,選擇適應度值最好的個體進入下一代種群
-
重複步驟(2),直到新的種群規模達到原來的總數為止
3.演算法實現流程圖
主體迴圈部分:
1.隨機初始化一個種群,對進行非支配排序,初始化每個個體的rank值,。
2.通過錦標賽法從選擇個體,進行交叉和變異,產生新一代種群。
3.將和合併,產生一個結合後的種群。
4.對進行非支配排序,並使用擁擠距離和精英保留策略選出每代的N個個體,組成新一代種群。
5.跳轉至2,直至達到預期代數。
4.模擬結果及說明
以下是對ZDT1,ZDT2,ZDT3,ZDT4,ZDT6測試問題的模擬
- ZDT1
設定初始種群大小為500,迭代次數為500代,。結果如圖(1)所示。
- ZDT2
設定初始種群大小為500,迭代次數為500代,。結果如圖(3)所示。
設定初始種群大小為250,迭代次數為500代,。結果如圖(5)所示。
設定初始種群大小為250,迭代次數為500代,。結果如圖(7)所示。
設定初始種群大小為100,迭代次數為500代,。結果如圖(9)所示。
設定初始種群大小為100,迭代次數為500代,。結果如圖(10)所示。
從模擬結果可以得到NSGA-II在測試問題ZDT1、ZDT2、ZDT3甚至是ZDT6都呈現出了不錯的結果,非常接近Pareto-front值,只有在ZDT4問題上表現較差。
的Mean和Vairance
Problem | ZDT1 | ZDT2 | ZDT3 | ZDT4 | ZDT6 |
---|---|---|---|---|---|
Mean(500) | 0.4569 | 0.4583 | 0.6731 | 0.4972 | 0.6956 |
Vairance(500) | 0.0010 | 0.0317 | 0.0052 | 0.0083 | 0.0041 |
Mean(2000) | 0.4954 | 0.4890 | 0.6925 | 0.4977 | 0.4544 |
Vairance(2000) | 0.0056 | 0.0013 | 0.0013 | 0.0057 | 0.0031 |
的Mean和Vairance
Problem | ZDT1 | ZDT2 | ZDT3 | ZDT4 | ZDT6 |
---|---|---|---|---|---|
Mean(500) | 0.0118 | 0.1000 | 0.9240 | 22.4199 | 0.5100 |
Vairance(500) | 0.0082 | 0.0033 | 0.0042 | 0.5061 | 0.0380 |
Mean(2000) | 0.0013 | 0.0011 | 0.0900 | 16.7371 | 0.4400 |
Vairance(2000) | 0.0001 | 0.0005 | 0.0003 | 0.4937 | 0.0032 |
根據圖(1)和圖(2),圖(3)與圖(4),圖(5)與圖(6)的對比可以發現,迭代的代數是對最優解結果有一定的影響的,能得到更好的接近Pareto最優值。由圖(7)與圖(8)可以的看出迭代次數對ZDT6的影響不大。在資料表中資料可以得出,在ZDT4問題上效果較差,從資料可以看出,以上5個問題的傳播多樣性較好。
相關文章
- 【智慧優化演算法】遺傳演算法的精英選擇策略、期望選擇策略優化演算法
- python實現:目標優化演算法——遺傳演算法Python優化演算法
- 多目標遺傳演算法NSGA-Ⅱ與其Python實現多目標投資組合優化問題演算法Python優化
- 利用遺傳演算法庫DEAP優化交易策略演算法優化
- Python遺傳演算法工具箱的使用(一)求解帶約束的單目標優化Python演算法優化
- 多目標優化演算法(一)NSGA-Ⅱ(NSGA2)優化演算法
- 寫了一個類GeneticOptimizeStrategy,針對VNPY策略遺傳演算法優化演算法優化
- Python遺傳演算法框架使用例項(二)多目標優化問題Geatpy for Python與Matlab的對比學習Python演算法框架優化Matlab
- 遺傳演算法演算法
- 智慧優化演算法——python實現免疫遺傳演算法的影像擬合優化演算法Python
- MATLAB實戰系列(十一)-多種群遺傳演算法的函式優化演算法(附MATLAB程式碼)Matlab演算法函式優化
- 遺傳演算法 (轉)演算法
- 目標函式的經典優化演算法介紹函式優化演算法
- NSGA2、NSGA-II實現、基於分配的多目標進化-PythonPython
- 遺傳演算法的基本框架演算法框架
- 進化演算法、遺傳演算法與粒子群演算法之間的比較演算法
- 遺傳演算法中適值函式的標定與大變異演算法演算法函式
- 使用MPI並行化遺傳演算法框架GAFT並行演算法框架
- 粒子群演算法和遺傳演算法的比較演算法
- 遺傳演算法(一):Basic GA演算法
- 遺傳演算法 (Genetic Algorithm)演算法Go
- 演算法金 | 最難的來了:超引數網格搜尋、貝葉斯最佳化、遺傳演算法、模型特異化、Hyperopt、Optuna、多目標最佳化、非同步並行最佳化演算法模型非同步並行
- 從遺傳演算法到OpenAI新方向:進化策略工作機制全解演算法OpenAI
- 【機器學習】【base】 之 目標函式 損失函式 優化演算法機器學習函式優化演算法
- 人工智慧 (13) 遺傳演算法人工智慧演算法
- 10分鐘搞懂遺傳演算法演算法
- python遺傳演算法(詳解)Python演算法
- 遺傳演算法解決函式最佳化問題演算法函式
- 遺傳演算法詳解與實驗演算法
- 遺傳演算法解決TSP問題演算法
- 如何學習python遺傳演算法?Python演算法
- 遺傳演算法組卷使用心得演算法
- 遺傳演算法與C++實現演算法C++
- 遺傳演算法講解(Matlab描述)演算法Matlab
- 網易嚴選跨域多目標演算法演進跨域演算法
- opencv的目標跟蹤演算法OpenCV演算法
- 透過MATLAB分別對比二進位制編碼遺傳最佳化演算法和實數編碼遺傳最佳化演算法Matlab演算法
- 利用粒子群優化演算法(PSO)來優化vnpy的量化策略引數優化演算法