AOAAO:算术优化算法与Aquila Optimizer的混合算法
为了求解描述实际问题的数学方程组,人们提出了许多新算法,但目前还没有一种算法能解决所有问题,而且大多数算法在某些方面存在缺陷,在应用中需要改进。为了寻找更有效的优化算法,并受到算术优化算法(AOA)和Aquila优化算法(AO)更好性能的启发,本文提出了它们的混合算法,并将其缩写为AOAAO。考虑到HarrisHawk优化(HHO)算法的较好性能,引入能量参数E来平衡AOAAO群中个体的探索和开发过程,并引入分段线性映射来降低能量参数的随机性。
A. 水蛭优化器
AO 群体中的个体将采用捕食策略捕食猎物。
A. 阿拉奎优化器
第一种策略:高空飞行搜索猎物。在这种策略中,水蛭将在高空飞行并进行初始搜索以找到目标。一旦找到猎物,它将垂直向下移动到猎物。这种行为可以表示为:
X ( t + 1 ) = X b e s t ( t ) × ( 1 − t T ) + ( X U ( t ) − X b e s t ( t ) ) × rand X(t+1) = X_{best}(t) \times \left(1 - \frac{t}{T}\right) + (X_{U}(t) - X_{best}(t)) \times \text{rand} X(t+1)=Xbest(t)×(1−Tt)+(XU(t)−Xbest(t))×rand
其中 X ( t + 1 ) X(t+1) X(t+1) 表示个体在 t + 1 t+1 t+1 次迭代中的位置, X b e s t ( t ) X_{best}(t) Xbest(t) 表示当前全局最佳位置, t t t 和 T T T 分别表示当前第 t t t 次迭代和最大允许迭代次数。 X M ( t ) X_{M}(t) XM(t) 表示当前迭代中个体的当前平均位置。 rand \text{rand} rand 是一个在区间 [0, 1] 内服从高斯分布的随机数。
第二种策略:短滑翔攻击。在这种策略中,水蛭将从高空飞行切换到在猎物头顶盘旋,为水蛭的本能捕食行为做准备。这个位置更新可以表示为:
X ( t + 1 ) = X b e s t ( t ) × L F ( D ) + X R ( t ) + ( y − x ) × rand X(t+1) = X_{best}(t) \times LF(D) + X_{R}(t) + (y - x) \times \text{rand} X(t+1)=Xbest(t)×LF(D)+XR(t)+(y−x)×rand
其中, X R ( t ) X_{R}(t) XR(t) 是水蛭的随机位置, D D D 是维度的大小。 L F LF LF 表示莱维飞行函数。 y y y 和 x x x 表示搜索的形状,可以表示为:
{ z = ( r 1 + 0.00565 × D 1 ) × sin ( − ω × D 1 + 3 × π 2 ) y = ( r 1 + 0.00565 × D 1 ) × cos ( − ω × D 1 + 3 × π 2 ) \begin{cases} z = (r_1 + 0.00565 \times D_1) \times \sin\left(-\omega \times D_1 + \frac{3 \times \pi}{2}\right) \\ y = (r_1 + 0.00565 \times D_1) \times \cos\left(-\omega \times D_1 + \frac{3 \times \pi}{2}\right) \end{cases} {z=(r1+0.00565×D1)×sin(−ω×D1+23×π)y=(r1+0.00565×D1)×cos(−ω×D1+23×π)
L F ( z ) = 0.01 × μ × σ ∣ v ∣ 1 β , σ = ( Γ ( 1 + β ) × sin ( π β 2 ) Γ ( 1 + β 2 ) × β × 2 ( β 2 ) ) 1 β LF(z) = 0.01 \times \frac{\mu \times \sigma}{|v|^{\frac{1}{\beta}}}, \quad \sigma = \left(\frac{\Gamma(1 + \beta) \times \sin\left(\frac{\pi \beta}{2}\right)}{\Gamma\left(\frac{1 + \beta}{2}\right) \times \beta \times 2^{\left(\frac{\beta}{2}\right)}}\right)^{\frac{1}{\beta}} LF(z)=0.01×∣v∣β1μ×σ,σ= Γ(21+β)×β×2(2β)Γ(1+β)×sin(2πβ) β1
其中, r 1 r_1 r1 是从 1 到 20 的随机整数, D 1 D_1 D1 是从 1 到维度 D D D 的随机整数, ω \omega ω 是一个常数 0.005。
第三种策略:低空飞行接近和慢速攻击。在这种策略中,水蛭最初发现并确定猎物的大致位置,然后水蛭将垂直下降进行初步预测,如果找到猎物则减速。这种初始预测行为可以表示为:
X ( t + 1 ) = ( X b e s t ( t ) − X M ( t ) ) × α − rand + ( U B − L B ) × rand + L B ) × δ X(t+1) = (X_{best}(t) - X_{M}(t)) \times \alpha - \text{rand} + (UB - LB) \times \text{rand} + LB) \times \delta X(t+1)=(Xbest(t)−XM(t))×α−rand+(UB−LB)×rand+LB)×δ
其中 α \alpha α 和 δ \delta δ 是开发过程中的调整参数,分别固定为 0.1、 U B UB UB 和 L B LB LB 是搜索空间的上界和下界。
第四种策略:陆地行走和捕食猎物。在这种策略中,水蛭将跟随猎物的逃逸轨迹追逐猎物,并攻击猎物。这种预测行为可以表示为:
X ( t + 1 ) = { − Q F × X b e s t ( t ) − ( G 1 × X ( t ) × rand ) − G 2 × L F ( D ) + rand × G 1 X(t+1) = \begin{cases} -QF \times X_{best}(t) - (G_1 \times X(t) \times \text{rand}) - G_2 \times LF(D) + \text{rand} \times G_1 \end{cases} X(t+1)={−QF×Xbest(t)−(G1×X(t)×rand)−G2×LF(D)+rand×G1
Q F ( t ) = t 2 − rand − 1 n 2 QF(t) = t \frac{2 - \text{rand} - 1}{n^2} QF(t)=tn22−rand−1
G 1 = 2 × rand − 1 G 2 = 2 × ( 1 − t T ) G_1 = 2 \times \text{rand} - 1 \\ G_2 = 2 \times \left(1 - \frac{t}{T}\right) G1=2×rand−1G2=2×(1−Tt)
其中 Q F QF QF 是平均搜索策略的质量函数, G 1 G_1 G1 是随机运动过程中的参数, t t t 是一个在 [-1, 1] 范围内的随机数, G 2 G_2 G2 是水蛭追踪猎物过程中的飞行斜率,表示为 2 次线性递减到 0。
B. 算术优化算法
在 AOA 算法中,引入了四个基本算术运算符来优化算法的探索阶段和开发阶段。
首先,探索阶段。根据算术运算符,除法运算符和乘法运算符可以通过数学计算获得高密度结果,因为这两个运算符具有低离散度并且容易接近目标,这无疑与探索阶段的特性一致。因此,这些运算符被引入到探索阶段。
X ( t + 1 ) = { X b e s t ( t ) ÷ ( M O P + ϵ ) × ( ( U B − L B ) × μ + L B ) r 3 < 0.5 M O P × ( M O P − L B ) × μ + L B otherwise X(t+1) = \begin{cases} X_{best}(t) \div (MOP + \epsilon) \times ((UB - LB) \times \mu + LB) & r_3 < 0.5 \\ MOP \times (MOP - LB) \times \mu + LB & \text{otherwise} \end{cases} X(t+1)={Xbest(t)÷(MOP+ϵ)×((UB−LB)×μ+LB)MOP×(MOP−LB)×μ+LBr3<0.5otherwise
其中 ϵ \epsilon ϵ 是搜索过程中的一个小整数,固定为 0.5, μ \mu μ 是控制参数,固定为 0.5。数学优化概率 (MOP) 是一个系数,作为一个敏感系数,用于定义搜索精度,固定为 5。数学优化加速器 (MOAA) 用于选择搜索阶段, Max \text{Max} Max 和 Min \text{Min} Min 是加速度函数的最大值和最小值。
其次,开发阶段。根据算术运算符,减法运算符和加法运算符可以通过数学计算获得高密度结果,因为这两个运算符具有低离散度并且容易接近目标,这无疑与开发阶段的特性一致。因此,这些运算符被引入到开发阶段。
X ( t + 1 ) = { X b e s t ( t ) − M O P × ( ( U B − L B ) × μ + L B ) r 3 < 0.5 X b e s t ( t ) + M O P × ( ( U B − L B ) × μ + L B ) otherwise X(t+1) = \begin{cases} X_{best}(t) - MOP \times ((UB - LB) \times \mu + LB) & r_3 < 0.5 \\ X_{best}(t) + MOP \times ((UB - LB) \times \mu + LB) & \text{otherwise} \end{cases} X(t+1)={Xbest(t)−MOP×((UB−LB)×μ+LB)Xbest(t)+MOP×((UB−LB)×μ+LB)r3<0.5otherwise
第三节. 缺陷和改进算法
AO 群体中的个体在搜索空间中执行水蛭的快速飞行和狩猎搜索过程。直接添加全局最佳位置以更新个体的位置会导致更快的收敛和更强的搜索能力,但同时,个体也将缺乏逃脱局部最优的能力,因此,个体将很容易陷入局部最优。此外,对于 AO 群体中的个体,实验结果表明,探索阶段的除法和乘法运算符的收敛速度相当低,种群多样性不足,波动性不足。此外,从探索阶段切换到开发阶段的机制也不完美。因此,应进行改进以克服这些缺点。
A. AO 与 AOA 算法的混合
考虑到 AOA 群体中个体与 AO 群体中个体之间的差异,如方程 (5)、(6)、(9) 和 (11) 所示,AO 群体中的个体在搜索过程中将比 AO 群体中的个体表现得更好。然而,在如方程 (5)、(6) 和 (11) 所示的探索过程中,AO 群体中的个体将比 AO 群体中的个体表现得更差。尽管这两种算法在优化中都表现良好,但 AO 群体中的个体的探索能力将不令人满意,而 AO 群体中的个体的探索能力将不如 AO 群体中的个体。因此,如果将 AO 群体中的个体的探索过程与 AO 群体中的个体的探索过程结合起来,可能会更好。因此,需要引入另一个参数来显示 AO 群体中个体的探索过程与新组合算法中个体的探索过程之间的关系。随机数可能是一个选择,考虑到 AO 群体中个体在早期的更好性能,能量参数 E E E 可能会有所帮助。
B. 平衡探索和开发比率的能量参数
E = 2 E 0 ( 1 − t T ) E = 2E_0 \left(1 - \frac{t}{T}\right) E=2E0(1−Tt)
其中 E 0 E_0 E0 是猎物的初始能量,是一个 [-1, 1] 范围内的随机值。根据 HHO 算法,当 ∣ E ∣ ≥ 1 |E| \geq 1 ∣E∣≥1 时,哈里斯鹰开始寻找猎物的位置,当 ∣ E ∣ < 1 |E| < 1 ∣E∣<1 时,哈里斯鹰开始捕获猎物。
C. 分段线性映射
字面意思是,混沌是随机性的一个很好的替代品。因此,我们引入了混沌映射来替代算法中的随机性。在本文中,引入了分段线性映射,其形式如下:
s ( n + 1 ) = { x n 1 − λ , 0 < x n < 1 − α x n − ( 1 − λ ) α , ( d = 1 − λ ) < x n < 1 s(n+1) = \begin{cases} \frac{x_n}{1 - \lambda}, & 0 < x_n < 1 - \alpha \\ \frac{x_n - (1 - \lambda)}{\alpha}, & (d = 1 - \lambda) < x_n < 1 \end{cases} s(n+1)={1−λxn,αxn−(1−λ),0<xn<1−α(d=1−λ)<xn<1
然后,混沌映射使能量参数引入到新的混合算法中:
B = 2 E 0 ( 1 − t T ) + ω max − ( ω max − ω min ) T T x n B = 2E_0 \left(1 - \frac{t}{T}\right) + \omega_{\max} - \left(\omega_{\max} - \omega_{\min}\right) \frac{T}{T} x_n B=2E0(1−Tt)+ωmax−(ωmax−ωmin)TTxn
其中, λ \lambda λ 的值为 0.6, ω max \omega_{\max} ωmax 和 ω min \omega_{\min} ωmin 的值分别为 0.9 和 0.5,分别代表当前解。改进的参数 E E E 将随着迭代次数的增加而线性增加,使更多个体在迭代结束时保持在探索阶段,如图 1 所示。
图1 改进参数的迭代图
% Y.J. Zhang, Y.X. Yan, J. Zhao, Z.M. Gao,
% AOAAO: The Hybrid Algorithm of Arithmetic Optimization Algorithm With Aquila Optimizer,
% IEEE Access, 10 (2022), 10907-10933.
% doi:10.1109/ACCESS.2022.3144431.function [Best_FF,Best_P,Conv_curve]=AOAAO(N,M_Iter,LB,UB,Dim,F_obj)
% display('AOAAO Working');%Two variables to keep the positions and the fitness value of the best-obtained solutionBest_P=zeros(1,Dim);Best_FF=inf;Conv_curve=zeros(1,M_Iter);%Initialize the positions of solutionX=initialization(N,Dim,UB,LB);Xnew=X;Ffun=zeros(1,size(X,1));% (fitness values)Ffun_new=zeros(1,size(Xnew,1));% (fitness values)MOP_Max=1;MOP_Min=0.2;C_Iter=1;Alpha=5;Mu=0.499;chaos = PiecewiseLinear(M_Iter);for i=1:size(X,1)Ffun(1,i)=F_obj(X(i,:)); if Ffun(1,i)<Best_FFBest_FF=Ffun(1,i);Best_P=X(i,:);endendto = 1:Dim;u = .0265;r0 = 10;r = r0 +u*to;omega = .005;phi0 = 3*pi/2;phi = -omega*to+phi0;x = r .* sin(phi); % Eq. (9)y = r .* cos(phi); % Eq. (10)QF=C_Iter^((2*rand()-1)/(1-M_Iter)^2); % Eq. (15) while C_Iter<M_Iter+1 %Main loopMOP=1-((C_Iter)^(1/Alpha)/(M_Iter)^(1/Alpha)); % Probability Ratio MOA=MOP_Min+C_Iter*((MOP_Max-MOP_Min)/M_Iter); %Accelerated function E1=2*(1-(C_Iter/M_Iter)); %Update the Position of solutionsfor i=1:size(X,1) % if each of the UB and LB has a just value E0=2*rand()-1; Escaping_Energy=E1*(E0)+(0.9-0.4*C_Iter/M_Iter)*chaos(C_Iter); if abs(Escaping_Energy)>=1q=rand(); if q<0.5X1=Best_P(1,:)*(1-C_Iter/M_Iter)+(mean(X(i,:))-Best_P(1,:))*rand(); % Eq. (3) and Eq. (4)if F_obj(X1)<F_obj(X(i,:))Xnew(i,:)=X1;endelseif q>=0.5X2=Best_P(1,:).*Levy(Dim)+X((floor(N*rand()+1)),:)+(y-x)*rand; % Eq. (5)if F_obj(X2)<F_obj(X(i,:))Xnew(i,:)=X2;endendelseif abs(Escaping_Energy)<1r1=rand();if (size(LB,2)==1)if r1<MOAr2=rand();if r2>0.5X3=Best_P(1,:)/(MOP+eps)*((UB-LB)*Mu+LB);if F_obj(X3)<F_obj(X(i,:))Xnew(i,:)=X3;endelseX4=Best_P(1,:)*MOP*((UB-LB)*Mu+LB);if F_obj(X4)<F_obj(X(i,:))Xnew(i,:)=X4;endendelser3=rand();if r3>0.5Xnew(i,:)=Best_P(1,:)-MOP*((UB-LB)*Mu+LB);elseXnew(i,:)=Best_P(1,:)+MOP*((UB-LB)*Mu+LB);endend end endFlag_UB=Xnew(i,:)>UB; % check if they exceed (up) the boundariesFlag_LB=Xnew(i,:)<LB; % check if they exceed (down) the boundariesXnew(i,:)=(Xnew(i,:).*(~(Flag_UB+Flag_LB)))+UB.*Flag_UB+LB.*Flag_LB;Ffun_new(1,i)=F_obj(Xnew(i,:)); % calculate Fitness function if Ffun_new(1,i)<Ffun(1,i)X(i,:)=Xnew(i,:);Ffun(1,i)=Ffun_new(1,i);endif Ffun(1,i)<Best_FFBest_FF=Ffun(1,i);Best_P=X(i,:);endend%Update the convergence curveConv_curve(C_Iter)=Best_FF;%Print the best solution details after every 50 iterationsif mod(C_Iter,50)==0display(['At iteration ', num2str(C_Iter), ' the best solution fitness is ', num2str(Best_FF)]);endC_Iter=C_Iter+1; % incremental iterationend
end
function o=Levy(d)beta=1.5;sigma=(gamma(1+beta)*sin(pi*beta/2)/(gamma((1+beta)/2)*beta*2^((beta-1)/2)))^(1/beta);u=randn(1,d)*sigma;v=randn(1,d);step=u./abs(v).^(1/beta);o=step;
endfunction [xlist] =PiecewiseLinear(maxIter)initial_value=0.7;a=0.6;x = initial_value;xlist = zeros(1,maxIter);for i=1:maxIterif x > 0 && x < 1-ax = x/(1-a);elsex = (x-(1-a))/a;endxlist(i) = x;end
end