【多目标优化算法】多目标粘液霉菌算法(MOSMA)附Matlab代码

简介: 【多目标优化算法】多目标粘液霉菌算法(MOSMA)附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测雷达通信 无线传感器

信号处理图像处理路径规划元胞自动机无人机

⛄ 内容介绍

本文提出了一种多目标粘液模算法 (MOSMA),它是最近开发的粘液模算法 (SMA) 的多目标变体,用于处理行业中的多目标优化问题。最近,为了处理优化问题,已经为优化社区提出了几种元启发式和进化优化技术。在评估多目标优化 (MOO) 问题时,这些方法往往会遇到低质量的解决方案,而不是解决识别帕累托最优解决方案的准确估计和增加所有目标的分布的目标函数。SMA 方法遵循从实验室实验中粘菌的振荡行为获得的逻辑。与其他成熟的方法相比,SMA 算法显示出强大的性能,它是通过使用正负反馈系统结合最佳食物路径而设计的。所提出的 MOSMA 算法采用相同的基本 SMA 收敛机制,并结合精英非支配排序方法来估计帕累托最优解。作为一种后验方法,在 MOSMA 中保持多目标公式,并使用拥挤距离算子来确保增加所有目标的最优解的覆盖范围。所提出的 MOSMA 算法采用相同的基本 SMA 收敛机制,并结合精英非支配排序方法来估计帕累托最优解。作为一种后验方法,在 MOSMA 中保持多目标公式,并使用拥挤距离算子来确保增加所有目标的最优解的覆盖范围。所提出的 MOSMA 算法采用相同的基本 SMA 收敛机制,并结合精英非支配排序方法来估计帕累托最优解。作为一种后验方法,在 MOSMA 中保持多目标公式,并使用拥挤距离算子来确保增加所有目标的最优解的覆盖范围。

⛄ 部分代码

function [Score,PopObj] = HV(PopObj,PF)

% <metric> <max>

% Hypervolume


%


   % Normalize the population according to the reference point set

   [N,M]  = size(PopObj);

   fmin   = min(min(PopObj,[],1),zeros(1,M));

   fmax   = max(PF,[],1);

   PopObj = (PopObj-repmat(fmin,N,1))./repmat((fmax-fmin)*1.1,N,1);

   PopObj(any(PopObj>1,2),:) = [];

   % The reference point is set to (1,1,...)

   RefPoint = ones(1,M);

   if isempty(PopObj)

       Score = 0;

   elseif M < 4

       % Calculate the exact HV value

       pl = sortrows(PopObj);

       S  = {1,pl};

       for k = 1 : M-1

           S_ = {};

           for i = 1 : size(S,1)

               Stemp = Slice(cell2mat(S(i,2)),k,RefPoint);

               for j = 1 : size(Stemp,1)

                   temp(1) = {cell2mat(Stemp(j,1))*cell2mat(S(i,1))};

                   temp(2) = Stemp(j,2);

                   S_      = Add(temp,S_);

               end

           end

           S = S_;

       end

       Score = 0;

       for i = 1 : size(S,1)

           p     = Head(cell2mat(S(i,2)));

           Score = Score + cell2mat(S(i,1))*abs(p(M)-RefPoint(M));

       end

   else

       % Estimate the HV value by Monte Carlo estimation

       SampleNum = 1000000;

       MaxValue  = RefPoint;

       MinValue  = min(PopObj,[],1);

       Samples   = unifrnd(repmat(MinValue,SampleNum,1),repmat(MaxValue,SampleNum,1));

       if gpuDeviceCount > 0

           % GPU acceleration

           Samples = gpuArray(single(Samples));

           PopObj  = gpuArray(single(PopObj));

       end

       for i = 1 : size(PopObj,1)

           drawnow();

           domi = true(size(Samples,1),1);

           m    = 1;

           while m <= M && any(domi)

               domi = domi & PopObj(i,m) <= Samples(:,m);

               m    = m + 1;

           end

           Samples(domi,:) = [];

       end

       Score = prod(MaxValue-MinValue)*(1-size(Samples,1)/SampleNum);

   end

