多目标粒子群学习笔记(MOPSO)

本文介绍了多目标粒子群优化算法(MOPSO)的基本概念、流程及改进措施。包括单目标PSO流程、MOPSO算法步骤、改进方法及其发展现状和应用。详细解释了如何选择pbest和gbest,以及MOPSO的存档方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

注释:是学习之余整理的资料,如有不对的地方还请指教,十分感谢!

1.单目标PSO的流程

     2.多目标PSO算法步骤

2.1初始阶段

​ 2.2进化产生下一代种群

2.3更新Archive集

2.4Archive 集的截断操作 

3.对于PSO,MOPSO做出的改进

4.MOPSO的发展现状和应用


1.单目标PSO的流程

适应度个体的适应度fitness)指的是个体在种群生存的优势程度度量,用于区分个体的“好与坏”。适应度使用适应度函数fitness function)来进行计算。适应度函数也叫评价函数,主要是通过个体特征从而判断个体的适应度。

Pbest:粒子本身经历过的最优位置

Gbest:是粒子群经历过的最优位置

其中

1、初始化粒子群位置是随机产生的;

2、速度更新公式 :

PSO:是一种模拟社会行为、基于群体智能的进化技术。

MOPSO:将原来只能用在单目标上的粒子群算法应用于多目标。

问题一:如何选择MOPSOpbest?

问题二:如何选择MOPSOgbest?

 

 

问题一:

对于问题一的做法是在不能严格对比出哪个好一些时随机选择其中一个作为历史最优。

问题二:

对于问题二,MOPSO则在最优集里根据拥挤程度选择一个领导者(自适应网格法),尽量选择不那么密集位置的粒子(均匀分布)。

 多目标粒子群算法MOPSO形象理解:
粒子看作50个人,可能潜在的700个解看做700个房间,还没被人打开。 
初始50个人每人随机进一个屋子,这个屋子的各项指标(温度,湿度等)叫做目标函数,这50个人心中都有一个脑子pbest,自己知道哪个屋子最好。
第一次按算法更新50个人进入下一个房子。 下一个房子就是新解,有新的目标函数,如果这个屋子在各项指标都比上一个屋子好,那么pbest就是这个新解了,如果都没上一个好,pbest还是上一个pbest如果互相不支配,那么随机从新解和pbest里选一个作为下次寻找房子的pbest。 Gbest相当于这50个人有个对讲机,他们每次寻找房子后都互相通气儿,有个全局意义上的最好的房子,为了能把这700个房子都找完,他们要做的就是为gbest设定为不密集的区域的房子(当然这个房子是非劣的房子)。 
外部档案集相当于一个外界的笔记本,每次寻找后这50个人告诉了笔记本他们这次找到的10个非劣解房子,和笔记本里记录的30个房子比较下,40个房子里有两个房子被其他房子的目标支配,那么把他们删掉,剩下38个房子。但是笔记本只有30个空间,那么依据拥挤距离删掉8个,剩下30个。 那么这样寻找了100回合,最后在外部档案集里就是一个均匀的30个非劣解房子集合,这时候从这30个房子里去多目标决策挑选。

     2.多目标PSO算法步骤

 

2.1初始阶段

给参数赋初值,初始化粒子的位置、速度,生成初始群体P1评价粒子(适应值和pareto支配关系)并把P1中的非劣解拷贝到Archive集中得到A1

 2.2进化产生下一代种群

1)计算Archive 集中粒子的密度信息

      把目标空间用网格等分成小区域,以每个区域中包含的粒子数作为粒子的密度信息。粒子所在网格中包含的粒子数越多,其密度值越大,反之越小。以二维目标空间最小化优化问题为例,密度信息估计算法的具体实现过程如下:

 

2)为群体中的粒子Pj,t 在At 中选择其gBest 粒子gj,t;gj,t 粒子的质量决定了MOPSO 算法的收敛性能和非劣解集的多样性,其选择依据是Archive 集中粒子的密度信息。

具体地,对于Archive 中的粒子,其密度值越低,选择的概率就越大,反之越小;用Archive 集中的粒子优于群体中的粒子数来评价其搜索潜力,优于群体中的粒子数越多,其搜索潜力越强,反之越弱。

算法的具体实现如下:

 其中,|At|表示At 包含的粒子数;

Aj 用来存放At 中优于粒子Pj,t 的成员;

Aj 中密度最小的粒子存放在Gj 中;

Density(Ak)计算粒子Ak 的密度估计值;

