NSGA-III算法:如何在多目标优化问题中找到最合适的解

当我们面临多个目标函数时,单目标的遗传算法可能无法满足需求。这时,我们可以引入多目标遗传算法。在这种情况下,目标函数可能存在冲突,例如,一个目标函数需要最小化,而另一个目标函数需要最大化。某个目标函数的提高可能需要以另一个函数的降低为代价。这就引出了帕累托解(Pareto解)的概念。即每个目标都想达到最优。
true.jpg
解决pareto解有以下几种常用方法:

权重系数转换法

对于每个目标函数f(xi)(i=1,2,3,4…),赋予权重wi(i=1,2,3…),wi为目标函数重要程度,有
在这里插入图片描述

权重系数函数利用权重将多目标转化为单目标函数,将W作为评价函数。
缺点:需要自己确定特征数据的权重,主观影响较大。
OIP-C.jpg

排序选择法

基于pareto最优个体的概念对群体中的个体进行排序。然后根据这个次序进行种群选择。这样的话能够让pareto最优个体有更多的机会遗传到下一代。
缺点:仅仅度量了各个个体之间的优越次序,而并未度量各个个体的分散程度,所以容易生成相似的解,而不是分布较广的多个最优解。
v2-b13f87384cce329ea7796e4be15e43a4_r.jpg

带精英策略的非支配排序遗传算法–NSGAII

(1)采用快速非支配型排序,降低了算法复杂度。其复杂度为O(MN**2)。
(2)提出了拥挤度和拥挤度比较算子,代替需要制定共享半径的适应度共享策略。并在快速排序后的同级比较中作为胜出标准。使pareto解中的个体扩展到整个pareto域中,并均匀分布,保持了种群的多样性。
(3)引入精英策略,扩大采样空间。将父代种群和子代种群合并,保证优良个体能够留存下来。
R-C (1).jpg

算法步骤如下:

首先随机产生数量为n的初始种群

(2)然后对其进行非支配排序,,可以将种群中的个体按照pareto支配关系分成不同的层级。
(3)然后计算每个个体的拥挤度,拥挤度主要是用于衡量每个个体在目标空间中与其他个体的相似程度,拥挤度距离越大,说明个体越具有多样性。
(4)接下来,就是常规的选择,交叉,变异操作产生第一代子代种群。

从第二代开始,将父代和子代合并

然后对其进行快速非支配型排序,同时计算每个非支配层的个体进行拥挤度的计算。然后根据非支配关系和拥挤度来选择合适的个体组成新的父代种群。最后再通过选择、交叉,变异产生子代。重复。
还有几个主要的关键技术需要解释一下:
(1)快速非支配型排序
假设种群为P,则该算法需要计算P中的每个个体p的两个参数np和Sp,其中np为种群中支配个体p的个体数,Sp为种群中支配个体p的个体集合。遍历整个种群,这里那个两个参数的时间复杂度O(mN2)。
(2)拥挤度
在种群中给定点的周围个体密度,用id表示。它指出了在个体i周围包含个体i本身但不包含其他个体的最小的长方形。
(3)拥挤比较算子
经过快速非支配排序和拥挤度计算,种群中的每一个个体都得到了两个属性:非支配序rankn和拥挤度。利用这两个属性,我们可以区分种群中间任意两个个体间的支配和非支配关系。定义拥挤度比较算子,当且仅当irank>jrank或irank=jrank且id>jd,有个体i优于个体j。
(4)精英选择策略
精英策略是指在每一代的进化过程中,保留一部分优秀的个体,使得下一代的种群从父代和子代的合并种群中选择,从而提高算法的收敛性和解的质量。精英选择策略可以防止优秀的解被破坏或丢失,也可以加快非支配解集的收敛速度。
NSGAII中的精英选择策略具体如下:

  • 在每一代,首先对父代种群进行交叉和变异操作,产生子代种群。
  • 然后将父代种群和子代种群合并为一个大小为2N的种群,其中N是种群大小。
  • 对合并种群进行快速非支配排序,根据Pareto支配关系将个体分成不同的层级,并给每个个体赋予一个等级值。
  • 从最高层级开始,依次将每个层级的个体加入到下一代种群中,直到下一代种群达到N个个体或者超过N个个体。
  • 如果最后一个加入的层级导致下一代种群超过N个个体,则对该层级的个体进行拥挤度计算和比较,根据拥挤度大小选择部分个体加入到下一代种群中,使得下一代种群恰好有N个个体。
  • 重复上述步骤,直到达到预设的进化代数。

