智能优化算法:金鹰优化算法-附代码

智能优化算法:金鹰优化算法

文章目录


摘要:金鹰优化算法(Golden Eagle Optimizer,GEO)是于2020年提出的新型智能优化算法,具有收敛速度快,寻优能力强的特点。

1.算法原理

GEO灵感来自于金鹰的智慧,它们在螺旋轨迹的不同阶段调整速度,进行狩猎。在狩猎的初期,它们表现出更多的巡游和寻找猎物的倾向,在最后阶段,它们表现出更多的攻击倾向。金鹰调整这两个部分,以便在最短的时间内,在可行的区域内捕捉到最佳的猎物。这种行为是数学模型,以突出探索和全局优化方法的开发。GEO是基于金鹰的螺旋运动。正如前面提到的,每只金鹰都记住了它到目前为止所到过的最佳位置。鹰同时具有攻击猎物和巡航寻找更好食物的吸引力。

1.1 猎物选择

每个迭代中的猎物选择,每只金鹰必须选择一个猎物来执行巡航和攻击操作。在 GEO,猎物被描绘成金鹰群,目前为止找到的最佳解决方案。每只金鹰都能记住目前为止找到的最好的解决方案。在每次迭代中,每个搜索代理,从整个群体的记忆中选择目标猎物。然后计算每只金鹰相对于选定猎物的攻击和巡航向量。如果新的位置(通过攻击和巡航向量计算)优于内存中的前一个位置,则更新内存。猎物选择策略在地理信息系统中占有重要地位。选择可以以一种基本的方式进行,每只金鹰只在自己的记忆中选择猎物。为了让金鹰更好地探索这片土地,我们提出了一个随机的一对一映射方案,每只金鹰从其他鸟群成员的记忆中,随机选择当前迭代中的猎物。值得注意的是,被选中的猎物不一定是最近或最远的猎物。在这个方案中,记忆中的每一个猎物,都被分配或映射给一只金鹰。然后每只金鹰对选定的猎物进行攻击和巡航。

1.2 攻击行为

攻击行为可以通过一个矢量来模拟,从金鹰当前的位置开始,到金鹰记忆中猎物的位置结束。通过式(1)可以计算出金鹰的攻击矢量:
A i ⃗ = X f ∗ ⃗ − X i ⃗ (1) \vec{A_i}=\vec{X^*_f}-\vec{X_i}\tag{1} Ai​ ​=Xf∗​ ​−Xi​ ​(1)
A i ⃗ \vec{A_i} Ai​ ​为第 i i i只金鹰的攻击矢量, X f ∗ ⃗ \vec{X^*_f} Xf∗​ ​为当前金鹰所到达的最佳地点(猎物), X i ⃗ \vec{X_i} Xi​ ​​第i只老鹰目前的位置。

1.3 巡航行为

巡航向量是根据攻击向量计算的。巡航向量是圆的切向量,垂直于攻击向量。巡航也可以被认为是金鹰相对于猎物的线性速度。三维巡航矢量位于与圆相切的超平面内,因此,为了计算巡航矢量,我们必须首先计算切超平面的方程。超平面的维数方程可以由超平面的任意点和与超平面垂直的向量确定,这个向量称为超平面的法向量。方程(2)表示了超平面方程在三维空间中的标量形式。
h 1 x 1 + h 2 x 2 + . . . + h n x n = d ⟹ ∑ j = 1 n h j x j = d (2) h_1x_1+h_2x_2+...+h_nx_n=d\Longrightarrow \sum_{j=1}^nh_jx_j=d\tag{2} h1​x1​+h2​x2​+...+hn​xn​=d⟹j=1∑n​hj​xj​=d(2)
此处, H = [ h 1 , h 2 , . . . , h n ] H=[h_1,h_2,...,h_n] H=[h1​,h2​,...,hn​]为法向量, X = [ x 1 , x 2 , . . . , x n ] X=[x_1,x_2,...,x_n] X=[x1​,x2​,...,xn​]为变量向量,设 P ⃗ = [ p 1 , p 2 , . . . , p n ] \vec{P}=[p_1,p_2,...,p_n] P =[p1​,p2​,...,pn​]为超平面上的任意点, d = H ⃗ P ⃗ = ∑ i = 1 n h j p j d=\vec{H}\vec{P}=\sum_{i=1}^nh_jp_j d=H P =∑i=1n​hj​pj​。

