多目标优化问题和遗传算法学习笔记

2023-11-04

@多目标优化问题和遗传算法学习笔记

多目标优化问题和遗传算法学习笔记

本人最近研究多目标优化问题以及NSGA2算法,下面把学习笔记分享给大家,希望可以帮助到一些和我一样的初学者们。

名词:

Nondominated sorting 非支配排序
Nonelitism approach 非精英机制方法
selection operator 选择算子
multicriterion decision-making methods 多重判据决策方法

基本概念:

(1) 多目标优化问题的数学描述多目标优化问题的数学描述

(2)pareto(帕累托)最优解的相关概念

1)Paerot支配关系:

在这里插入图片描述在这里插入图片描述

2)Pareto最优解定义:

多目标优化问题与单目标优化问题有很大差异。当只有一个目标函数时,人们寻找最好的解,这个解优于其他所有解,通常是全局最大或最小,即全局最优解。而当存在多个目标时,由于目标之间存在冲突无法比较,所以很难找到一个解使得所有的目标函数同时最优,也就是说,一个解可能对于某个目标函数是最好的,但对于其他的目标函数却不是最好的,甚至是最差的。因此,对于多目标优化问题,通常存在一个解集,这些解之间就全体目标函数而言是无法比较优劣的,其特点是:无法在改进任何目标函数的同时不削弱至少一个其他目标函数。这种解称作非支配解(nondominated soluitons)或Pareto最优解(Pareto optimal Soluitons),定义如下:
在这里插入图片描述

NSGAII算法:

(1)NSGAII算法的基本流程

首先,随机产生规模为N的初始种群,非支配排序后通过遗传算法的选择、交叉、变异三个基本操作得到第一代子代种群;其次,从第二代开始,将父代种群与子代种群合并,进行快速非支配排序,同时对每个非支配层中的个体进行拥挤度计算,根据非支配关系以及个体的拥挤度选取合适的个体组成新的父代种群;最后,通过遗传算法的基本操作产生新的子代种群:依此类推,直到满足程序结束的条件。相应的程序流程图如下图所示:
在这里插入图片描述
在这里插入图片描述

(2)三个关键步骤在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

算法思想:

A. 快速非支配排序方法

O(MN3)方法:确定非支配前沿面,每一个解与其他解比较判断是否支配,故每个解的时间复杂度是O(MN),要找到第一前沿面需要判断每个解,故时间复杂度是O(MN2),要找到所有的前沿面最坏的时间复杂度是O(MN3)。
本文提出的O(MN2)方法:
快速非支配排序算法伪代码
step1. 确定两个实体:np表示被多少解支配,是一个数目,Sp表示该解所支配的解的集合,如下图所示,D点被A和C点支配,所以D点的np为2,A点支配D和E,所以A点的Sp={D,E}。
在这里插入图片描述
step2. 初始化,两个实体初始化都为0,通过两层循环来获得上述两个实体的值,该步时间复杂度是O(MN2)。
step3 对第一非支配面,即np为0 的解,访问其集合Sp中的每个解然后把其np-1。重复该步,即可得到所有的非支配面。由于每个解最多由N-1个支配,所以每个解被访问的次数最多为N-1次。所以该步时间复杂度为O(N2)。
综上所述,NSGA-II提出的计算非支配排序的时间复杂度为O(MN2)。

B. 保留多样性

NSGA-II提出了拥挤比较方法替换了共享函数法。

1)密度估计:根据每一目标函数计算该点两侧的两个点的平均距离,该值作为以最近邻居作为顶点的长方体周长的估计(作为拥挤系数)。如下图,第i个解的拥挤系数为他周围长方体的长度(虚线表示)。计算拥挤系数需要对每一目标函数进行排序。
在这里插入图片描述
2)拥挤算子比较:

在这里插入图片描述
这里对拥挤系数的算法展示一下:
其中 I[i].m 代表集合I中第i个个体第m个目标函数值。I[i]越大代表该点的密度小,越容易被选中。
在这里插入图片描述

C. 主程序

先按照非支配面进行排序,然后对每个支配面里的拥挤算子进行排序,找出前N个点,主要思想如上述B里的第二点。
在这里插入图片描述
在这里插入图片描述

仿真:

(1)测试函数

在这里插入图片描述
1)ZDT问题
在这里插入图片描述
2)DTLZ问题
在这里插入图片描述
在这里插入图片描述

(2)评估指标