Rand{Gj,t}表示从Gj,t 中随机选择一个成员

 3)更新群体中粒子的位置和速度群体中的粒子在gBest 和pBest 的引导下搜索最优解,算法的具体实现如下:

2.3更新Archive集

进化得到新一代群体Pt+1后,把Pt+1中的非劣解保存到Archive集中。算法的具体实现如下:

 

2.4Archive 集的截断操作 

当 Archive 集中的粒子数超过了规定大小时,需要删除多余的个体以维持稳定的Archive 集规模。

      对于粒子数多于1个的网格k,按下式计算该网格中要删除的粒子数PN,然后在网格k 中,随机删除PN 个粒子。

其中:

Grid[k]:表示网格k中的包含粒子数

3.对于PSO,MOPSO做出的改进

1、速度更新公式的优化,引入了一个收缩因子;

2、位置更新和越界处理;

3、增加了扰乱因子解决了算法快速收敛陷入局部最优的问题;

4、应用了自适应网格算法,改善了算法收敛性和多样性;

5MOPSO的存档方法存档;

在种群更新完成之后,是如何进行存档的呢?

MOPSO进行了三轮筛选。

1、首先,根据支配关系进行第一轮筛选,将劣解去除,剩下的加入到存档中。

2、其次,在存档中根据支配关系进行第二轮筛选,将劣解去除,并计算存档粒子在网格中的位置。

3、最后,若存档数量超过了存档阀值,则根据自适应网格进行筛选,直到阀值限额为止。重新进行网格划分。

4.MOPSO的发展现状和应用

### 多目标粒子群优化算法 (MOPSO) 对于三目标优化的应用 #### MOPSO简介 多目标粒子群优化(Multi-Objective Particle Swarm Optimization, MOPSO)是一种用于处理多个相互冲突的目标函数的群体智能方法。该算法通过模仿鸟类的社会行为模式,在搜索空间中寻找最优解集,即帕累托前沿(Pareto Front)[^1]。 对于三个目标的情况,MOPSO同样适用并能有效工作。为了适应更多维度的目标,通常会对标准PSO做出一些改进: - **外部存档机制**:引入一个外部档案来存储非支配解(non-dominated solutions),这些解代表当前找到的最佳折衷方案集合。 - **拥挤距离计算**:当存在大量候选解时,采用拥挤度量(crowding distance calculation)帮助维持多样性,防止过早收敛到局部区域内的少量优良个体周围。 - **领导选择策略**:从外部档案里挑选若干优秀成员作为领导者指导整个种群更新速度和位置;这一步骤可能涉及随机性和特定概率分布的选择过程[^3]。 下面给出一段简化版Python实现代码片段展示如何初始化以及迭代更新一个多目标(假设为f1,f2,f3)下的粒子群: ```python import numpy as np from scipy.spatial import distance_matrix class Particle: def __init__(self, dim): self.position = np.random.rand(dim) self.velocity = np.zeros_like(self.position) self.pbest_pos = self.position.copy() self.pbest_val = [np.inf]*3 # Assuming we have three objectives def dominates(a,b): """Check if solution 'a' is better than or equal to 'b', but not worse.""" return all(x<=y for x,y in zip(a,b)) and any(x<y for x,y in zip(a,b)) particles = [Particle(DIMENSION) for _ in range(NUM_PARTICLES)] archive = [] for iteration in range(MAX_ITERATIONS): # Evaluate each particle's fitness values across all objectives. for p in particles: fvals = evaluate_objectives(p.position) # Update personal best only when current position strictly improves upon previous one. if dominates(fvals,p.pbest_val): p.pbest_pos = p.position.copy() p.pbest_val = list(fvals) # Add new non-dominant points into archive while maintaining diversity via crowding distances. dominated = False for i,a in enumerate(list(archive)): if dominates(fvals,a['value']): del archive[i] break elif dominates(a['value'],fvals): dominated=True if not dominated: dists = [] if len(archive)>0: pos = np.array([p.position for p in archive]) dmtx = distance_matrix(pos.reshape(-1,DIMENSION),pos.reshape(-1,DIMENSION)) avg_dist = sum(sum(dmtx))/(len(dists)**2-len(dists)) for j,q in enumerate(archive): dists.append(distance.euclidean(q['position'].reshape((DIMENSION)),p.position)/avg_dist) archive.append({'position':p.position,'value':list(fvals),'crowding_distance':sum(dists)}) # Select leaders based on their dominance rank & crowding distance... ... ``` 此段伪代码展示了基本框架,实际应用还需考虑具体问题特性调整参数设置、边界条件等细节部分.
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值