NSGAⅡ详解(实例MATLAB程序说明)

1.多目标优化

1.1多目标优化

目标函数:在这里插入图片描述
首先了解一下多目标优化的条件:
1.其中的决策变量与每一个目标函数都有关联;
2.目标函数之间要存在矛盾,比如你增我减;

1.2Pareto解集和乌托邦解

在一个多目标优化问题中,改善一个子目标往往就会降低其他目标的性能,也就是说我们不可能让所有的目标达到最优。多目标优化要做的就是在他们中间进行协调和折中处理,提供一组解根据用户要求进行选择。我们提供的这组解就是Pareto解集,集合中的各个元素称为Pareto最优解或非劣最优解;
乌托邦解,常用来作为参考标准,这是一个理想中的解,通过评估每个个体与乌托邦解的距离和差异,可以确定每个个体的适应度和排名,也可以进一步改进乌托邦解本身。

2.NSGAⅡ流程及相关概念理解

2.1 NSGAⅡ流程图及必要概念理解

在这里插入图片描述
这里面有几个概念在学习遗传算法前是一定要了解的:
1.支配(Dominant):在多目标问题中,一个解A支配着另一个解B意味着,A至少在一个目标上优于(严格优于)B,而在其他所有的目标上又不比B差。比如在这个图中(求解目标函数最小值),A点支配着黑线所围区域。
在这里插入图片描述
2.非劣解(Non-dominant):如果在给定的目标函数下,没有其他解能够支配它。换句话说,一个非劣解是在所有可能的解中最好或者至少不差于其他解的解。

3.帕累托排序(Pareto Ranking):为了将解划分为不同的层次并识别出最优解,NSGA使用了帕累托排序方法,在这种排序方法中,所有解根据非支配关系被划分为不同的层次。所有不被支配的解都被分为第一层,被一定数量的解支配的解被分为第二层,以此类推。这种排序方式的结果是,每个层次中的解都优于或者至少与其他层次中的解持平

4.拥挤度距离计算(Crowding Distance Calculation):为了确保Pareto最优解集的多样性和密度,NSGA使用拥挤度距离计算来对解进一步评价。拥挤度是指一个解与其最近的邻居解之间的欧几里得距离(就是两个点之间的绝对距离)。具体来讲,对于每个层次中的解,都可以计算出其与左右两个邻居之间的拥挤度距离,以此用于决定解在Pareto最优解集合中的分布密度和多样性。比如A点与B点之间的红线距离;

2.2 NSGAⅡ程序步骤详解(依据代码详解)

这里面我们来解决一个这样的问题(同时最小化两个目标函数)[1]:
在这里插入图片描述

2.2.1初始参数设定

在这里插入图片描述
一般来说较高的交叉概率能够能够增加种群的多样性,较低的交叉概率则能够保持种群的稳定性。所以一般可以先设置一个较高的值(如0.8),进行实验观察算法的收敛情况,然后逐步调整以达到较好的效果。一般而言,较高的交叉概率能够更好地保留种群的多样性,但同时也会增加种群退化的风险;较低的交叉概率则能够更好地避免种群退化,但可能会减弱种群的多样性。

2.2.2 初代种群设置

在这里插入图片描述
这里使用结构体数组来记录个体的指标:x值、对应的函数值、被支配个体的下标、被支配的次数、所属等级、拥挤度
于是pop就是这样:每个个体3个x值(对应x1,x2,x3),两个y值(对应f1、f2)
在这里插入图片描述

2.3 交叉

在这里插入图片描述
交叉函数
在这里插入图片描述

1.popc是一个40×2 struct的数组,因为交叉概率是0.8,1000.8=402,为了方便交叉操作,所以每行有2个结构体,分别存放要交叉的一对个体。

2.ind是随机数每次迭代随机选择100个个体中的2个,同时因为randperm函数生成的随机排列结果受随机数生成器的影响,并且随机数生成器受到机器当前时间等因素的影响,因此在不同时间运行导致值不同。
交叉后再计算交叉后的x值对应的函数值。

2.4 变异

在这里插入图片描述
变异函数:
在这里插入图片描述
这里的变异就是将个体中有概率的将x(3个x值中的一个)变异为[-5,-5]中的一个随机数,[-5,5]是题目中要求的范围。

2.5 非支配排序和淘汰(核心)

非支配排序是指根据个体在多个目标函数上的性能,对所有个体进行排序的过程。在NSGA-II中,非支配排序主要包含以下几个步骤:

首先,计算每个个体的支配关系。对于两个个体A和B,如果A在所有目标函数上至少与B一样好,并且在至少一个目标函数上优于B,那么可以说A支配B。

根据支配关系,对所有个体进行排序。首先,将没有被任何个体支配的个体标记为等级1(front 1)。然后,将这些个体支配的个体标记为等级2(front 2),以此类推,直到所有个体都被标记。

对于相同等级(front)的个体,使用拥挤度距离进行排序。拥挤度距离是指个体周围的密度,用于衡量个体在解空间中的分布情况。距离越大,个体越接近边界,距离越小,个体越接近其他个体。

