a*算法matlab代码_NSGAII多目标优化算法讲解(附MATLAB代码)
小編今天為大家講解NSGA-II多目標(biāo)優(yōu)化算法,提到多目標(biāo)優(yōu)化,大家可能第一個(gè)就想到NSGA-II算法,今天小編就帶領(lǐng)大家解開(kāi)NSGA-II的神秘面紗。
NSGA-II全稱是快速非支配排序遺傳算法,這個(gè)算法的精髓體現(xiàn)在“快速非支配排序”這7個(gè)字上,那么究竟什么是“快速非支配排序”,NSGA-II是如何實(shí)現(xiàn)“快速非支配排序”的呢?各位先別急,且聽(tīng)小編慢慢道來(lái),在基于粒子群算法的多目標(biāo)搜索算法講解(附MATLAB代碼)中,已經(jīng)講到,多目標(biāo)優(yōu)化問(wèn)題沒(méi)有一個(gè)所謂的最優(yōu)解,而是存在一個(gè)最優(yōu)解集。
為了讓大家更深入了解NSGA-II算法,小編查閱網(wǎng)上各種大神講解的資料,終于在知乎上發(fā)現(xiàn)一位大神講解地特別到位,這位大神在知乎上回答的鏈接如下:
https://www.zhihu.com/question/26990498/answer/35644566
小編覺(jué)得這位大神在講解NSGA-II時(shí),真的講得太nice了,因此小編決定做一次大自然的搬運(yùn)工,把這位大神的回答搬運(yùn)過(guò)來(lái)。小編建議各位邊看代碼邊體會(huì)下面的步驟,效果會(huì)更好。
NSGA-II在常規(guī)遺傳算法上的改進(jìn),關(guān)鍵步驟就3步。
1)快速非支配排序算子的設(shè)計(jì)
多目標(biāo)優(yōu)化問(wèn)題的設(shè)計(jì)關(guān)鍵在于求取Pareto最優(yōu)解集。NSGA-II算法中的快速非支配排序是根據(jù)個(gè)體的非劣解水平對(duì)種群分層,其作用是指引搜索向Pareto最優(yōu)解集方向進(jìn)行。它是一個(gè)循環(huán)的適應(yīng)值分級(jí)過(guò)程:首先找出群體中非支配解集,記為第一非支配層F,將其所有個(gè)體賦予非支配序值irank=1(其中irank是個(gè)體i的非支配排序值),并從整個(gè)種群中除去;然后繼續(xù)找出余下群體中非支配解集,記為第二非支配排序?qū)覨2,個(gè)體被賦予非支配序值irank=2;照此進(jìn)行下去,直到整個(gè)種群被分層,同一分層內(nèi)的個(gè)體具有相同的非支配序值irank。
2)個(gè)體擁擠距離算子設(shè)計(jì)
為了能夠在具有相同irank的個(gè)體內(nèi)進(jìn)行選擇性排序,NSGA-II提出了個(gè)體擁擠距離的概念。個(gè)體i的擁擠距離是目標(biāo)空間上與i相鄰的2個(gè)個(gè)體i+1和i-1之間的距離,其計(jì)算步驟為:
a)對(duì)同層的個(gè)體初始化距離。令L[i]d=0(其中L[i]d表示任意個(gè)體i的擁擠距離);
b)對(duì)同層的個(gè)體按第m個(gè)目標(biāo)函數(shù)值升序排列;
c)使得排序邊緣上的個(gè)體具有選擇優(yōu)勢(shì)。給定一個(gè)大數(shù)M,令L[1]d=L[end]d=M;
d)對(duì)排序中間的個(gè)體,求擁擠距離:
(其中:L[i+1]m為第i+1個(gè)個(gè)體的第m目標(biāo)函數(shù)值,和分別為集合中第m目標(biāo)函數(shù)值的最大值和最小值)
e)對(duì)不同的目標(biāo)函數(shù),重復(fù)步驟a)~步驟d)操作,得到個(gè)體i的擁擠距離L[i]d,通過(guò)優(yōu)先選擇擁擠距離較大的個(gè)體,可使計(jì)算結(jié)果在目標(biāo)空間比較均勻分布,以維持種群的多樣性。
3)精英策略選擇算子
精英策略即保留父代中的優(yōu)良個(gè)體直接進(jìn)入子代,以防止獲得的Pareto最優(yōu)解丟失。精英策略選擇算子按3個(gè)指標(biāo)對(duì)由父代Ci和子代Di合成的種群Ri進(jìn)行優(yōu)選,以組成新的父代種群Ci+1。首先淘汰父代中方案校驗(yàn)標(biāo)志為不可行的方案;其次按照非支配序值irank從低到高排序,將整層種群依次放入Ci+1,直到放入某一層Fj時(shí)出現(xiàn)Ci+1大小超過(guò)種群規(guī)模限制N的情況;最后,依據(jù)Fj中的個(gè)體擁擠距離由大到小的順序繼續(xù)填充Ci+1直到種群數(shù)量達(dá)到N時(shí)終止。
下面這個(gè)圖片能很好的說(shuō)明NSGA-II的實(shí)現(xiàn)過(guò)程
最后附上用NSGA-II求解ZDT1函數(shù)的MATLAB代碼,ZDT1函數(shù)如下:
代碼來(lái)源:http://www.omegaxyz.com/2017/05/04/nsga2matlabzdt1/
代碼鏈接(后臺(tái)回復(fù)“NSGA”提取代碼):https://pan.baidu.com/s/1EBUxjF8J262jTScKzIbD2w?
提取碼:fk4j?
總結(jié)
以上是生活随笔為你收集整理的a*算法matlab代码_NSGAII多目标优化算法讲解(附MATLAB代码)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++语言程序设计上机指导(二级),C+
- 下一篇: 宏BOOST_TEST_TRAIT_TR