基于Matlab实现多目标粘液霉菌算法的示例代码

 更新时间:2022年05月14日 14:31:25   作者:电力系统与算法之美  
多目标粘液霉菌算法(MOSMA),这是最近开发的粘液霉菌算法(SMA)的多目标变体,用于处理工业中的多目标优化问题。本文将用Matlab实现这一算法,需要的可以参考一下

1.概述

多目标粘液霉菌算法(MOSMA),这是最近开发的粘液霉菌算法(SMA)的多目标变体,用于处理工业中的多目标优化问题。最近,为了处理优化问题,已经为优化社区推荐了几种元启发式和进化优化技术。在评估多目标优化(MOO)问题时,这些方法往往受到低质量解的影响,而不是解决识别帕累托最优解的准确估计和增加所有目标的分布的目标函数。SMA方法遵循从实验室实验中粘液霉菌振荡行为中获得的逻辑。与其他成熟的方法相比,SMA算法显示出强大的性能,它是通过使用正负反馈系统结合最佳食物路径而设计的。所提出的MOSMA算法采用相同的底层SMA收敛机制,结合精英非支配排序方法来估计帕累托最优解。作为后验方法,在MOSMA中保持多目标公式,并利用拥挤距离运算符来确保增加所有目标中最佳解决方案的覆盖范围。为了验证和确认MOSMA的性能,考虑了41个不同的案例研究,包括无约束,约束和现实世界的工程设计问题。将MOSMA的性能与多目标共生生物搜索(MOSOS),基于分解的多目标进化算法(MOEA / D)和多目标水循环算法(MOWCA)在不同的性能指标方面进行了比较,例如代际距离(GD),倒置代际距离(IGD),最大传播(MS),间距和运行时。仿真结果验证了所提算法在实现线性、非线性、连续和离散帕累托最优前沿等多目标问题高质量解方面的优势。结果表明了所提算法在解决复杂的多目标问题方面的有效性。

2.算法过程

3.数值实验

4.Matlab代码实现

%%  (ZDT3)
function f = zdt3 (x)
% 两个目标函数
% 变量数目是 30. x [0,1]
f = [];
n=length(x);
g=1+9*sum(x(2:n))/(n-1);
f(1)=x(1);
f(2)=1-sqrt(x(1)/g)-(x(1)/g)*sin(10*pi*x(1));
%%===MOSMA:多目标粘液霉菌算法=====
 
%% 目标函数
% 目标函数描述包含了有关目标函数的信息。M为目标空间的维数,D为决策变量空间的维数,
% LB和UB为决策变量空间中变量的取值范围。
% 用户必须使用决策变量定义目标函数。务必编辑功能‘评估_目标',以适应您的需要。
clc
clear all
D = 30; % 决策变量数目
M = 2; % 目标函数的个数
K=M+D;
LB = ones(1, D).*0; %  LB - 表示每个决策变量的最小值的十进制值的向量。
UB = ones(1, D).*1; % UB - 决策变量的最大可能值向量。
GEN = 200;  % 设置最大生成数
ecosize = 200;      % 种群数量 (NP)
ishow = 10;
%% 开始进化过程
Pareto = MOSMA(D,M,LB,UB,ecosize,GEN,ishow);
Obtained_Pareto= Pareto(:,D+1:D+M); % extract data to plot
Obtained_Pareto=sortrows(Obtained_Pareto,2);
True_Pareto=load('ZDT3.txt');
%% 可视化
%% =========两个目标函数时======================
if M == 2
    plot(Obtained_Pareto(:,1),Obtained_Pareto(:,2),'o','LineWidth',2,...
        'MarkerEdgeColor','r','MarkerSize',2);
    hold on
    plot(True_Pareto(:,1),True_Pareto(:,2),'k'); 
    title('采用MOSMA算法求解Pareto最优解集');
    legend('MOSMA');
    xlabel('F_1');
    ylabel('F_2');
%% =====3个目标函数时==========================
elseif M == 3   
    plot3(Obtained_Pareto(:,1),Obtained_Pareto(:,2),Obtained_Pareto(:,3),'o','LineWidth',2,...
        'MarkerEdgeColor','r','MarkerSize',2);
    hold on
    plot3(Obtained_Pareto(:,1),Obtained_Pareto(:,2),Obtained_Pareto(:,3),'.','LineWidth',2,...
        'MarkerEdgeColor','k','MarkerSize',6);
    title('采用MOSMA算法求解Pareto最优解集');
    legend('MOSMA');
    xlabel('F_1');
    ylabel('F_2');
    zlabel('F_3');