把 A i ⃗ \vec{A_i} Ai​ ​(攻击向量)看作超平面的法线,那么 C i t ⃗ \vec{C_i^t} Cit​ ​(在迭代中的金鹰巡航向量)就可以根据方程(3)表示出它所属的超平面。
∑ j = 1 n a j x j = ∑ j = 1 n a j t x j ∗ (3) \sum_{j=1}^na_jx_j=\sum_{j=1}^na_j^tx_j^*\tag{3} j=1∑n​aj​xj​=j=1∑n​ajt​xj∗​(3)
此处, A = [ a 1 , a 2 , . . . , a n ] A=[a_1,a_2,...,a_n] A=[a1​,a2​,...,an​]为攻击向量, X = [ x 1 , x 2 , . . . , x n ] X=[x_1,x_2,...,x_n] X=[x1​,x2​,...,xn​]为决策/设计变量向量, X ∗ = [ x 1 ∗ , x 2 ∗ , . . . , x n ∗ ] X^*=[x_1^*,x_2^*,...,x_n^*] X∗=[x1∗​,x2∗​,...,xn∗​]​为被选中的猎物的位置。

为了在巡航超平面上找到一个随机矢量,我们必须首先在这个超平面上找到一个随机目的点,而不是我们已经有的那个(金鹰的当前位置)。注意到巡航矢量的起点是金鹰的当前位置。由于超平面比它们的环境空间小一维,我们不能简单地生成一个随机的 1 × n 1×n 1×n点。三维空间中的简单随机点不能保证位于巡航超平面上。位于三维巡航超平面上的一个新点具有*度,意味着维度可以*选择,但超平面方程决定了最后的1维度,如方程式(2)所示。必须选择最后一个维数使其满足超平面方程,因此,我们有*变量和一个固定变量。我们使用下面的程序来找到一个随机维度的目的地点,位于金鹰的巡航超平面上。具体步骤如下:

第一步:从变量中随机选择一个变量作为固定变量。

第二步:将随机值赋给除第k个变量以外的所有变量,因为第k个变量是固定的。

第二步:用方程(4)求出固定变量的值。
c k = d − ∑ j , j ≠ k a j a k (4) c_k=\frac{d-\sum_{j,j\neq k}a_j}{a_k}\tag{4} ck​=ak​d−∑j,j​=k​aj​​(4)
此处 c k c_k ck​为目标点 C C C的第 k k k个元素, a j a_j aj​攻击向量的 A i ⃗ \vec{A_i} Ai​ ​第 j j j个元素, k k k为固定变量的编号。找到了巡航的随机目的地。方程(5)显示了巡航超平面上目的点的一般表示。
C i ⃗ = { c 1 = r a n d o m , c 2 = r a n d o m , . . . , c k = d − ∑ j , j ≠ k a j a k , . . . , c n = r a n d o m } (5) \vec{C_i}=\{c_1=random,c_2=random,...,c_k=\frac{d-\sum_{j,j\neq k}a_j}{a_k},...,c_n=random\}\tag{5} Ci​ ​={c1​=random,c2​=random,...,ck​=ak​d−∑j,j​=k​aj​​,...,cn​=random}(5)

1.4 移动到新的位置

金鹰的位移由攻击和向量组成。我们将金鹰迭代的步长向量定义为方程(6)和(7)。
Δ x i = r 1 ⃗ p a A i ⃗ ∣ ∣ A i ⃗ ∣ ∣ + r 2 ⃗ p c C i ⃗ ∣ ∣ C i ⃗ ∣ ∣ (6) \Delta x_i = \vec{r_1}p_a\frac{\vec{A_i}}{||\vec{A_i}||}+\vec{r_2}p_c\frac{\vec{C_i}}{||\vec{C_i}||}\tag{6} Δxi​=r1​ ​pa​∣∣Ai​ ​∣∣Ai​ ​​+r2​ ​pc​∣∣Ci​ ​∣∣Ci​ ​​(6)

