NSGA-Ⅱ算法Matlab实现(测试函数为ZDT1)

为了能随时了解Matlab主要操作及思想。

故本文贴上NSGA-Ⅱ算法Matlab实现(测试函数为ZDT1)。

感谢郭伟学长提供的代码。

代码所有权归郭伟学长。

在看Matlab实现之前,请先看一下NSGA-II算法概述

NSGA-II多目标遗传算法概述

NSGA-Ⅱ就是在第一代非支配排序遗传算法的基础上改进而来,其改进主要是针对如上所述的三个方面:
①提出了快速非支配排序算法,一方面降低了计算的复杂度,另一方面它将父代种群跟子代种群进行合并,使得下一代的种群从双倍的空间中进行选取,从而保留了最为优秀的所有个体;
②引进精英策略,保证某些优良的种群个体在进化过程中不会被丢弃,从而提高了优化结果的精度;
③采用拥挤度和拥挤度比较算子,不但克服了NSGA中需要人为指定共享参数的缺陷,而且将其作为种群中个体间的比较标准,使得准Pareto域中的个体能均匀地扩展到整个Pareto域,保证了种群的多样性。

Matlab实现:

 

28 评论

  1. 博主您好,目标函数要写在哪里呢?就是我自己根据实际例子编写的目标函数,比如列车速度最小、耗能最小这钟?

  2. 想问一下博主,不知道你有没有NSGA-3的像这样子的代码,有的话可以给我发一份吗,感谢感谢!
    我的邮箱是2215421217@qq.com

  3. 楼主你好,感谢你的分享。我在学习过程中不太明白交叉系数beta 1.481是什么意思是,以及产生第一、第二个子代的交叉公式 newpopulation(i*2-1,:) 的依据,不知能否解答?十分感谢

    • 这个我知道,但是那个交叉概率呢?正态分布交叉和多项式变异,您那边有数学公式吗?感谢🙏

  4. 您好,请问我用matlab中的dace工具得到的优化函数是个结构体,这种情况该怎么处理,谢谢。

  5. 您好,我想把测试函数改成ZDT4,但是遇到了一些问题,请问计算目标函数值的地方我改的 g=1+10.*(poplength-1)+sum((newpopulation(:,2:poplength),2).^2-10.*cos(4.*pi.*(newpopulation(:,2:poplength),2)));哪里不太对_(:з」∠)_

  6. 您好,有问题想请教,目标函数不会处理呀,我的目标函数比较复杂,涉及到的优化参量也比较多,我能加下您的QQ吗,想要学习下。我的qq562808145

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注