python 遗传算法多目标优化_NSGA2 遗传算法解决多目标优化
進(jìn)行多目標(biāo)優(yōu)化時(shí),通常面臨多個(gè)目標(biāo)函數(shù)無法同時(shí)達(dá)到最優(yōu)的情況,為了解決這一矛盾,引入Pareto-Optimality的概念
Pareto-Optimality
通常,多目標(biāo)優(yōu)化的一般形式為:
經(jīng)過處理,可以化為以下形式:
其中
f1(x),f2(x),...,fn(x)
為目標(biāo)函數(shù),其全部都是求最小值的形式
以下針對(duì)兩個(gè)目標(biāo)函數(shù)進(jìn)行討論:
有幾個(gè)目標(biāo)函數(shù)便為幾維空間,有兩個(gè)目標(biāo)函數(shù)Time(f1(x)),Cost(f2(x)),
可以畫出圖像:
隨后引入幾個(gè)概念:
非支配解:假設(shè)任何二解S1 及S2 對(duì)所有目標(biāo)而言,S1均優(yōu)于S2,則我們稱S1 支配S2,若S1 的解沒有被其他解所支配,則S1 稱為非支配解(不受支配解),也稱Pareto解
支配解:若解S2的所有目標(biāo)均劣于S1,則稱S1優(yōu)于S2,也稱S1支配S2
,S2為受支配解。
因此現(xiàn)在的首要任務(wù)是尋找解空間里面所有的Pareto解,找到所有Pareto解之后,這些解組成的平面叫做Pareto前沿面(Non-dominated front)。在目標(biāo)函數(shù)較多時(shí),前沿面通常為超曲面。
非支配解排序(Non-dominated Sorting)
1. 設(shè)所有解的集合為S,現(xiàn)從中找出非支配解集合,記為F1
2. 令S=S-F1,從S中再找出非支配解集合,記為F2
3. 重復(fù)第二步,直到S為空集
將每次找出的非支配解進(jìn)行排序如下:
{F1,F2,…,Fn}
在途中畫出Fi集合中對(duì)應(yīng)點(diǎn),并連線,則構(gòu)成了n個(gè)pareto曲面,分別編號(hào)為Non-dominated Front 1,Non-dominated Front 2…
以上述表格中數(shù)據(jù)為例:F1={A,B,D,F}, F2={C,E,D}, F3={H,I}
畫出相應(yīng)圖形:
在第一個(gè)前沿面上的解具有最大的適應(yīng)度,序數(shù)越大則適應(yīng)度越小。序號(hào)小的前沿面上的解可以支配序號(hào)大的前沿面上的解。
同一前沿面上解的排序-擁擠度(Crowding Distances)
針對(duì)第一個(gè)前沿面來說,其中包含了A,B,D,F四個(gè)解,如何評(píng)判這四個(gè)解的適應(yīng)度大小呢?由此引入了擁擠度的概念。
擁擠度的計(jì)算:
1. 只考慮同一前沿面上的解,設(shè)定位于前沿面兩端邊界點(diǎn)的擁擠度為∞。
2. 對(duì)于不在兩端的點(diǎn),其擁擠度主要與其相鄰兩個(gè)點(diǎn)有關(guān)
擁擠度越小則對(duì)應(yīng)該解越重要
比較通俗的理解:擁擠度越小就說明該解與其他解相似程度不高,保留擁擠度較小的點(diǎn)相當(dāng)于保存了解的多樣性
所以說,確定解的適應(yīng)度大小順序應(yīng)該先判斷該解在哪個(gè)前沿面上,如果在同一個(gè)前沿面上,則再計(jì)算擁擠度進(jìn)行判斷
與遺傳算法結(jié)合
與普通遺傳算法步驟大概相同,初始化隨機(jī)取幾個(gè)解,進(jìn)行編碼,交叉互換,突變
生成子代
但是,在生成子代后,需要與父代混合,從中挑選出適應(yīng)度較高的解重新形成子代,再進(jìn)行新的一輪迭代。
舉例說明:
1.針對(duì)一個(gè)兩目標(biāo)優(yōu)化問題,初始化隨機(jī)取出10個(gè)解記為F,經(jīng)過計(jì)算得到子一代為P
此時(shí)將P,F混合,形成新的解集S
2.針對(duì)S,進(jìn)行上面所介紹的非支配解排序,計(jì)算擁擠度,最終得出這12個(gè)解的適應(yīng)度大小順序,從中取適應(yīng)度較大的10個(gè)點(diǎn)生成新的子代(維持和父代個(gè)數(shù)相同),帶入算法進(jìn)行新一輪迭代
子代父代混合篩選生成新的子代,好像叫做精英策略
任何啟發(fā)式算法均有兩個(gè)方面組成:加快收斂的操作和在收斂過程中保持解的多樣性的操作,兩種操作相互作用,以至于找到一個(gè)合適的收斂速度,減少計(jì)算時(shí)間,同時(shí)避免陷入局部最優(yōu)
對(duì)于NSGA來說,其規(guī)則仍然符合這兩個(gè)準(zhǔn)則:
1. 本算法并不是只取最優(yōu)的前沿面,而是將所有前沿面均納入考慮范圍內(nèi),是為了體現(xiàn)解的多樣性,防止陷入局部最優(yōu)
2. 計(jì)算擁擠度是為了保存下來相似程度較低的解,保持解空間的多樣性
3. 使用精英策略是為了加速收斂,更快的除去劣解
作者:騎著象拔蚌環(huán)游
鏈接:https://zhuanlan.zhihu.com/p/125161075
總結(jié)
以上是生活随笔為你收集整理的python 遗传算法多目标优化_NSGA2 遗传算法解决多目标优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于OpenCore0.5.4/5/6,
- 下一篇: python实现繁简体自动转换小工具