∣ ∣ A i ⃗ ∣ ∣ = ∑ j n a j 2 , ∣ ∣ C i ⃗ ∣ ∣ = ∑ j n c j 2 (7) ||\vec{A_i}||=\sqrt{\sum_j^na_j^2},||\vec{C_i}||=\sqrt{\sum_j^nc_j^2}\tag{7} ∣∣Ai​ ​∣∣=j∑n​aj2​ ​,∣∣Ci​ ​∣∣=j∑n​cj2​ ​(7)

此处, p a p_a pa​为攻击系数, p c p_c pc​为巡航系数。 r 1 ⃗ \vec{r_1} r1​ ​和 r 2 ⃗ \vec{r_2} r2​ ​为[0,1]内的随机向量。因此,通过将迭代中的步向量加到迭代中的位置,可以简单地计算出金鹰在迭代中的位置:
x t + 1 = x t + Δ x i t (8) x^{t+1}=x^t+\Delta x_i^t \tag{8} xt+1=xt+Δxit​(8)
此处, x t + 1 x^{t+1} xt+1为金鹰的第 t + 1 t+1 t+1次的位置, x t x^t xt为金鹰的第 t t t次的位置, Δ x i t \Delta x_i^t Δxit​​为金鹰的移动的步长大小。

如果金鹰新位置的适应性比它记忆中的位置更好,这只鹰的记忆会随着新位置而更新。否则,记忆仍然完好无损,但是鹰会在新的位置上。在新的迭代中,每只金鹰从种群中随机选择一只金鹰,围绕其最佳访问位置旋转,计算攻击矢量,计算巡航矢量,最后计算下一次迭代的步长矢量和新位置。这个循环将一直执行,直到满足任何终止条件。我们提到方程(6)中有两个系数,即攻击系数和巡航系数见式(9),用来控制攻击和巡航向量对步长矢量的影响。
{ p a = p a 0 + t T ∣ p a T − p a 0 ∣ p c = p c 0 + t T ∣ p c T − p c 0 ∣ (9) \begin{cases} p_a=p_a^0+\frac{t}{T}|p_a^T-p_a^0|\\ p_c=p_c^0+\frac{t}{T}|p_c^T-p_c^0| \end{cases}\tag{9} {pa​=pa0​+Tt​∣paT​−pa0​∣pc​=pc0​+Tt​∣pcT​−pc0​∣​(9)
此处, p a 0 p_a^0 pa0​和 p a T p_a^T paT​为 p a p_a pa​的初始和最终的值, p c 0 p_c^0 pc0​和 p c T p_c^T pcT​为 p c p_c pc​的初始和最终的值。

算法流程:

步骤1:初始化金鹰的数量。

步骤2:计算适应度函数初始化群体记忆。

步骤3:初始化 p a p_a pa​和 p c p_c pc​。

步骤4:根据式(9)更新 p a p_a pa​和 p c p_c pc​.

步骤5:从种群的记忆计算攻击向量中随机选择猎物见式(1)。

步骤6:计算巡航向量(方程式(2)-(5))计算步长向量(方程式(6)-(8))更新位置(方程式(8))评估新位置的适应度函数。

步骤7:更新最优解及最优位置。

步骤7:判断是否满足最大迭代次数,若满足,则输出最优金鹰位置和全局最优解,否则,返回步骤4重新迭代计算。

2.算法结果

智能优化算法:金鹰优化算法-附代码

3.参考文献

[1] Mohammadi-Balani, A., Dehghan Nayeri, M., Azar, A., Taghizadeh-Yazdi, M., Golden Eagle Optimizer: A nature-inspired metaheuristic algorithm, Computers & Industrial Engineering (2020).

4.Matlab代码

上一篇:Java-注解的理解与使用-(原创)


下一篇:Floyd(动态规划)求解任意两点间的最短路径(图解)