一种多尺度协同变异的粒子群优化算法的实现

本文介绍了陶新民副教授提出的多尺度协同变异自适应粒子群优化算法(MAEPSO),旨在解决传统粒子群算法早熟和收敛慢的问题。MAEPSO通过自适应高斯变异和均匀算子保持种群多样性,提高搜索效率和精度。通过在Tablet、Quadric和Rosenbrock函数上的测试,验证了新算法在避免局部最优和提高优化性能方面的优势。
摘要由CSDN通过智能技术生成

1.问题描述

粒子群优化算法是基于群体的演化算法, 其思想来源于人工生命和演化计算理论。Reynolds 对鸟群飞行的研究发现, 鸟仅仅是追踪它有限数量的邻居, 但最终的整体结果是整个鸟群好像在一个中心的控制之下, 即复杂的全局行为是由简单规则的相互作用引起的。
PSO 即源于对鸟群捕食行为的研究,一群鸟在随机搜寻食物时,如果这个区域里只有一块食物, 那么找到食物的最简单有效的策略就是搜寻目前离食物最近的鸟的周围区域。
人们从鸟群捕食模型中得到启示,并应用于解决优化问题。在PSO 中,每个优化问题的解都看作是搜索空间中的一只“鸟”,称之为粒子( Particle) 。
所有的粒子都有一个由被优化的函数决定的适应值( Fitness Value) ,每个粒子还有一个速度(Velocity) 决定它们飞翔的方向和距离。
PSO 初始化为一群随机粒子(随机解) 。然后,粒子们就追随当前的最优粒子在解空间中搜索找到最优解。
粒子群算法(由于其简单、易实现、收敛快等优点,在目标函数优化、神经网 络训练等方面都有很好的表现,其应用涉及系统控制、模式识别、通信工程等各个领域.然而,早熟和收敛慢,一直是困扰粒子群算法的两个难题.
然而粒子群优化算法仍然存在诸多问题,为优化粒子群算法,陶新民副教授提出一种多尺度协同变异的自适应粒子群算法(multi-scale cooperative mutation self-adaptive escape PSO,简称 MAEPSO).该算法利用不同大小方差的自适应高斯变异机制实现解空间的探索,这种 多个或大或小的变异机制能够促使整个种群以尽量分散的变异尺度来对解空间进行更加详尽的探索.高斯变 异的范围随着适应值的变小逐渐降低,在算法后期有利于提高优解的精度.同时,利用均匀算子维护种群多样性.通过对不同评测函数进行测试,均验证了新算法优良的优化性能。
此次作业的目标便是复现陶新民副教授提出的算法。

2.算法设计

本次算法设计主要根据陶新民副教授论文中所提到的流程,
多尺度协同变异的粒子群优化算法的流程如下:
(1) 种群的初始化:随机初始化微粒的速度、位置、全局优解,计算微粒的适应度,同时作为微粒的个体最优位置.反复进行 N 次,共生成 N 个初始微粒群;
(2) 对每个微粒,比较其适应度和它经历过的好位置适应度,如果更好,则更新该微粒好位置;
(3) 对每个微粒,比较其适应度和群体所经历的好位置的适应度,如果更好,则更新全局好位置;
(4) 根据公式
PSO 进化公式调整微粒的速度;
(5) 利用公式
在这里插入图片描述
判断微粒是否需要逃逸;
(6) 若满足逃逸条件,则利用公式
在这里插入图片描述
进行逃逸;
(7) 更新微粒的位置;
(8) 根据公式
在这里插入图片描述
在这里插入图片描述
计算多尺度变异算子;
(9) 根据公式
在这里插入图片描述
计算每一维速度的阈值;
(10) 判断终止条件,若满足则终止,否则转到步骤(2)

3.核心伪代码

首先初始化一系列参数,如
n=50个体的数量
m = 2问题的维度
swarm = []list of swarm
swarm_bset_id = 0最好个体的id
swarm_best_pos = []最好个体的位置
swarm_best_fitness = 0最好个体的适应值
c1 = 1.2学习因子1
c2 = 1.4 学习因子2
sigma = [] M个多尺度高斯变异算子方差
standard_deviation = [] M个多尺度高斯变异算子标准差
M = 10
P = int(n/M) 每个子群个体个数
K = 0 迭代次数
FitXm = [] 每个子群的适应度值
Td = [] 逃逸点阈值
Vmax = rang 全局最大速度
G = [] 逃逸次数记录
k1=5 阈值
k2=10阈值

do
{
swarm.refresh_memory()
对每个微粒,比较其适应度和它经历过的好位置适应度,如果更好,则更新该微粒好位置
swarm.refresh_pos()
对每个微粒,比较其适应度和群体所经历的好位置的适应度,如果更好,则更新全局好位置;
cal_FitXm()
cal_standard_deviation()
计算每个子群的适应值方差,利用方差计算变异算子
if(swram.speed<Td):如果个体的速度小于阈值,则根据算法进行逃逸
escape()
更新逃逸阈值
update_Td()
}until ( 计算已经到达一定精度或者迭代到指定次数)

完整代码见git:sunxueliang96/Machine-learning-stuffs/tree/master/计算智能相关算法
class Swarm:
	def __init__(self):
		self.pos = [] 
		self.speed = []
		self.fitness = 0 
		self.best_fitness = 0 
		self.best_pos 
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值