根据非支配排序和拥挤度距离,选择生成下一代的个体。通常使用锦标赛选择或轮盘赌选择等方法来实现。
下图中P是原始种群,Q是从P中交叉和变异得到的新的个体,传统GA是直接舍弃了原始种群,这里面我们都保留,合并,我们的初始种群是100,交叉概率0.8,变异概率0.3 ,那么我们合并后的种群数量是100+1000.8+1000.3=210;然后根据等级和拥挤度排序,图中F1代表等级1,F2次之,我们需要根据等级让合并的种群和原始种群一样大,但是我们发现在在F3中需要去除一些个体,可是等级都一样怎么办呢?我们在F3中根据拥挤度等级再进行排序,把拥挤度小的给舍弃,也即是选择那些拥挤度大的个体,那么为啥这样选择?

因为在多目标优化问题中,我们需要找到一组尽可能分散的、非支配的个体作为解集。这时候我们就要面对两个目标:多样性和收敛性。在选择操作时,基于拥挤度的策略是为了平衡这两个目标。
拥挤度反映了个体所在区域的密度,就是两个点之间的距离,距离越大说明越稀疏,近邻个体越少,这个近邻个体我们可以想象是相似度比较高的个体,我们为了保证多样性,要选择那些拥挤度大的点,要不然选一堆相似的点也没啥意思不是。

在这里插入图片描述
也就是说这部分包括以下方面:
1.首先要进行合并数据,就是把初始种群、交叉种群、变异种群合在一起;
2.非支配排序,就是将合并后的种群根据支配关系进行等级划分;
3.计算拥挤度;
4.根据支配关系和拥挤度进行排序,就是大体上是按支配关系排序,每个等级中又根据拥挤度排序
5.根据排序淘汰掉一些个体,具体淘汰多少,看具体问题分析和算法设计,案例中保留了100个(和初始种群数量一致)
6.淘汰后个体需要进行重新非支配排序,因为支配和被支配的个体有些被淘汰了,需要重新计算
7.同样的,拥挤度也需要重新排序;然后就进行新一轮迭代。
程序比较多,自行到源码中查看;

2.3 NSGAⅡ程序源码

链接:https://pan.baidu.com/s/1GEZxpCxnw962KhEi8OSbpQ?pwd=1234
提取码:1234

2.4NSGAⅡ在GA系列中的地位及优劣

NAGA II(Nondominated Sorting Genetic Algorithm II)是针对多目标优化问题的一种演化算法,它是对NSGA I(Nondominated Sorting Genetic Algorithm I)的改进和优化。相比于NSGA I,NAGA II具有以下几个优势:

  1. 更高的收敛性:NAGA II采用了更高效的非支配排序算法,可以更准确地识别和排序非支配解集,使得算法的收敛性更好。这样可以更快地收敛到Pareto最优解集,减少了算法的迭代次数。

  2. 更好的解集多样性:NAGA II引入了拥挤度距离的概念,用于评估个体在解集中的分布密度。通过考虑个体之间的拥挤度距离,NAGA II能够维持解集的多样性,避免解集聚集在某个具体区域。这有助于获取更全面的Pareto最优解集。

  3. 更好的性能:NAGA II采用了一种高效的快速非支配排序算法,具有较低的时间复杂度和空间复杂度。这使得NAGA II的性能相对更好,尤其适用于处理大规模的多目标优化问题。

而NSGAⅢ多是为了解决多维目标(目标函数>3);

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
NSGA-II(Nondominated Sorting Genetic Algorithm II)是一种常用的多目标优化算法,用于求具有多个优化目标的问题。在Matlab中,使用NSGA-II算法可以通过以下步骤实现: 1. 定义问题的目标函数:确定需要优化的多个目标函数,并将其定义为一个向量函数。例如,假设我们要优化两个目标函数f1(x)和f2(x),其中x是决策变量。 2. 定义决策变量的约束条件:确定决策变量的取值范围或其他约束条件,例如等式约束或不等式约束。 3. 初始化种群:随机生成一组可行作为初始种群,并计算每个个体的目标函数值。 4. 评估个体的适应度:使用非支配排序方法对个体进行排序,将它们分为不同的非支配级别,以确定每个个体的适应度值。 5. 选择操作:根据适应度值选择个体进行遗传操作,例如进行交叉和变异操作或其他自定义操作。这些操作可以用于生成新一代个体。 6. 更新种群:根据遗传操作生成的个体和原始种群构建新的种群,同时保持种群大小不变,并重新计算每个个体的目标函数值。 7. 终止条件:根据预设的终止条件(例如达到最大迭代次数或找到满足特定要求的优化),判断是否继续进行优化。 8. 输出最优:在终止条件满足时,输出最优或非支配集。 在Matlab中,可以使用“gamultiobj”函数来实现NSGA-II算法。该函数是Matlab中多目标优化工具箱的一部分,并提供了对NSGA-II算法的支持。可以通过设置参数和自定义函数来对NSGA-II进行进一步的调优和适应。 总之,通过在Matlab中使用NSGA-II算法,我们可以对多目标优化问题进行有效求,并得到一组非支配集。我们可以根据这些集进行决策和分析,以便找到问题的最优或最佳权衡

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值