所有目标函数都是求最小化(convex 凸的,nonconvex 非凸的)
1)评估解收敛性,用deb提出的Convergence Metric(收敛性指标)
在这里插入图片描述
2)评估解分布的均匀性,用Schott提出的Spacing Metric(间距指标)
在这里插入图片描述
3)SBX: 模拟二进制交叉(SBX,simulated binary crossover),遗传算法采用浮点数编码的时候可以使用。
在这里插入图片描述
4)多项式变异:
在这里插入图片描述

(3)仿真流程:

NSGA-II算法流程
仿真代码已上传至:https://download.csdn.net/download/qq_39578356/12819416
MATLAB代码,可以完美运行无错误,需要的朋友可以下载,已附上文章可供参考学习。

参考文献

[1] K. Deb, A. Pratap, S. Agarwal and T. Meyarivan, “A fast and elitist multiobjective genetic algorithm: NSGA-II,” in IEEE Transactions on Evolutionary Computation, vol. 6, no. 2, pp. 182-197, April 2002, doi: 10.1109/4235.996017.
[2]公茂果,焦李成,杨咚咚,等.进化多目标优化算法研究[J].软件学报,2009(2):271-289.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多目标优化问题和遗传算法学习笔记 的相关文章

  • 以 2 为底的矩阵对数

    Logm 取矩阵对数 并且log2 取矩阵每个元素以 2 为底的对数 我正在尝试计算冯 诺依曼熵 它涉及以 2 为底的矩阵对数 我该怎么做呢 如果将 以 2 为底 的矩阵指数定义为B expm log 2 A 或者如果您类似地通过特征分解直
  • Numpy 相当于 MATLAB 的 hist [重复]

    这个问题在这里已经有答案了 由于某种原因 Numpy 的 hist 总是返回比 MATLAB 的 hist 少 1 个 bin 例如在 MATLAB 中 x 1 2 2 2 1 4 4 2 3 3 3 3 Rep Val hist x un
  • 在matlab中不使用for循环检查数组中的成员资格

    我想简化这段代码 使其无需 for 循环即可工作 for i 1 N for j 1 N if ismember j A PID i i TFP i j PID i i end end end 其中A是一个包含一些标签的矩阵 我之前存储的T
  • 将 Matlab 数组移植到 C/C++

    我正在将 matlab 程序移植到 C C 我有几个问题 但最重要的问题之一是 Matlab 将任何维度的数组都视为相同 假设我们有一个这样的函数 function result f A B C result A 2 B C A B and
  • 通过多次合并相同的行向量来构建矩阵

    有没有一个matlab函数可以让我执行以下操作 x 1 2 2 3 然后基于x我想建立矩阵m 1 2 2 3 1 2 2 3 1 2 2 3 1 2 2 3 您正在寻找REPMAT http www mathworks com help t
  • 如何选择面积最大的对象?

    我用过bwconvhull检测图像的某个部分 正如您在图像中看到的那样 有许多具有特定质心的对象 我想做的是检测面积最大的物体 左起第一个大物体 并忽略其他物体 我应该遵循哪种方法 我将非常感谢您的帮助 以下是代码 由于我仍在努力 所以写得
  • 图像梯度角计算

    我实际上是按照论文的说明进行操作的 输入应该是二进制 边缘 图像 输出应该是一个新图像 并根据论文中的说明进行了修改 我对指令的理解是 获取边缘图像的梯度图像并对其进行修改 并使用修改后的梯度创建一个新图像 因此 在 MATLAB Open
  • 更新:随机将行添加到矩阵中,但遵循严格的规则

    以下是一个更大的矩阵的一部分 0 1 0000 1 0000 77 0000 100 0000 0 0 2500 0 1 0000 1 0000 72 0000 100 0000 0 2500 0 2500 0 1 0000 1 0000
  • MATLAB 变量传递和惰性赋值

    我知道在 Matlab 中 当将新变量分配给现有变量时 会进行 惰性 评估 例如 array1 ones 1 1e8 array2 array1 的价值array1不会被复制到array2除非元素array2被修改 由此我推测Matlab中
  • Mathworks 生成 Matlab HTML 文档的方法是什么?

    我正在开发共享的 Matlab 代码 我们希望在本地网络中将生成的文档作为可搜索的 HTML 文档共享 我知道以下生成文档的方法 编写一个类似于 C 文件的转换器 这是在中完成的将 Doxygen 与 Matlab 结合使用 http ww
  • MATLAB parfor 和 C++ 类 mex 包装器(需要复制构造函数?)

    我正在尝试使用概述的方法将 C 类包装在 matlab mex 包装器中here http www mathworks com matlabcentral newsreader view thread 278243 基本上 我有一个初始化
  • 氡变换线检测

    我正在尝试检测灰度图像中的线条 为此 我在 MATLAB 中使用 Radon 变换 我的 m 文件的示例如下所示 我可以使用此代码检测多行 我还使用线条的移位和旋转属性来绘制线条 但是 我不明白在获取rho和theta值后如何获取检测线的起
  • MATLAB问题:在图块中引用变量的值[重复]

    这个问题在这里已经有答案了 可能的重复 matlab 绘图标题中的变量 https stackoverflow com questions 5629458 matlab variable in plot title 我想在图中引用 m 文件
  • Blob 的簇生长

    考虑以下来自 Mathworks 的图像 我已经用标签标记了斑点 L num bwlabel I 如何迭代连接所有斑点 即从一个斑点开始 找到离它最近的一个 考虑最左边的两个斑点 可以从一个斑点的许多点绘制许多条线来连接到另一个斑点blob
  • 如何在matlab中使矩阵图平滑

    就像上图一样 怎样才能让画面更流畅呢 或者缩小y轴的范围 数据来自二维矩阵 然后我用plot data 请随意提出任何想法 平滑线条的一种方法涉及样本点之间数据的非线性插值 当你这样做时plot x y o http www mathwor
  • 计算向量的导数

    我有以下函数 维维亚尼曲线 Phi t cos t 2 cos t sin t sin t 只需检查它是否有效 s linspace 0 T 1000 plot3 cos s 2 cos s sin s sin s 如何推导函数Phi 可能
  • 用于读取csv写入数组的c++程序;然后操作并打印到文本文件中(已经用 matlab 编写)

    我想知道是否有人可以帮助我 我正在尝试构建一个程序 从 csv 文件中读取大小未知的浮点数大数据块 我已经在 MATLAB 中编写了此代码 但想要编译和分发此代码 因此转向 C 我只是在学习并尝试阅读本文以开始 7 5 19892 4 23
  • 在 numpy/scipy 中查找 matlab 函数

    是否有一个等价的函数find A gt 9 1 来自 numpy scipy 的 matlab 我知道有nonzeronumpy 中的函数 但我需要的是第一个索引 以便我可以在另一个提取的列中使用第一个索引 Ex A 1 2 3 9 6 4
  • Matlab 错误:()-索引必须出现在索引表达式的最后

    我有这段代码 想要在制表符分隔的 txt 文件中写入一个数组 fid fopen oo txt wt for x 1 length s fprintf fid s t n s x 1 end fclose fid 但我收到此错误 Error
  • MATLAB 图形渲染:OpenGL 与 Painters?

    当谈到使用哪个渲染器来处理 MATLAB 图形或何时它很重要时 我一无所知 但我遇到过某些示例 其中does matter plot 0 0 ko markersize 50 linewidth 8 set gcf renderer ope

