阅读2021国赛C题论文遇到此算法的应用,故进行进一步了解与分析。
【写在前面】
1.Pareto前沿(Pareto Front)是多目标优化领域中的一个重要概念,旨在描述在多个目标之间的 最佳折衷解。在多目标优化中,假设我们有两个或多个目标函数,我们希望同时优化它们。一个解被称为Pareto 优化或非支配解,当任何另一个解无法在不使至少一个其他目标变得更差的情况下使所 有目标变得更好时。这种情况下,我们说该解是“Pareto有效的”或“非支配的”。
Pareto前沿的特征
-
多目标: Pareto前沿包含多个解,这些解是最优的,在所有目标之间没有单一解能够优于它们。
-
折衷关系: Pareto前沿的存在表示存在一种折衷关系。例如,在一个优化问题中,它可能无法同时使目标1和目标2都达到最佳,因此为了提升目标1的表现,目标2的表现可能会下降,反之亦然。
-
可视化: 在二维空间中,Pareto前沿通常表现为一条曲线,而在三维或更高维空间中则表现为一个面。每个点都代表一组解,其中没有一个解可以在所有目标上优于其他解。
2.pbest(个人最佳,Personal Best)和 gbest(全局最佳,Global Best)
pbest:每个粒子在整个搜索过程中所找到的最优位置,即该粒子历史上最好的解。在优化过程中不断更新,增加了寻找更优解的机会,实质上是更新自己的位置和速度。
gbest: gbest 是所有粒子在整个群体中找到的最佳位置,也就是所有粒子的 pbest 中的最优解。为所有粒子提供了一个共同的目标和方向,粒子在更新自己的位置时会朝着 gbest 进行调整。这种机制促进了群体之间的信息共享,提高了搜索效率,实质上是起到了引导作用。
一.简介
多目标粒子群优化算法(Multi-Objective Particle Swarm Optimization, MOPSO)是一种基于粒子群优化(PSO)思想的优化算法,专门用于解决多目标优化问题。它模拟了鸟群觅食的行为,旨在通过群体智能找到问题的多个最优解,而不仅仅是单一最优解。
二.基本概念
-
粒子群:在MOPSO中,每个粒子代表一个潜在的解决方案,具有位置和速度。粒子在解空间中移动,寻找最优解。
-
适应度:每个粒子根据多个目标函数进行评估。MOPSO通常需要解决两个或两个以上的目标,因此每个粒子的适应度是一个向量,而不是单一值。
-
非支配排序:为了找到Pareto前沿,MOPSO使用非支配排序方法。一个解(粒子)被称为非支配的,如果不存在其他解在所有目标上都优于该解。
-
拥挤度距离:用来衡量粒子周围解的密度,帮助保持解的多样性,以避免粒子聚集在同一位置。
三. 算法应用
粒子群算法应用于多目标主要需关注pbest和gbest的选择(本身也是该算法的研究重点)。在多目标粒子群优化算法(MOPSO)中,选择粒子的历史最优位置(pbest)时,使用随机选择其中一个作为历史最优解是一种常见的策略,主要用于引入多样性和防止算法陷入局部最优。而对于选择gbest时则是在最优集中根据集中程度选择一个领导者,这时需要用到自适应网格法。http://t.csdnimg.cn/hS3iP
四.算法原理及步骤
1.初始化粒子群
初始化所有粒子速度和位置信息,并计算所有粒子的目标函数值,并将非劣解存在外部存档作为pareto解集。
2.初始化pbest及gbest
在初始化阶段,每个粒子本身就是pbest,而群体最有选取用密集距离进行排序。在初始化选取的时候为了方便,也可直接从pareto解集随机选取。
3.更新惯性权重
惯性权重是粒子群算法的一个重要参数,和算法的局部搜索能力以及全局搜索能力相关,在每次迭代时,将惯性权重按下面的公式更新:
4.更新粒子的速度和位置
5.计算粒子的适应度并更新pareto最优解集
可采用动态密集距离对pareto解集进行更新。简单来理解,就是判断一下pareto解集中各个解的距离,把距离较远的解留下(也就是保证解的分布不要太密集),距离比较近的解淘汰,保证外部存档中pareto最优解的数量不超过上限。密集距离的计算公式如下:
6.更新pbest和gbest
在多目标粒子群优化算法(MOPSO)中,选择粒子的历史最优位置(pbest)时,使用随机选择其中一个作为历史最优解是一种常见的策略,主要用于引入多样性和防止算法陷入局部最优。而对于选择gbest时则是在最优集中根据集中程度选择一个领导者,简单一点可以通过比较粒子适应度函数的大小直接得到,此方法可与自适应网格法形成互补,二者可同时使用。在多目标优化或复杂问题中,先使用适应度函数进行粗略的解评估,再根据结果调整自适应网格。这种策略能确保在潜力较大的区域进行深入搜索,同时避免在低价值区域浪费计算资源。自适应网格法为搜索过程提供了灵活性,而适应度函数则为搜索提供了评估标准。
7.迭代终止判断
判断一下是否满足迭代次数要求,如果满足了就输出结果,不满足的话需要返回步骤3。
五.代码及运行结果