文章目录
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具有以下几个优势:
-
更高的收敛性:NAGA II采用了更高效的非支配排序算法,可以更准确地识别和排序非支配解集,使得算法的收敛性更好。这样可以更快地收敛到Pareto最优解集,减少了算法的迭代次数。
-
更好的解集多样性:NAGA II引入了拥挤度距离的概念,用于评估个体在解集中的分布密度。通过考虑个体之间的拥挤度距离,NAGA II能够维持解集的多样性,避免解集聚集在某个具体区域。这有助于获取更全面的Pareto最优解集。
-
更好的性能:NAGA II采用了一种高效的快速非支配排序算法,具有较低的时间复杂度和空间复杂度。这使得NAGA II的性能相对更好,尤其适用于处理大规模的多目标优化问题。
而NSGAⅢ多是为了解决多维目标(目标函数>3);