智能算法
遗传算法
- 物竞天择,设计染色体编码,根据适应值函数进行染色体选择、交叉和变异操作,优化求解
人工神经网络算法
- 模仿生物神经元,透过神经元的信息传递、训练学习、联想,优化求解
模拟退火算法
- 模模仿金属物质退火过程。
历史
- 由Kennedy和Eberhart于1995年提出
- 群体迭代,粒子在解空间追随最优的粒子进行搜索.
- 粒子群算法: 简单易行、收敛速度快、设置参数少。
- 已成为优化方法领域的热点。
基本思想
- 粒子群算法的思想源于对鸟群捕食行为的研究。
- 模拟鸟集群飞行觅食的行为,鸟之间通过集体的协作使群体达到最优目的,是一种基于Swarm Intelligence的优化方法。
设定
- 设想这样一个场景:一群鸟在随机搜索食物
- 已知:
- 在这块区域里只有一块食物;
- 所有的鸟都不知道食物在哪里;
- 但它们能感受到当前的位置离食物还有多远.
- 那么:找到食物的最优策略是什么呢?
- 搜寻目前离食物最近的鸟的周围区域
- 根据自己飞行的经验判断食物的所在
- PSO正是从这种模型中得到了启发。
算法介绍
- 每个寻优的问题解都被想像成一只鸟,称为“粒子”。所有粒子都在一个D维空间进行搜索。
- 所有的粒子都由一个fitness function 确定适应值以判断目前的位置好坏。
- 每一个粒子必须赋予记忆功能,能记住所搜寻到的最佳位置。
- 每一个粒子还有一个速度以决定飞行的距离和方向。这个速度根据它本身的飞行经验以及同伴的飞行经验进行动态调整。
定义以及迭代
定义
- D维空间中,有N个粒子
- 粒子i位置: x i = ( x i 1 , x i 2 , … x i D ) xi=(x_{i1},x_{i2},…x_{iD}) xi=(xi1,xi2,…xiD),将xi代入适应函数 f ( x i ) f(x_i) f(xi)求适应值;粒子i速度: v i = ( v i 1 , v i 2 , … v i D ) v_i=(v_{i1},v_{i2},…v_{iD}) vi=(vi1,vi2,…viD)
- 粒子i个体经历过的最好位置: p b e s t i = ( p i 1 , p i 2 , … p i D ) pbest_i=(p_{i1},p_{i2},…p_{iD}) pbesti=(pi1,pi2,…piD)
- 种群所经历过的最好位置: g b e s t = ( g 1 , g 2 , … g D ) gbest=(g_1,g_2,…g_D) gbest=(g1,g2,…gD)
- 通常,在第d(1≤d≤D)维的位置变化范围限定在 [ X m i n , d , X m a x , d ] [X_{min,d}, X_{max,d}] [Xmin,d,Xmax,d]
- 速度变化范围限定在 [ − V m a x , d , V m a x , d ] [-V_{max,d},V_{max,d}] [−Vmax,d,Vmax,d]内(即在迭代中若 v i d , x i d v_{id}, x_{id} vid,xid超出了边界值,则该维的速度或位置被限制为该维最大速度或边界位置)
迭代
- 粒子i的第d维速度更新公式:(速度不仅和自己找到的最优位置有关,还和全局最优位置有关) v i d k = w v i d k − 1 + c 1 r 1 ( p b e s t i d − x i d k − 1 ) + c 2 r 2 ( g b e s t d − x i d k − 1 ) v_{id}^k = wv^{k-1}_{id}+c_1r_1(pbest_{id}-x^{k-1}_{id})+c_2r_2(gbest_d-x^{k-1}_{id}) vidk=wvidk−1+c1r1(pbestid−xidk−1)+c2r2(gbestd−xidk−1)
- 粒子i的第d维位置更新公式: x i d k = x i d k − 1 + v i k − 1 d x^k_{id} = x^{k-1}_{id}+v^{k-1}_id xidk=xidk−1+vik−1d
- v i d k v^k_{id} vidk–第k次迭代粒子i飞行速度矢量的第d维分量
- x i d k x^k_{id} xidk–第k次迭代粒子i位置矢量的第d维分量
- c 1 , c 2 c_1,c_2 c1,c2–加速度常数,调节学习最大步长(这个不可过大或过小)
- r 1 , r 2 r_1,r_2 r1,r2–两个随机函数,取值范围[0,1],以增加搜索随机性。
- w w w–惯性权重,非负数,调节对解空间的搜索范围。
粒子速度更新公式包含三部分:
- 第一部分为粒子先前的速度
- 第二部分为“认知”部分,表示粒子本身的思考,可理解为粒子i当前位置与自己最好位置之间的距离。
- 第三部分为“社会”部分,表示粒子间的信息共享与合作,可理解为粒子i当前位置与群体最好位置之间的距离。
算法流程
- Initial:
初始化粒子群体(群体规模为n),包括随机位置和速度。 - Evaluation:
根据fitness function ,评价每个粒子的适应度。 - Find the Pbest:
对每个粒子,将其当前适应值与其个体历史最佳位置(pbest)对应的适应值做比较,如果当前的适应值更高,则将用当前位置更新历史最佳位置pbest。 - Find the Gbest:
对每个粒子,将其当前适应值与全局最佳位置(gbest)对应的适应值做比较,如果当前的适应值更高,则将用当前粒子的位置更新全局最佳位置gbest。 - Update the Velocity:
根据公式更新每个粒子的速度与位置。 - 如未满足结束条件,则返回步骤2,通常算法达到最大迭代次数
G
m
a
x
G_{max}
Gmax或者最佳适应度值的增量小于某个给定的阈值时算法停止。
- PPT17页的演示非常的清晰。
关于构成要素的解读
- 群体大小m
- m很小时:容易陷入局部最优解
- m很大时:PSO优化能力好,但是计算量大
- 当群体增长到一定水平,再增加m将会不起作用
- 权重因子(惯性因子
ω
\omega
ω,及学习因子
c
1
,
c
2
c_1,c_2
c1,c2)
v
i
d
k
=
w
v
i
d
k
−
1
+
c
1
r
1
(
p
b
e
s
t
i
d
−
x
i
d
k
−
1
)
+
c
2
r
2
(
g
b
e
s
t
d
−
x
i
d
k
−
1
)
v_{id}^k = wv^{k-1}_{id}+c_1r_1(pbest_{id}-x^{k-1}_{id})+c_2r_2(gbest_d-x^{k-1}_{id})
vidk=wvidk−1+c1r1(pbestid−xidk−1)+c2r2(gbestd−xidk−1)
- 粒子速度的更新主要由三部分构成:
- 前次迭代中自身的速度:
ω
v
k
\omega v_k
ωvk,
- ω = 1 \omega = 1 ω=1:基本的粒子群算法
- ω = 0 \omega = 0 ω=0:失去粒子本身对速度的记忆。
- 自我认知部分:
c
1
r
1
(
p
b
e
s
t
i
d
−
x
i
d
k
−
1
)
c_1r_1(pbest_{id}-x^{k-1}_{id})
c1r1(pbestid−xidk−1)
- c 1 = 0 c_1 = 0 c1=0:无私型粒子群算法,迅速陷入群体多样性,容易陷入局部最优解无法跳出
- 社会经验部分:
c
2
r
2
(
g
b
e
s
t
d
−
d
i
d
k
−
1
)
c_2r_2(gbest_d-d^{k-1}_{id})
c2r2(gbestd−didk−1)
- c 2 = 0 c_2 = 0 c2=0:自我认知型粒子群算法,完全没有信息社会的共享,收敛速度慢(和普通的爬山法无异)
- c 1 , c 2 c_1,c_2 c1,c2都不为0,称为完全型粒子群算法,完全型粒子群算法更容易保持收敛速度和搜索效果的均衡,是较好的选择.。
- 前次迭代中自身的速度:
ω
v
k
\omega v_k
ωvk,
- 粒子速度的更新主要由三部分构成:
- 最大速度
V
m
V_m
Vm
- 作用:
- 在于维护算法的探索能力与开发能力的平衡。
- V m V_m Vm较大时,探索能力增强,但粒子容易飞过最优解。
- V m V_m Vm较小时,开发能力增强,但容易陷入局部最优解。
- V m V_m Vm一般设为每维变量变化范围的 10 % − 20 % 10\%-20\% 10%−20%
- 在于维护算法的探索能力与开发能力的平衡。
- 作用:
- 领域拓扑结构
- 粒子群算法的邻域拓扑结构包括两种:
- 一种是将群体内所有个体都作为粒子的邻域,
- 另一种是只将群体中的部分个体作为粒子的邻域。
- 邻域拓扑结构决定群体历史最优位置。
- 由此,将粒子群算法分为:全局粒子群算法和局部粒子群算法。
- 全局粒子群算法
- 粒子自己历史最优值
- 粒子群体的全局最优值
- 局部粒子群算法
- 粒子自己历史最优值
- 粒子邻域内粒子的最优值
- 邻域随迭代次数的增加线性变大,最后邻域扩展到整个粒子群。
- 经过实践证明:全局版本的粒子群算法收敛速度快,但是容易陷入局部最优。局部版本的粒子群算法收敛速度慢,但是很难陷入局部最优。现在的粒子群算法大都在收敛速度与摆脱局部最优这两个方面下功夫。其实这两个方面是矛盾的。看如何更好的折中了。
- 粒子群算法的邻域拓扑结构包括两种:
- 停止准则
- 最大迭代步数
- 可接受的满意解
- 粒子空间的初始化
- 较好地选择粒子的初始化空间,将大大缩短收敛时间.初始化空间根据具体问题的不同而不同,也就是说,这是问题依赖的
- 从上面的介绍可以看到,粒子群算法与其他现代优化方法相比的一个明显特色就是所需调整的参数很少.相对来说,惯性因子和邻域定义较为重要.这些为数不多的关键参数的设置却对算法的精度和效率有着显著影响