NSGA2遗传算法在matlab具体使用方法,有源代码该如何修改程序中的参数及设置?

NSGA2遗传算法在matlab具体使用方法,有源代码该如何修改程序中的参数及设置?,第1张

遗传算法在matlab里有两个函数,分别是ga和gaoptimset,前者用来调用遗传算法,后者用来设定遗传算法的参数,具体内容可以doc ga查看,遗传算法有哪些参数可以直接在命令窗口输入gaoptimset查看,祝好。

NSGA-II\BinaryTournamentSelection.m

.......\CalcCrowdingDistance.m

.......\Cost.m

.......\CreateEmptyIndividuals.m

.......\Crossover.m

.......\Dominates.m

.......\GetCosts.m

.......\Mutate.m

.......\MyCost1.m

.......\MyCost2.m

.......\MyCost3.m

.......\MyCost4.m

.......\MyCost5.m

.......\MyCost6.m

.......\MyCost7.m

.......\New Folder\MyCost1.m

.......\NonDominatedSorting.m

.......\nsga2.m

.......\PlotFronts.m

.......\SortPopulation.m

.......\New Folder

NSGA-II

在很多实际工程问题中,我们的优化目标不止一个,而是对多个目标函数求一个综合最优解。例如在物流配送问题中,不仅要求配送路径最短,还可能需要参与运输车辆最少等。

多目标优化问题的数学模型可以表达为:

多目标优化问题通常具有如下特点:

对于多目标优化问题,传统方法是将原问题通过加权方式变换为单目标优化问题,进而求得最优解。该方法具有两大问题:

遗传算法具有多点多方向搜索的特征,在一次搜索中可以得到多个Pareto最优解,因此更适合求解多目标优化问题。

而当前用于求解多目标优化问题的遗传算法一般有两种思路:

NSGA-II(nondominated sorting genetic algorithm II)是2002年Deb教授提出的NSGA的改进型,这个算法主要解决了第一版NSGA的三个痛点:

针对这三个问题,在NSGA-II中,Deb提出了快速非支配排序算子,引入了保存精英策略,并用“拥挤距离”(crowding distance)替代了共享(sharing)。

在介绍NSGA-II的整体流程之前,我们需要先了解快速非支配排序和拥挤距离的定义。

解的支配关系与Pareto最优解

下图表示了解之间的支配和强支配关系:

下图表示了一个最小化问题解集中的Pareto最优解和Pareto弱最优解:

快速非支配排序步骤

快速非支配排序就是将解集分解为不同次序的Pareto前沿的过程。

它可以描述为:

DEAP实现

DEAP内置了实现快速非支配排序 *** 作的函数 tools.emo.sortNondominated

tools.emo.sortNondominated(individuals, k, first_front_only=False)

参数:

返回:

拥挤距离的定义

在NSGA II中,为了衡量在同一个前沿中各个解质量的优劣,作者为每个解分配了一个拥挤距离。其背后的思想是 让求得的Pareto最优解在objective space中尽量分散 。也就有更大可能让解在Pareto最优前沿上均匀分布。

DEAP实现

DEAP中内置了计算拥挤距离的函数 tools.emo.assignCrowdingDist

tools.emo.assignCrowdingDist(individuals)

参数:

返回:

比较 *** 作

根据快速非支配排序和拥挤距离计算的结果,对族群中的个体进行排序:

对两个解 ,

在每个迭代步的最后,将父代与子代合为一个族群,依照比较 *** 作对合并后族群中的个体进行排序,然后从中选取数量等同于父代规模的优秀子代,这就是NSGA-II算法中的精英保存策略。

DEAP实现

DEAP内置了实现NSGA-II中的基于拥挤度的选择函数 tools.selNSGA2 用来实现精英保存策略:

tools.selNSGA2(individuals, k, nd='standard')

参数:

返回:

这里选用ZDT3函数作为测试函数,函数可表达为:

其Pareto最优解集为

这里为了方便可视化取 。

下图给出了该函数在Decision Space和Objective Space中的对应:

其pareto最优解在Objective Space中如下图红点所示:

将结果可视化:

得到:

可以看到NSGA-II算法得到的Pareto最优前沿质量很高:最优解均匀分布在不连续前沿的各个线段上;同时在最优前沿以外没有个体存在。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11567482.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存