NSGA2理解
NSGA-II算法學習
什么是支配:
支配就是統治,在各方面都優于其余個體
如個體i支配個體j,就說明個體i在所有目標函數的表現上都不差于個體j,并且至少在一個目標上優于個體j;
什么是非支配:
非支配就是個體在種群中是最優秀的,它們在該種群中不受其余個體支配。
?
快速非支配排序,將種群中的個體進行分層,最優秀的個體處于第一層,然后除了第一層,再從其余個體中找出非支配個體,以此類推。
為什么要記錄np和Sp:
Np是指支配個體p的個體數,就是比個體p優秀的個體
Sp是指受p支配的個體,也就是沒有個體優秀的個體。
因為算法首先可以找出第一層最優秀的個體,然后再從它們中獲取到受它們所支配的個體(除了第一層都受它們支配),也就是從Sp中找,它們沒有個體p優秀,讓它們的np-1;因為p已經存在于第一級了。
然后再判斷np是否為0,即它是否還受其余個體支配,0說明除了個體p,它不再受其余個體支配,則將這樣的個體分到第二級,也就是比第一級稍微弱點的個體。
?
擁擠度是什么?
表示種群中給定點的種群密度。用來確保種群多樣性。
?
?
為什么引入擁擠度?
因為在NSGA中需要認為指定一個共享參數,這個參數需要結合經驗,不太好確定,所以引入擁擠度,就不需要小生境技術了。
?
當進行完快速非支配排序和擁擠度計算之后,每個個體都擁有這兩個參數,然后根據擁擠度比較算子進行選擇,
?
?
?
采用共享小生境技術以確保種群的多樣性,但需要決策者指定共享半徑。
為了解決這個問題,NSGA-II中提出了擁擠度的概念,擁擠度表示在種群中給定點的周圍個體的密度,直觀上用個體i周圍包含個體i但不包含其余個體的最大長方形的長來表示。
算法:
每個點的擁擠度置為0
針對每個目標,對種群進行非支配排序,令邊界兩個個體的擁擠度為無窮。
對其余個體進行擁擠度計算:
?
?
?
算法基本思想:
首先,隨機產生規模為N的初始種群Pt,產生子代種群Qt,并將兩個種群聯合在一起形成大小為2N的種群Rt;
其次,將父代種群與子代種群合并,進行快速非支配排序并且分層,同時對每個非支配層中的個體進行擁擠度計算,根據非支配關系以及個體的擁擠度選取合適的個體組成新的父代種群Pt+1,最后,通過遺傳算法的基本操作產生新的子代種群Qt+1,將Pt+1與Qt+1合并形成新的種群Rt,重復以上操作,直到滿足程序結束的條件。
擁擠度比較算子:根據非支配排序后賦予的虛擬適應度值和擁擠度來決定那些個體進入下一代。
?
?
密度估計:為了得到種群中特定解周圍的解的密度估計,我們根據每一目標函數計算這點兩側的兩個點的平均距離。這個數值作為以最近鄰居作為頂點的長方體周長的估計(稱為擁擠系數)
擁擠系數的計算需要根據每一目標函數值的大小的升序順序對種群進行排序。因此,對每一目標函數,邊界解(擁
有最大和最小值的解)被指定為無窮大距離的值。所有其它
中間的解都被指定為等于兩個相鄰解的函數值歸一化后的絕對差值。全部擁擠系數值是通過個體每一目標的距離值的加和計算得到的。每一目標函數在計算擁擠系數前都會進過歸一化處理。在頁底展示的算法概括了非支配集合中所有解擁擠系數的計算過程。
總結
- 上一篇: Object相关方法
- 下一篇: redis报错:jedis connec