誰能通俗的講解一下NSGA-II多目標遺傳演算法?


NSGA-2是進化演算法中的一種,進化演算法是在遺傳演算法的基礎上改進而來的,所以,你得先弄懂遺傳演算法是什麼。


推薦你看作者的原文《A Fast and Elitist Multiobjective Genetic Algorithm》,其實講得算是比較清晰了。

下面是我以前寫的心得體會,發上來,希望能對你有幫助。


我按照我的理解給你說個大概不說細節了,細節2樓給出了:
演算法的主要意思是針對當前M各個體,往只有N個位置的pool中選取solution。M大於N的時候,如何從M中選擇N個個體的演算法:
1:先按照pareto對M個個體進行front的assignment,然後得到類似F1,F2.。。等這些pareto front的集合。
2:然後把F1的全部個體放入N,看看N滿了沒,如果沒有滿繼續放F2的全部個體,如果還沒滿,就繼續放F3的個體,如果此時F3的個體全部放進去的話,不夠塞進去這剩餘的空間,那麼接著好戲來了。
3:對F3中的個體,全部按照2樓的公式計算一下crowding distance,那麼就從F3中按照這個distance從大到小排序,往pool中塞,塞滿為止。

那麼整體的過程是啥呢?我再大概說下給你個參考:
1:初始化A個個體,進行simulated crossover,在進行polynomial mutation。進行simulated crossover的時候,你要選擇parent啊,咋辦?使用tournament selection,那麼按照啥原則來選呢,第一肯定是front小的啊,如果front都相等咋辦,那就使用distance大的那個。(所以其實distance的距離計算要針對全部個體,上面的3就不用在單獨計算了)
2:此時個體有點多了,就按照我上面說的1,2,3開始弄吧。
3:迭代到你想要停止的條件未知。。。

完了,你要是還不明白,就看論文去吧,


NSGA-II特別的地方就在它的選擇過程上,其他的和其他演算法也沒什麼區別。

選擇過程分兩個部分:
1. 把種群分成一組Pareto非支配集。一個非支配集里的個體不被當前或之後非支配集里的任何個體支配。方法就是每次選出所有不被任何其他個體支配的非支配個體,從種群里刪除當一個非支配集,然後剩下的再不停重複這個過程,直到取完。
2. 按crowd distance排序。就是在各個維度左右相鄰個體的距離之和。

選擇的時候,先從前往後一個個取非支配集。取到手裡的個體數量大於等於需要的數量了,最後一個非支配集里再怎麼選?選crowd distance大的。

就醬。

嗯哼~


NSGA—II的改進演算法研究
參考這篇本科畢業論文


逐個對比不也可以找到pareto嗎,為什麼需要用遺傳演算法?


不同的程序版本,優化結果差異很大啊,尤其是在ZDT4上的結果差異太大了。


理解了,自己試著編了一下,這運行速度太慢了,求大神告知一般這需要多長時間,感覺也就不到200行,為什麼這麼長時間。


推薦閱讀:

遺傳演算法相關參數設置?
工程上,實用價值最高的智能優化演算法有哪些?
遺傳演算法有哪些比較直觀的應用呢?
遺傳演算法有哪些有趣應用?

TAG:遺傳演算法 | 機器學習 |