end


function S = Slice(pl,k,RefPoint)

   p  = Head(pl);

   pl = Tail(pl);

   ql = [];

   S  = {};

   while ~isempty(pl)

       ql  = Insert(p,k+1,ql);

       p_  = Head(pl);

       cell_(1,1) = {abs(p(k)-p_(k))};

       cell_(1,2) = {ql};

       S   = Add(cell_,S);

       p   = p_;

       pl  = Tail(pl);

   end

   ql = Insert(p,k+1,ql);

   cell_(1,1) = {abs(p(k)-RefPoint(k))};

   cell_(1,2) = {ql};

   S  = Add(cell_,S);

end


function ql = Insert(p,k,pl)

   flag1 = 0;

   flag2 = 0;

   ql    = [];

   hp    = Head(pl);

   while ~isempty(pl) && hp(k) < p(k)

       ql = [ql;hp];

       pl = Tail(pl);

       hp = Head(pl);

   end

   ql = [ql;p];

   m  = length(p);

   while ~isempty(pl)

       q = Head(pl);

       for i = k : m

           if p(i) < q(i)

               flag1 = 1;

           else

               if p(i) > q(i)

                   flag2 = 1;

               end

           end

       end

       if ~(flag1 == 1 && flag2 == 0)

           ql = [ql;Head(pl)];

       end

       pl = Tail(pl);

   end  

end


function p = Head(pl)

   if isempty(pl)

       p = [];

   else

       p = pl(1,:);

   end

end


function ql = Tail(pl)

   if size(pl,1) < 2

       ql = [];

   else

       ql = pl(2:end,:);

   end

end


function S_ = Add(cell_,S)

   n = size(S,1);

   m = 0;

   for k = 1 : n

       if isequal(cell_(1,2),S(k,2))

           S(k,1) = {cell2mat(S(k,1))+cell2mat(cell_(1,1))};

           m = 1;

           break;

       end

   end

   if m == 0

       S(n+1,:) = cell_(1,:);

   end

   S_ = S;    

end

⛄ 运行结果

⛄ 参考文献

M. Premkumar, P. Jangir, R. Sowmya, H. H. Alhelou, A. A. Heidari and H. Chen, "MOSMA: Multi-objective Slime Mould Algorithm Based on Elitist Non-dominated Sorting," in IEEE Access, doi: 10.1109/ACCESS.2020.3047936.

❤️ 关注我领取海量matlab电子书和数学建模资料
❤️部分理论引用网络文献,若有侵权联系博主删除


相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
18天前
|
存储 算法 编译器
算法入门:剑指offer改编题目:查找总价格为目标值的两个商品
给定递增数组和目标值target,找出两数之和等于target的两个数字。利用双指针法,left从头、right从尾向中间逼近,根据和与target的大小关系调整指针,时间复杂度O(n),空间复杂度O(1)。找不到时返回{-1,-1}。
|
27天前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
103 2
|
27天前
|
canal 算法 vr&ar
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
|
17天前
|
机器学习/深度学习 算法 物联网
基于遗传方法的动态多目标优化算法
基于遗传方法的动态多目标优化算法
|
27天前
|
机器学习/深度学习 存储 算法
【微电网调度】考虑需求响应的基于改进多目标灰狼算法的微电网优化调度研究(Matlab代码实现)
【微电网调度】考虑需求响应的基于改进多目标灰狼算法的微电网优化调度研究(Matlab代码实现)
|
27天前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
143 3
|
1月前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
|
1月前
|
传感器 机器学习/深度学习 算法
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
|
21天前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
21天前
|
开发框架 算法 .NET
基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA
简介:本文介绍基于ADMM的MIMO信号检测算法,结合无穷范数优化与交替方向乘子法,降低计算复杂度并提升检测性能。涵盖MATLAB 2024b实现效果图、核心代码及详细注释,并对比ML、MMSE、ZF、OCD_MMSE与LAMA等算法。重点分析LAMA基于消息传递的低复杂度优势,适用于大规模MIMO系统,为通信系统检测提供理论支持与实践方案。(238字)

热门文章

最新文章