广告位联系
返回顶部
分享到

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

C语言 来源:互联网 作者:酷站 发布时间:2022-05-14 22:38:21 人浏览
摘要

1.概述 多目标粘液霉菌算法(MOSMA),这是最近开发的粘液霉菌算法(SMA)的多目标变体,用于处理工业中的多目标优化问题。最近,为了处理优化问题,已经为优化社区推荐了几种元

1.概述

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

2.算法过程

3.数值实验

4.Matlab代码实现

1

2

3

4

5

6

7

8

9

%%  (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));

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

%%===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)]);


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/weixin_46039719/article/details/124765846
相关文章
  • C++中类的六大默认成员函数的介绍

    C++中类的六大默认成员函数的介绍
    一、类的默认成员函数 二、构造函数Date(形参列表) 构造函数主要完成初始化对象,相当于C语言阶段写的Init函数。 默认构造函数:无参的构
  • C/C++实现遍历文件夹最全方法总结介绍

    C/C++实现遍历文件夹最全方法总结介绍
    一、filesystem(推荐) 在c++17中,引入了文件系统,使用起来非常方便 在VS中,可以直接在项目属性中调整: 只要是C++17即以上都可 然后头文件
  • C语言实现手写Map(数组+链表+红黑树)的代码

    C语言实现手写Map(数组+链表+红黑树)的代码
    要求 需要准备数组集合(List) 数据结构 需要准备单向链表(Linked) 数据结构 需要准备红黑树(Rbtree)数据结构 需要准备红黑树和链表适配策略
  • MySQL系列教程之使用C语言来连接数据库

    MySQL系列教程之使用C语言来连接数据库
    写在前面 知道了 Java中使用 JDBC编程 来连接数据库了,但是使用 C语言 来连接数据库却总是连接不上去~ 立即安排一波使用 C语言连接 MySQL数
  • 基于C语言实现简单学生成绩管理系统

    基于C语言实现简单学生成绩管理系统
    一、系统主要功能 1、密码登录 2、输入数据 3、查询成绩 4、修改成绩 5、输出所有学生成绩 6、退出系统 二、代码实现 1 2 3 4 5 6 7 8 9 10 11
  • C语言实现共享单车管理系统

    C语言实现共享单车管理系统
    1.功能模块图; 2.各个模块详细的功能描述。 1.登陆:登陆分为用户登陆,管理员登陆以及维修员登录,登陆后不同的用户所执行的操作
  • C++继承与菱形继承的介绍

    C++继承与菱形继承的介绍
    继承的概念和定义 继承机制是面向对象程序设计的一种实现代码复用的重要手段,它允许程序员在保持原有类特性的基础上进行拓展,增加
  • C/C++指针介绍与使用介绍

    C/C++指针介绍与使用介绍
    什么是指针 C/C++语言拥有在程序运行时获得变量的地址和操作地址的能力,这种用来操作地址的特殊类型变量被称作指针。 翻译翻译什么
  • C++进程的创建和进程ID标识介绍
    进程的ID 进程的ID,可称为PID。它是进程的唯一标识,类似于我们的身份证号是唯一标识,因为名字可能会和其他人相同,生日可能会与其他
  • C++分析如何用虚析构与纯虚析构处理内存泄漏

    C++分析如何用虚析构与纯虚析构处理内存泄漏
    一、问题引入 使用多态时,如果有一些子类的成员开辟在堆区,那么在父类执行完毕释放后,没有办法去释放子类的内存,这样会导致内存
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计