一、能量谷优化算法
能量谷优化算法(Energy valley optimizer,EVO)是MahdiAzizi等人于2023年提出的一种新颖的元启发式算法,其灵感来自关于稳定性和不同粒子衰变模式的物理原理。
物理反应是指两个粒子或外部亚原子粒子碰撞产生新粒子。在宇宙中,绝大多数粒子被认为是不稳定的,除了那些无限期保持完整的稳定粒子。不稳定的粒子倾向于通过分解或衰变来释放能量,而各种类型的粒子的整体衰变率则有所不同。在衰变过程中,产生能量较低的粒子,而额外的能量通过发射过程产生。能量谷涉及基于其结合能和与其他粒子相互作用的粒子的稳定性。对多种现象的直接观察使专家们提取了一些有价值的模式来定义粒子的衰变。该领域最关键的挑战是通过考虑中子(N)和质子(Z)的数量以及N / Z比率来确定粒子的稳定性界限。N/Z ≈ 1 是指稳定、轻质的颗粒,而对于较重的颗粒,较大的 N/Z 值被视为稳定带。基于粒子的稳定水平,每个粒子倾向于通过移动其N / Z比并向稳定带或能量谷移动来增加其稳定性水平。在这方面,粒子的中子富集水平在这一作用中起着至关重要的作用。位于稳定性界限上方的富中子粒子经历衰变过程,需要如此多的中子来保持稳定。另一方面,贫中子粒子需要太少的中子来实现稳定性,倾向于经历电子捕获或正电子发射以向能谷或稳定带移动。
在衰变过程中,产生能量水平较低的粒子,同时释放出过多的能量。有三种类型的排放决定了具有不同稳定性水平的粒子的衰变过程。α(α)粒子表示与氦相同的致密且带正电的粒子。β(β)粒子是带负电的粒子,其特征是具有较高速度的电子。伽马(γ)射线代表具有较高能量水平的光子。这些类型的发射的整体行为在电场内部进行了说明,考虑到α粒子在很小程度上向负极板弯曲。相比之下,β粒子向正极板弯曲很大,电场不影响γ射线。根据所呈现的发射过程细节,有三种类型的衰变,称为α、β和伽马衰变,源自前面提到的发射类型。在α衰变中,确定α粒子的损失,其中N / Z比率中的N和Z值在每个发射过程中减少。在β衰变中,β粒子的喷射是一个问题,其中通过减少N和增加Z值来增加N / Z比。在伽马衰变中,涉及从激发粒子中省略具有较高能级的γ光子,而这种衰变模式不需要改变N / Z值。这些方面的示意图如图所示。
1.1算法原理
第一步随机初始化:
X = [ X 1 X 2 ⋮ X i ⋮ X n ] = [ x 1 1 x 1 2 ⋯ x 1 j ⋯ x 1 d x 2 1 x 2 2 ⋯ x 2 j ⋯ x 2 d ⋮ ⋮ ⋮ ⋱ ⋮ x i 1 x i 2 ⋯ x i j ⋯ x i d ⋮ ⋮ ⋮ ⋱ ⋮ x n 1 x n 2 ⋯ x n j ⋯ x n d ] , { i = 1 , 2 , … , n . j = 1 , 2 , … , d . \mathrm{X}=\left[\begin{array}{c}{\mathrm{X}}_{1}\\ {\mathrm{X}}_{2}\\ \vdots \\ {\mathrm{X}}_{\mathrm{i}}\\ \vdots \\ {\mathrm{X}}_{\mathrm{n}}\end{array}\right]=\left[\begin{array}{c}{\mathrm{x}}_{1}^{1} {\mathrm{x}}_{1}^{2} \cdots {\mathrm{x}}_{1}^{\mathrm{j}} \cdots {\mathrm{x}}_{1}^{\mathrm{d}}\\ {\mathrm{x}}_{2}^{1} {\mathrm{x}}_{2}^{2} \cdots {\mathrm{x}}_{2}^{\mathrm{j}} \cdots {\mathrm{x}}_{2}^{\mathrm{d}}\\ \vdots \vdots \vdots \ddots \vdots \\ {\mathrm{x}}_{\mathrm{i}}^{1} {\mathrm{x}}_{\mathrm{i}}^{2} \cdots {\mathrm{x}}_{\mathrm{i}}^{\mathrm{j}} \cdots {\mathrm{x}}_{\mathrm{i}}^{\mathrm{d}}\\ \vdots \vdots \vdots \ddots \vdots \\ {\mathrm{x}}_{\mathrm{n}}^{1} {\mathrm{x}}_{\mathrm{n}}^{2} \cdots {\mathrm{x}}_{\mathrm{n}}^{\mathrm{j}} \cdots {\mathrm{x}}_{\mathrm{n}}^{\mathrm{d}}\end{array}\right], \left\{\begin{array}{c}\begin{array}{c}i=\mathrm{1,2},\dots ,n.\end{array}\\ j=\mathrm{1,2},\dots ,d.\end{array}\right. X= X1X2⋮Xi⋮Xn = x11x12⋯x1j⋯x1dx21x22⋯x2j⋯x2d⋮⋮⋮⋱⋮xi1xi2⋯xij⋯xid⋮⋮⋮⋱⋮xn1xn2⋯xnj⋯xnd ,{i=1,2,…,n.j=1,2,…,d.
x
i
j
=
x
i
,
min
j
+
rand
.
(
x
i
,
max
j
−
x
i
,
min
j
)
,
{
i
=
1
,
2
,
…
,
n
.
j
=
1
,
2
,
…
,
d
.
{\text{x}}_{{\text{i}}}^{{\text{j}}} = {\text{x}}_{{{\text{i}},{\text{min}}}}^{{\text{j}}} + {\text{rand}}.\left( {{\text{x}}_{{{\text{i}},{\text{max}}}}^{{\text{j}}} - {\text{x}}_{{{\text{i}},{\text{min}}}}^{{\text{j}}} } \right),{ }\quad \left\{ {\begin{array}{c} {\begin{array}{c} {i = 1,2, \ldots ,n.} \\ \end{array} } \\ {j = 1,2, \ldots ,d.} \\ \end{array} } \right.
xij=xi,minj+rand.(xi,maxj−xi,minj),{i=1,2,…,n.j=1,2,…,d.
在算法的第二步中,确定粒子的富集束缚(EB),用于考虑富中子粒子和贫中子粒子之间的差异。为此,对每个粒子进行目标函数评估并确定为粒子的中子富集水平(NEL)。数学表示如下:
E
B
=
∑
i
=
1
n
N
E
L
i
n
,
i
=
1
,
2
,
…
,
n
\mathrm{EB}=\frac{\sum_{\mathrm{i}=1}^{\mathrm{n}} \mathrm{NEL}_{\mathrm{i}}}{\mathrm{n}}, \mathrm{i}=1,2, \ldots, \mathrm{n}
EB=n∑i=1nNELi,i=1,2,…,n
在第三步中,根据目标函数评估确定颗粒的稳定性水平如下:
SL
i
=
NEL
i
−
BS
WS
−
BS
,
i
=
1
,
2
,
…
,
n
.
{\text{SL}}_{{\text{i}}} = \frac{{{\text{NEL}}_{{\text{i}}} - {\text{BS}}}}{{{\text{WS}} - {\text{BS}}}},{\text{ i}} = 1,2, \ldots ,{\text{n}}.{ }
SLi=WS−BSNELi−BS, i=1,2,…,n.
在EVO的主搜索循环中,如果粒子的中子富集水平高于富集界限,则假定粒子具有更大的N / Z比,因此使用α,β或γ方案的衰变过程是透视的。在这方面,在[0,1]范围内生成一个随机数,它模仿宇宙中的稳定性界限(SB)。如果粒子的稳定性水平高于稳定性界限,则认为发生了α和γ衰变,因为对于稳定性水平较高的较重粒子来说,这两种衰变是可能发生的。
基于关于阿尔法衰变的物理原理、发射α射线,提高产物在物理反应中的稳定性水平。这方面可以在数学上表述为 EVO 的位置更新方案之一,其中生成新的候选解决方案。为此,生成两个随机整数作为 [1, d] 范围内的 Alpha Index I,表示发射光线的数量,以及 [1, Alpha Index I] 范围内的 Alpha Index II,它定义了要发射的α射线。发射的光线是候选解中的决策变量,它们被粒子或具有最佳稳定性水平的候选粒子中的射线移除并替换。这些方面在数学上表述如下:
X
i
New
1
=
X
i
(
X
BS
(
x
i
j
)
)
,
{
i
=
1
,
2
,
…
,
n
.
j
=
A
l
p
h
a
I
n
d
e
x
I
I
.
{\text{X}}_{{\text{i}}}^{{{\text{New}}1}} = {\text{X}}_{{\text{i}}} { }\left( {{\text{ X}}_{{{\text{BS}}}} { }\left( {{\text{ x}}_{{\text{i}}}^{{\text{j }}} } \right)} \right),{ }\left\{ {\begin{array}{c} {\begin{array}{c} {i = 1,2, \ldots ,n.} \\ \end{array} } \\ {j = Alpha \,Index \,II.} \\ \end{array} } \right.{ }
XiNew1=Xi( XBS( xij )),{i=1,2,…,n.j=AlphaIndexII.
此外,在伽马衰变中,发射γ射线以提高激发粒子的稳定性水平,因此这方面可以在数学上表述为 EVO 的另一个位置更新过程,其中生成新的候选解决方案。为此,在[1,d]范围内生成两个随机整数作为伽马指数I,表示发射光子的数量,以及[1,伽马指数I]范围内的伽马指数II,它定义了粒子中要考虑的光子。粒子中的光子是候选解中的决策变量,它们被相邻粒子或候选粒子移除并取代,它模仿激发粒子与其他粒子甚至磁场的相互作用。在这方面,所考虑的粒子与其他粒子之间的总距离计算如下,并为此目的使用最近的粒子:
D
i
k
=
(
x
2
−
x
1
)
2
+
(
y
2
−
y
1
)
2
,
{
i
=
1
,
2
,
…
,
n
.
k
=
1
,
2
,
…
,
n
−
1.
{\text{D}}_{{\text{i}}}^{{\text{k}}} = \sqrt {\left( {{\text{x}}_{2} - {\text{x}}_{1} } \right)^{2} + \left( {{\text{y}}_{2} - {\text{y}}_{1} } \right)^{2} } ,{ }\left\{ {\begin{array}{c} {i = 1,2, \ldots ,n.} \\ {k = 1,2, \ldots ,n - 1.} \\ \end{array} } \right.
Dik=(x2−x1)2+(y2−y1)2,{i=1,2,…,n.k=1,2,…,n−1.
使用这些操作,在此阶段生成第二个候选解决方案的位置更新过程按如下方式执行:
X
i
New
2
=
X
i
(
X
Ng
(
x
i
j
)
)
,
{
i
=
1
,
2
,
…
,
n
.
j
=
G
a
m
m
a
I
n
d
e
x
I
I
.
{\text{X}}_{{\text{i}}}^{{{\text{New}}2}} = {\text{X}}_{{\text{i}}} { }\left( {{\text{ X}}_{{{\text{Ng}}}} { }\left( {{\text{ x}}_{{\text{i}}}^{{\text{j }}} } \right)} \right),{ }\left\{ {\begin{array}{c} {\begin{array}{c} {i = 1,2, \ldots ,n.} \\ \end{array} } \\ {j = Gamma\, Index \,II.} \\ \end{array} } \right.{ }
XiNew2=Xi( XNg( xij )),{i=1,2,…,n.j=GammaIndexII.
如果粒子的稳定性水平低于稳定性界限,则认为会发生β衰变,因为这种类型的衰变发生在稳定性水平较低的更不稳定的粒子中。基于关于β衰变的物理原理,β射线从粒子中排出以提高粒子的稳定性水平,因此由于这些粒子的不稳定性水平较高,因此应该在搜索空间中进行较大的跳跃。在这方面,对粒子进行位置更新过程,其中执行向具有最佳稳定性水平和粒子中心的粒子或候选物的受控运动。该算法的这些方面模拟了粒子到达稳定带的趋势,其中大多数已知粒子位于该带附近,并且其中大多数具有更高水平的稳定性。这些方面在数学上表述如下:
X
C
P
=
∑
i
=
1
n
X
i
n
,
i
=
1
,
2
,
…
,
n
\mathrm{X}_{\mathrm{CP}}=\frac{\sum_{\mathrm{i}=1}^{\mathrm{n}} \mathrm{X}_{\mathrm{i}}}{\mathrm{n}}, \mathrm{i}=1,2, \ldots, \mathrm{n}
XCP=n∑i=1nXi,i=1,2,…,n
X
i
New
1
=
X
i
+
(
r
1
×
X
BS
−
r
2
×
X
CP
)
SL
i
,
i
=
1
,
2
,
…
,
n
.
{\text{X}}_{{\text{i}}}^{{{\text{New}}1}} = {\text{X}}_{{\text{i}}} + \frac{{\left( {{\text{r}}_{1} \times {\text{X}}_{{{\text{BS}}}} - {\text{r}}_{2} \times {\text{X}}_{{{\text{CP}}}} } \right)}}{{{\text{SL}}_{{\text{i}}} }},{\text{ i}} = 1,2, \ldots ,{\text{n}}.{ }
XiNew1=Xi+SLi(r1×XBS−r2×XCP), i=1,2,…,n.
为了提高算法的开发和探索水平,对采用β衰变的粒子进行了另一个位置更新过程,其中受控地向具有最佳稳定水平的粒子或候选粒子的粒子或候选粒子在粒子的稳定性水平不影响运动过程的情况下执行。这些方面在数学上表述如下:
X
i
New
2
=
X
i
+
(
r
3
×
X
BS
−
r
4
×
X
Ng
)
,
i
=
1
,
2
,
…
,
n
.
{\text{X}}_{{\text{i}}}^{{{\text{New}}2}} = {\text{X}}_{{\text{i}}} + \left( {{\text{r}}_{3} \times {\text{X}}_{{{\text{BS}}}} - {\text{r}}_{4} \times {\text{ X}}_{{{\text{Ng}}}} } \right),{\text{ i}} = 1,2, \ldots ,{\text{n}}.{ }
XiNew2=Xi+(r3×XBS−r4× XNg), i=1,2,…,n.
如果粒子的中子富集水平低于富集界限(,则假定粒子具有较小的N / Z比,因此粒子倾向于经历电子捕获或正电子发射以向稳定带移动。在这方面,确定搜索空间中的随机移动以考虑这些类型的运动,如下所示:
X i New = X i + r , i = 1 , 2 , … , n . {\text{X}}_{{\text{i}}}^{{{\text{New}}}} = {\text{X}}_{{\text{i}}} + {\text{r}},{\text{ i}} = 1,2, \ldots ,{\text{n}}.{ } XiNew=Xi+r, i=1,2,…,n.
1.2算法描述
1.3算法流程
1.4参考文献
Azizi, M., Aickelin, U., A. Khorshidi, H. et al. Energy valley optimizer: a novel metaheuristic algorithm for global and engineering optimization. Sci Rep 13, 226 (2023). https://doi.org/10.1038/s41598-022-27344-y
二、CEC2020简介
CEC2020共有10个测试函数测试维度包含:2D、5D、10D、15D、20D。CEC2020测试问题随着维度的增加求解极其困难。
三、求解结果
完整代码添加博客下方博主微信:djpcNLP123
将能量谷优化算法ECO运用于求解CEC2020中10个函数,其中每个测试函数可以选择的维度分别有:2D、5D、10D、15D、20D。增大迭代次数,能量谷优化算法ECO的求解效果更佳。本例测试函数维度均为10D(可根据自己需求调整),种群大小为50,最大迭代次数为100次。
close all
clear
clc
MaxFes = 100;%迭代次数
VarNumber = 10;%维度 2/5/10/15/20
nPop = 50;%种群大小
VarMin=-100;%下限
VarMax=100;%上限
fitnessfunc=str2func('cec20_func');
Function_name=10;%测试函数1-10
[Best_Fit,Best_Pos,Curve]=EVO(nPop,MaxFes,VarMin,VarMax,VarNumber,CostFunction);
figure
plot(Curve,'k','linewidth',2.5)
xlabel('迭代次数')
ylabel('适应度值')
legend('EVO')
title(strcat('CEC2020-F',num2str(Function_name)))
部分求解结果:
F1:
F2:
F3:
F4:
F5:
四、参考代码
完整代码添加博客下方博主微信:djpcNLP123