获取资源
请见文章第5节:资源获取】白鲸优化算法 (BWO,beluga whale optimization) 是2022 年在白鲸游泳、捕鲸及跌倒等行为中得到启发而提出的一种新型基于种群的元启发式算法。BWO 主要对白鲸游泳、捕食及跌倒 (坠落) 等行为进行模拟,其对应探索、开发及鲸鱼坠落三个阶段。BWO 当中鲸落概率与平衡因子均为自适应的,对开发能力与控制搜索起到决定性作用。除此之外,在开发阶段引入 Levy 飞行策略来进一步提升该阶段的全局收敛性。
混沌是确定性系统自发产生的不稳定现象,它普遍存在于非线性系统当中。由于混沌的遍历性,它能够不重复地历经一定范围的所有状态,利用混沌变量进行优化搜索比盲目无序的随机搜索更具优越性基于此思想,本文将混沌理论引入BWO算法,使算法避免陷入局部最优。
混沌搜索的主要思想是通过某种迭代方式产生混沌序列,一般多采用 Logistic 方程产生混沌序列:
y ( k + 1 ) = μ y ( k ) ( 1 − y ( k ) ) , k = 1 , 2 , . . . , n (1) y(k+1)=\mu y(k)(1-y(k)), k=1,2,...,n\tag1 y(k+1)=μy(k)(1−y(k)),k=1,2,...,n(1)
Logistic映射在分叉参数 3.57 < μ ≤ 4 3.57<\mu \le 4 3.57<μ≤4时处于完全混沌状态,在此区间内方程运动轨迹呈现混沌特征当从取4时可获得较好的效果,本文取 μ = 4 \mu =4 μ=4。
透镜成像折射反向学习策略的思想来自于凸透镜成像的原理。通过基于当前坐标生成一个反向位置来扩展搜索范围,如图1所示。
在二维坐标中,x轴的搜索范围为(a, b), y轴表示一个凸透镜。假设物体A在x轴上的投影为x,高度为h,通过透镜成像,另一侧的图像为A*, A在x轴上的投影为x,高度为h*。通过以上分析,我们可以得到如下公式:
( a + b ) / 2 − x x ∗ − ( a + b ) / 2 = h h ∗ (2) \frac{(a+b)/2-x}{x^{*}-(a+b)/2 }=\frac{h}{h^{*}} \tag2 x∗−(a+b)/2(a+b)/2−x=h∗h(2)
对公式(2)进行转换,即可得到反向解x*的表达式为:
x ∗ = a + b 2 + a + b 2 k − x k (3) x^{*} =\frac{a+b}{2}+\frac{a+b}{2k}-\frac{x}{k} \tag3 x∗=2a+b+2ka+b−kx(3)
其中, k = h / h ∗ k=h/h^{*} k=h/h∗, a a a和 b b b可以视为某维度的上下限。本文中的 k k k是一个与迭代次数相关的动态自适应值。
Function_name = 'F1'; % 测试函数名
Npop = 30; % 种群个数
Max_it = 500; % 最大迭代次数
[lb,ub,nD,fobj]=Get_Functions_details(Function_name);
[xposbest_BWO,fvalbest_BWO,Curve_BWO]=BWO(Npop,Max_it,lb,ub,nD,fobj); % 白鲸优化算法
[fvalbest_GWO,xposbest_GWO,Curve_GWO]=GWO(Npop,Max_it,lb,ub,nD,fobj); % 灰狼优化算法
[fvalbest_WOA,xposbest_WOA,Curve_WOA]=WOA(Npop,Max_it,lb,ub,nD,fobj); % 鲸鱼优化算法
[fvalbest_SSA,xposbest_SSA,Curve_SSA]=SSA(Npop,Max_it,lb,ub,nD,fobj); % 麻雀搜索算法
[xposbest_EBWO,fvalbest_EBWO,Curve_EBWO]=EBWO(Npop,Max_it,lb,ub,nD,fobj); % 改进白鲸优化算法
figure('Position',[454 445 694 297]);
subplot(1,2,1);
func_plot(Function_name);
title('Parameter space')
xlabel('x_1');
ylabel('x_2');
zlabel([Function_name,'( x_1 , x_2 )'])
subplot(1,2,2);
semilogy(Curve_GWO,'Color','b','LineWidth',2)
hold on
semilogy(Curve_WOA,'Color','g','LineWidth',2)
hold on
semilogy(Curve_SSA,'Color','m','LineWidth',2)
hold on
semilogy(Curve_BWO,'Color','k','LineWidth',2)
hold on
semilogy(Curve_EBWO,'Color','r','LineWidth',2)
title(Function_name)
xlabel('Iteration');
ylabel('Best fitness function');
axis tight
legend('GWO','WOA','SSA','BWO','EBWO')
可以获取完整代码资源。