群体智能+进化计算

遗传算法

过程

  1. 种群初始化(一种有效的编码方案)
  2. 计算适应度值 F ( x ) = f ( x ) F(x)=f(x) F(x)=f(x) F ( x ) = 1 f ( x ) F(x)=\frac{1}{f(x)} F(x)=f(x)1
  3. 选择:个体 i i i被选中的概率 p i = F i ∑ j = 1 N F j p_i=\frac{F_i}{\sum_{j=1}^NF_j} pi=j=1NFjFi
  4. 交叉
  5. 变异
选择方法
轮盘赌法:个体的适应度值越好,被选中的概率越大
锦标赛法:每次从种群中取出一定数量的个体(放回抽样),选择其中最好的一个放入子代种群,重复该操作直到达到想要的子代种群规模

粒子群算法

基本描述

首先在可行解空间中初始化一群粒子,用位置、速度、适应度值三项指标表示粒子特征。粒子在解空间中运动,通过跟踪个体极值 P b e s t Pbest Pbest和群体极值 G b e s t Gbest Gbest更新个体位置。粒子每更新一次位置就计算一次适应度值,通过比较新粒子的适应度值和个体极值、群体极值的适应度值更新个体极值和群体极值的位置。

如: D D D维空间, n n n个粒子 X = ( X 1 , X 2 , … , X n ) X=(X_1,X_2,\dots,X_n) X=(X1,X2,,Xn),第 i i i个粒子的位置 X i = ( x i 1 , X i 2 , … , X i D ) T X_i=(x_{i1},X_{i2},\dots,X_{iD})^T Xi=(xi1,Xi2,,XiD)T,第 i i i个粒子的速度 V i = ( V i 1 , V i 2 , … , V i D ) T V_i=(V_{i1},V_{i2},\dots,V_{iD})^T Vi=(Vi1,Vi2,,ViD)T,个体极值 P i = ( P i 1 , P i 2 , … , P i D ) T P_i=(P_{i1},P_{i2},\dots,P_{iD})^T Pi=(Pi1,Pi2,,PiD)T,群体极值 P g = ( P g 1 , P g 2 , … , P g D ) T P_g=(P_{g1},P_{g2},\dots,P_{gD})^T Pg=(Pg1,Pg2,,PgD)T

更新速度和位置

V i d k + 1 = ω V i d k + c 1 r 1 ( P i d k − X i d k ) + c 2 r 2 ( P g d k − X i d k ) V_{id}^{k+1}=\omega V_{id}^k+c_1r_1(P_{id}^k-X_{id}^k)+c_2r_2(P_{gd}^k-X_{id}^k) Vidk+1=ωVidk+c1r1(PidkXidk)+c2r2(PgdkXidk)

X i d k + 1 = X i d k + V i d k + 1 X_{id}^{k+1}=X_{id}^k+V_{id}^{k+1} Xidk+1=Xidk+Vidk+1

ω \omega ω为惯性权重; c 1 c_1 c1 c 2 c_2 c2是非负常数,称为加速度因子; r 1 r_1 r1 r 2 r_2 r2是分布于 [ 0 , 1 ] [0,1] [0,1]区间的随机数。为防止粒子盲目搜索,一般将位置和速度限制在区间 [ − X m i n , X m a x ] [-X_{min},X_{max}] [Xmin,Xmax] [ − V m i n , V m a x ] [-V_{min},V_{max}] [Vmin,Vmax]

流程

  1. 初始化粒子群,随机产生所有粒子的位置和速度,并确定个体极值和群体极值
  2. 对每个粒子,若其适应度值比个体极值好,则将其作为当前的个体极值
  3. 对每个粒子,若其适应度值比群体极值好,则将其作为当前的群体极值
  4. 更新粒子的速度和位置
  5. 判断是否满足终止条件,若不满足,返回步骤2

扩展

较大的惯性权重有利于全局搜索,较小的惯性权重有利于局部搜索

