五种多目标优化算法(MOAHA、MOGWO、NSWOA、MOPSO、NSGA2)性能对比(提供MATLAB代码)

一、5种多目标优化算法简介

多目标优化算法是用于解决具有多个目标函数的优化问题的一类算法。其求解流程通常包括以下几个步骤:

1. 定义问题:首先需要明确问题的目标函数和约束条件。多目标优化问题通常涉及多个目标函数,这些目标函数可能存在冲突,需要在不同目标之间进行权衡。

2. 生成初始解集:通过随机生成、启发式算法或其他方法生成一组初始解集。这些解集通常称为种群或个体。

3. 评估解集:对生成的解集进行评估,计算每个解的目标函数值。评估方法可以根据具体问题选择,例如计算目标函数值、约束违反程度等。

4. 更新解集:根据一定的策略,从当前解集中选择一部分个体进行更新。更新方法可以包括交叉、变异、选择等操作,以产生新的解集。

5. 判断终止条件:判断是否满足终止条件,例如达到最大迭代次数、目标函数值收敛等。如果满足终止条件,则算法结束;否则返回第3步。

6. 解集筛选:根据一定的策略,从更新后的解集中选择一部分个体作为下一轮迭代的种群。常用的筛选方法包括非支配排序、拥挤度距离等。

7. 迭代更新:重复执行第3步到第6步,直到满足终止条件。

多目标优化算法的求解流程可以根据具体算法的特点进行调整和优化。

1.1MOAHA

1.2MOGWO

1.3NSWOA

1.4MOPSO

1.5NSGA2

二、5种多目标优化算法性能对比

为了测试5种算法的性能将其求解9个多目标测试函数(zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3),其中Viennet2 与Viennet3的目标为3,其余测试函数的目标为2,并采用6种评价指标(IGD、GD、HV、Coverage、Spread、Spacing)进行评价对比

2.1部分代码

close all;
clear ;
clc;
addpath('./MOAHA/')%添加算法路径
addpath('./MOGWO/')%添加算法路径
addpath('./NSWOA/')%添加算法路径
addpath('./MOPSO/')%添加算法路径
addpath('./NSGA2/')%添加算法路径
%%
% TestProblem测试问题说明:
%一共9个多目标测试函数1-9分别是: zdt1 zdt2 zdt3 zdt4 zdt6 Schaffer  Kursawe Viennet2 Viennet3
%%
TestProblem=3;%测试函数1-9
MultiObj = GetFunInfo(TestProblem);
MultiObjFnc=MultiObj.name;%问题名
% Parameters
params.Np = 100;        % Population size 种群大小
params.Nr = 200;        % Repository size 外部存档
params.maxgen=10;    % Maximum number of generations 最大迭代次数
numOfObj=MultiObj.numOfObj;%目标函数个数
%% 算法求解,分别得到paretoPOS和paretoPOF
[Xbest1,Fbest1] = MOAHA(params,MultiObj);
[Xbest2,Fbest2] = MOGWO(params,MultiObj);
[Xbest3,Fbest3]  = NSWOA(params,MultiObj);
[Xbest4,Fbest4] = MOPSO(params,MultiObj);
[Xbest5,Fbest5]  = NSGA2(params,MultiObj);
FbestData(1).data=Fbest1;
FbestData(2).data=Fbest2;
FbestData(3).data=Fbest3;
FbestData(4).data=Fbest4;
FbestData(5).data=Fbest5;
%% 获取测试函数的真实pareto前沿
True_Pareto=MultiObj.truePF;
%% 计算每个算法的评价指标
% ResultData的值分别是IGD、GD、HV、Coverage、Spread、Spacing
Fbest=Fbest1;
ResultData(1,:)=[IGD(Fbest,True_Pareto),GD(Fbest,True_Pareto),HV(Fbest,True_Pareto),Coverage(Fbest,True_Pareto),Spread(Fbest,True_Pareto),Spacing(Fbest,True_Pareto)];
Fbest=Fbest2;
ResultData(2,:)=[IGD(Fbest,True_Pareto),GD(Fbest,True_Pareto),HV(Fbest,True_Pareto),Coverage(Fbest,True_Pareto),Spread(Fbest,True_Pareto),Spacing(Fbest,True_Pareto)];
Fbest=Fbest3;
ResultData(3,:)=[IGD(Fbest,True_Pareto),GD(Fbest,True_Pareto),HV(Fbest,True_Pareto),Coverage(Fbest,True_Pareto),Spread(Fbest,True_Pareto),Spacing(Fbest,True_Pareto)];
Fbest=Fbest4;
ResultData(4,:)=[IGD(Fbest,True_Pareto),GD(Fbest,True_Pareto),HV(Fbest,True_Pareto),Coverage(Fbest,True_Pareto),Spread(Fbest,True_Pareto),Spacing(Fbest,True_Pareto)];
Fbest=Fbest5;
ResultData(5,:)=[IGD(Fbest,True_Pareto),GD(Fbest,True_Pareto),HV(Fbest,True_Pareto),Coverage(Fbest,True_Pareto),Spread(Fbest,True_Pareto),Spacing(Fbest,True_Pareto)];


