摘要
白鲨优化算法(White Shark Optimizer,WSO)是一种新颖的自然启发式智能优化算法,灵感来源于白鲨在海洋中的狩猎行为。该算法模拟白鲨通过感知水波、声波和猎物位置,动态调整运动轨迹以逼近最优解。WSO 同时具备全局探索和局部开发能力,适用于求解各种复杂的连续优化问题。
一、白鲨优化算法(WSO)原理解析
1.1 启发背景
WSO 模拟了白鲨在水中通过感知环境信号(如声波、振动、猎物位置)并结合其波动式运动,逐步逼近目标猎物的位置,最终实现最优捕食路径的寻找。
1.2 算法结构概览
整个算法流程可分为以下几步:
- 初始化阶段:随机生成初始鲨鱼种群位置与速度。
- 评估适应度:计算每条鲨鱼当前解的目标函数值。
- 更新位置与速度:依据波动频率调节机制、感知机制与群体协同机制进行搜索。
- 引导与更新最优解:实时更新个体最优与全局最优。
- 收敛记录:每轮迭代记录当前全局最优。
1.3 算法关键公式解释
(1)速度更新公式
(2)位置更新公式(波动驱动)
(3)局部感知机制(模拟鱼群聚集)
二、完整带注释 MATLAB 代码
function [fmin0, gbest, ccurve] = WSO(whiteSharks, itemax, lb, ub, dim, fobj)
% 初始化收敛曲线
ccurve = zeros(1, itemax);
% 初始化种群位置
WSO_Positions = initialization(whiteSharks, dim, ub, lb);
% 初始化速度
v = zeros(size(WSO_Positions));
% 评估初始种群适应度
for i = 1:whiteSharks
fit(i,1) = fobj(WSO_Positions(i,:));
end
% 初始化个体适应度和全局最优解
fitness = fit;
[fmin0, index] = min(fit);
wbest = WSO_Positions; % 记录每个个体的历史最优位置
gbest = WSO_Positions(index,:); % 当前种群最优个体
% 参数设置
fmax = 0.75; fmin = 0.07; tau = 4.11;
mu = 2 / abs(2 - tau - sqrt(tau^2 - 4 * tau));
pmin = 0.5; pmax = 1.5; a0 = 6.25; a1 = 100; a2 = 0.0005;
% 迭代主循环
for ite = 1:itemax
mv = 1 / (a0 + exp((itemax/2.0 - ite) / a1)); % 感知概率(用于模拟捕食模式)
s_s = abs(1 - exp(-a2 * ite / itemax)); % 局部波动程度
% 自适应个体参数
p1 = pmax + (pmax - pmin) * exp(-(4*ite/itemax)^2);
p2 = pmin + (pmax - pmin) * exp(-(4*ite/itemax)^2);
% 更新速度
nu = randi([1 whiteSharks], 1, whiteSharks);
for i = 1:whiteSharks
rr = 1 + rand() * 2;
wr = abs(((2*rand()) - (1*rand() + rand())) / rr);
v(i,:) = mu * v(i,:) + wr * (wbest(nu(i),:) - WSO_Positions(i,:));
end
% 位置更新
f = fmin + (fmax - fmin)/(fmax + fmin);
for i = 1:whiteSharks
a = WSO_Positions(i,:) > ub;
b = WSO_Positions(i,:) < lb;
wo = xor(a,b);
if rand < mv
WSO_Positions(i,:) = WSO_Positions(i,:).*(~wo) + (ub.*a + lb.*b);
else
WSO_Positions(i,:) = WSO_Positions(i,:) + v(i,:) / f;
end
end
% 局部聚集机制
for i = 1:whiteSharks
for j = 1:dim
if rand < s_s
Dist = abs(rand * (gbest(j) - WSO_Positions(i,j)));
if i == 1
WSO_Positions(i,j) = gbest(j) + rand * Dist * sign(rand - 0.5);
else
temp = gbest(j) + rand * Dist * sign(rand - 0.5);
WSO_Positions(i,j) = (temp + WSO_Positions(i-1,j)) / 2 * rand;
end
end
end
end
% 更新适应度并跟踪最优解
for i = 1:whiteSharks
if all(WSO_Positions(i,:) >= lb) && all(WSO_Positions(i,:) <= ub)
fit(i) = fobj(WSO_Positions(i,:));
if fit(i) < fitness(i)
wbest(i,:) = WSO_Positions(i,:);
fitness(i) = fit(i);
end
if fitness(i) < fmin0
fmin0 = fitness(i);
gbest = wbest(i,:);
end
end
end
% 存储收敛曲线
ccurve(ite) = fmin0;
end
end
% 初始化函数
function pos = initialization(n, dim, ub, lb)
pos = rand(n, dim) .* (ub - lb) + lb;
end
三、总结
白鲨优化算法(WSO)是一种具有强全局搜索能力的智能优化算法,它结合了白鲨在自然界中对目标的感知机制和群体协同行为,模拟了猎物捕捉与波动运动等复杂行为特征。WSO 利用速度更新与波动频率控制策略,兼具探索性与收敛性,适用于解决连续函数优化、工程问题建模、神经网络参数调优等应用场景。