matlab实现多目标优化求解-NSGA-II 算法

1、内容简介


592-20220630\NSGAII可以交流、咨询、答疑

2、内容说明

NSGA-Ⅱ是最流行的多目标遗传算法之一,它降低了非劣排序遗传算法的复杂性,具有运行速度快,解集的收敛性好的优点,成为其他多目标优化算法性能的基准。

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

3、仿真分析

clc
clear
close all
%% 定义自变量范围
nvar = 3;
nobj = 2;
npop = 50;
maxit = 5;
pc = 0.8;
nc = round(pc * npop / 2) * 2;
mu = 0.05;
varmin = [0.5, 0.5, 30];
varmax = [15,  1.5, 60];
step = [0.29, 0.02, 0.6];
len = (varmax - varmin) ./ step;
var = [varmin;step;varmax;round(len, 0)];
%% 定义结果存放模板
empty.position = [];
empty.cost = [];
empty.rank = [];
empty.domination = [];
empty.dominated = 0;
empty.crowdingdistance = [];
pop = repmat(empty, npop, 1);
%% 初始化种群
for i = 1 : npop
    pop(i).position = create_x(var);
    pop(i).cost = costfunction(pop(i).position);
end

%% 非支配排序
[pop,F] = nondominatedsort(pop);

%% 拥挤度计算
pop = calcrowdingdistance(pop,F);

%% 主程序
for it = 1 : maxit
    
    popc = repmat(empty, nc/2,2);
    
    for j = 1 : nc / 2
       p1 = tournamentsel(pop);
       p2 = tournamentsel(pop);
       [popc(j, 1).position, popc(j, 2).position] = crossover(p1.position, p2.position);
    end
    
    popc = popc(:);
    
    for k = 1 : nc
        popc(k).position = mutate(popc(k).position, mu, var);
        popc(k).cost = costfunction(popc(k).position);
    end
   
    newpop = [pop; popc];
    
    
    % 排序
    pop = Sortpop(pop);
    
    % 淘汰
    pop = pop(1: npop);

    
    % 更新第1等级
    F1 = pop(F{1});
    
    % 显示迭代信息
    disp(['Iteration ' num2str(it) ': Number of F1 Members = ' num2str(numel(F1))]);
    
    % 绘图
    figure(1);
    plotcosts(F1);
%     pause(0.01);
end

Iteration 1: Number of F1 Members = 19
Iteration 2: Number of F1 Members = 27
Iteration 3: Number of F1 Members = 44
Iteration 4: Number of F1 Members = 50
Iteration 5: Number of F1 Members = 50

 

4、参考论文

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值