一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【优化算法】非支配排序遗传算法(NSGA)【含Matlab源码 176期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、遗传算法简介

非支配排序遗传算法NSGA(Non-dominated So rng Genetic Algor thms) 是由Srinivas和Deb于1995年提出的”。这是一种基于Pareto最优概念的遗传算法, 它是众多的多目标优化遗传算法中体现God beg思想最直接的方法。该算法就是在基本遗传算法的基础上,对选择再生方法进行改进:将每个个体按照它们的支配与非支配关系进行分层,再做选择操作,从而使得该算法在多目标优化方面得到非常满意的结果。Z it z ler与Thiele等191曾对NSGA、NPG A、VEGA, 与Haj ela和Lin的加权向量算法以及纯随机搜索算法,作了系统的定量实验比较。通过采用多背包问题扩展形式的九种不同规模设置作为数值型多目标测试问题,经过全面的比较分析, 得到比较结果:NSGA的性能最优, 其次是VEGA, 而NPG A与Haj ela和Lin的加权向量算法的全部实验结果不分上下例。虽然这种比较结果不能无限制
的外推, 但是它在一定程度上说明了NSGA具有一定的优越性。因此, 对该算法进行理论研究和应用研究具有十分重要的意义。

虽然NSGA与其它多目标优化遗传算法比较具有一定的优越性:优化目标个数任选,非劣最优解分布均匀,并允许存在多个不同的等价解。但它仍存在一些问题(例:a)计算复杂度较高,当种群较大时,计算相当耗时;b)没有精英策略,精英策略可以加速算法的执行速度,而且也能在一定程度上确保已经找到的满意解不被丢失; c) 需要指定共享半径o, hare·

三、部分源代码

