智能优化算法:骑手优化算法-附代码

智能优化算法:骑手优化算法


摘要:骑手优化算法(Rider Optimization Algorithm,ROA),是于2019年提出的一种新型智能优化算法。该算法主要模拟了在比赛中骑手通过身份划分来引导整个团队走向胜利的过程。具有寻优能力强,收敛速度快等特点。

1.算法原理

在骑手优化算法中,骑手一共分为4类:

(a).绕行手:绕行手通过绕行引导路径到达目标。这意味着其不跟随领先骑手(种群最优个体)。

(b).跟随手:跟随手在大部分区域内依赖或跟随领先骑手。

©.超车手:这类骑手根据自身当前位置及领先骑手的位置来调整下一步行动。

(d).冲刺手:其根据其他骑手的位置以最大速度到达目标点。

1.1 种群位置初始化

将种群G均分为四组:绕行手(B)、跟随手(F)、超车手(O)、冲刺手(A):
R = B + F + O + A (1) R=B+F+O+A \tag{1} R=B+F+O+A(1)

B = F = O = A = R / 4 (2) B=F=O=A=R/4 \tag{2} B=F=O=A=R/4(2)

其中 R R R为种群规模。

1.2 参数初始化

跟其他优化算法一样,在搜索空间内,随机生成种群T:
T t = { T i , j t } ; 1 ≤ i ≤ R ; 1 ≤ j ≤ Q (3) T_t=\{T_{i,j}^t\};1\leq i\leq R;1\leq j \leq Q \tag{3} Tt={Ti,jt};1iR;1jQ(3)

