NSGA-II算法介绍
博主畢設(shè)用到了,記錄下來(lái)防忘記,比較具體,也分享給需要學(xué)習(xí)的同學(xué)。
1995年,Srinivas和Deb提出了非支配遺傳(Non-dominated Sorting Genetic Algorithms,NSGA)算法[42]。NSGA算法是以遺傳算法為基礎(chǔ)并基于Pareto最優(yōu)概念得到的。NSGA算法與基本遺傳算法的主要區(qū)別是其在進(jìn)行選擇操作之前對(duì)個(gè)體進(jìn)行了快速非支配排序,增大了優(yōu)秀個(gè)體被保留的概率[43],而選擇、交叉、變異等操作與基本遺傳算法無(wú)異。經(jīng)過(guò)諸多學(xué)者的研究測(cè)試,NSGA算法比傳統(tǒng)的多目標(biāo)遺傳算法效果更好。但是在實(shí)際應(yīng)用中發(fā)現(xiàn)NSGA算法仍具有一定的缺點(diǎn),主要體現(xiàn)在以下方面:
(1)算法計(jì)算量大。NSGA算法的計(jì)算復(fù)雜度與種群數(shù)量N、目標(biāo)函數(shù)個(gè)數(shù)m的關(guān)系為T = O(mN3),當(dāng)種群規(guī)模較大、目標(biāo)函數(shù)較多時(shí)所耗時(shí)間較長(zhǎng)。
(2)沒(méi)有應(yīng)用精英策略。未通過(guò)精英策略提高優(yōu)秀個(gè)體的保留概率,因而無(wú)法加快程序的執(zhí)行速度。
(3)需要人為地指定共享半徑σshare,對(duì)于經(jīng)驗(yàn)的要求非常高。
為了改善NSGA算法的缺點(diǎn),Deb等人在2002年提出了NSGA-II算法[44]。相對(duì)于NSGA算法,NSGA-II算法主要在以下三個(gè)方面做了改進(jìn):
(1)NSGA-II算法使用了快速非支配排序法,將算法的計(jì)算復(fù)雜度由O(mN3)降到了O(mN2),使得算法的計(jì)算時(shí)間大大減少。
(2)采用了精英策略,將父代個(gè)體與子代個(gè)體合并后進(jìn)行非支配排序,使得搜索空間變大,生成下一代父代種群時(shí)按順序?qū)?yōu)先級(jí)較高的個(gè)體選入,并在同級(jí)個(gè)體中采用擁擠度進(jìn)行選擇,保證了優(yōu)秀個(gè)體能夠有更大的概率被保留。
(3)用擁擠度的方法代替了需指定共享半徑的適應(yīng)度共享策略,并作為在同級(jí)個(gè)體中選擇優(yōu)秀個(gè)體的標(biāo)準(zhǔn),保證了種群中個(gè)體的多樣性,有利于個(gè)體能夠在整個(gè)區(qū)間內(nèi)進(jìn)行選擇、交叉和變異。
實(shí)踐證明,NSGA-II算法無(wú)論在優(yōu)化效果還是運(yùn)算時(shí)間等方面都比NSGA算法有了一定的改進(jìn),是一種優(yōu)秀的多目標(biāo)優(yōu)化算法。
1、?選擇、交叉、變異
遺傳算法中個(gè)體的編碼方式主要有實(shí)數(shù)編碼、二進(jìn)制編碼、格雷編碼等,根據(jù)系統(tǒng)容量一般較大的特點(diǎn),本文選擇實(shí)數(shù)編碼方式。在優(yōu)化過(guò)程中,個(gè)體的好壞依賴于個(gè)體的適應(yīng)度,適應(yīng)度高的個(gè)體有更大的可能被保留進(jìn)入下一代。在實(shí)際操作當(dāng)中,適應(yīng)度一般為個(gè)體的目標(biāo)函數(shù)。
(1)選擇
選擇操作模仿自然界中的“優(yōu)勝劣汰”法則,若個(gè)體的適應(yīng)度高則其有更大概率被遺傳到下一代,反之則概率較小。進(jìn)行選擇操作的方法有許多,比如輪盤(pán)賭選擇、排序選擇、最優(yōu)個(gè)體保存、隨機(jī)聯(lián)賽選擇等。
a. 輪盤(pán)賭選擇:將種群中所有個(gè)體的適應(yīng)度值加和,并把每個(gè)個(gè)體的適應(yīng)度值與和的比值作為該個(gè)體選擇的選擇概率,從而個(gè)體適應(yīng)度越高被選中概率越高。
b. 排序選擇:按照適應(yīng)度值大小對(duì)所有個(gè)體進(jìn)行排序,并根據(jù)排序確定個(gè)體被選中的概率。
c. 最優(yōu)個(gè)體保存:會(huì)將父代群體中的最優(yōu)的個(gè)體直接保存入子代個(gè)體中,保證了優(yōu)秀個(gè)體能夠遺傳到下一代。
d. 隨機(jī)聯(lián)賽選擇:設(shè)置固定值k,每次隨機(jī)取k個(gè)個(gè)體,將其中適應(yīng)度最高的個(gè)體遺傳入下一代。
這些選擇方法各有優(yōu)缺點(diǎn),應(yīng)根據(jù)不同場(chǎng)景、不同要求進(jìn)行選擇,本研究采用隨機(jī)聯(lián)賽選擇方法。
?(2)交叉
交叉操作模擬自然界中染色體的交叉換位現(xiàn)象,用于生成新個(gè)體,決定了算法的全局搜索能力。標(biāo)準(zhǔn)的NSGA-II算法使用模擬二進(jìn)制交叉算子,第k+1代個(gè)體的計(jì)算公式如下[44, 45]:
??? ?????????????????? ?????????????
式中,p1,k+1和p2,k+1是交叉后生成的第k+1代個(gè)體;p1,k和p2,k是被選中的第k代個(gè)體;βqi是均勻分布因子,其計(jì)算方式如下:
式中,ui是屬于[0,1)的隨機(jī)數(shù);η是交叉分布指數(shù),一般的定義為20~30,η的大小會(huì)影響產(chǎn)生的個(gè)體距離父代個(gè)體的遠(yuǎn)近。
(3)變異
變異操作是模擬生物的基因變異,同交叉操作一樣,都用于產(chǎn)生新個(gè)體。標(biāo)準(zhǔn)NSGA-II算法的變異算子為多項(xiàng)式變異算子,第k+1代個(gè)體的計(jì)算公式如下[44,45]:
?
式中,pk是被選中的第k代個(gè)體;pk+1是pk經(jīng)變異操作得到的第k+1代個(gè)體;pmax k和pmin k分別為決策變量的上界和下界;δk計(jì)算公式如下:
?
式中,rk為[0,1]中的均勻分布隨機(jī)數(shù);ηm為變異分布指數(shù)。
2、快速非支配排序
快速非支配排序是在Pareto支配基礎(chǔ)上提出的概念。假設(shè)有k個(gè)目標(biāo)函數(shù)記為fi (x),其中i是1, 2, … , k中的任意整數(shù),j同樣是1,2, …, k中的任意整數(shù),但i≠j。若個(gè)體x1和x2對(duì)于任意的目標(biāo)函數(shù)都有fi(x1) < fi(x2)則稱個(gè)體x1支配x2;若對(duì)于任意的目標(biāo)函數(shù)都有fi(x1) ≤ fi(x2)且至少有一個(gè)目標(biāo)函數(shù)使得fj(x1) < fj(x2)成立則稱x1弱支配x2;若既存在目標(biāo)函數(shù)使得fi(x1) ≤ fi(x2)成立又存在目標(biāo)函數(shù)滿足fj(x1) > fj(x2),則稱個(gè)體x1和x2互不支配。
種群中的每個(gè)個(gè)體都有兩個(gè)參數(shù)ni和Si,ni為種群中支配個(gè)體i 的個(gè)體數(shù)量,Si是被個(gè)體i支配的個(gè)體的集合,快速非支配排序的步驟如下:
(1)通過(guò)循環(huán)比較找到種群中所有ni = 0的個(gè)體,賦予其非支配等級(jí)為1,并將這些個(gè)體存入非支配集合rank1中。
(2)集合rank1中的每一個(gè)個(gè)體,將其所支配的個(gè)體集合中的每個(gè)個(gè)體的nj都減去1,若nj-1=0則將個(gè)體j存入集合rank2中,并賦予其中的個(gè)體非支配等級(jí)2。
(3)之后對(duì)rank2中的個(gè)體重復(fù)上述操作,直至所有個(gè)體都被賦予了非支配等級(jí)。
非支配等級(jí)也稱作Pareto等級(jí),其中Pareto等級(jí)為1的個(gè)體由于不受其他個(gè)體的支配,叫做非支配解,也叫 Pareto最優(yōu)解,而解集所形成的曲線叫做Pareto前沿。以有兩個(gè)目標(biāo)函數(shù)f1和f2為例,假設(shè)經(jīng)過(guò)快速非支配排序之后共分成了三個(gè)Pareto等級(jí),如圖4.1所示。圖4.1中用圓圈表示的個(gè)體即Pareto等級(jí)為1的個(gè)體組成的集合為本例的Pareto最優(yōu)解,這些個(gè)體形成的曲線即為本例的Pareto前沿。
?
?
?
3、擁擠度計(jì)算
在NSGA算法中,需要指定共享半徑σshare,這對(duì)經(jīng)驗(yàn)要求較高,為了克服這一缺點(diǎn),NSGA-II引用了擁擠度的概念。擁擠度表示空間中個(gè)體的密度值,直觀上可以用個(gè)體? 周圍不包括其他個(gè)體的長(zhǎng)方形表示,如圖所示。
?
在對(duì)某個(gè)等級(jí)的個(gè)體進(jìn)行擁擠度計(jì)算時(shí),設(shè)該等級(jí)共有m個(gè)個(gè)體,每個(gè)個(gè)體用xi表示,i為1~m中的任意整數(shù),xi-1,xi+1分別為i=2, 3, …, m-1時(shí)個(gè)體? 前后的個(gè)體;記第? 個(gè)個(gè)體的擁擠度為yi,初始值設(shè)為0;設(shè)有n個(gè)目標(biāo)函數(shù),記為fk(x),k=1, 2, …, n,記fmin k、fmax k分別為m個(gè)個(gè)體中目標(biāo)函數(shù)值fk(xi)的最小值和最大值,擁擠度計(jì)算的偽代碼流程如下所示:
for k<=n
{
?? ?// 根據(jù)目標(biāo)函數(shù)值fk(xi)對(duì)該等級(jí)的全部個(gè)體進(jìn)行排序
??? y1=∞
??? ym=∞
?? ?i=2
for i<m
{
i=i+1
}
k=k+1
}
4、精英策略
NSGA-II算法引入了精英策略,達(dá)到保留優(yōu)秀個(gè)體淘汰劣等個(gè)體的目的。精英策略通過(guò)將父代與子代個(gè)體混合形成新的群體,擴(kuò)大了產(chǎn)生下一代個(gè)體時(shí)的篩選范圍。以圖所示的例子進(jìn)行分析,圖中P表示父代種群,設(shè)其中的個(gè)體數(shù)量為n,Q表示子代種群,具體步驟如下:
(1)將父代種群和子代種群合并形成新的種群。之后對(duì)新種群進(jìn)行非支配排序,本例中將種群分成了6個(gè)Pareto等級(jí)。
(2)進(jìn)行新的父代的生成工作,先將Pareto等級(jí)為1的非支配個(gè)體放入新的父代集合當(dāng)中,之后將Pareto等級(jí)為2的個(gè)體放入新的父代種群中,以此類推。
(3)若等級(jí)為k的個(gè)體全部放入新的父代集合中后,集合中個(gè)體的數(shù)量小于n,而等級(jí)為k+1的個(gè)體全部放入新的父代集合中后,集合中的個(gè)體數(shù)量大于n,則對(duì)第k+1等級(jí)的全部個(gè)體計(jì)算擁擠度并將所有個(gè)體按擁擠度進(jìn)行降序排列,之后將等級(jí)大于k+1的個(gè)體全部淘汰。本例中可以看出k為2,所以對(duì)Pareto等級(jí)為3的個(gè)體計(jì)算擁擠度并按其進(jìn)行降序排序,等級(jí)為4~6的個(gè)體全部淘汰。
(4) 將等級(jí)k+1中的個(gè)體按步驟2中排好的順序逐個(gè)放入新的父代集合中,直到父代集合中的個(gè)體數(shù)量等于n,剩余的個(gè)體被淘汰。
?
?
5、算法的實(shí)現(xiàn)步驟
NSGA-II算法的流程圖如圖4.4所示,具體實(shí)現(xiàn)過(guò)程如下:
第一步:初始種群并設(shè)置進(jìn)化代數(shù)Gen=1。
第二步:判斷是否生成了第一代子種群,若已生成則令進(jìn)化代數(shù)Gen=2,否則,對(duì)初始種群進(jìn)行非支配排序和選擇、高斯交叉、變異從而生成第一代子種群并使進(jìn)化代數(shù)Gen=2。
第三步:將父代種群與子代種群合并為新種群。
第四步:判斷是否已生成新的父代種群,若沒(méi)有則計(jì)算新種群中個(gè)體的目標(biāo)函數(shù),并執(zhí)行快速非支配排序、計(jì)算擁擠度、精英策略等操作生成新的父代種群;否則,進(jìn)入第五步。
第五步:對(duì)生成的父代種群執(zhí)行選擇、交叉、變異操作生成子代種群。
第六步:判斷Gen是否等于最大的進(jìn)化代數(shù),若沒(méi)有則進(jìn)化代數(shù)Gen=Gen+1并返回第三步;否則,算法運(yùn)行結(jié)束。
?
?
總結(jié)
以上是生活随笔為你收集整理的NSGA-II算法介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: psql 命令
- 下一篇: antd 日期时间选择_Excel最全时