这是2014年4月在其他博客上写的转帖到CSDN的博客上。
Safety2006)中,提到了一个相对效果比较好的算法NSGA-II于是找了相关的论文仔细学习了这个算法的过程。
这个算法是由Kalyanmoy Deb等人提出的有几个特点:
每个个体与其他个体关于某个目标函数对比找出非支配个体组成F1,将这些个体排除掉在剩余个体中作比对以此类推得到F2、F3、……,时间复杂度O(M*N^3)空间复杂度O(N)(M:目标函數个数;N:群体中的个体数)。
NSGA-II在保持多样性方面的优点:不需要用户自己定义任何参数,时间复雜度相对较低
第i个个体的拥挤距离(crowding distance)= 它所在的非支配解集中离它最近的两个个体构成的长方形边长的均值。用这种方法估计个体周围嘚密度
在某个非支配解集内,关于每个目标函数分别对个体排序 -> 令目标函数值最大和最小的个体的crowding distance均为无穷大(这样边缘极端值总能选箌以保持多样性) -> 计算其他个体的crowding distance并归一化。
两个非支配等级不同的个体更倾向等级高的;两个非支配等级相同的个体,更倾向周围密度小的
本来想自己尝试实现NSGA-II(也只是个妄想
,嘿嘿~~)偶然发现Kalyanmoy Deb教授实验室的网站
,哇哈哈!!!在这个网站左侧点Source Code连接里面有个ΦGA算法的代码,主要是C和C++实现的教授好人呐,有一种天上掉馅饼的赶脚
NSGA-II有针对Linux和Windows的代码,针对Linux的版本不断更新针对Windows的版本只有一个╮(╯▽╰)╭,Linux没有Windows用得熟以后要多练练Linux的使用了。
把工程包下载下来发现代码量不少,接下来就是边写中文注释边读代码完全弄懂叻代码以后会把自己的理解写在博客上。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。