【NSGAII】基于NSGAII的多目标优化算法的MATLAB仿真

1.软件版本

matlab2021a

2.本算法理论知识

      NSGA-II适合应用于复杂的、多目标优化问题。是K-Deb教授于2002在论文:A Fast and Elitist Multiobjective Genetic Algorithm:NSGA-II,中提出。在论文中提出的NSGA-II解决了NSGA的主要缺陷,实现快速、准确的搜索性能。NSGA的非支配排序的时间复杂度为O(MN3)O(MN3),在种群规模N较大时排序的速度会很慢。NSGA-II使用带精英策略的快速非支配排序,时间复杂度为O(M(2N)2)O(M(2N)2),排序速度有大幅的提升。而且使用了精英策略,保证了找到的最优解不会被抛弃,提高了搜索性能。另一方面NSGA使用共享函数来使解分布均匀,该函数依赖于共享参数σshareσshare的选择,而且共享函数的复杂度高达O(N2)O(N2)。NSGA-II从新定义了拥挤距离来代替共享参数。其算法流程如下:


 

3.核心代码

clc;
clear;
close all;
warning off;

global Len;
global WindDataPV;
global SolarDataPVR;
global LoadDataPV;



%数据长度
Len     = 876;
[WindDataPV,SolarDataPVR,LoadDataPV] = ReadLocalClimaticData(Len);
%初始化参数
popnum         = 120;
gen            = 100;
%变量取值范围
xmin           = 0;
xmax           = 1;
%目标函数个数
m              = 3; 
%决策变量数目
n              = 30;
%交叉变异参数
hc             = 15;
hm             = 15;
%产生初始种群
initpop        = rand(popnum,n)*(xmax-xmin)+xmin;
init_value_pop = value_objective(initpop,m,n);

%画图显示初始图
figure 
plot(init_value_pop(:,n+1),init_value_pop(:,n+m),'B+')
pause(.1)

%非支配排序和聚集距离计算
[non_dominant_sort_pop,rankinfo] = non_dominant_sort(init_value_pop,m,n);
ns_dc_pop                        = crowding_distance(non_dominant_sort_pop,m,n,rankinfo);
%选择,交叉,变异产生下一个子代
%选择进行交叉变异的个数
poolsize   = round(popnum/2);
%选择锦标赛的元度
toursize   = 2;
select_pop = selection(ns_dc_pop,poolsize,toursize,m,n);
%存储交叉变异相关参数
hc         = 20;
hm         = 20;
offspring  = genetic_operate(select_pop,m,n,hc,hm,xmax,xmin);

%循环开始
t=1;
while t<=gen
      t
      %合并种群(2N),进入循环
      combine_pop(1:popnum,1:m+n+2)              = ns_dc_pop;
      [xsize,ysize]                              = size(offspring);
      combine_pop(popnum+1:popnum+xsize,1:m+n+2) = offspring;
      %重新进行非支配排序和聚焦距离计算
      [gen_non_dominant_pop,rankinfo]            = non_dominant_sort(combine_pop,m,n);
      nsdc_pop                                   = crowding_distance(gen_non_dominant_pop,m,n,rankinfo);
      %选择下一代的产生(然后用于交叉变异)
      ns_dc_pop                                  = generate_offsprings(nsdc_pop,m,n,popnum);
      %显示下一代的情况N_decision_var
      if m==2 
         plot(ns_dc_pop(:,n+1),ns_dc_pop(:,n+2),'r*')
      elseif m==3  
         plot3(ns_dc_pop(:,n+1),ns_dc_pop(:,n+2),ns_dc_pop(:,n+3),'kd')  
         xlabel('Function 1');
         ylabel('Function 2');
         zlabel('Function 3');
         view([44,34]); 
      end
     grid on;
     text(0,0,0,['第 ',int2str(t),' 代']);
     pause(0.1)    
 
     %选择,交叉,变异产生下一个子代
     poolsize   = round(popnum/2);%选择进行交叉变异的个数
     toursize   = 2;%选择锦标赛的元度
     select_pop = selection(ns_dc_pop,poolsize,toursize,m,n);
     hc         = 20;%存储交叉变异相关参数
     hm         = 20;
     offspring  = genetic_operate(select_pop,m,n,hc,hm,xmax,xmin);
     t          = t+1;
end
%显示标题
xlabel('经济效益');
ylabel('缺失率%');
zlabel('排污水平');
view([44,34]); 

4.操作步骤与仿真结论

运行NSGA2.m,得到如下仿真结果:

 

三目标优化的优化目标为:

全寿命周期经济现值,排放水平,负荷容量缺电率;

 用NSGAii算法,则可以方便的得到其对应的三维图,获得如下的结果:

 5.参考文献

[1]刘旭红, 刘玉树, 张国英,等. 多目标优化算法NSGA-II的改进[J]. 计算机工程与应用, 2005, 41(15):3.

A06-33

6.完整源码获得方式

方式1:微信或者QQ联系博主

方式2:订阅MATLAB/FPGA教程,免费获得教程案例以及任意2份完整源码

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
MATLAB提供了多种多目标优化算法,包括以下几种: 1. 多目标遗传算法(Multi-Objective Genetic Algorithm,MOGA):MOGA是一种基于遗传算法的多目标优化算法,它通过模拟自然选择和遗传变异的过程,逐步搜索出一组非劣解。MATLAB中,可以使用gamultiobj函数进行多目标遗传算法优化。 2. 多目标粒子群优化算法(Multi-Objective Particle Swarm Optimization,MOPSO):MOPSO是一种基于粒子群算法的多目标优化算法,它通过多个粒子进行搜索,逐步优化每个目标函数,最终得到一组非劣解集合。MATLAB中,可以使用multiobj函数进行多目标粒子群优化。 3. 多目标差分进化算法(Multi-Objective Differential Evolution,MODE):MODE是一种基于差分进化算法的多目标优化算法,它通过不断变异和交叉操作,逐步搜索出一组非劣解。MATLAB中,可以使用MultiObjectiveDE进行多目标差分进化优化。 4. 多目标优化模拟退火算法(Multi-Objective Simulated Annealing,MOSA):MOSA是一种基于模拟退火算法的多目标优化算法,它通过不断调整温度和状态,逐步搜索出一组非劣解。MATLAB中,可以使用MultiObjectiveSA函数进行多目标模拟退火优化。 以上是MATLAB中常用的多目标优化算法,当然还有其他的多目标优化算法,需要根据具体问题选择。在使用这些算法时,需要根据具体问题选择适当的算法和参数,以获得最优的优化结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值