NSGA2理解

NSGA2理解NSGA-II算法学习什么是支配:支配就是统治,在各方面都优于其余个体如个体i支配个体j,就说明个体i在所有目标函数的表现上都不差于个体j,并且至少在一个目标上优于个体j;什么是非支配:非支配就是个体在种群中是最优秀的,它们在该种群中不受其余个体支配。快速非支配排序,将种群中的个体进行分层,最优秀的个体处于第一层,然后除了第一层,再从其余个体中找出非支配个体,以此类推…

大家好,又见面了,我是你们的朋友全栈君。

NSGA-II算法学习

什么是支配:

支配就是统治,在各方面都优于其余个体

如个体i支配个体j,就说明个体i在所有目标函数的表现上都不差于个体j,并且至少在一个目标上优于个体j;

什么是非支配:

非支配就是个体在种群中是最优秀的,它们在该种群中不受其余个体支配。

 

快速非支配排序,将种群中的个体进行分层,最优秀的个体处于第一层,然后除了第一层,再从其余个体中找出非支配个体,以此类推。

为什么要记录np和Sp:

Np是指支配个体p的个体数,就是比个体p优秀的个体

Sp是指受p支配的个体,也就是没有个体优秀的个体。

因为算法首先可以找出第一层最优秀的个体,然后再从它们中获取到受它们所支配的个体(除了第一层都受它们支配),也就是从Sp中找,它们没有个体p优秀,让它们的np-1;因为p已经存在于第一级了。

然后再判断np是否为0,即它是否还受其余个体支配,0说明除了个体p,它不再受其余个体支配,则将这样的个体分到第二级,也就是比第一级稍微弱点的个体。

 

拥挤度是什么?

表示种群中给定点的种群密度。用来确保种群多样性。

 

 

为什么引入拥挤度?

因为在NSGA中需要认为指定一个共享参数,这个参数需要结合经验,不太好确定,所以引入拥挤度,就不需要小生境技术了。

 

当进行完快速非支配排序和拥挤度计算之后,每个个体都拥有这两个参数,然后根据拥挤度比较算子进行选择,

 

 

 

采用共享小生境技术以确保种群的多样性,但需要决策者指定共享半径。

为了解决这个问题,NSGA-II中提出了拥挤度的概念,拥挤度表示在种群中给定点的周围个体的密度,直观上用个体i周围包含个体i但不包含其余个体的最大长方形的长来表示。

算法:

每个点的拥挤度置为0

针对每个目标,对种群进行非支配排序,令边界两个个体的拥挤度为无穷。

对其余个体进行拥挤度计算:

 

 

 

算法基本思想:

首先,随机产生规模为N的初始种群Pt,产生子代种群Qt,并将两个种群联合在一起形成大小为2N的种群Rt;

其次,将父代种群与子代种群合并,进行快速非支配排序并且分层,同时对每个非支配层中的个体进行拥挤度计算,根据非支配关系以及个体的拥挤度选取合适的个体组成新的父代种群Pt+1,最后,通过遗传算法的基本操作产生新的子代种群Qt+1,将Pt+1与Qt+1合并形成新的种群Rt,重复以上操作,直到满足程序结束的条件。

拥挤度比较算子:根据非支配排序后赋予的虚拟适应度值和拥挤度来决定那些个体进入下一代。

 

 

密度估计:为了得到种群中特定解周围的解的密度估计,我们根据每一目标函数计算这点两侧的两个点的平均距离。这个数值作为以最近邻居作为顶点的长方体周长的估计(称为拥挤系数)

拥挤系数的计算需要根据每一目标函数值的大小的升序顺序对种群进行排序。因此,对每一目标函数,边界解(拥

有最大和最小值的解)被指定为无穷大距离的值。所有其它

中间的解都被指定为等于两个相邻解的函数值归一化后的绝对差值。全部拥挤系数值是通过个体每一目标的距离值的加和计算得到的。每一目标函数在计算拥挤系数前都会进过归一化处理。在页底展示的算法概括了非支配集合中所有解拥挤系数的计算过程。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144406.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • git配置用户名和邮箱密钥_git配置全局用户名和密码

    git配置用户名和邮箱密钥_git配置全局用户名和密码一般刚安装Git都要配置用户名和密码,因为你提交代码到本地仓库(上传代码到远程仓库)时会用到,如果没有没有配置,在你提交时它会提醒你的。那么接下来我们讲一下怎么配置。

  • ubuntu 卸载软件命令_卸载程序命令

    ubuntu 卸载软件命令_卸载程序命令dpkg-ldpkg-l|grepxxx#xxx为软件名称,例如virtualboxdpkg-query-l*package-name*例如virtualboxdpkg-spackage-name例如virtualboxdpkg–get-selections|grepvirtualboxdpkg-Lpackage-name,例如virtualboxsudoapt-get–purgeremovexxx#xxx为软件名称,

  • Maven配置教程

    <divid=”content_views”class=”markdown_viewsprism-github-gist”><svgxmlns=”http://www.w3.org/2000/svg”style=”display:none;”><pathstroke-linecap=”round”d=”M5,00,2.55,5z”id=”raphael-marker…

  • JS实现图片循环滚动

    JS实现图片循环滚动之前在前端的时候有遇到这样一个问题,实现JS图片的循环滚动,然后鼠标移入的时候停止滚动,鼠标移开继续滚动,这里无非就是设置了一个定时器,鼠标移上时清除定时器达到滚动停止的目的,鼠标移开时重设定时器,代码如下:<!DOCTYPE><html> <head> <metacharset=”UTF-8″> <title>JS实…

  • phpstrom 2021.12激活吗(JetBrains全家桶)「建议收藏」

    (phpstrom 2021.12激活吗)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1435QFILVV-eyJsaWNlb…

  • K8S架构详解

    K8S架构详解

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号