function NSGAII()
clc;
% format compact;
tic;
% hold on%--初始化 参数设定
generations=100;        %迭代次数
popnum=100;             %种群大小(偶数)
poplength=30;           %个体长度
minvalue=repmat(zeros(1,poplength),popnum,1);   %个体最小值---B = repmat(A, m, n) %将矩阵A复制m*n块,即B由m*n块A平铺而成
maxvalue=repmat(ones(1,poplength),popnum,1);    %个体最大值
population=rand(popnum,poplength).*(maxvalue-minvalue)+minvalue;    %产生新的初始种群%--开始迭代进化for gene=1:generations      %开始迭代%--交叉newpopulation=zeros(popnum,poplength);  %子代种群for i=1:popnum/2                        %交叉产生子代k=randperm(popnum);                 %从种群中随机选择出两个父母,不采用二进制联赛方法beta=(-1).^round(rand(1,poplength)).*abs(randn(1,poplength))*1.481;     %采用正态分布交叉产生两个子代newpopulation(i*2-1,:)=(population(k(1),:)+population(k(2),:))/2+beta.*(population(k(1),:)-population(k(2),:))./2;  %产生第一个子代newpopulation(i*2,:)=(population(k(1),:)+population(k(2),:))/2-beta.*(population(k(1),:)-population(k(2),:))./2;    %产生第二个子代end%--变异newpopulation(temp)=newpopulation(temp)+(maxvalue(temp)-minvalue(temp)).*((2.*miu(temp)+(1-2.*miu(temp)).*(1-(newpopulation(temp)-minvalue(temp))./(maxvalue(temp)-minvalue(temp))).^21).^(1/21)-1);        %变异情况一newpopulation(temp)=newpopulation(temp)+(maxvalue(temp)-minvalue(temp)).*(1-(2.*(1-miu(temp))+2.*(miu(temp)-0.5).*(1-(maxvalue(temp)-newpopulation(temp))./(maxvalue(temp)-minvalue(temp))).^21).^(1/21));  %变异情况二%--越界处理/种群合并newpopulation(newpopulation>maxvalue)=maxvalue(newpopulation>maxvalue); %子代越上界处理newpopulation(newpopulation<minvalue)=minvalue(newpopulation<minvalue); %子代越下界处理%--计算目标函数值functionvalue=zeros(size(newpopulation,1),2);   %合并后种群的各目标函数值,这里问题是ZDT1functionvalue(:,1)=newpopulation(:,1);   %计算第一维目标函数值g=1+9*sum(newpopulation(:,2:poplength),2)./(poplength-1);functionvalue(:,2)=g.*(1-(newpopulation(:,1)./g).^0.5); %计算第二维目标函数值%--非支配排序fnum=0;     %当前分配的前沿面编号cz=false(1,size(functionvalue,1));      %记录个体是否已被分配编号frontvalue=zeros(size(cz));             %每个个体的前沿面编号[functionvalue_sorted,newsite]=sortrows(functionvalue); %对种群按第一维目标值大小进行排序 则第一行个体p即为种群中支配个体p的数量为零的个体,Np=0while ~all(cz)      %开始迭代判断每个个体的前沿面,采用改进的deductive sortfnum=fnum+1;d=cz;if ~d(i)for j=i+1:size(functionvalue,1) %判断i对应的所有集合里面的支配和非支配的解,被i支配则为1,不被i支配则为0if ~d(j)k=1;for m=2:size(functionvalue,2) %判断是否支配,找到个体p不支配的个体,标记为k=0if functionvalue_sorted(i,m)>functionvalue_sorted(j,m) %判断i,j是否支配,如果成立i,j互不支配k=0; %i,j互不支配break;endendif kd(j)=true;  %那么p所支配的个体k=1并记录在d里,则后面该个体已被支配就不能在这一层里进行判断endendendfrontvalue(newsite(i))=fnum; %实际位置的非支配层赋值cz(i)=true;endendend%--计算拥挤距离/选择出下一代个体popu=find(frontvalue==fnum+1);   %popu记录第fnum+1个面上的个体编号distancevalue=zeros(size(popu));    %popu各个体的拥挤距离fmax=max(functionvalue(popu,:),[],1);   %popu每维上的最大值fmin=min(functionvalue(popu,:),[],1);   %popu每维上的最小值for i=1:size(functionvalue,2)   %分目标计算每个目标上popu各个体的拥挤距离[~,newsite]=sortrows(functionvalue(popu,i)); %popu里对第一维排序之后的位置distancevalue(newsite(1))=inf;distancevalue(newsite(end))=inf;for j=2:length(popu)-1distancevalue(newsite(j))=distancevalue(newsite(j))+(functionvalue(popu(newsite(j+1)),i)-functionvalue(popu(newsite(j-1)),i))/(fmax(i)-fmin(i)); %endendpopu=-sortrows(-[distancevalue;popu]')';    %按拥挤距离降序排序第fnum+1个面上的个体population(newnum+1:popnum,:)=newpopulation(popu(2,1:popnum-newnum),:); %将第fnum+1个面上拥挤距离较大的前popnum-newnum个个体复制入下一代end%--程序输出
fprintf('已完成,耗时%4s秒\n',num2str(toc));    %程序最终耗时
output=sortrows(functionvalue(frontvalue==1,:));    %最终结果:种群中非支配解的函数值
plot(output(:,1),output(:,2),'*b');             %作图
axis([0,1,0,1]);
xlabel('F_1');
ylabel('F_2');
title('ZDT1');

四、运行结果

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]包子阳 ,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[J].电子工业出版社
[2]高媛.非支配排序遗传算法(NSGA)的研究与应用[D].浙江大学

