多目标遗传算法NSGA-II改进策略

【调度算法NSGA II NSGA-II(Nondominated Sorting Genetic Algorithm II)是一种经典的多目标优化算法,用于解决多目标优化问题,其中需要同时优化多个冲突的目标。NSGA-II 基于遗传算法的思想,旨在找到一组解,这些解被称为 Pareto 最优解,它们在多个目标之间没有更好的解。:首先,随机生成一个包含多个个体的初始种群。每个个体都代表一个潜在的解。:NSGA-II 使用非支配排序技术,将种群中的个体划分为多个前沿。 阅读详情

        上篇写道了关于多目标遗传算法NSGA-II原理详解及算法代码实现,本文将继续在这篇文章的基础上更深一步的向前探索,探索方向为:

        基于NSGA-II算法的固有缺点,着重对其算法提出改进策略,并予以代码实现。同样,本文不灌水,希望读者是在有一定基础的前提下,再来阅读。关于基础方面的问题,可观看我上篇关于原理详解以及算法代码实现的文章,两篇文章结合一起来看。

目录

1、NSGA-II算法缺点

2、NSGA-II算法改进

2.1 种群策略改进

 2.2 选择策略改进

 3、数据案例分析

3.1 模型评价方法

3.2 改进前后对比

 4、多种模型结果对比分析

5、代码实现

6、总结


1、NSGA-II算法缺点

        NSGA-II是一个比较优秀的多目标优化算法,但它也存在一些缺点,主要包括以下几个方面:

        1. 非支配排序的计算复杂度较高:NSGA-II中的非支配排序算法需要对所有个体进行两两比较,计算其支配关系和被支配数,因此计算复杂度较高

        2. 需要选择合适的参数:NSGA-II中有一些参数需要根据具体应用场景进行调整,如交叉概率、变异概率、种群大小等。如果参数选择不当,可能会导致算法性能下降。

        3. 可能会陷入局部最优解:NSGA-II是一种基于群体的算法,其结果受到初始种群的影响。如果初始种群不够优秀,可能会导致算法陷入局部最优解

        4. 对于非凸、多峰、高维问题的处理能力有限:NSGA-II在处理非凸、多峰、高维问题时,可能会出现搜索效率低下、收敛速度慢等问题。

        5. 对于限制条件的处理能力有限:NSGA-II对于带有约束条件的优化问题的处理能力有限,可能会导致搜索空间的缩小和搜索效率的降低。

因此,在实际应用中需要根据具体问题进行选择和改进,以提高算法的性能和适用性。

2、NSGA-II算法改进

        从第一小节我们总结了该算法的一些缺点,那本小节将重点围绕其中的一些方向进行改进。

2.1 种群策略改进

        NSGA-II算法在初始化种群时使用的是随机生成。这种方法的缺点在于其随机性导致种群在空间上分布不均匀,且不确定性较大。为了消除这种不确定性并解决种群在空间分布不均匀的问题,我们引入了一种新的初始化种群方式:佳点集生成种群。

 两种初始化种群的对比示意图如下:

 2.2 选择策略改进

 3、数据案例分析

        本文所用到得函数为标准测试函数,并且通过对多个函数来测试说明

3.1 模型评价方法

3.2 改进前后对比

 我们对测试函数ZDT1进行改进前后的详细对比

对比原则:保持前后的参数不变,仅通过对比改进的效果

改进前原始NSGA-II

帕累托前沿                                                                     函数评价函数   

                                                 

单一佳点集改进测试

帕累托前沿                                                                     函数评价函数   

 

 单一基于线性排名选择改进

 帕累托前沿                                                                     函数评价函数

 混合改进

  帕累托前沿                                                                     函数评价函数

 4、多种模型结果对比分析

        从直观去评估,我们也能发现,这些改进均取得了较好的效果,我们从定量的角度来评估这些改进方式对NSGA_II的改进到底有多大。以免武断下出结论。

5、代码实现

% 参数设置 
global pop_size
global iterations;%迭代次数
target = 2;
 
% 获取种群范围
[bounds,dimension] = get_variable_bounds(x);
%种群初始化
pop = init_pop(pop_size,dimension,bounds,x);
%种群排序
pop = sort_pop(pop,target,dimension);
 
%锦标赛参数设置
parent_size = pop_size/2;
select_size = 2;
 
% 初始化函数返回数据。
% nsga2_test.m 中需要保存的数据。 如果不跑nsga2_test.m。
GD = zeros(1,iterations);
SP = zeros(1,iterations);
allpop = zeros(iterations,pop_size,dimension+4);%保存进化过程中种群的数据
 