总结来说,相比于单目标函数求解,多目标函数求解明显难度提升了好几个数量级,其核心问题在于出现Pareto解。我们需要权衡各个目标函数之间的利弊,选择合适算法来求解。
下面是NSGA3算法流程图:
image.png

NSGA-III算法相比于NSGA和NSGA-II算法:

  • NSGA-III算法引入了一组均匀分布的参考点,用于指导种群的选择,保持种群的多样性和收敛性。参考点的数量和位置可以根据目标个数和种群大小自适应地确定,而不需要人为地设定。
  • NSGA-III算法采用了一种新的归一化方法,即用理想点和截距点将目标空间映射到单位超立方体中,然后计算每个个体与最近的参考点的距离,根据距离和参考点的拥挤度进行选择,这样可以避免目标之间的尺度差异和非均匀分布的影响。
  • NSGA-III算法在选择过程中,不仅考虑了个体的非支配等级,还考虑了个体的参考点关联度,即个体与参考点的距离和参考点的拥挤度,这样可以更好地平衡种群的多样性和收敛性,同时也可以避免过度选择或忽略某些目标。

结论

多目标遗传算法的核心思想是,没有最好的解,只有最合适的解。所以,不要太担心你的选择是否正确,只要你能找到一个让你满意的解,就可以啦。
R-C.jpg

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

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

相关文章

利用Python进行网络爬虫:Beautiful Soup和Requests的应用【第131篇—Beautiful Soup】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 利用Python进行网络爬虫:Beautiful Soup和Requests的应用 在网络数据变得日益丰…

基于多尺度视网膜增强图像去雾算法(MSR,Multi-Scale Retinex),Matalb实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供有偿…

Mit6.s081 前置开发环境: 虚拟机ubuntu + ssh + vscode

虚拟机 ssh vscode 前置条件 下载VMware Download VMware Workstation ProUbuntuUbuntu系统下载 | Ubuntu vscode Visual Studio Code - Code Editing. Redefined Ubuntu版本:20.04 Ubuntu基本操作 ubuntu 安装 ssh 服务 sudo apt-get install openssh-serv…

前端学习之css伪元素选择器

伪元素选择器 &#xff08;注释是对各个内容的解释与理解&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>伪元素选择器</title><!-- 双冒号开头一般都称为伪元素&#xff0c;…

Redis命名设计

可读性和管理性 以项目名为前缀(防止key冲突)&#xff0c;用冒号分隔&#xff0c;比如项目名:表名:id zh(知乎):news_data(新闻数据):2(主键id) zh:news_data:2 精简性 key的命名&#xff0c;尽量精简&#xff0c;key的名字长度对内存的占用不可忽视&#xff0c;我们来实际…

读者交流群

自开设公众号以来&#xff0c;收到众多读者的关注&#xff0c;所以我很高兴在这里向大家推荐加入我的技术交流群。如果你对Java和Go语言有兴趣&#xff0c;想要与其他同好分享经验和知识&#xff0c;那么这个读者群将是一个理想的选择。 在这个读者群中&#xff0c;我们有机会与…

git基础命令(四)之分支命令

目录 基础概念git branch-r-a-v-vv-avv重命名分支删除分支git branch -h git checkout创建新的分支追踪远程分支同时切换到该分支创建新的分支并切换到该分支撤销对文件的修改&#xff0c;恢复到最近的提交状态&#xff1a;丢弃本地所有修改git checkout -h git merge合并指定分…

docker 安装minio,详细图解

废话不多说&#xff0c;直接上干货 docker 安装minio 拉取镜像 docker pull minio/minio创建数据目录、配置目录 mkdir /opt/minio/data mkdir /opt/minio/config启动容器 docker run -p 9000:9000 -p 9090:9090 \--name minio \-d --restartalways \-e "MINIO_ACCESS_KE…

[全网首发中文版]LLM4Decompile: Decompiling Binary Code with Large Language Models

LLM4Decompile: Decompiling Binary Code with Large Language Models 摘要 反编译的目的是将编译后的代码恢复为人类可读的源代码&#xff0c;但在名称和结构等细节上遇到了困难。 大型语言模型&#xff08;大语言模型&#xff09;显示出编程任务的前景&#xff0c;激励其应…