线性递减惯性权重 w ( k ) = w s t a r t ( w s t a r t − w e n d ) ( T m a x − k ) / T m a x w(k)=w_{start}(w_{start}-w_{end})(T_{max}-k)/T_{max} w(k)=wstart(wstartwend)(Tmaxk)/Tmax

蚁群算法

基本思想:

蚂蚁在寻找食物时,会在其经过的路径上释放一种信息素,并能够感知其他蚂蚁释放的信息素。信息素浓度的大小表征路径的远近,信息素浓度越高,表示对应的路径距离越短。蚂蚁会以较大的概率优先选择信息素浓度较高的路径,并释放一定量的信息素,以增强该条路径上的信息素浓度,这样会形成一个正反馈。最终,蚂蚁能够找到一条从巢穴到食物源的最佳路径,即最短距离。同时路径上的信息素浓度会随着时间的推进而逐渐衰减。

蚁群算法解决TSP问题

整个蚂蚁群体中蚂蚁的数量为 m m m,城市的数量为 n n n,城市 i i i与城市 j j j之间的距离为 d i j ( i , j = 1 , 2 , … , n ) d_{ij}(i,j=1,2,\dots,n) dij(i,j=1,2,,n) t t t时刻城市 i i i与城市 j j j连接路径上的信息素浓度为 τ i j ( t ) \tau_{ij}(t) τij(t)。初始时刻,各个城市间连接路径上的信息素浓度相同,设为 τ i j ( 0 ) = τ 0 \tau_{ij}(0)=\tau_0 τij(0)=τ0

蚂蚁 k ( k = 1 , 2 , … , m ) k(k=1,2,\dots,m) k(k=1,2,,m)根据各个城市间连接路径上的信息素浓度决定其下一个访问城市,设 P i j k ( t ) P_{ij}^k(t) Pijk(t)表示 t t t时刻蚂蚁 k k k从城市 i i i转移到城市 j j j的概率,其计算公式为:

