a*算法matlab代碼_NSGAII多目標優化算法講解(附MATLAB代碼)

57c426da061b7bacb9acfde356d0d324.png

小編今天為大家講解NSGA-II多目標優化算法,提到多目標優化,大家可能第一個就想到NSGA-II算法,今天小編就帶領大家解開NSGA-II的神秘面紗。


NSGA-II全稱是快速非支配排序遺傳算法,這個算法的精髓體現在“快速非支配排序”這7個字上,那么究竟什么是“快速非支配排序”,NSGA-II是如何實現“快速非支配排序”的呢?各位先別急,且聽小編慢慢道來,在基于粒子群算法的多目標搜索算法講解(附MATLAB代碼)中,已經講到,多目標優化問題沒有一個所謂的最優解,而是存在一個最優解集。

為了讓大家更深入了解NSGA-II算法,小編查閱網上各種大神講解的資料,終于在知乎上發現一位大神講解地特別到位,這位大神在知乎上回答的鏈接如下:

https://www.zhihu.com/question/26990498/answer/35644566

小編覺得這位大神在講解NSGA-II時,真的講得太nice了,因此小編決定做一次大自然的搬運工,把這位大神的回答搬運過來。小編建議各位邊看代碼邊體會下面的步驟,效果會更好。

NSGA-II在常規遺傳算法上的改進,關鍵步驟就3步。

1)快速非支配排序算子的設計

多目標優化問題的設計關鍵在于求取Pareto最優解集。NSGA-II算法中的快速非支配排序是根據個體的非劣解水平對種群分層,其作用是指引搜索向Pareto最優解集方向進行。它是一個循環的適應值分級過程:首先找出群體中非支配解集,記為第一非支配層F,將其所有個體賦予非支配序值irank=1(其中irank是個體i的非支配排序值),并從整個種群中除去;然后繼續找出余下群體中非支配解集,記為第二非支配排序層F2,個體被賦予非支配序值irank=2;照此進行下去,直到整個種群被分層,同一分層內的個體具有相同的非支配序值irank。

2)個體擁擠距離算子設計

為了能夠在具有相同irank的個體內進行選擇性排序,NSGA-II提出了個體擁擠距離的概念。個體i的擁擠距離是目標空間上與i相鄰的2個個體i+1和i-1之間的距離,其計算步驟為:

a)對同層的個體初始化距離。令L[i]d=0(其中L[i]d表示任意個體i的擁擠距離);

b)對同層的個體按第m個目標函數值升序排列;

c)使得排序邊緣上的個體具有選擇優勢。給定一個大數M,令L[1]d=L[end]d=M;

d)對排序中間的個體,求擁擠距離:

934c12aa381ab5c994dbeeea162f979a.png

(其中:L[i+1]m為第i+1個個體的第m目標函數值,a11eae51f3c2975db9cf8ab95e2cccc2.png85e32c841ff5c2340d9355b868d27eb9.png分別為集合中第m目標函數值的最大值和最小值)

e)對不同的目標函數,重復步驟a)~步驟d)操作,得到個體i的擁擠距離L[i]d,通過優先選擇擁擠距離較大的個體,可使計算結果在目標空間比較均勻分布,以維持種群的多樣性。

3)精英策略選擇算子

精英策略即保留父代中的優良個體直接進入子代,以防止獲得的Pareto最優解丟失。精英策略選擇算子按3個指標對由父代Ci和子代Di合成的種群Ri進行優選,以組成新的父代種群Ci+1。首先淘汰父代中方案校驗標志為不可行的方案按照非支配序值irank從低到高排序,將整層種群依次放入Ci+1,直到放入某一層Fj時出現Ci+1大小超過種群規模限制N的情況;最后,依據Fj中的個體擁擠距離由大到小的順序繼續填充Ci+1直到種群數量達到N時終止

下面這個圖片能很好的說明NSGA-II的實現過程

f137db0a14ac53a06c55592bce62b0b5.png


最后附上用NSGA-II求解ZDT1函數的MATLAB代碼,ZDT1函數如下:

2eeee19b7797fd4d5e7f34bff87bc512.png

代碼來源:http://www.omegaxyz.com/2017/05/04/nsga2matlabzdt1/

