誰能通俗的講解一下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行,為什麼這麼長時間。
推薦閱讀:
※遺傳演算法相關參數設置?
※工程上,實用價值最高的智能優化演算法有哪些?
※遺傳演算法有哪些比較直觀的應用呢?
※遺傳演算法有哪些有趣應用?