warning off all
%迭代循环
hanshu_name = ['zdt1';'zdt2';'zdt3';'zdt4';'zdt6'];
for i = 1:iterations
    %选择父代
    %parent_pop = select_parent(pop,parent_size,select_size);
    parent_pop = select_parent(pop,0,2,parent_size);
    %进行遗传算法,杂交变异
    child_pop = myga(parent_pop,dimension,bounds,x);
    % child_pop = MyGA_mutate(parent_pop,dimension,bounds,i,iterations,x);
    %子代和原始种群进行合并
    pop = combined_pop(pop,child_pop,target,dimension);
    %对合并种群进行非支配排序
    pop = sort_pop(pop,target,dimension);
    %选择新一代种群
    pop = select_pop(pop,target,dimension,pop_size);
    
   %画出种群迭代的过程。只运行naga2_main的的时候,可以画出单个测试函数的变化
    plot(pop(:,dimension+1),pop(:,dimension+2),'*')
    grid on
    title(['NSGA2联合改进测试',hanshu_name(x,:),'第 ',num2str(i),' 代结果'])
    pause(0.1) 
    
    %保存数据,计算每一代的GD和SP,也可以通过保存allpop后单独计算
    allpop(i,:,:) = pop;
    GD(1,i) = calculate_gd(pop,x);
    SP(1,i) = calculate_sp(pop);
end

6、总结

        本文仅是穿针引线,为大家提供了一个思路,改进的方法大多是先去研究这个算法的缺点是什么?这个算法的执行步骤是什么,以及操作算子是什么?结合这几点我们就可以实现改进的方式。

        我想,改进的方法还会有很多,如变异改进等,常规的自适应改进,其实我也跑通了,即是说对传统的NSGA-II算法,基本每个算子都可以改进,只是看你改进完后效果有没有提升,

如有想要交流,沟通,可私信!

        前面基本都是使用的函数案例进行求解,接下来,我们将会使用具体的案例来进行描绘,敬请期待

下期预告:

        NSGA-II求解双目标的路径规划问题案例

        NSGA-II求解三目标的分布式电源的选址定容案例

NSGA-II 算法详解 3 NSGA-II 3.1 算法流程 确定种群大小 n,交叉概率 t,迭代次数 g 随机产生 n 个个体,它们整体视为种群 P for i = 1 to g P = ∅ for j = 1 to n 产生一个 [0,1] 的随机数 a if (a<t) 从 P 中随机选出两个个体作为父母,交叉产生一 个新的个体并放入 P’ 中 els 阅读详情

相关推荐

[多目标优化算法]1.NSGA-II——非支配排序遗传算法

本文讲述了笔者关于NSGA-II和一些多目标优化概念的理解,包括多目标优化问题,支配,Pareto最优,以及非支配排序和拥挤距离,最后简单阐述NSGA-II的整体流程,并概括了关于NSGA-II的一些优点和缺点。......

Lin__coln的博客 2万+

初探NSGA-II算法

本人机器学习小白,如有错误求各位大佬指正。

weixin_65435417的博客 1418

非支配性排序遗传算法 III---NSGA-III

NSGA-III 通过引入参考点和改进选择机制,在处理多目标优化问题时表现出色,能够有效找到分布均匀的Pareto前沿。其优越的性能使其成为现代多目标优化领域中的重要工具。

落魄君子Blog 4899

多目标优化遗传算法NSGA-

在接触编程之前,我们可能会在运筹学等相关教材中了解过多目标优化的知识, 其问题结构如下图所示:首先,要注意的是,决策变量要与每一个目标函数有关,假设x1、x2只与f1(x)有关,x3、x4只与f2(x)有关,那么这就不叫多目标优化问题,而应该叫做单目标优化问题。其次,每个目标函数之间要存在矛盾,比如目标函数f1(x)代表一台笔记本的性能和目标函数f2(x)代表一台笔记本的便携性。所谓鱼和熊掌不可兼得,在想要一台性能出色的笔记本必然会损失其便携性。

m0_70173451的博客 2万+

多目标遗传算法NSGA-II原理详解及算法实现

非支配排序遗传算法NSGA (Non-dominated Sorting Genetic Algorithms)是一种基于Pareto最优概念的遗传算法,它是众多的多目标优化遗传算法中体现Goldberg思想最直接的方法。该算法就是在基本遗传算法的基础上,对选择再生方法进行改进:将每个个体按照它们的支配与非支配关系进行分层,再做选择操作,从而使得该算法多目标优化方面得到非常满意的结果。

不曾走远的博客 10万+

多目标优化2. 非支配排序遗传算法 —(NSGANSGA-II)

多目标优化系列: MOP_1. 多目标优化的相关基本概念 MOP_2. 非支配排序遗传算法 —(NSGANSGA-II) MOP_3. 基于分解的多目标进化算法 —(MOEAD) 1. 非支配排序遗传算法(NSGA) 1995年,Srinivas和Deb提出了非支配排序遗传算法(Non-dominatedSorting Genetic Algorithms,NSGA)。这是一种基于P...

蓝色蛋黄包的博客 7万+

多目标优化-NSGAII算法

