第三代非支配排序遺傳算法(NSGA-III)
第三代非支配遺傳算法是針對高維多目標優化計算代價大,難以挑選Pareto解的情況而開發的,基本流程與NSGA-II相似,但選擇個體的方法加入了基于參考點的方法,能夠有效降低計算代價。
NSGA-III 首先定義一組參考點。然后隨機生成含有 N 個個體的初始種群,其中 N 是種群大小。接下來,算法進行迭代直至終止條件滿足。在第 t 代,算法在當前種群 Pt的基礎上,通過交叉和變異產生子代種群 Qt。Pt和 Qt的大小均為 N。因此,兩個種群 Pt和 Qt合并會形成種群大小為 2N 的新的種群 Rt=Pt∪Qt。
為了從種群 Rt中選擇最好的 N 個解進入下一代,首先利用基于Pareto支配的非支配排序將 Rt分為若干不同的非支配層(F1,F2等等)。然后,算法構建一個新的種群St,構建方法是從 F1開始,逐次將各非支配層的解加入到 St,直至 St的大小等于 N,或首次大于 N。假設最后可以接受的非支配層是 L層,那么在 L+ 1 層以及之后的那些解就被丟棄掉了,且 St\ FL中的解已經確定被選擇作為 Pt+1中的解。Pt+1中余下的個體需要從 FL中選取,選擇的依據是要使種群在目標空間中具有理想的多樣性。
比如你的N設置為100,那么Pt大小為100,Qt是Pt交叉和變異后的個體,Qt的數目也是100,那么Rt=Pt∪Qt,Rt數目是兩百,現在只要從這兩百中選100個個體進行下一輪迭代。
那么怎么從這兩百個選一百個呢?NSGA的思想首先是把所有解進行分非支配排序,假設問題為最小化問題,那么目標值越小越好,若個體A三個目標值是(2,3,5),B的三個目標是(4,3,5),C的三個目標是(3,3,4),那么個體A和C放入F1層,其等級為1,F2層是B,等級為2,以此類推。假如一共有8層非支配層(F1,F2,。。。,F8),你選到F1+F2+F3+…+F7時候已經有90個個體了,而F8層有20個個體,那么怎么在F8選這10個個體,即怎么在F8里的20個選十個,NSGA2用的是基于擁擠距離的方法,而NSGA3用的是基于參考點的方法。這是NSGA-III區別于NSGA-II的顯著特征。( St\ FL里面,St就是這里的F1到F7的所有個體的總和,F8就是FL,St\ FL這個符號意思就是已經被選擇的F1到F7所有個體)
在原始NSGA-II中,FL中具有較大擁擠距離的解會優先被選擇。然而,擁擠距離度量并不適合求解 高維多目標優化問題(三個及更多目標的多目標優化問題)。因此 NSGA-III 不再采用擁擠距離,而是采用了新的選擇機制,該機制會通過所提供的參考點,對 St中的個體進行更加系統地分析,以選擇 FL中的部分解進入 Pt+1。
算法步驟如下:
1. 分支配排序、分層
2. 生成參考點
3. 計算理想點
即求解這一代種群所有目標每個維度的的最小值。比如A三個目標值是(2,3,5),B的三個目標是(4,3,5),C的三個目標是(3,3,4),那么 ideal point為(2,3,4)。
4. 將解空間零點挪到上述理想點
5. 找出極值點(以上幾個步驟是常規操作,較好理解,這里專門闡述較難理解的極值點生成公式)

這個公式通過將群體中的個體均與一個同維度的向量點除找出極值點,這個向量ωi的特點是,除了第i位數字為1,其余都為一個極小值,比如0.000001。這個算法看起來很難,但其實很好理解,用下一張圖來表示。

比方說我們現在想找出哪個點離x軸(1號軸)最近,那么ω1=[1, 0.000001],那么上圖中的兩個點分別點除這個向量會得到:【1,2000 000】,【3,500 000】,那么這兩個個體(點)的最大值分別為2000 000和500 000,公式外面的argmin的意思就是說我要的點是帶有500 000這個值的點,這樣就把離X軸最近的點(極值點)找出來了。找出各個軸的極值點,就能構建超平面(對于上圖只有兩個個體的情況,超平面其實就是通過兩個點的直線),超平面和坐標軸的交點即可得到截距,有多少個坐標軸,就有多少個截距,把所有個體點除包含所有截距的向量,就是個體的歸一化,個體即映射到參考點所在的歸一化平面上。
6.將所有個體關聯到參考點(根據參考點和個體之間的歐幾里得距離或其他距離)
7.依據參考點的小生境從F8層提取10個個體加入到下一代種群中。
8.迭代往復進行,直至達到收斂條件。

遺傳算法
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