如何用大模型做出一款属于自己的 AI 应用?

语言模型是怎么回事 语言模型&#xff08; language model&#xff0c;LM &#xff09;简单来说&#xff0c;就是利用自然语言构建的模型。 自然语言就是我们日常生活、学习和工作中常用的文字。语言模型就是利用自然 语言文本构建的&#xff0c;根据给定文本&#xff0c;输出…

jquery 合并单元格

原始表格 合并后的单元格 直接上代码 //合并第一列单元格//给tbody下的第一行(tr:first-child)第一个单元格(td).eq(0))//加上rowspan 长度是这个表格tr的长度(attr(rowspan, $("tbody tr").length);)$(tbody tr:first-child td).eq(0).attr(rowspan, $("t…

idea2023 运行多 springboot 实例

概要 1、修改idea运行多实例&#xff08;本地测试负载&#xff09; 你可能用到其他 1、改造项目缓存token 至redis 支持负载均衡部署 SpringSecurity6.0RedisJWTMP基于token认证功能开发&#xff08;源码级剖析可用于实际生产项目&#xff09;_springsecurity redis管理token…

算法导论第十二章练习参考答案(22) - 12.1-12.4

Exercise 12.1-1 任何时候&#xff0c;如果一个节点有一个子节点&#xff0c;就把它当作右子节点&#xff0c;左子节点为NIL。 Exercise 12.1-2 二叉搜索树的属性保证了左子树的所有节点都更小&#xff0c;右子树的所有节点都更大。最小堆属性只保证一般的子节点大于父节点的关…

3.18 杂题小结

类似的对于n个物体根据其某种递减关系选择的题目可以利用数位 &#xff1a;当前字符可以选也可以不选 &#xff01;&#xff1a;当前字符无法选 思路&#xff1a;需要同一位置多次比对的一般使用动态规划&#xff08;背包中物品是否拿取、字符串取舍与修改方式等&#xff09;…

2024华为OD统一考试(C卷)最新题库(Java Python C++)

关于华为OD ​ 华为的员工补充途径有三种&#xff0c;分别是校招、OD转正和社招。校招是华为唯一的正式员工入职途径&#xff0c;但是从近几届开始竞争非常激烈&#xff0c;尤其是在CV、AI、NLP等赛道上&#xff0c;所以对于C9等专业的学生来说&#xff0c;可以考虑转向一些冷…

Python轴承故障诊断 (17)基于TCN-CNN并行的一维故障信号识别模型

往期精彩内容&#xff1a; Python-凯斯西储大学&#xff08;CWRU&#xff09;轴承数据解读与分类处理 Python轴承故障诊断 (一)短时傅里叶变换STFT Python轴承故障诊断 (二)连续小波变换CWT_pyts 小波变换 故障-CSDN博客 Python轴承故障诊断 (三)经验模态分解EMD_轴承诊断 …

Cannot access aliyunmaven ( xxx ) in offline mode and the artifact

记一次Maven无脑报错 报错提示&#xff1a; Cannot access aliyunmaven (https://maven.aliyun.com/repository/public) in offline mode and the artifact 当看到这个报错信息后&#xff0c;首先想到的就是maven环境变量是否配置正确&#xff0c;然而经过一番查看后&#xf…

minio数据迁移工具rclone使用

文章目录 前言一、下载rclone二、安装配置三、迁移命令结尾 前言 Rclone是一个命令行程序&#xff0c;用于管理云存储上的文件。它是云供应商的web存储接口的一个功能丰富的替代品。超过40种云存储产品支持rclone&#xff0c;包括S3对象存储、企业和消费者文件存储服务以及标准…

mysql 索引(为什么选择B+ Tree?)

索引实现原理 索引&#xff1a;排好序的数据结构 优点&#xff1a;降低I/O成本&#xff0c;CPU的资源消耗&#xff08;数据持久化在磁盘中&#xff0c;每次查询都得与磁盘交互&#xff09; 缺点&#xff1a;更新表效率变慢&#xff0c;&#xff08;更新表数据&#xff0c;还要…

DockerFile遇到的坑

CMD 命令的坑 dockerfile 中的 CMD 命令在docker run -it 不会执行 CMD 命令。 FROM golang WORKDIR / COPY . ./All-in-one CMD ["/bin/sh","-c","touch /kkk.txt && ls -la"] RUN echo alias ll"ls -la" > ~/.bashrc(不…
最新文章