(1)速度更新公式 (2)位置更新公式
其中,vi是粒子的速度,pi是粒子的位置,w是惯性权重,c1和c2学习因 子,r2和r1是随机数,pi和pg分别是个体极值和全局极值。 算法的具体原理、更新方式及应用可以查看我之前发布的文章:
1、 粒子群算法(PSO),附matlab完整代码
NO.1|什么是多目标优化算法?
群智能算法小狂人
多目标优化问题(Multi-Objective Optimization Problem, MOP)通常由多个目标函数和一组约束条件组成,数学上可以表示为:
(2)帕累托最优解
在多目标优化中,很难找到一个能够同时最优的解。因此,引入了帕累托最优解的 概念。 一个解 x* 被称为帕累托最优解,如果不存在另一个解 x 使得 对所有 i 成立,并且至少有一个 i 使得 , 帕累托最优解的集合称为帕累托前沿(Pareto Front),它 由所有不可被其他解支配的解组成的集合。这些解称为 Pareto 最优解,代表了多个目标之间的最优平衡点。
(3)Pareto支配关系
在多目标优化中,解 x 1Pareto 支配解 x2 如果并且仅如果以下两个条件同时满 足:
1. 解 x 1在所有目标上都不比 x2 差。
2. 解 x 1 在至少一个目标上优于 x2 。
数学表达式如下:
其中 k 是目标函数的个数, f i 是第 i 个目标函数。
(4)外部归档
外部归档(external archive)是多目标粒子群优化算法(MOPSO)中用于存储非支配 解的一种策略。外部归档可以独立于粒子群,用来保存当前找到的最优解,并用于指导搜索过程。以下是外部归档的工作流程
1.初始化:开始时,外部归档为空。
2.更新归档:在每次迭代中,将当前粒子的解与归档中的解进行比较,更新归档。
3.非支配排序:对合并后的解进行非支配排序,筛选出非支配解。
4.拥挤度计算:计算每个非支配解的拥挤度,确保解的多样性。
5.选择全局最优解:从归档中选择一个解作为全局最优解,用于更新粒子的速度和位置。为了更好地理解外部归档的工作流程,通过图示来展示。
import random
import?matplotlib.pyplot?as?plt
# 定义目标函数
def objective_function1(x):
return x**2
def objective_function2(x):
????return?(x?-?2)**2
# 评估适应度函数
def evaluate_fitness(particle):
????return?[objective_function1(particle),?objective_function2(particle)]
# 判断解A是否支配解B
def dominates(a, b):
????return?all(x?<=?y?for?x,?y?in?zip(a,?b))?and?any(x?<?y?for?x,?y?in?zip(a,?b))
# 非支配排序函数
def non_dominated_sorting(solutions):
non_dominated = []
for solution in solutions:
if not any(dominates(other, solution) for other in solutions):
non_dominated.append(solution)
return non_dominated
# 更新归档函数
def update_archive(particles, archive):
combined_solutions = particles + archive
non_dominated_solutions = non_dominated_sorting(combined_solutions)
archive_size = 50 # 设定归档大小
new_archive = non_dominated_solutions[:archive_size]
return new_archive
# 初始化粒子群和归档
particles = [random.random() * 5 for _ in range(10)]
archive = []
# 评估并更新归档
for particle in particles:
fitness = evaluate_fitness(particle)
archive = update_archive([fitness], archive)
# 提取归档中的解
archive_x = [sol[0] for sol in archive]
archive_y = [sol[1] for sol in archive]
# 绘制图示
plt.figure(figsize=(10, 6))
plt.scatter(archive_x, archive_y, color='red', label='Non-dominated Solutions in Archive')
plt.xlabel('Objective 1')
plt.ylabel('Objective 2')
plt.title('External Archive in MOPSO')
plt.legend()
plt.grid(True)
plt.show()
图示中,红色点表示存档中的非支配解。每次更新归档时,新找到的非支配解会被加入到归档中,同时会去除被支配的解。通过非支配排序和拥挤度计算,确保归档中的解具有多样性。最终,归档中的解被用于指导粒子的搜索方向,帮助算法找到Pareto最优解集,更多详细内容可以看这篇文章:Performance metrics in multi-objective optimization | IEEE Conference Publication | IEEE Xplore
NO.2|多目标粒子群算法MPSO
群智能算法小狂人
多目标粒子群优化算法(Multi-Objective Particle Swarm Optimization, MOPSO)是一种用于解决多目标优化问题的算法,它是粒子群优化算法(PSO)的扩展。PSO是一种基于群体智能的优化技术,最初由Eberhart和Kennedy在1995年提出,用于解决单目标优化问题。
在多目标优化问题中,通常没有单一的最优解,而是存在一组称为Pareto前沿的非劣解。这些解在多个目标之间提供了最佳的权衡。MOPSO的目标是找到尽可能多的Pareto最优解,以便决策者可以根据自己的偏好选择最合适的解决方案。
(1)MOPSO的关键特点
粒子群:算法中的每个粒子代表一个潜在的解决方案,它们在搜索空间中移动以寻找最优解。
速度和位置更新:粒子根据其个人最佳位置(pbest)和全局最佳位置(gbest)更新其速度和位置。
领导选择:在MOPSO中,领导选择机制被修改以适应多目标优化,通常使用非支配排序和拥挤距离来选择领导者。
非支配排序:这是一种根据粒子的解在Pareto意义上是否支配其他解来进行排序的方法。
拥挤距离:这是一种度量粒子周围解的分布密度的方法,用于保持种群多样性。
Pareto前沿:算法试图维护一个包含非劣解的前沿,这些解在多个目标上提供了最佳的权衡。
多样性保持:MOPSO通过拥挤距离等机制来保持种群的多样性,避免所有粒子聚集在单一的最优解附近。
收敛性和多样性平衡:算法需要在找到全局最优解的同时,也要保持解的多样性,以覆盖Pareto前沿的不同区域。
本文暂时没有评论,来添加一个吧(●'◡'●)