P i j k = { [ τ i j ( t ) ] α ⋅ [ η i j ( t ) ] β ∑ s ∈ a l l o w k [ τ i s ( t ) ] α ⋅ [ η i s ( t ) ] β , s ∈ a l l o w k 0 , s ∉ a l l o w k P_{ij}^k= \begin{cases} \frac{[\tau_{ij}(t)]^\alpha\cdot [\eta_{ij}(t)]^\beta}{\sum_{s\in allow_k}[\tau_{is}(t)]^\alpha\cdot [\eta_{is}(t)]^\beta},\quad & s\in allow_k\\ 0,\quad & s\notin allow_k \end{cases} Pijk=sallowk[τis(t)]α[ηis(t)]β[τij(t)]α[ηij(t)]β,0,sallowks/allowk

其中, η i j ( t ) \eta_{ij}(t) ηij(t)为启发函数, η i j ( t ) = 1 / d i j \eta_{ij}(t)=1/d_{ij} ηij(t)=1/dij,表示蚂蚁从城市 i i i转移到城市 j j j的期望程度; a l l o w k ( k = 1 , 2 , … , m ) allow_k(k=1,2,\dots,m) allowk(k=1,2,,m)为蚂蚁 k k k待访问城市的集合; α \alpha α为信息素重要程度因子,其值越大,表示信息素的浓度在转移中起的作用越大; β \beta β为启发函数重要程度因子,其值越大,表示启发函数在转移中的作用越大,即蚂蚁会以较大的概率转移到距离短的城市。

设参数 ρ ( 0 < ρ < 1 ) \rho(0<\rho<1) ρ(0<ρ<1)表示信息素的挥发程度。当所有蚂蚁完成一次循环后,各个城市间连接路径上的信息素浓度需进行更新

{ τ i j ( t + 1 ) = ( 1 − ρ ) τ i j ( t ) + Δ τ i j Δ τ i j = ∑ k = 1 n Δ τ i j k \begin{cases} \tau_{ij}(t+1)=(1-\rho)\tau_{ij}(t)+\Delta\tau_{ij}\\ \Delta\tau_{ij}=\sum_{k=1}^n\Delta\tau_{ij}^k \end{cases} {τij(t+1)=(1ρ)τij(t)+ΔτijΔτij=k=1nΔτijk

Δ τ i j k \Delta\tau_{ij}^k Δτijk表示第 k k k只蚂蚁在城市 i i i与城市 j j j连接路径上释放的信息素浓度

Δ τ i j k = { Q / L k , 第 k 只 蚂 蚁 从 城 市 i 访 问 城 市 j 0 , 其 他 \Delta\tau_{ij}^k=\begin{cases} Q/L_k,& \quad 第k只蚂蚁从城市i访问城市j\\ 0,& \quad 其他 \end{cases} Δτijk={Q/Lk,0,ki访j

Δ τ i j k = { Q / d i j , 第 k 只 蚂 蚁 从 城 市 i 访 问 城 市 j 0 , 其 他 \Delta\tau_{ij}^k=\begin{cases} Q/d_{ij},& \quad 第k只蚂蚁从城市i访问城市j\\ 0,& \quad 其他 \end{cases} Δτijk={Q/dij,0,ki访j

Δ τ i j k = { Q , 第 k 只 蚂 蚁 从 城 市 i 访 问 城 市 j 0 , 其 他 \Delta\tau_{ij}^k=\begin{cases} Q,& \quad 第k只蚂蚁从城市i访问城市j\\ 0,& \quad 其他 \end{cases} Δτijk={Q,0,ki访j

人工鱼群算法

主要行为

  1. 觅食行为
  2. 聚群行为
  3. 追尾行为
  4. 随机行为

过程

  1. 随机初始化

  2. 觅食行为:设人工鱼当前状态为 X i X_i Xi,在其感知范围内随机选择一个状态 X j X_j Xj,如果 Y j < Y i Y_jYj<Yi,则向该方向前进一步;反之,再重新随机选择 X j X_j Xj。反复尝试 t r y _ n u m b e r try\_number try_number次后,如果仍不满足前进条件,则随机移动一步。

    前进一步: X i ∣ n e x t = X i + r a n d ( ) ⋅ S t e p ⋅ X j − X i ∣ ∣ X j − X i ∣ ∣ X_{i|next}=X_i+rand()\cdot Step\cdot\frac{X_j-X_i}{||X_j-X_i||} Xinext=Xi+rand()StepXjXiXjXi

    随机移动一步 X i ∣ n e x t = X i + r a n d ( ) ⋅ S t e p X_{i|next}=X_i+rand()\cdot Step Xinext=Xi+rand()Step

  3. 聚群行为:设人工鱼当前状态为 X i X_i Xi,探索当前领域内的伙伴数目 n f n_f nf和中心位置 X c X_c Xc,如果 Y c n f > δ Y i \frac{Y_c}{n_f}>\delta Y_i nfYc>δYi( δ \delta δ为拥挤度),表明伙伴中心有较多的食物并且不太拥挤,则朝伙伴中心位置方向前进一步;否则执行觅食行为。

  4. 追尾行为:设人工鱼当前状态为 X i X_i Xi,探索当前领域内的伙伴数目 n f n_f nf和伙伴中 Y j Y_j Yj为最大的伙伴 X j X_j Xj,如果 Y j n f > δ Y i \frac{Y_j}{n_f}>\delta Y_{i} nfYj>δYi,表明伙伴 X j X_j Xj的状态具有较高的食物浓度并且其周围不太拥挤,则朝伙伴 X j X_j Xj的方向前进一步;否则执行觅食行为。

  5. 随机行为: X i ∣ n e x t = X i + r a n d ( ) ⋅ V i s u a l X_{i|next}=X_i+rand()\cdot Visual Xinext=Xi+rand()Visual

人工蜂群算法

雇佣蜂 跟随蜂 侦查蜂

基本描述

  1. 开始阶段,蜜蜂随机探索寻找食物源
  2. 当找到一个食物源,蜜蜂变成雇佣蜂开始采蜜,之后回到蜂巢。然后它可以直接回到食物源或者通过跳舞来分享它得到的信息。如果食物源耗尽,它就变成一直侦查蜂随机寻找新的食物源
  3. 跟随蜂在蜂巢等待雇佣蜂的信息,雇佣蜂跳舞的频率与食物源的质量成正比

过程

  1. 随机生成食物源
  2. 雇佣蜂在食物源周围进行搜索, x n e w j = x i j + r a n d ( − 1 , 1 ) ( x i j − x k j ) x_{newj}=x_{ij}+rand(-1,1)(x_{ij}-x_{kj}) xnewj=xij+rand(1,1)(xijxkj)得到新食物源,如果新食物源比旧食物源好,则更新并且尝试次数置零;否则保持记录旧食物源并且尝试次数加1。
  3. 跟随蜂以较大的概率选择较好的食物源并在其周围进行探索(轮盘赌法),如果新食物源比旧食物源好,则更新位置并且尝试次数置零;否则保持记录旧食物源并且尝试次数加1。
  4. 检查尝试次数,如果尝试次数大于某一定值,则当前雇佣蜂变成侦查蜂,放弃当前食物源并随机寻找一个新的食物源;如果有多个尝试次数都大于该定值,则选择其中最大的一个。

头脑风暴算法

过程:

  1. 随机生成 N N N个个体
  2. k − m e a n s k-means kmeans算法将 N N N个个体分成 m m m个聚类
  3. 将每个聚类中的个体进行排序并选择最好的个体作为聚类中心
  4. 如果 r a n d ( 0 , 1 ) < p 1 rand(0,1)rand(0,1)<p1,则用一个随机生成的个体代替一个随机选中的聚类中心
  5. 生成新个体的四种方式
- 选择一个聚类并在聚类中心添加随机值生成新个体
- 选择一个聚类并在该聚类中随机选择一个个体添加随机值生成新个体
- 选择两个聚类并将两个聚类中心进行组合添加随机值生成新个体
- 选择两个聚类并在两个聚类中各随机选择一个个体进行组合后添加随机值生成新个体
  1. 选择
6a. 新个体与具有相同索引的旧个体进行比较,保留适应度好的。
6b. 新个体与旧个体进行交叉生成两个子代,比较四个个体,保留最好的。
  1. 如果生成 N N N个新个体,到第8步,否则到第5步
  2. 如果到达最大迭代次数,终止算法;否则到第2步
相关概率:
p2:是用一个个体生成新个体还是用两个个体生成新个体
p3:选中一个聚类的概率(选两个聚类时采用随机选择的方法)
p4:是在一个聚类的中心添加随机值还是在其他个体上添加随机值
p5:两个聚类中心进行组合还是两个其他个体进行组合

x n e w i = x o l d i + ξ ( t ) ∗ r a n d o m ( t ) x_{new}^i=x_{old}^i+\xi(t)*random(t) xnewi=xoldi+ξ(t)random(t)

x o l d i = w 1 ∗ x o l d 1 i + w 2 ∗ x o l d 2 i x_{old}^i=w_1*x_{old1}^i+w_2*x_{old2}^i xoldi=w1xold1i+w2xold2i

ξ ( t ) = l o g s i g ( T 2 − t k ) ∗ r a n d o m ( t ) \xi(t)=logsig(\frac{\frac{T}{2}-t}{k})*random(t) ξ(t)=logsig(k2Tt)random(t)

烟花算法

过程:

  1. 随机初始化 N N N个位置

  2. 计算爆炸火花数目和爆炸幅度。烟花的适应度值越好,生成爆炸火花的数目越多,幅度越小,用于局部寻优;反之亦然。

    s i = m ⋅ y m a x − f ( x i ) + ξ ∑ i = 1 n ( y m a x − f ( x i ) ) + ξ s_i=m\cdot\frac{y_{max}-f(x_i)+\xi}{\sum_{i=1}^{n}(y_{max}-f(x_i))+\xi} si=mi=1n(ymaxf(xi))+ξymaxf(xi)+ξ

    A i = A ^ ⋅ f ( x i ) − y m i n + ξ ∑ i = 1 n ( f ( x i ) − y m i n ) + ξ A_i=\hat{A}\cdot\frac{f(x_i)-y_{min}+\xi}{\sum_{i=1}^n(f(x_i)-y_{min})+\xi} Ai=A^i=1n(f(xi)ymin)+ξf(xi)ymin+ξ

  3. 生成爆炸火花和高斯火花。高斯火花用于保持多样性

  4. 选择 位置越分散被选中的概率越大

    R ( x i ) = ∑ j ∈ K d ( x i , x j ) = ∑ j ∈ K ∣ ∣ x i − x j ∣ ∣ R(x_i)=\sum_{j\in K}d(x_i,x_j)=\sum_{j\in K}||x_i-x_j|| R(xi)=jKd(xi,xj)=jKxixj

    p ( x i ) = R ( x i ) ∑ j ∈ K R ( x j ) p(x_i)=\frac{R(x_i)}{\sum_{j\in K}R(x_j)} p(xi)=jKR(xj)R(xi)

混洗蛙跳算法

过程

  1. 随机生成初始种群
  2. 按照适应度值降序排序
  3. 将所有的青蛙分成 m m m组,第1只青蛙放入第1组,第2只青蛙放入第2组,第 m m m只青蛙放入第 m m m组,第 m + 1 m+1 m+1只青蛙放入第1组,以此类推。
  4. 组内最差向组内最好更新,如果失败,则组内最差向全局最好更新,如果失败,则随机生成一个满足约束条件的解。
  5. 打乱分组,回到第2步。

更新

X n e w i = r a n d ( ) ⋅ ( X t a r g e t i − X o l d i ) X_{new}^i=rand()\cdot(X_{target}^i-X_{old}^i) Xnewi=rand()(XtargetiXoldi)

禁忌搜索算法

当前解:2 5 7 3 4 6 1 —— 10

候选解:

(5-4) —— 16
(7-4) —— 14
(3-6) —— 12
(2-3) —— 10
(4-1) —— 9

禁忌表:空

操作:将(5-4)加入禁忌表,更新解为2 4 7 3 5 6 1


当前解:2 4 7 3 5 6 1 —— 16

候选解:

(3-1) —— 18
(2-3) —— 17
(3-6) —— 15
(7-1) —— 14
(6-1) —— 12

禁忌表:

(5-4)

操作:将(3-1)加入禁忌表,更新解为2 4 7 1 5 6 3


当前解:2 4 7 1 5 6 3 —— 18

候选解:

(1-3) —— 16
(2-4) —— 14
(7-6) —— 12
(4-5) —— 11
(5-3) —— 9

禁忌表:

(5-4)(3-1)

操作:所有的候选解都不能使当前解得到提高,但不管,由于(5-4)和(3-1)是禁忌对象,不能选,所以互换(2-4),(2-4)加入禁忌表,更新解为4 2 7 1 5 6 3


当前解:4 2 7 1 5 6 3 —— 14

候选解:

(4-5) —— 20
(5-3) —— 16
(7-1) —— 14
(1-3) —— 11
(2-6) —— 8

禁忌表:

(5-4)(3-1)(2-4)

操作:虽然(5-4)是禁忌对象,但是由于它的适配值是20,优于best so far,因此下一步仍互换(5-4),并重新置(5-4)于禁忌表中,更新解为5 2 7 1 4 6 3,即藐视准则


当前解:5 2 7 1 4 6 3 —— 20

候选解:

(7-1) —— 20
(4-3) —— 17
(6-3) —— 15
(5-4) —— 14
(2-6) —— 12

禁忌表:

(3-1)(2-4)(5-4)

操作:继续操作直到满足终止条件


总结

禁忌搜索是在邻域搜索的基础上,通过设置禁忌表来禁忌一些已经做过的操作,并利用藐视准则来奖励一些优良状态。其中,邻域结构、候选解、禁忌长度、禁忌对象、藐视准则、终止准则等都是影响禁忌搜索算法性能的关键。

模拟退火算法

加温过程——设定初温

等温过程——Metropolis抽样

冷却过程——控制参数的下降

Metropolis准则——以概率接受新状态

若在温度 T T T,当前状态 i i i->新状态 j j j

E j < E i E_jEj<Ei则接受 j j j为当前状态
否则,以概率 p = e x p ( − ( E j − E i ) / k T ) p=exp(-(E_j-E_i)/k_T) p=exp((EjEi)/kT)接受状态 j j j
解释:在高温下,可接受与当前状态能量差较大的新状态;在低温下,只接受与当前状态能量差较小的新状态

过程:

  1. 初始化:取初始温度 T 0 T_0 T0足够大,令 T = T 0 T=T_0 T=T0,任取初始解 S 1 S_1 S1,确定每个 T T T时的迭代次数,即Metropolis链长 L L L
  2. 对当前温度 T T T k = 1 , 2 , … , L k=1,2,\dots,L k=1,2,,L,重复步骤3-6
  3. 对当前解 S 1 S_1 S1随机扰动产生一个新解 S 2 S_2 S2
  4. 计算 S 2 S_2 S2的增量 d f = f ( S 2 ) − f ( S 1 ) df=f(S_2)-f(S_1) df=f(S2)f(S1),其中 f ( S ) f(S) f(S) S S S的代价函数
  5. d f < 0 df<0 df<0,则接受 S 2 S_2 S2作为新的当前解,即 S 1 = S 2 S_1=S_2 S1=S2;否则计算 S 2 S_2 S2的接受概率 e x p ( − d f / T ) exp(-df/T) exp(df/T),即随机产生 ( 0 , 1 ) (0,1) (0,1)区间上均匀分布的随机数 r a n d rand rand,若 e x p ( − d f / T ) > r a n d exp(-df/T)>rand exp(df/T)>rand,也接受 S 2 S_2 S2作为新的当前解, S 1 = S 2 S_1=S_2 S1=S2;否则保留当前解 S 1 S_1 S1
  6. 如果满足终止条件,则输出当前解为最优解。否则按衰减函数衰减 T T T后返回步骤2

人工免疫算法

人工免疫算法和遗传算法的区别

  1. 个体评价与选择:遗传算法通过个体适应度值得到;免疫算法通过亲和度得到。亲和度包括抗体—抗原之间的亲和度(匹配程度)和抗体—抗体之间的亲和度(相似程度)
  2. 产生新个体的方式:遗传算法有交叉、变异;免疫算法除交叉变异外还有克隆选择、免疫记忆、疫苗接种等。
  3. 免疫算法对抗体的产生进行促进或者抑制

步骤

  1. 随机产生 N N N个个体并从记忆库中提取 m m m个个体构成初始种群
  2. 对上述群体中的抗体进行评价,如期望繁殖率
  3. 形成父代群体。将初始群体按期望繁殖率进行降序排序,并取前 N N N个个体构成父代群体,取前 m m m个个体存入记忆库中
  4. 判断是否满足终止条件,若是则结束,否则进行下一步
  5. 新群体的产生。对抗体群体进行选择交叉变异操作得到新群体,从记忆库中取出记忆的个体,共同构成新一代群体。
  6. 转去步骤3

注意

需要设计抗体与抗原的亲和力、抗体与抗体的亲和力、抗体浓度、期望繁殖概率等函数。如个体适应度越高,期望繁殖概率越大;个体浓度越大,期望繁殖概率越小。这样既鼓励适应度高的个体,又抑制浓度高的个体,从而确保了个体多样性。

参考文献

待补充

你可能感兴趣的:(群体智能,进化计算)