%% 画图
PlotFigure;

2.2部分结果

(2)以ZDT1为例:

(2)以Viennet3为例:

三、完整MATLAB代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/404886.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的产业园区智慧公寓管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

这才开工没几天收到Offer了,简历改的好,找工作没烦恼。

喜报喜报 这才开工没几天,就收到了喜报! 就像上面截图中所说的一样:简历改了真的有用。 我也和大家分享一下优化简历的技巧,希望对大家有帮助,把握住金三银四的机会,都能顺利上岸,升职加薪&am…

多数pythoneer只知有列表list却不知道python也有array数组

数组和列表 Python中数组和列表是不同的,我敢断言大多数的pythoneer只知道有列表list,却不知道python也有array数组。列表是一个包含不同数据类型的元素集合,而数组是一个只能含相同数据类型的元素集合。 Python的array库是一个提供数组操作…

Android 广播的基本概念

一.广播简介 Broadcast是安卓四大组件之一。安卓为了方便进行系统级别的消息通知,引入了一套广播消息机制。打个比方,记得原来在上课的时候,每个班级的教室里都会装有一个喇叭,这些喇叭都是接入到学校的广播室的,一旦…

【初始RabbitMQ】交换机的实现

交换机概念 RabbitMQ消息传递模型的核心思想就是:生产者生产的消息从不会直接发送到队列。实际上,通常生产者不知道这些消息会传递到那些队列中 相反,生产者只能将消息发送到交换机,交换机的工作内容也很简单,一方面…

网络安全8-11天笔记

内容安全: 攻击可能只是一个点,防御需要全方面进行。 IAE引擎: DFI和DPI技术:深度检测技术 DPI——深度包检测技术:主要针对完整的数据包(数据包分片,分段需要重组),之…

Linux--自定义shell

shell shell就是操作系统提供给用户与操作系统进行交互的命令行界面。它可以理解为一个用户与操作系统之间的接口,用户可以通过输入命令来执行各种操作,如文件管理、进程控制、软件安装等。Shell还可以通过脚本编程实现自动化任务。 常见的Unix系统中使…

http相关概念以及apache的功能(最详细讲解!!!!)

概念 互联网:是网络的网络,是所有类型网络的母集 因特网:世界上最大的互联网网络 万维网:www (不是网络,而是数据库)是网页与网页之间的跳转关系 URL:万维网使用统一资源定位符,…

图片如何降低kb?这个方法很方便

图片体积过大的话,有两种最简单的方法可以解决,最直接的就是压缩图片大小,降低图片kb,再就是修改图片尺寸让图片体积变小,这两种操作方式都可以在本文介绍的这款图片处理工具中完成,图片压缩对我们来说最主…

利用netty手写rpc框架

前言:利用netty异步事件驱动的网络通信模型,来实现rpc通信 一、大致目录结构: 二、两个端:服务端(发布),客户端(订阅消费),上代码: 1.服务端&am…