代碼鏈接(后臺回復“NSGA”提取代碼):https://pan.baidu.com/s/1EBUxjF8J262jTScKzIbD2w?

提取碼:fk4j?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529141.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529141.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529141.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux中tags文件能刪除嗎,Git 詳細介紹查看、刪除、重命名遠程分支和tag

Git 詳細介紹查看、刪除、重命名遠程分支和tag1. 查看遠程分支加上-a參數可以查看遠程分支,遠程分支會用紅色表示出來:xiaosiQunar:~/code/qtown-score$ git branch -aFRESH-1606_qscore-20160503* devmasterremotes/origin/20151225-qtown-score-FRESH-1236remotes…

octobercms 執行php代碼_PHP7語言執行原理

常用的高級語言有很多種,根據運行的方式不同,大體分為兩種:編譯型語言和解釋型語言。編譯是指在應用源程序執行之前,就將程序源代碼“翻譯”成匯編語言,然后進一步根據軟硬件環境編譯成目標文件。一般稱完成編譯工作的…

一般程序句柄多少linux,一個進程能夠打開最大文件句柄數設到多大才合適(Linux)...

命令可以看到單個進程能夠打開的最大文件句柄數量(socket連接也算在里面)。系統默認值1024。對于一般的應用來說(象Apache、系統進程)1024完全足夠使用。但是如何象squid、mysql、java等單進程處理大量請求的應用來說就有點捉襟見肘了。如果單個進程打開的文件句柄數量超過了系…

convert.todatetime指定日期格式_JDK1.8新增日期時間類型

如果我們可以跟別人說:“我們在1502643933071見面,別晚了!”那么就再簡單不過了。但是我們希望時間與晝夜和四季有關,于是事情就變復雜了。Java1.0中包含了一個Date類,但是它的大多數方法已經在Java 1.1引入Calendar類…

linux shell運行腳本命令行參數,shell腳本命令行參數簡介

之所以用到命令行參數,關鍵在于shell腳本需要與運行腳本的人員進行交互。bash shell提供了命令行參數添加在命令后面的數據值)、命令行選項修改命令行為的單字符值)和直接讀取鍵盤輸入。1、命令行參數向shell腳本傳遞數據的最基本方式是使用命令行參數。1)讀取參數讀…

eclipse linux遠程調試工具,使用本地Eclipse IDE調試器與遠程項目源(Linux)

我試圖找出以下情況的最佳方法。我有幾個Java源文件正在使用JNI與一些C源代碼進行通信,這些源代碼都駐留在Linux機器上。 Java部分在Linux機器上完美地構建和運行(通過JUnit)。 Java類依賴于幾個Linux(.so)庫。我想在本地計算機(Mac OS X)上運行Eclipse IDE調試器&a…

python下載文件的第三方庫_Python常用第三方庫(轉載)

wxPython 如果你之前是 windows 程序員,用 MFC 或者 WIN32API 開發界面程序,那進入 Python 國度最好的 GUI 選擇應該是 wxPython。它是 wxWidgets 的 Python Bind,與 wxWidgets 的開發完美同步,最為重要的一點是它的消息機制與 MF…

linux sybase 自動備份,Linux平臺下Sybase數據庫備份方法分析.doc

Linux平臺下Sybase數據庫備份方法分析Linux平臺下Sybase數據庫備份方法分析摘 要:對于從事信息系統管理的人員來說,掌握數據庫的備份方法在工作中尤為重要。當本地數據出錯或者磁盤損壞時,可以利用備份的數據恢復數據庫系統,從而保…

facebook對話鏈接_如何應用防錯原則,看看 Facebook 和 Gmail 是怎么做的

歡迎來到有言有料,讓思考更有張力本文共 3873 字,預計閱讀 10 分鐘作者|Siddharth Gulati譯者|張聿彤本文翻譯已獲得作者的正式授權(授權截圖如下)在用戶界面(UI)設計中,重要的是要注意最細微的細節,以使用…

linux 7 定時任務設置,centos7 配置crontab定時任務

