python拓展包之pymoo使用方法:多目标优化(NSGA2)
python拓展包之pymoo使用方法:多目標優化
- 一、pymoo的安裝
- 二、多目標優化的一般模式
- 三、pymoo處理多目標優化問題的格式
- 四、python中pymoo的使用
- 五、選擇優化算法
- 參考資料
一、pymoo的安裝
pip安裝
pip install -U pymoo二、多目標優化的一般模式
一般來說,多目標優化具有幾個受不等式和等式約束的目標函數。其目標是找到一組滿足所有約束條件并盡可能好地處理其所有目標值的解決方案。問題的一般形式的定義為:
目標函數f(x)
不等式約束g(x)
等式約束和h(x)
變量x的上下約束
在下面,我們說明了一個具有兩個約束條件的雙目標優化問題。
它的可視化圖像如下:
可以看到,它的最優解在(圖中橙色區域)
下面我們在python中使用pymoo來實現上述問題公式。
三、pymoo處理多目標優化問題的格式
一、pymoo支能夠處理目標函數最小化的優化問題
然而,在不失去一般性的情況下,一個應該最大化的目標可以乘以?1并最小化。
在上述優化問題中,我們需要將目標函數
max f2(x)
轉化為
min -f2(x)
此外,所有的約束函數都需要表述為一個小于等于的約束。
我們需要將約束條件
g2(x)>=0
轉化為
-g2(x)<=0
我們建議將約束標準化,使它們都同等重視。將約束條件的每一個因式的常數部分相乘得到一個約束常量,
對于g1(x),約束常量為 2 ? (?0.1) ?(?0.9) = 0.18
對于g2(x),約束常量為 20 ? (?0.4) ? (?0.6) = 4.8
最后,將使用pymoo進行優化的優化問題定義為:
四、python中pymoo的使用
接下來,用Python實現該優化問題。pymoo中的每個優化問題都必須從Problem類中繼承。
首先,通過調用super()函數,可以初始化問題屬性。
super初始化中
變量數(n_var)
目標(n_obj)
約束(n_constr)
此外,下(xl)和上變量邊界(xu)作為NumPy數組提供。
_evaluate函數中
定義目標函數以鍵“F”添加到字典中
定義約束條件以鍵“G”添加到字典中
五、選擇優化算法
在pymoo中,需要創建一個算法對象來進行優化。對于每種算法,都有API文檔,通過提供不同的參數,可以以即插即用的方式定制算法。一般來說,選擇一個合適的優化問題的算法本身就是一個挑戰。當事先知道問題特征時,我們建議通過定制操作符使用這些特征。然而,在我們的情況下,優化問題相當簡單,但應該考慮有兩個目標和兩個約束的方面。因此,我們決定使用NSGA-II[12]及其默認配置,并進行少量修改。我們選擇了40人的人口規模,但我們沒有產生相同數量的后代,而是每一代只創造10個后代。這是NSGA-II的一個穩態變體,對于比較簡單的優化問題,可以提高收斂性,存在局部帕雷托前沿。此外,我們啟用了一個重復的檢查,以確保交配產生的后代,以及與現有種群關于其可變向量的不同。
使用所提供的參數調用NSGA2的構造函數并返回一個初始化的算法對象。
接下來,我們使用初始化的算法對象來優化所定義的問題。因此,將具有實例問題和算法的最小化函數作為參數。此外,我們提供了運行40代算法的終止標準,這將導致40個+40×10=440函數評估。此外,我們定義了一個隨機種子,以確保重現性,并使冗長標志能夠看到每一代的打印輸出。該方法返回一個結果對象,其中包含該算法找到的非支配解集。
res = minimize(MyProblem(),algorithm,('n_gen', 40),seed=1,verbose=True)打印輸出
D:\Soft\Anaconda3\envs\datadeal\python.exe D:/WorkSpace/pymooto/alg_example.py ===================================================================================== n_gen | n_eval | cv (min) | cv (avg) | n_nds | eps | indicator =====================================================================================1 | 40 | 0.00000E+00 | 2.36399E+01 | 1 | - | -2 | 50 | 0.00000E+00 | 1.15486E+01 | 1 | 0.00000E+00 | f3 | 60 | 0.00000E+00 | 5.277918607 | 1 | 0.00000E+00 | f4 | 70 | 0.00000E+00 | 2.406068542 | 2 | 1.000000000 | ideal5 | 80 | 0.00000E+00 | 0.908316880 | 3 | 0.869706146 | ideal6 | 90 | 0.00000E+00 | 0.264746300 | 3 | 0.00000E+00 | f7 | 100 | 0.00000E+00 | 0.054063822 | 4 | 0.023775686 | ideal8 | 110 | 0.00000E+00 | 0.003060876 | 5 | 0.127815454 | ideal9 | 120 | 0.00000E+00 | 0.00000E+00 | 6 | 0.004633441 | ideal10 | 130 | 0.00000E+00 | 0.00000E+00 | 6 | 0.062649485 | nadir11 | 140 | 0.00000E+00 | 0.00000E+00 | 7 | 0.026769546 | f12 | 150 | 0.00000E+00 | 0.00000E+00 | 7 | 0.047566009 | f13 | 160 | 0.00000E+00 | 0.00000E+00 | 7 | 0.000678729 | f14 | 170 | 0.00000E+00 | 0.00000E+00 | 9 | 0.043888006 | ideal15 | 180 | 0.00000E+00 | 0.00000E+00 | 10 | 0.013506283 | f16 | 190 | 0.00000E+00 | 0.00000E+00 | 11 | 0.052719639 | ideal17 | 200 | 0.00000E+00 | 0.00000E+00 | 14 | 0.008531768 | f18 | 210 | 0.00000E+00 | 0.00000E+00 | 16 | 0.011165361 | f19 | 220 | 0.00000E+00 | 0.00000E+00 | 18 | 0.004040787 | f20 | 230 | 0.00000E+00 | 0.00000E+00 | 20 | 0.001296614 | f21 | 240 | 0.00000E+00 | 0.00000E+00 | 22 | 0.000911500 | f22 | 250 | 0.00000E+00 | 0.00000E+00 | 24 | 0.003461153 | nadir23 | 260 | 0.00000E+00 | 0.00000E+00 | 27 | 0.004261571 | ideal24 | 270 | 0.00000E+00 | 0.00000E+00 | 28 | 0.029927769 | nadir25 | 280 | 0.00000E+00 | 0.00000E+00 | 28 | 0.001150567 | f26 | 290 | 0.00000E+00 | 0.00000E+00 | 30 | 0.002181257 | f27 | 300 | 0.00000E+00 | 0.00000E+00 | 33 | 0.006887739 | nadir28 | 310 | 0.00000E+00 | 0.00000E+00 | 36 | 0.001237981 | f29 | 320 | 0.00000E+00 | 0.00000E+00 | 37 | 0.000102543 | f30 | 330 | 0.00000E+00 | 0.00000E+00 | 38 | 0.000747546 | f31 | 340 | 0.00000E+00 | 0.00000E+00 | 40 | 0.005157126 | nadir32 | 350 | 0.00000E+00 | 0.00000E+00 | 40 | 0.00000E+00 | f33 | 360 | 0.00000E+00 | 0.00000E+00 | 40 | 0.002321697 | f34 | 370 | 0.00000E+00 | 0.00000E+00 | 40 | 0.016674348 | nadir35 | 380 | 0.00000E+00 | 0.00000E+00 | 40 | 0.000760584 | f36 | 390 | 0.00000E+00 | 0.00000E+00 | 40 | 0.016011922 | nadir37 | 400 | 0.00000E+00 | 0.00000E+00 | 40 | 0.000333129 | f38 | 410 | 0.00000E+00 | 0.00000E+00 | 40 | 0.000980877 | f39 | 420 | 0.00000E+00 | 0.00000E+00 | 40 | 0.001264690 | f40 | 430 | 0.00000E+00 | 0.00000E+00 | 40 | 0.001571863 | f關于pymoo的中文使用教程很少,本文內容大都翻譯自pymoo的官方使用說明。
參考資料
pymoo: Multi-objective Optimization in Python
總結
以上是生活随笔為你收集整理的python拓展包之pymoo使用方法:多目标优化(NSGA2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java定义注解
- 下一篇: springboot接收json参数_S