NSGA-II算法实战(附MATLAB源码)

这篇具有很好参考价值的文章主要介绍了NSGA-II算法实战(附MATLAB源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、NSGA-II算法原理

NSGA-II算法全称非支配排序遗传算法II(Non-dominated Sorting Genetic Algorithm II, NSGA-II)。该算法是由 NSGA 改进而来的,用于解决复杂的、多目标优化问题。NSGA-II在NSGA的基础上引入了非支配排序、拥挤度、拥挤度比较算子和精英策略。下面将详细介绍非支配排序、拥挤度、拥挤度比较算子和精英策略三种方法。

(1) 非支配排序

非支配排序利用Pareto最优解的概念将种群中的个体进行分级,非支配状态越高的个体层级越靠前,从而能够挑选出个体中较为优异的,使其有较大机会进入下一迭代。

假设对于每个个体都有参数N(i)和S(i),其中N(i)表示种群中支配个体 i 的解个体的数量,S(i)可以支配个体 i 的解的集合。

其算法为:

(a)首先找到种群中N(i)=0的个体,将它存入到当前集合F1;

(b) 然后对于当前集合F1中的每个个体j,考察它所支配的个体集 S(j),将集合 S(j) 中的每个个体 k 的 n(k) 减去1,即支配个体 k 的解个体数减1(因为支配个体 k 的个体 j 已经存入当前集 F1 )

(c) 如 n(k)-1=0则将个体 k 存入另一个集F2。最后,将 F1 作为第一级非支配个体集合,并赋予该集合内个体一个相同的非支配序 i(rank),然后继续对 H 作上述分级操作并赋予相应的非支配序,直到所有的个体都被分级。重复步骤(a)-(b),直到所有个体处理完毕。

伪代码如下:

nsga-ii,数学建模,编程学习,算法,matlab,开发语言,Powered by 金山文档

(2)拥挤度和拥挤度比较算子

拥挤度只适用于同一支配层级的个体之间的比较,通过对每个个体的每个目标函数进行计算拥挤度,进而得出每个个体的拥挤度,通过拥挤度比较个体的优异程度。拥挤度距离id定义如下:拥挤距离等于解在各个目标函数的方向上的前后两个解的距离和。在二维时,就等于图像矩形轴周长的一半。

nsga-ii,数学建模,编程学习,算法,matlab,开发语言,Powered by 金山文档

其计算的伪代码如下:

nsga-ii,数学建模,编程学习,算法,matlab,开发语言,Powered by 金山文档

拥挤度比较算子

从图中我们可以看出, 拥挤度距离id值较小时表示该个体周围比较拥挤。为了维持种群的多样性,我们需要一个比较拥挤度的算予以确保算法能够收敛到一个均匀分布的Pareto面上。在进行个体选择时,需要比较个体优劣,对于处于不同支配等级的个体,支配等级越低,则越优;对于处于同一支配等级的个体,则比较拥挤距离:距离越大,表明周围解的密度越小,则分布越均匀,则越优。其比较规则如下:

nsga-ii,数学建模,编程学习,算法,matlab,开发语言,Powered by 金山文档

(3) 精英策略

为了防止当前群体的最优个体在下一代发生丢失,导致遗传算法不能收敛到全局最优解,精英策略被提出。把群体在进化过程中迄今出现最好的个体不进行遗传操作而直接复制到下一代中,一般会将其替换下一代中的最劣个体。精英保留策略改进了标准遗传算法的全局收敛能力。

(4)算法流程图

nsga-ii,数学建模,编程学习,算法,matlab,开发语言,Powered by 金山文档

2、代码实战

%%主函数
%主程序
function Main()
clc;format short;addpath public;


    %算法名称
    Algorithm = {'NSGA-II'};
    %测试问题
    Problem = {'ZDT1'};
    %问题维数
    Objectives =2;


    %程序运行


    Start(Algorithm,Problem,Objectives,1);
end

%NSGA-II
function MAIN(Problem,M,Run)
clc;format compact;tic;
%-----------------------------------------------------------------------------------------
%参数设定
    [Generations,N] = P_settings('NSGA-II',Problem,M);
%-----------------------------------------------------------------------------------------
%算法开始
    %初始化种群
    [Population,Boundary,Coding] = P_objective('init',Problem,M,N);
     FunctionValue = P_objective('value',Problem,M,Population);
     FrontValue = DSort(FunctionValue);
     CrowdDistance = F_distance(FunctionValue,FrontValue);


    %开始迭代
    for Gene = 1 : Generations    
        %产生子代
        MatingPool = F_mating(Population,FrontValue,CrowdDistance);
        Offspring = P_generator(MatingPool,Boundary,Coding,N);
        Population = [Population;Offspring];
        FunctionValue = P_objective('value',Problem,M,Population);
        [FrontValue,MaxFront] = P_sort(FunctionValue,'half');
        CrowdDistance = F_distance(FunctionValue,FrontValue);


        %选出非支配的个体        
        Next = zeros(1,N);
        NoN = numel(FrontValue,FrontValue1:NoN) = find(FrontValue'descend');
        Next(NoN+1:N) = Last(Rank(1:N-NoN));


        %下一代种群
        Population = Population(Next,:);
        FrontValue = FrontValue(Next);
        CrowdDistance = CrowdDistance(Next);


        clc;fprintf('NSGA-II,第%2s轮,%5s问题,第%2s维,已完成%4s%%,耗时%5s秒\n',num2str(Run),Problem,num2str(M),num2str(roundn(Gene/Generations*100,-1)),num2str(roundn(toc,-2)));
    end
%-----------------------------------------------------------------------------------------     
%生成结果
    P_output(Population,toc,'NSGA-II',Problem,M,Run);
end

结果展示:文章来源地址https://www.toymoban.com/news/detail-640356.html

nsga-ii,数学建模,编程学习,算法,matlab,开发语言,Powered by 金山文档

到了这里,关于NSGA-II算法实战(附MATLAB源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • NSGA-II:快速精英多目标遗传算法(论文+代码解读)

    按照本文梳理的算法各个模块实现,NSGA-II完整代码见GitHub - bujibujibiuwang/NSGA-II-in-python: 《A fast and elitist multi-objective genetic algorithm: NSGA-II》   目录 1.介绍 2. NSGA-II 2.1 快速非支配排序 2.1.1 NSGA的传统非支配排序 2.1.2 NSGA-II的快速非支配排序 2.2 多样性保护(Diversity Preservation) 2.2

    2023年04月16日
    浏览(49)
  • 多目标最优化模型及算法应用(NSGA-II)

    一.大纲 多目标最优化模型概论 传统最优化解决方法 现代最优化算法 样例示范 二.多目标最优化模型概论 1.对于多余一个的目标函数在给定区域内的最优化问题称为多目标优化问题。 ​ 例如:在给定条件下,设计一款汽车,既要满足安全(重量大),又要满足经济(耗油量

    2024年02月03日
    浏览(43)
  • NSGA-II改进之非均匀变异

    ​ 在进化算法中,多项式的变异方式,变异算子的作用与进化代数是没有关系的,所以当算法演化到一定代数的时候,算法会缺乏局部搜索能力。为了将变异算子的作用与代数关联起来,使得算法可以在前期变异的范围会较大,随着演化代数的增加,变异范围越来越小,增加

    2024年02月11日
    浏览(37)
  • NSGA-II改进之种群初始化

    原NSGA-II的算法在初始化种群的时候采用的是随机生成。随机代表着不确定,且随机生成的种群在整个空间上表现为不均匀;为消除随机初始化带来的不确定,和种群在空间上分布不均匀问题,由此引出新的初始化种群方式:佳点集生成种群 注:种群的初始化结果是否对种群

    2023年04月08日
    浏览(31)
  • 五种多目标优化算法(NSWOA、MOJS、MOAHA、MOPSO、NSGA2)性能对比(提供MATLAB代码)

    1.1NSWOA 1.2MOJS 1.3MOAHA 1.4MOPSO 1.5NSGA2 为了测试5种算法的性能将其求解9个多目标测试函数(zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3),其中Viennet2 与Viennet3的目标为3,其余测试函数的目标为2,并采用6种评价指标(IGD、GD、HV、Coverage、Spread、Spacing)进行评

    2024年02月22日
    浏览(47)
  • 五种多目标优化算法(MOAHA、MOGWO、NSWOA、MOPSO、NSGA2)性能对比,包含6种评价指标,9个测试函数(提供MATLAB代码)

    1.1MOAHA 1.2MOGWO 1.3NSWOA 1.4MOPSO 1.5NSGA2 为了测试5种算法的性能将其求解9个多目标测试函数(zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3),其中Viennet2 与Viennet3的目标数为3,其余测试函数的目标数为2,并采用6种评价指标(IGD、GD、HV、Coverage、Spread、Spacing)进

    2024年02月21日
    浏览(54)
  • 五种多目标优化算法(MOJS、MOGWO、NSWOA、MOPSO、NSGA2)性能对比,包含6种评价指标,9个测试函数(提供MATLAB代码)

    1.1MOJS 1.2MOGWO 1.3NSWOA 1.4MOPSO 1.5NSGA2 为了测试5种算法的性能将其求解9个多目标测试函数(zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3),其中Viennet2 与Viennet3的目标为3,其余测试函数的目标为2,并采用6种评价指标(IGD、GD、HV、Coverage、Spread、Spacing)进行评

    2024年02月21日
    浏览(46)
  • 多目标优化 | NSGA-Ⅲ(中篇,附MATLAB代码)

    上个月我们在多目标优化 | NSGA-Ⅲ(上篇,附MATLAB代码)这篇推文中,为各位回顾了 NSGA-Ⅱ ,同时也讲解了多目标优化算法 NSGA-Ⅲ 中的 参考点生成方法 。今天我们书接上回,为各位讲解NSGA-Ⅲ中的 种群个体的自适应归一化操作 。 首先需要明确一个问题,为什么需要进行归

    2024年02月07日
    浏览(51)
  • 使用nsga-2(gamultiobj)实现matlab多目标规划

    fun代表的是目标函数 nvars代表的是待求变量的个数 A为不等式约束的系数项 b为不等式约束的常数项 Aeq为等式约束的系数项 beq为等式约束的常数项 lb和ub为变量x取值的上下限 其中非线性等式约束和不等式约束需要创建函数来进行带入,对应上述中的使用部分为nonlcon 在此需要

    2024年02月05日
    浏览(93)
  • 【无人机三维路径规划matlab代码】基于NSGA2 MPNDS MPNDS2 BPNNIA BPHEIA BPAIMA多种多目标优化算法实现考虑无人机性能的复杂城市地形路径规划

     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进, 代码获取、论文复现及科研仿真合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab完整代码及仿真定制内容点击👇 智能优化算法       神经网络预测       雷达通信    

    2024年01月22日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包