【优化算法】非支配排序遗传算法(NSGA)【含Matlab源码 176期】相关推荐

  1. 【风电功率预测】基于matlab帝国殖民竞争算法优化BP神经网络风电功率预测【含Matlab源码 1314期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源: [风电功率预测]基于matlab帝国殖民竞争算法优化BP神经网络风电功率预测[含Matlab源码 1314期] ⛄二.帝国殖民竞争算法简 ...

  2. 【单目标优化求解】基于matlab黑猩猩算法求解单目标问题【含Matlab源码 1413期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[单目标优化求解]基于matlab黑猩猩算法求解单目标问题[含Matlab源码 1413期] 点击上面蓝色字体,直接付费下载,即可. 获取代 ...

  3. 【APF三维路径规划】基于matlab人工势场算法无人机三维路径规划【含Matlab源码 168期】

    一.获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码. 获取代码方式2: 完整代码已上传我的资源:[三维路径规划]基于matlab人工势场算法无人机三维 ...

  4. 【RRT三维路径规划】基于matlab RRT算法无人机三维路径规划【含Matlab源码 155期】

    一.获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码. 获取代码方式2: 完整代码已上传我的资源:[三维路径规划]基于matlab RRT算法无人机三维 ...

  5. 【RRT三维路径规划】基于matlab RRT算法无人机三维路径规划【含Matlab源码 1363期】

    一.获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码. 获取代码方式2: 完整代码已上传我的资源:[三维路径规划]基于matlab RRT算法无人机三维 ...

  6. 【物流选址】基于matlab免疫算法求解物流选址问题【含Matlab源码 020期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[物流选址]基于matlab免疫算法求解物流选址问题[含Matlab源码 020期] 获取代码方式2: 付费专栏Matlab路径规划(初级版 ...

  7. 【A_star三维路径规划】基于matlab A_star算法无人机三维路径规划【含Matlab源码 446期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[三维路径规划]基于matlab A_star算法无人机三维路径规划[含Matlab源码 446期] 获取代码方式2: 付费专栏Matla ...

  8. 【ACO TSP】基于matlab蚁群算法求解31城市旅行商问题【含Matlab源码 1147期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab蚁群算法求解31城市旅行商问题[含Matlab源码 1147期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  9. 【LSSVM回归预测】基于matlab灰狼算法优化最小支持向量机GWO-LSSVM数据预测【含Matlab源码 2259期】

    ⛄一.灰狼算法优化最小支持向量机GWO-LSSVM简介 1 算法理论 采用灰狼优化算法的最小二乘支持向量机模型预测时,为避免过拟合现象和检验该模型的有效性,将实证部分主要分为:①基于灰狼优化算法的最小 ...

  10. 【锂电池容量预测】基于matlab灰狼算法优化LSTM神经网络锂电池容量预测【含Matlab源码 2004期】

    一.灰狼算法简介 1 前言: 灰狼优化算法(Grey Wolf Optimizer,GWO)由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优化算法.该算法受到了灰狼 ...

最新文章

  1. Extjs 打包 failed to find any files
  2. python axis=0 axis=1的区别
  3. easyUI与选择WebUI
  4. 程序员写代码崩溃,路过的暖心美团骑手:我帮你看看!
  5. #jvm内存及GC机制#
  6. BZOJ2333 [SCOI2011]棘手的操作 【离线 + 线段树】
  7. Navicat Premium 怎么安装比较快
  8. DOM操作 append prependTo after before
  9. [转载]Qt之获取本机网络信息
  10. 优化理论09-----线性等式约束问题的投影方法、投影最速下降算法、解决方向查找问题(DFP)、牛顿法的修正在线性等式约束、变度量法
  11. 【数字信号】基于GUI数字波束算法库【含Matlab源码 313期】
  12. 几个关于矩阵的定义 奇异值分解 谱分解
  13. 手机python软件哪个好用_如何在手机上学习python编程?有哪些软件可以使用?
  14. chatter投稿&メール通知
  15. Docker网络模式与数据管理
  16. 「ASO优化服务」APP如何做数据分析
  17. 动圈话筒,电容话筒,驻极体话筒的区别
  18. 《初.中级网管要掌握的技术》我的技术我做主
  19. 回顾HTML5省技能大赛(html5交互融媒体内容设计与制作)
  20. 成熟稳定的免费开源机加工行业ERP客户案例分享

热门文章

  1. websocket实时聊天(一)
  2. ArcGIS紧凑型切片读取与应用2-webgis动态加载紧凑型切片(附源码)
  3. 如何简单的理解TDD与DDT
  4. FluentValidation:一个非常受欢迎的,用于构建强类型验证规则的.NET 库
  5. vue引入自己写的js文件
  6. java中的UDP总结
  7. Matlab绘制图像后在指定点绘制坐标线以及标注变量
  8. 所谓的三十之后无技术
  9. 人的大脑是如何识别运动物体
  10. 传智播客 回归问题 学习笔记