NSGA-II学习笔记 阅读文献:A Fast and Elitist Multiobjective Genetic Algorithm: NSGA-II 有兴趣的话可以阅读中文翻译版本:https://wenku.baidu.com/view/61daf00d0508763230121235.html 简介 从学长那里得知,NSGA-II和MOEAD是多目标优化算法的经典算法,不了解这两个讲点算法,相当于白学了多目标优化算法,很多算法也是基于NSGA-II和MOEAD来进行改进和拓展,从而衍生出一系列算法

qq_36317312的博客 1万+

NSGA-II算法介绍

4.1 NSGA-II算法概述 1995年,Srinivas和Deb提出了非支配遗传(Non-dominated Sorting Genetic Algorithms,NSGA算法[42]。NSGA算法是以遗传算法为基础并基于Pareto最优概念得到的。NSGA算法与基本遗传算法的主要区别是其在进行选择操作之前对个体进行了快速非支配排序,增大了优秀个体被保留的概率[43],而选择、交叉、变异等操作与基本遗传算法无异。经过诸多学者的研究测试,NSGA算法比传统的多目标遗传算法效果更好。但是在实际应用中发现

q15615725386的博客 6万+

第九章 基于遗传算法多目标最优化算法

第九章 基于遗传算法多目标最优化算法基础理论pareto最优解多目标优化NSGAII算法的基本思想(1) 基本原理(2) 算法流程(3) 算法缺陷2. 带精英策略的非支配排序的遗传算法(NSGA-II) 基础理论 pareto最优解 带精英策略的快速非支配排序遗传算法 NSGA-II 算法 NSGA-II pareto(帕累托)最优解 NSGA-II Paerot支配关系 (较优的解支配次优解) 多目标问题: 帕累托的一个解释 1:解A优于解B(解A强帕累托支配解B) 假设现在有两个目标函数,解A

goooooo0的博客 9417

多目标优化-NSGA-II

多目标优化-NSGA-II

qq_45751976的博客 3219

NSGA-II遗传算法代码实战详解

遗传算法(Genetic Algorithms, GA)是启发式搜索算法的一种,它借鉴了达尔文的进化论,通过模拟自然选择和遗传学的机制来解决优化和搜索问题。自20世纪60年代兴起以来,遗传算法因其在复杂问题上的高效搜索能力而被广泛应用。多目标优化问题是优化领域的一大挑战,因为它需要同时考虑多个目标,并且这些目标往往是相互冲突的。在这样的问题中,不存在一个单一的最优解能够满足所有的目标,因此研究者们寻求一组折中的解集,这组解集被称为帕累托最优解集。

weixin_33173126的博客 1112

[笔记]带精英策略的非支配排序的遗传算法NSGAII

文章目录遗传算法(Genetic Algorithm)非支配排序遗传算法(Non-Dominated Sorting Genetic Algorithm, NSGA)Pareto 支配关系非支配排序虚拟适应度(略)带精英策略的非支配排序遗传算法(NSGA-II)快速支配排序算子拥挤距离算子精英策略选择算子 遗传算法(Genetic Algorithm) 此处使用二进制编码法形成染色体. 种群初始化...

蟹脑板的博客 1万+

多目标优化NSGA-II(非支配排序常见于遗传算法)[1]

进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

2401_84010901的博客 861

遗传算法改进

一些改进遗传算法操作细节详解,遗传算法基本步骤、基本操作改进措施。

Zachery的博客 1万+

遗传算法改进算法

双倍体遗传算法 基本思想 双倍体遗传算法采用显性和隐性两个染色体同时进行进化,提供了一种记忆以前有用的基因块的功能。 双倍体遗传算法采用显性遗传。 双倍体遗传延长了有用基因块的寿命,提高了算法的收敛能力,在变异概率低的情况下能保持一定水平的多样性。 双倍体遗传算法的设计 (1)编码/解码:两个染色体(显性、隐性) (2)复制算子:计算显性染色体的适应度,按照显性染色体 的复制概率将个体复制到下一代群体中。 (3)交叉算子:两个个体的显性染色体交叉、隐性染色体也同时交叉。 (4)变异算子:个体的显性染色

学习日常分享 6954

NSGA-II(非支配排序遗传算法II)详解与实现

NSGA-II(非支配排序遗传算法II)详解与实现

ningaiiiii的博客 8835

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

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

m0_74905716的博客 7231

NSGA2算法详解

目录 预备知识 多目标优化问题的解 NSGA-II 简介 NSGA-II 详细介绍 参数设置问题 约束处理方法 1.预备知识 多目标优化的相关知识:https://blog.csdn.net/haha0332/article/details/88634378 支配:假设小明9岁,50斤,小红8岁,45斤,小明无论是岁数还是体重都比小红大,所以小明支配小红。 互不支配:假设小明7岁,50斤,小红8岁,45斤,小明岁数比小红小,但体重比小红大,所以小明和小红互不支配。 帕累托集:在这个集合中,任意两个解互不

czsc03的博客 3万+
上一篇: Cplex的数据类型结构及基本语法功能
下一篇: 生鲜农产品冷链物流配送路径优化模型构建及算法实现
且行且安~
博客等级 码龄12年 3万+粉丝 183原创
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

且行且安~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值