随机推荐

  • 【区块链与密码学】第6-5讲:SM2数字签名算法

    本课堂内容全部选编自PlatON首席密码学家 武汉大学国家网络安全学院教授 博士生导师何德彪教授的 区块链与密码学 授课讲义 教材及互联网 版权归属其原作者所有 如有侵权请立即与我们联系 我们将及时处理 6 5 SM2数字签名算法 在政府高
  • YOLO v3基于ROS应用记录

    有时候 就要敢于背上超出自己预料的包袱 真的努力后 你会发现自己要比想象的优秀很多 愿在别人眼里算不上梦想的梦想 成真 言归正传 记录下之前在ROS下跑yolov3的历程吧 感觉现在视觉感知领域用yolo的比faster RCNN多很多了
  • BAT、字节大数据与推荐系统实战项目解读

    现在 大数据的概念问世这么多年来 大数据从技术 政策和资本等多个角度已经切入到社会方方面面 未来数据也会成为的经济驱动因素中越来越重要的一部分 对未来而言 大数据的发展将影响到产业 企业和个人 马云也说了 未来最大的资源就是数据 不参与大数
  • Bytetrack 环境配置 &核心代码解析

    前言 可能有讲错和没讲清楚的地方 随时私信我或者评论 感谢斧正 1 构建 Bytetrack 环境 1 1 环境配置 下载资源 并 进入环境 git clone https github com ifzhang ByteTrack git
  • 蓝桥杯:赢球票

    题目链接 目录 题目描述 输入描述 输出描述 输入输出样例 样例1 样例2 题目分析 样例1 样例2 整体思路 AC代码 Java 题目描述 某机构举办球票大奖赛 获奖选手有机会赢得若干张球票 主持人拿出 N 张卡片 上面写着 1 N 的数
  • Activiti6.0学习实践(2)-源码工程构建

    上节对工作流和activiti有了一个基本认识 本节主要目的是构建源码工程 了解如何从git上创建本地的工程 同时对源码有个基本的了解 目录 1 克隆到本地 2 建立远程git库分支 3 导入到工程 4 源码基本结构 5 基于源码启动act
  • c\c++中单冒号(:)和双冒号(::)的用法

    一 单冒号 有些信息在存储时 并不需要占用一个完整的字节 而只需占几个或一个二进制位 例如在存放一个开关量时 只有0和1 两种状态 用一位二进位即可 为了节省存储空间 并使处理简便 C语言又提供了一种数据结构 称为 位域 或 位段 所谓 位
  • win10搭建c语言开发环境

    win10搭建c语言开发环境 在window10上面用MingW搭建编写C语言的环境 1 下载Mingw 下载页面自行搜索 开始安装 安装路径自行选择 2 点击 continue 出现如下图 3 稍微等待一会 出现如下图界面 选择4项 然后
  • QObject::connect: Cannot connect (null)::readyRead() to MainWindow::slot_receivedata()

    QT 信号与槽函数链接编译之后没有问题 但实际运行过程 直接报错退出 后续发现是指针未定义 报错代码 QSerialPort serial 修改后的代码 QSerialPort serial new QSerialPort
  • 使用读写锁pthread_rwlock_t

    使用读写锁 配置读写锁的属性之后 即可初始化读写锁 以下函数用于初始化或销毁读写锁 锁定或解除锁定读写锁或尝试锁定读写锁 下表列出了本节中讨论的用来处理读写锁的函数 表 4 9 处理读写锁的例程 使用读写锁 配置读写锁的属性之后 即可初始化
  • cat命令详解

    命令语法 Usage cat OPTION FILE 使用 cat 选项 文件名 OPTION 可选项 A show all equivalent to vET 相当于 vET 三个选项 b number nonblank number n
  • [leetcode]Validate Binary Search Tree

    解题思路 1 二叉搜索树有一个特点 就是 in order traversal 是一个递增的序列 2 设置一个pre节点 记录前一个访问的node 采用中叙遍历 遍历到的节点跟pre比较val大小 public class Solution
  • Vim/Vi 编辑器,删除总结

    在linux服务器 无法避免和vi编辑打交道 在命令行模式下删除数量少还好 如果删除很多 光靠删除键一点点删除真的是头痛 还好Vim Vi有快捷的命令可以删除多行 范围 删除行 在Vim Vi中删除一行的命令是dd 以下是删除行的步骤说明
  • [剑指offer] JAVA版题解(完整版)

    本文首发于我的个人博客 尾尾部落 序号 题解 牛客 OJ 数据结构类型 03 剑指offer 二维数组中的查找 二维数组中的查找 数组 04 剑指offer 替换空格 替换空格 字符串 05 剑指offer 从尾到头打印链表 从尾到头打印链
  • 通过hive元数据查询hive指定库和表的总条数

    一 整库下 总条数 1 指定库的表总数 查看ods层的总表数 select count TBL NAME from TBLS t left join DBS d on t DB ID d DB ID where d NAME like od
  • mysql+舒适化_将MySQL去重操作优化到极致之三弹连发(三):用rocksdb替代innodb

    前面已经建立了索引 优化了SQL语句 并将单线程变为多线程并行执行 去重时间由最初的35秒优化为3 5秒 是不是就到此为止呢 吴老师又使用了rocksdb存储引擎替代innodb的方法 这里有必要交代一下命题的背景 这道MySQL数据库优化
  • Qt QGraphicsWidget/QGraphicsItem setZValue() 失效

    有可能是其中一些QGraphicsWidget QGraphicsItem设置了ItemStacksBehindParent ItemNegativeZStacksBehindParent之类的属性 导致了其他的使用setZValue 时失
  • 高德地图 amap 设置鼠标样式

    我的需求 要在高德地图里面做一个地图选点的功能 这个功能很简单 但是高德地图的默认鼠标样式是一只小手 不适合做选点用 高德地图中有4中样式如下图 对应名称如下 pointer default move crosshair 需要进行设置 直接
  • Jeesite4修改登录页面,首页

    大家进行熟悉框架的时候 一定要先吃透文档 因为文档很全 说实话 百度上Jeesite4的资源真的很少 剩下的就只剩文档了 本篇文章想跟大家分享的是如何修改默认的前段页面 我感觉与其说修改 还不说是替换 因为他跟SpringMVC的视图配置有
  • 多目标优化问题和遗传算法学习笔记

    多目标优化问题和遗传算法学习笔记 多目标优化问题和遗传算法学习笔记 本人最近研究多目标优化问题以及NSGA2算法 下面把学习笔记分享给大家 希望可以帮助到一些和我一样的初学者们 名词 Nondominated sorting 非支配排序 N