end
%%  Metric Value
M_IGD=IGD(Obtained_Pareto,True_Pareto);
M_GD=GD(Obtained_Pareto,True_Pareto);
M_HV=HV(Obtained_Pareto,True_Pareto);
M_Spacing=Spacing(Obtained_Pareto,True_Pareto);
M_Spread=Spread(Obtained_Pareto,True_Pareto);
M_DeltaP=DeltaP(Obtained_Pareto,True_Pareto);
display(['The IGD Metric obtained by MOSMA is     : ', num2str(M_IGD)]);
display(['The GD Metric obtained by MOSMA is      : ', num2str(M_GD)]);
display(['The HV Metric obtained by MOSMA is      : ', num2str(M_HV)]);
display(['The Spacing Metric obtained by MOSMA is : ', num2str(M_Spacing)]);
display(['The Spread Metric obtained by MOSMA is  : ', num2str(M_Spread)]);
display(['The DeltaP Metric obtained by MOSMA is  : ', num2str(M_DeltaP)]);

以上就是基于Matlab实现多目标粘液霉菌算法的示例代码的详细内容,更多关于Matlab多目标粘液霉菌算法的资料请关注脚本之家其它相关文章!

相关文章

  • 简单说说STL的内存管理

    简单说说STL的内存管理

    <STL 源码剖析>将其描述为空间配置器,理由是allocator可以将其它存储介质(例如硬盘)做为stl 容器的存储空间。由于内存是allocator管理的主要部分,因此,本文以STL内存管理为出发点介绍allocator
    2013-09-09
  • C语言实现CRC校验算法的示例详解

    C语言实现CRC校验算法的示例详解

    CRC(Cyclic Redundancy Check,循环冗余校验)是一种常用的错误检测技术,用于验证数据在传输或存储过程中是否发生了错误,本文主要介绍了C语言如何实现CRC校验算法,需要的可以参考一下
    2023-08-08
  • C语言代码实现简单扫雷小游戏

    C语言代码实现简单扫雷小游戏

    这篇文章主要为大家详细介绍了C语言实现扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • C++ Struct结构体用法浅析

    C++ Struct结构体用法浅析

    前边我们所定义的类,均是使用struct关键字来定义,但是C++中真正用于定义类的关键字为class,因为要C++兼容C,所以保留struct关键字,struct与class的用法完全相同
    2023-03-03
  • C++菱形继承和虚继承的实现

    C++菱形继承和虚继承的实现

    本文主要介绍了C++菱形继承和虚继承的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 冒泡算法的改进具体实现

    冒泡算法的改进具体实现

    这篇文章主要介绍了冒泡算法的改进具体实现,有需要的朋友可以参考一下
    2013-12-12
  • C语言之结构体定义 typedef struct 用法详解和用法小结

    C语言之结构体定义 typedef struct 用法详解和用法小结

    这篇文章主要介绍了C语言的结构体定义typedef struct用法详解和用法小结,typedef是类型定义,typedef struct 是为了使用这个结构体方便,感兴趣的同学可以参考阅读
    2023-03-03
  • C++使用fdk-aac实现将音频PCM编码成aac

    C++使用fdk-aac实现将音频PCM编码成aac

    mp4的音频流通常是aac编码,我们做音视频采集的时候就需要将,采集的音频PCM编码成aac,本文就来为大家介绍一下C++如何使用fdk-aac实现将音频PCM编码成aac吧
    2023-11-11
  • C++实现哈希桶的详细教程

    C++实现哈希桶的详细教程

    这篇文章主要介绍了C++实现哈希桶的详细教程,哈希的底层是一个vector的数组,数组中的每个节点都有一个pair类型的数据,文中通过代码示例和图文讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-06-06
  • C++数据结构与算法之判断一个链表是否为回文结构的方法

    C++数据结构与算法之判断一个链表是否为回文结构的方法

    这篇文章主要介绍了C++数据结构与算法之判断一个链表是否为回文结构的方法,结合实例形式分析了回文结构并结合实例给出了C++判断回文的操作技巧,需要的朋友可以参考下
    2017-05-05

最新评论