T i , j = { θ i ; i f   j = 1 T i , j − 1 + φ ; i f   j ≠ 1 &   T i , j − 1 + φ ≤ 360 T i , j − 1 + φ − 360 ; o t h e r w i s e (4) T_{i,j}=\begin{cases} \theta_i; if\, j=1\\ T_{i,j-1}+\varphi; if\, j\neq 1 \&\,T_{i,j-1}+\varphi \leq 360\\ T_{i,j-1}+\varphi-360; otherwise \end{cases}\tag{4} Ti,j=θi;ifj=1Ti,j1+φ;ifj=1&Ti,j1+φ360Ti,j1+φ360;otherwise(4)

θ i = i ∗ 36 0 o R (5) \theta_i=i*\frac{360^o}{R} \tag{5} θi=iR360o(5)

φ = 360 Q (6) \varphi=\frac{360}{Q}\tag{6} φ=Q360(6)

其中Q为空间维度。自行车的齿轮E用式(7)表示:
E = { E i } ; 1 ≤ i ≤ R (7) E=\{E_i\};1\leq i \leq R \tag{7} E={Ei};1iR(7)
初始时所有个体的齿轮参数均设为,迭代时其值从{0,1,2,3,4}中选取。

自行车的加度度e和制动器K:
e = { e i } ; 1 ≤ i ≤ R (8) e=\{e_i\};1\leq i \leq R \tag{8} e={ei};1iR(8)

K = { K i } ; 1 ≤ i ≤ R (9) K=\{K_i\}; 1\leq i\leq R \tag{9} K={Ki};1iR(9)

其值均处于[0,1]内,但前者初始为0,后者为1。

1.3 速度限制

该算法选择了一种动态速度边界:
V m a x i = X U i − X L i T O F F (10) V_{max}^i= \frac{X_U^i-X_L^i}{T_{OFF}} \tag{10} Vmaxi=TOFFXUiXLi(10)
其中 X U X_U XU X L X_L XL分别为骑手 i i i 在此次迭代时的位置上、下限, T O F F T_{OFF} TOFF即为停止时间,对应最大迭代次数。因此,骑手 i i i对速度的限制为;
V i E = V m a x i ∣ E ∣ (11) V_i^E=\frac{V_{max}^i}{|E|}\tag{11} ViE=EVmaxi(11)
这里|E|为齿轮数,一般取5。

1.4 寻找成功率

成功率是根据骑手位置和目标位置之间的距离计算得出的:
r i = 1 ∣ ∣ X i − L T ∣ ∣ (12) r_i=\frac{1}{||X_i-L_T||}\tag{12} ri=XiLT1(12)
这里 X i X_i Xi为当前骑手i 的位置,LT为目标位置。

1.5 绕行手位置更新

绕行手绕过公共路径,因此位置更新是随机的:
X t + 1 B = δ [ X t ( η , j ) ∗ β ( j ) + X t ( ξ , j ) ∗ [ 1 − β ( j ) ] ] (13) X_{t+1}^B=\delta[X_t(\eta,j)*\beta(j)+X_t(\xi,j)*[1-\beta(j)]] \tag{13} Xt+1B=δ[Xt(η,j)β(j)+Xt(ξ,j)[1β(j)]](13)
其中 δ , β ( j ) \delta,\beta(j) δ,β(j)均为[0,1]内一随机数, η , ξ \eta,\xi η,ξ均为[1,R]内一随机整数,表示随机选择出的一个骑手。

1.6 跟随手位置更新

跟随手通过跟随领先者来更新他的位置:
X t + 1 F ( i , k ) = X L ( L , k ) + c o s ( T i , k t ∗ X L ( L , k ) ∗ d i t ) (14) X_{t+1}^F(i,k)=X^L(L,k)+cos(T_{i,k}^t*X^L(L,k)*d_i^t)\tag{14} Xt+1F(i,k)=XL(L,k)+cos(Ti,ktXL(L,k)dit)(14)
式中 k k k为当前空间维度, X L X^L XL为领导者 L L L的位置, d d d 的计算方式为:
d i t = v i t ( 1 / T O F F ) (15) d_i^t=v_i^t(1/T_{OFF})\tag{15} dit=vit(1/TOFF)(15)

v i t = 1 3 [ E i t ∗ V i E + V m a x i ∗ e i t + ( 1 − K i t ) ∗ V m a x i ] (16) v_i^t=\frac{1}{3}[E_i^t*V_i^E+V_{max}^i*e_i^t+(1-K_i^t)*V_{max}^i]\tag{16} vit=31[EitViE+Vmaxieit+(1Kit)Vmaxi](16)

并不是每个跟随手的每个维度都要更新!是否更新取决于坐标选择器 P O N t P_{ON}^t PONt
P O N t = ( t T O F F ) ∗ Q (17) P_{ON}^t=(\frac{t}{T_{OFF}})*Q \tag{17} PONt=(TOFFt)Q(17)
这里t 为当前迭代次数。将其与相应的维度指数相乘,并将结果与空间维度Q进行比较,以确定位置变化需要考虑的坐标:
k < < { ( j ∗ P O N t ) ; i f   ( j ∗ P O N t ) < Q , ∀ j (18) k<<\{(j*P_{ON}^t);if\,(j*P_{ON}^t)<Q,\forall j \tag{18} k<<{(jPONt);if(jPONt)<Q,j(18)

1.7 超车手位置更新

超车手的位置更新如下式:
X t + 1 O ( i , k ) = X t ( i , k ) + [ D t I ( i ) ∗ X L ( L , k ) ] (19) X_{t+1}^O(i,k)=X_t(i,k)+[D_t^{I}(i)*X^L(L,k)] \tag{19} Xt+1O(i,k)=Xt(i,k)+[DtI(i)XL(L,k)](19)
中的k 为当前维度,D为当前个体的方向指示器:
D t I ( i ) = [ 2 1 − l o g ( S t R ( i ) ) ] − 1 (20) D_t^I(i)=[\frac{2}{1-log(S_t^R(i))}]-1 \tag{20} DtI(i)=[1log(StR(i))2]1(20)
其中 S t R ( i ) S_t^R(i) StR(i)为相对成功率,超车手的相对成功率由其适应度值与种群内最差个体的适应度值之比确定:
S t R ( i ) = r t ( i ) m a x r = i R r t ( i ) (21) S_t^R(i)=\frac{r_t(i)}{max_{r=i}^R r_t(i)} \tag{21} StR(i)=maxr=iRrt(i)rt(i)(21)
同跟随手,为了确定要更新的维度,首先要确定当前超车手与最优个体的间距:
l ( i , j ) = ∣ X t ( i , j ) − X L ( L , j ) ∣ (22) l(i,j)=|X_t(i,j)-X^L(L,j)|\tag{22} l(i,j)=Xt(i,j)XL(L,j)(22)
之后要通过对比当前超车手各维度的平均位置 μ \mu μ来确定:
k < < { j ; i f   l ( i , j ) < μ i   ∀ j (23) k<<\{j; if\,l(i,j)<\mu_i\, \forall j \tag{23} k<<{j;ifl(i,j)<μij(23)

1.8 冲刺手位置更新

试图超越领导者的冲刺手遵循与跟随手类似的更新过程。但是,冲刺手会更新坐标中的所有值,而不仅仅是选定维度中的值:
X t + 1 A ( i , j ) = X L ( L , j ) + [ c o s ( T i , j t ) ∗ X ( L , j ) L ] + d i t (24) X_{t+1}^A(i,j)=X^L(L,j)+[cos(T_{i,j}^t)*X(L,j)^L]+d_i^t \tag{24} Xt+1A(i,j)=XL(L,j)+[cos(Ti,jt)X(L,j)L]+dit(24)

1.9 参数更新

活动计数A更新:
A c t + 1 ( i ) = { 1 ; i f   r t + 1 ( i ) > r t ( i ) 0 ; o t h e r w i s e (25) A_c^{t+1}(i)=\begin{cases} 1;if\, r_{t+1}(i)>r_t(i)\\ 0;otherwise \end{cases}\tag{25} Act+1(i)={1;ifrt+1(i)>rt(i)0;otherwise(25)
转向角更新:
T i , j t + 1 = { T i + 1 , j t ; i f   A c t + 1 ( i ) = 1 T i − 1 , j t ; i f   A c t + 1 ( i ) = 0 (26) T_{i,j}^{t+1}=\begin{cases} T_{i+1,j}^t;if\, A_c^{t+1}(i)=1\\ T_{i-1,j}^t;if\, A_c^{t+1}(i)=0 \end{cases}\tag{26} Ti,jt+1={Ti+1,jt;ifAct+1(i)=1Ti1,jt;ifAct+1(i)=0(26)
齿轮更新:
E i t + 1 = { E i t + 1 ; i f   A c t + 1 ( i ) = 1 & E i t ≠ ∣ E ∣ E i t − 1 ; i f   A c t + 1 = 0 & E i t ≠ 0 E i t ; o t h e r w i s e (27) E_i^{t+1} = \begin{cases} E_i^t + 1; if\, A_c^{t+1}(i)=1 \&E_i^t\neq|E|\\ E_i^t-1;if\,A_c^{t+1}=0 \&E_i^t\neq 0\\ E_i^t; otherwise \end{cases}\tag{27} Eit+1=Eit+1;ifAct+1(i)=1&Eit=EEit1;ifAct+1=0&Eit=0Eit;otherwise(27)
加速度的更新方式为:
e i t + 1 = E i t + 1 ∣ E ∣ (28) e_i^{t+1}=\frac{E_i^{t+1}}{|E|} \tag{28} eit+1=EEit+1(28)
制动器的更新方式为:
K i t + 1 = [ 1 − E i t + 1 ∣ E ∣ ] (29) K_i^{t+1}=[1-\frac{E_i^{t+1}}{|E|}]\tag{29} Kit+1=[1EEit+1](29)
算法伪代码如下:

1.Input: Random positions of theriders Xt
2.Output:Leading rider XL
3.Begin
4.	Initialize the population
5.	initialize the rider parameters: Steering angle T,Gear E,Accelerator e,and Brake K.
6.	Find the success rate rt
7.	while t<TOFF
8.		for i=1 to R
9.			update the positon of the bypass rider using Eq.(13)
10.			update the positon of the follower using Eq.(14)
11.			update the positon of the overtaker using Eq.(19)
12.			update the positon of the attacker using Eq.(24)
13.			Rank the riders based on rt
14.			Select the rider having the maximum rt as the leading rider
15.			update T, E, e,and K
16.			Return XL
17.			t=t+1
18.		end for
19.	end while
20.Terminate

2.实验结果

请添加图片描述

3.参考文献

[1] Binu D , Kariyappa B S . RideNN: A New Rider Optimization Algorithm-Based Neural Network for Fault Diagnosis in Analog Circuits[J]. Instrumentation and Measurement, IEEE Transactions on, 2019, 68(1):2-26.

4.Matlab代码

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能算法研学社(Jack旭)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值