实操解析:粒子群优化算法(PSO)在数学建模中的应用 - 附带Matlab实例与万字详解
文章目录
- 一、粒子群优化算法(PSO)是什么?
- 二、粒子群优化算法有什么用?
- 三、粒子群优化算法的适用范围?
- 四、算法简介(有助于理解)
- 五、算法流程
- 第一步:初始化
- 第二步:计算粒子的适应度
- 第三步:更新个体极值与全局最优解
- 第四步:更新个体的速度和位置
- 第五步:设置终止条件
- 六、matlab代码实现
- 七、运行结果
- 1、各粒子的初始状态位置
- 2、各粒子的状态位置变化图
- 3、各粒子的最终收敛位置
- 4、收敛过程
- 七、粒子群优化算法的使用流程图
- 八、粒子群优化算法的特点:
- 九、拓展知识
- 十、总结:
- 十一、参考附录:
敲到码穷处,望尽天涯路。????
数学建模系列文章——总结篇:《数模美一国一退役选手的经验分享[2021纪念版]》.
一、粒子群优化算法(PSO)是什么?
粒子群优化算法(Particle Swarm optimization,PSO) 是一种通过 模拟鸟群觅食行为 而发展起来的一种 基于群体协作 的 随机搜索 算法。
设想这样一个场景:一群????在随机搜索????。在这个区域处处分散着虫子。所有的????都不知道????最集中的地方在哪里。
但是它们知道各自目前位置的虫子密度 和 其他鸟周围的虫子密度。那么找到目标地点的最优策略是什么呢?
最简单有效的策略就是:
1. 众鸟一起去搜寻 目前在虫子密度区域最大的鸟 的周围区域。
2. 根据自己飞行的经验,来判断虫子密度最大的区域的所在。
算法核心思想:PSO的基础是 信息的“社会共享”
二、粒子群优化算法有什么用?
和蚁群算法、遗传算法类似,包括粒子群算法,这三者都属于 无约束 的优化算法,属于全局搜索算法,是 启发式 算法。
它只能够得到 全局最优的近似解 ,可能得不到全局最优解。
这些算法可以用在全局路径搜索、网络路由规划、寻找复杂函数的最值点等应用,比如 TSP路线搜索。
三、粒子群优化算法的适用范围?
该算法可以用在,关于 大数据、复杂度高、目标函数复杂的 要求要解出最优值 的问题中。
也可将其作为辅助模型来搭配主流模型,将两个模型的结果做一个对比、分析。看看智能优化算法与主流模型的差距。
四、算法简介(有助于理解)
在PSO中,搜索空间中的每一只鸟 对应 优化问题的每个解。我们将 “鸟” 称之为 “粒子” 。
所有的粒子都有一个 “随身携带” 的属性,即需优化的目标函数所计算出的适应值(fitness value)。每个粒子还有两个属性一个是飞翔的速度,另一个是当前的位置。
然后粒子们就追随当前的 最优 粒子,动态地在解空间中搜索全局最优解。
五、算法流程
我们以两个例子(第2个例子在 十、拓展 一栏)作跳板,从 1维 到 多维 , 由易到难。
假设我现在要解决 1维 空间的问题(比如:求如下函数的最大值问题)
f
(
x
)
=
−
(
x
−
10
)
2
+
x
×
s
i
n
(
x
)
c
o
s
(
2
x
)
−
5
x
×
s
i
n
(
3
x
)
,
其
中
,
x
∈
[
0
,
20
]
f(x)= - (x - 10) ^ 2 + x\times sin(x) cos(2x) - 5 x \times sin(3x) ,其中,x∈[0,20]
f(x)=−(x−10)2+x×sin(x)cos(2x)−5x×sin(3x),其中,x∈[0,20]
第一步:初始化
在 D = 1 D=1 D=1 维的空间里,初始化有 N N N 个粒子,这些粒子分别初始化有以下属性 ( 因为这些粒子只能在 x x x轴上运动,所以我称之为一维 ):
①第 i i i 个粒子的位置: x i , i = 1 , 2 , . . . , N x_i,i=1,2,...,N xi,i=1,2,...,N
②第 i i i 个粒子的速度: v i , i = 1 , 2 , . . . , N v_i,i=1,2,...,N vi,i=1,2,...,N
③第
i
i
i 个粒子所经过的最好的位置:
p
b
e
s
t
i
,
i
=
1
,
2
,
.
.
.
,
N
pbest_i,i=1,2,...,N
pbesti,i=1,2,...,N
注:“pbest” 中的 “p” 指得是 “PSO” 中的 “P” → Particle(中文翻译:粒子)
④整个粒子群所经过的最好的位置:
g
b
e
s
t
gbest
gbest
注:“gbest” 中的 “g” 指得是 Group .
⑤给所有粒子的 位置 加上限制:
x
l
i
m
i
t
i
∈
[
X
m
i
n
,
X
m
a
x
]
,
i
=
1
,
2
,
.
.
.
,
N
xlimit_i∈[X_{min},X_{max}],i=1,2,...,N
xlimiti∈[Xmin,Xmax],i=1,2,...,N。
在上面这个例子里面就是
x
l
i
m
i
t
i
∈
[
0
,
20
]
,
i
=
1
,
2
,
.
.
.
,
N
xlimit_i∈[0,20],i=1,2,...,N
xlimiti∈[0,20],i=1,2,...,N
⑥给所有粒子的 速度 加上限制: v l i m i t i ∈ [ V m i n , V m a x ] , i = 1 , 2 , . . . , N vlimit_i∈[V_{min},V_{max}],i=1,2,...,N vlimiti∈[Vmin,Vmax],i=1,2,...,N
⑦设置迭代次数 i t e r iter iter。这个例子我假设 i t e r = 50 iter=50 iter=50 。
⑧设在每次迭代过程中,粒子们的自我学习因子 c 1 c_1 c1 。它用来调节 粒子每次移动的步长 受 “自我” 的影响因素大小。
⑨设在每次迭代过程中,粒子们的群体学习因子 c 1 c_1 c1 。它用来调节 粒子每次移动的步长 受 “群体” 的影响因素大小。
⑩设在每次迭代过程中,粒子们的惯性权重为 w w w 。它是一个非负数,用来体现 继承上一刻自己速度的 “能力”。
第二步:计算粒子的适应度
这里的适应度函数就是 f ( x ) = − ( x − 10 ) 2 + x × s i n ( x ) c o s ( 2 x ) − 5 x × s i n ( 3 x ) f(x)= - (x - 10) ^ 2 + x\times sin(x) cos(2x) - 5 x \times sin(3x) f(x)=−(x−10)2+x×sin(x)cos(2x)−5x×sin(3x)
将第 i i i 个粒子当前的位置 x i x_i xi 带入即可得到 该粒子当前的适应度 f ( x i ) f(x_i) f(xi) 。
第三步:更新个体极值与全局最优解
更新 第 i i i 个粒子的个体最佳适应度 f p b e s t ( x i ) f_{pbest}(x_i) fpbest(xi) 和 群体整体的最佳适应度 f g b e s t f_{gbest} fgbest。这两个不仅可以用来画后面的 收敛图,还可以用到 第五步中的方案② 。
再根据 f p b e s t ( x i ) f_{pbest}(x_i) fpbest(xi) 更新 粒子的最佳位置 p b e s t i , i = 1 , 2 , . . . , N pbest_i,i=1,2,...,N pbesti,i=1,2,...,N。
再从这些 最佳位置 p b e s t i pbest_i pbesti 中找到一个群体的最佳位置 g b e s t gbest gbest ,叫做 本次迭代 的全局最佳位置。
第四步:更新个体的速度和位置
更新公式如下:
v
i
=
v
i
×
w
+
c
1
×
r
a
n
d
(
)
×
(
p
b
e
s
t
i
−
x
i
)
+
c
2
×
r
a
n
d
(
)
×
(
g
b
e
s
t
−
x
i
)
v_i = v_i \times w + c_1 \times rand() \times ( pbest_i - x_i) + c_2 \times rand() \times (gbest - x_i)
vi=vi×w+c1×