深入学习TS的高阶语法(泛型、类型检测、内置工具)

文章目录 概要一.TS的类型检测1.鸭子类型2.严格的字面量类型检测 二.TS的泛型1.基本使用2.传递多个参数3.泛型接口4.泛型类5.泛型约束6.映射类型(了解) 三.TS的知识扩展1.模块的使用-- 内置类型导入 2.类型的查找3.第三方库的类型导入4.declare 声明文件…

Javase-数组

文章目录 1.1 为什么要使用数组1.2 数组的定义及初始化1.3 数组的使用1.4 遍历数组1.5 数组在内存中的存储分析1.6 数组的传参1.7 数组的拷贝 1.1 为什么要使用数组 假设现在有一个任务,要你存储5个同学的学习成绩(double类型),这时候我们可以写出来 double score1 90.4…等五…

谷粒商城-nginx搭建域名访问环境性能压测

nginx搭建域名访问环境 正向代理与反向代理 正向代理:客户端向代理服务器发请求并指定目标服务器,代理向目标服务器转交请求并将获得的内容返回给客户端。 反向代理:用户直接访问反向代理服务器就可以获得目标服务器的资源。反向代理服务器…

Redis能保证数据不丢失吗?

引言 大家即使没用过Redis,也应该都听说过Redis的威名。 Redis是一种Nosql类型的数据存储,全称Remote Dictionary Server,也就是远程字典服务器,用过Dictionary的应该都知道它是一种键值对(Key-Value)的数…

基于机器学习、遥感和Penman-Monteith方程的农田蒸散发混合模型研究_刘燕_2022

基于机器学习、遥感和Penman-Monteith方程的农田蒸散发混合模型研究_刘燕_2022 摘要关键词 1 绪论2 数据与方法2.1 数据2.2 机器学习算法2.3 Penman-Monteith方程2.4 Medlyn公式2.5 模型性能评估 3 基于机器学习算法的混合模型估算农田蒸散量的评价与比较4 利用人工神经网络算法…

js使用import到本js文件中的函数时报错 Error [ERR_MODULE_NOT_FOUND]: Cannot find module

node:internal/process/esm_loader:97internalBinding(errors).triggerUncaughtException(^Error [ERR_MODULE_NOT_FOUND]: Cannot find module D:\桌面\Pagesizedetection\lib\screensize imported from D:\桌面\Pagesizedetection\index.js Did you mean to import ../lib/sc…

文件上传漏洞--Upload-labs--Pass09(在某些版本的靶场里是Pass10)--点+空格+点 绕过

一、什么是 点空格点 绕过 顾名思义,将 test.php 改为 test.php. . ,观察到后缀名php后多出了 点空格点。那么 点空格点 是如何进行绕过的,在什么情况下可以使用,让我们结合题目讲解。 二、代码审计 1、查看题目源代码上半部分&…

Nginx 配置前端工程项目二级目录

前提: 前端工程技术框架: vue 后端工程技术工程:spring boot 需求:需要通过二级目录访问前端工程: 如之前:http://127.0.0.1:80/ 改成 http://127.0.0.1/secondDirectory:80/ 一.前端工程支持二级目录 1.编译文…

CrossOver虚拟机软件2024有哪些功能?最新版本支持哪些游戏?

CrossOver由codewaver公司开发的类虚拟机软件,目的是使linux和Mac OS X操作系统和window系统兼容。CrossOver不像Parallels或VMware的模拟器,而是实实在在Mac OS X系统上运行的一个软件。CrossOvers能够直接在Mac上运行Windows软件与游戏,而不…

链表之“无头单向非循环链表”

目录 ​编辑 1.顺序表的问题及思考 2.链表 2.1链表的概念及结构 2.2无头单向非循环链表的实现 1.创建结构体 2.单链表打印 3.动态申请一个节点 3.单链表尾插 4.单链表头插 5.单链表尾删 6.单链表头删 7.单链表查找 8.单链表在pos位置之前插入x 9.单链表删除pos位…