当前位置: 首页 > news >正文

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

摘要

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

http://www.dtcms.com/a/117907.html

相关文章:

  • JS中的WeakMap
  • 思考 - 操作系统
  • 路由器工作在OSI模型的哪一层?
  • babel-runtime 如何缩小打包体积
  • usbip学习记录
  • 基于springboot微信小程序课堂签到及提问系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 自动提取pdf公式 ➕ 输出 LaTeX
  • C++ 指针类型转换全面解析与最佳实践
  • PyTorch标注工具
  • 【C++】Chapter04<STL部分>:STL标准模板库概要
  • 【团体程序涉及天梯赛】L1~L2实战反思合集(C++)
  • Java并发编程高频面试题
  • Dubbo(41)如何排查Dubbo的服务不可用问题?
  • OpenCV阈值处理详解
  • 企业数据分析何时该放弃Excel?
  • No module named ‘keras.engine‘
  • mysql8.0.29 win64下载
  • SpringCloud的简单介绍
  • Jmeter脚本使用要点记录
  • volatile关键字用途说明
  • 打印网络内的层名称与特征图大小
  • 数据操作语言
  • 初探:OutSystems的运行原理是什么?
  • R语言赋能气象水文科研:从多维数据处理到学术级可视化
  • Python爬虫HTTP代理使用教程:突破反爬的实战指南
  • 隐私计算的崛起:数据安全的未来守护者
  • ollama+open-webui本地部署自己的模型到d盘+两种open-webui部署方式(详细步骤+大量贴图)
  • obj.name 和 obj[name]的区别?【前端】
  • 【Yonyou-BIP】平台档案删除时报自建应用实体错误
  • Bash判断命令是否存在