一、算法流程
通过回声定位并相互传递探寻猎物信息。研究表明,鲸鱼大脑的某些区域与人类相似,有一种叫做梭形细胞的共同细胞,这些细胞负责人类的判断、情感和社会行为,这种细胞的数量是成年人的两倍,事实证明,鲸鱼可以像人类一样思考、学习、判断、交流,甚至产生情绪化。
座头鲸是最大的古鲸之一,一头成年座头鲸几乎有一辆校车那么大。他们喜欢的猎物是接近海面的磷虾和小型鱼群,在捕猎的过程中相互合作对猎物进行围捕,座头鲸的捕食行为被称为泡泡网觅食法[36],如图 2.1 所示。捕食的过程是沿着圆形或“9”形路径,吐出独特的气泡来完成,是一种独特的行为。在 2011 年之前,这一行为仅仅是基于在地表的观察进行研究,后来 Goldbogen 等人[37]利用传感器展开了深入的研究,他们捕获了 9 头座头鲸的 300 个标签衍生的泡泡网进食事件。研究人员发现两种与气泡有关的动作,将其命名为“上升螺旋”和“双环”。
算法原理
算法流程
WOA算法步骤如下:
Step1.初始化鲸鱼的种群位置X,和参数a ,A,l , p ,t和最大迭代次数Tmax iStep2.计算群体中每个鲸鱼个体的适应度值,记录当前最优解;
Step3.当p<0.5且|4<1时,按照更新位置,否则随机搜索猎物,按照式更新鲸鱼位置;如果p≥0.5,采用气泡网捕食机制,鲸鱼按照式(2.4)更新鲸鱼位置;
Step4.更新全局最优位置,全局最优解;
Step5.判断是否满足算法终止条件,如果是,算法结束;否则转到Step2继续进行位置寻优;
Step6.输出最优位置Xz,和适应度值。
二、代码与仿真
function [sx, sy] = sampleFunction(x, coeff, density)
[~,n] = size(x);
n=n-1;
[~,m] = size(coeff);
sx = [];
sy = [];
for i = 1:n
for j = 0:density
cur_x = x(i)+(x(i+1)-x(i))/density*j;
cur_y = 0;
for k = 1:m
cur_y = cur_y*cur_x+coeff(i,m-k+1);
end
sx = [sx cur_x];
sy = [sy cur_y];
end
end
end
n = 10;
fprintf("n = %d\n", n);
x = (0:n)*2/n-1;
y = f(x);
hold on;
sx = (0:100)*2/100-1;
sy = f(sx);
plot(sx, sy);
coeff_lagrange = myLagrangeInterp(x, y);
% disp(coeff_lagrange);
[sx, sy] = sampleFunction([-1, 1], coeff_lagrange, 100);
plot(sx, sy);
fprintf("Lagrange error: %f\n", compute_error(sx,sy))
coeff_linear = myLinearInterp(x, y);
% disp(coeff_linear);
[sx, sy] = sampleFunction(x, coeff_linear, 10);
plot(sx, sy);
fprintf("Linear error: %f\n", compute_error(sx,sy))
coeff_spline = mySplineInterp(x, y);
% disp(coeff_spline);
[sx, sy] = sampleFunction(x, coeff_spline, 10);
plot(sx, sy);
fprintf("Spline error: %f\n", compute_error(sx,sy))
xlabel('x');
ylabel('y');
lgd = legend('f(x)', 'L_{n}(x)', 'I_h(x)', 'S_3(x)');
lgd.Location = 'southeast';
function y=f(x)
y = 1./(1+25*x.^2);
end
function d = compute_error(sx, sy)
y = f(sx);
d = max(y-sy);
end
仿真结果
结果
算法结果
最优线路
博主简介:本人擅长数据处理、建模仿真、程序设计、论文写作与指导,项目与课题经验交流。个人博客:kelaboshi.com。