群体智能优化算法-白鲨优化算法(White Shark Optimizer,WSO,含Matlab源代码)

发布于:2025-04-08 ⋅ 阅读:(38) ⋅ 点赞:(0)

摘要

白鲨优化算法(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 利用速度更新与波动频率控制策略,兼具探索性与收敛性,适用于解决连续函数优化、工程问题建模、神经网络参数调优等应用场景。


网站公告

今日签到

点亮在社区的每一天
去签到