1. 啟動cron服務# 查看服務狀態systemctl status crond# 啟動systemctl start crond# 停止systemctl stop crond# 重啟systemctl restart crond# 重新加載systemctl reload crond2. 開機自動啟動cron服務systemctl start crond.service3. 通過crontab命令管理定時任務crontab命…

模擬灰度傳感器循跡的程序_PLC編程,實例講解西門子PLC模擬量編程

給大伙分享的是關于西門子S7-300PLC模擬量方面的實例,包含了以下幾個方面的要點:1、對變送器進行取值,并進行控制2、對模數功能塊 FC105 進行調用3、對 AI 模塊進行設置4、對 AI 量程塊進行選擇這個實例, 調試的是一個流量調節回路…

linux mint 17 輸入法,LinuxMint17.1 Rebecca中安裝設置輸入法

LinuxMint14使用了幾年一直未更新,突然想去更新一下去發現源已經不支持了,所以就直接安裝了最新版本。安裝好以后發現還是跟以前一樣的毛病,沒有中文輸入法,直接sudo aptitude install fcitx* 發現仍然不行。運行im-config設定FCI…

python組成不重復的三位數是多少_Python輸出由1,2,3,4組成的互不相同且無重復的三位數...

題目:有四個數字:1、2、3、4,能組成多少個互不相同且無重復數字的三位數?各是多少? 程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列后再去 掉不滿足條件的排列。 程序源代碼 方法1&…

作業調度C語言編寫,【作業調度方案】 (C語言代碼)

解題思路:如圖所示,對于第一組樣例輸入,按照總工序提供的順序,對于每個工件的工序從小到大,每次尋找有空閑機器的“空檔”插入,就能讓總加工時間最短。注意事項:按照約定,最短方案有且只有一種。參考代碼:#…

python判斷能否組成三角形_python三角形判定怎么做

python三角形判定怎么做?下面給大家帶來具體的例子: 相關推薦:《Python視頻教程》 例子:a int(input("The length of the side a ")) b int(input("The length of the side b ")) c int(input("The…

文件的記錄c語言程序,c語言程序學生籍貫信息記錄簿設計.docx

c 語言程序學生籍貫信息記錄簿設計學生籍貫信息記錄簿課程設計報告書班 級: 方 0909-1 學 號:姓 名: 苑 小 葉 指導教師 : 康 亞 男 石家莊鐵道大學四方學院2010年 07月 14日1課程設計報告內容1. 選擇題目題目: 學生籍貫信息記錄簿設計 2. 內容摘要摘要:學生籍貫信息管理系統是…

如何修改linux的java路徑_修改桌面文件默認存儲位置的正確方式及注意事項

之前寫了篇關于如何修改桌面文件默認存儲位置,許多人在修改后出現各種問題,今天重新來講解一下關于修改桌面文件默認存儲位置的正確方式及注意事項。第一步、在E盤下創建一個文件夾,隨便取個名字,或者默認為【新建文件夾】&#x…

secp256r1 c語言程序,rust代碼閱讀 之 libsecp256k1 (1)

在密碼學的運算中, 數字通常是非常大的. 以 ECDSA 橢圓曲線為例, 私鑰是 256 位的.所以在 libsecp256k1 這個庫里, 定義了計算的元素 Field. 其中 n 為 320 位.pub struct Field {pub(crate) n: [u32; 10],pub(crate) magnitude: u32,pub(crate) normalized: bool,}為其實現加法…

python位運算符_詳細介紹Python語言中的按位運算符

按位運算符是把數字看作二進制來進行計算的。Python中的按位運算法則如下: 按位與 ( bitwise and of x and y ) & 舉例: 5&3 1 解釋: 101 11 相同位僅為個位1 ,故結果為 1 按位或 ( bitwise or of x and y ) | 舉例&…

c語言代碼測試電腦性能,【圖片】今天寫幾個性能測試,為什么C語言跑得這么慢呢??【c語言吧】_百度貼吧...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓易言版本……跑100000萬成績不如PHP。。。。.版本 2.程序集 程序集1.子程序 _啟動子程序, 整數型, , 本子程序在程序啟動后最先執行.局部變量 參數, 文本型, , "0".局部變量 to, 整數型.局部變量 fr, 整數型.局部變量 n,…