轮盘赌法:个体的适应度值越好,被选中的概率越大
锦标赛法:每次从种群中取出一定数量的个体(放回抽样),选择其中最好的一个放入子代种群,重复该操作直到达到想要的子代种群规模
首先在可行解空间中初始化一群粒子,用位置、速度、适应度值三项指标表示粒子特征。粒子在解空间中运动,通过跟踪个体极值 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(Pidk−Xidk)+c2r2(Pgdk−Xidk)
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]
较大的惯性权重有利于全局搜索,较小的惯性权重有利于局部搜索
线性递减惯性权重 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(wstart−wend)(Tmax−k)/Tmax
蚂蚁在寻找食物时,会在其经过的路径上释放一种信息素,并能够感知其他蚂蚁释放的信息素。信息素浓度的大小表征路径的远近,信息素浓度越高,表示对应的路径距离越短。蚂蚁会以较大的概率优先选择信息素浓度较高的路径,并释放一定量的信息素,以增强该条路径上的信息素浓度,这样会形成一个正反馈。最终,蚂蚁能够找到一条从巢穴到食物源的最佳路径,即最短距离。同时路径上的信息素浓度会随着时间的推进而逐渐衰减。
整个蚂蚁群体中蚂蚁的数量为 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=⎩⎨⎧∑s∈allowk[τis(t)]α⋅[ηis(t)]β[τij(t)]α⋅[ηij(t)]β,0,s∈allowks∈/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,第k只蚂蚁从城市i访问城市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,第k只蚂蚁从城市i访问城市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,第k只蚂蚁从城市i访问城市j其他
随机初始化
觅食行为:设人工鱼当前状态为 X i X_i Xi,在其感知范围内随机选择一个状态 X j X_j Xj,如果 Y j < Y i Y_j
前进一步: 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||} Xi∣next=Xi+rand()⋅Step⋅∣∣Xj−Xi∣∣Xj−Xi
随机移动一步 X i ∣ n e x t = X i + r a n d ( ) ⋅ S t e p X_{i|next}=X_i+rand()\cdot Step Xi∣next=Xi+rand()⋅Step
聚群行为:设人工鱼当前状态为 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 δ为拥挤度),表明伙伴中心有较多的食物并且不太拥挤,则朝伙伴中心位置方向前进一步;否则执行觅食行为。
追尾行为:设人工鱼当前状态为 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的方向前进一步;否则执行觅食行为。
随机行为: 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 Xi∣next=Xi+rand()⋅Visual
雇佣蜂 跟随蜂 侦查蜂
- 选择一个聚类并在聚类中心添加随机值生成新个体
- 选择一个聚类并在该聚类中随机选择一个个体添加随机值生成新个体
- 选择两个聚类并将两个聚类中心进行组合添加随机值生成新个体
- 选择两个聚类并在两个聚类中各随机选择一个个体进行组合后添加随机值生成新个体
6a. 新个体与具有相同索引的旧个体进行比较,保留适应度好的。
6b. 新个体与旧个体进行交叉生成两个子代,比较四个个体,保留最好的。
相关概率:
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=w1∗xold1i+w2∗xold2i
ξ ( 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(k2T−t)∗random(t)
随机初始化 N N N个位置
计算爆炸火花数目和爆炸幅度。烟花的适应度值越好,生成爆炸火花的数目越多,幅度越小,用于局部寻优;反之亦然。
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=m⋅∑i=1n(ymax−f(xi))+ξymax−f(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+ξ
生成爆炸火花和高斯火花。高斯火花用于保持多样性
选择 位置越分散被选中的概率越大
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)=∑j∈Kd(xi,xj)=∑j∈K∣∣xi−xj∣∣
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)=∑j∈KR(xj)R(xi)
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()⋅(Xtargeti−Xoldi)
当前解: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抽样
冷却过程——控制参数的下降
若在温度 T T T,当前状态 i i i->新状态 j j j
若 E j < E i E_j
否则,以概率 p = e x p ( − ( E j − E i ) / k T ) p=exp(-(E_j-E_i)/k_T) p=exp(−(Ej−Ei)/kT)接受状态 j j j
解释:在高温下,可接受与当前状态能量差较大的新状态;在低温下,只接受与当前状态能量差较小的新状态
需要设计抗体与抗原的亲和力、抗体与抗体的亲和力、抗体浓度、期望繁殖概率等函数。如个体适应度越高,期望繁殖概率越大;个体浓度越大,期望繁殖概率越小。这样既鼓励适应度高的个体,又抑制浓度高的个体,从而确保了个体多样性。
待补充