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,重复以上操作,直到满足程序结束的条件。

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

 

 

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

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

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

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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关闭对话框,OnClose和OnCancel

    关闭对话框,OnClose和OnCancel

    2021年12月4日
    48
  • 一款小清新版的java代码生成器,springboot脚手架「建议收藏」

    一款小清新版的java代码生成器,springboot脚手架「建议收藏」在我们进行软件开发的时候,很多都只是单纯的增删查改,没有太大的技术含量但是却非常占据我们开发的时间,而且如果稍微一不注意,细节的bug就可能耽误一上午的时间,得不偿失,届于此,自己动手开发了一版代码生成器,java在代码自动化方面做得确实不够好,瞧瞧人家.net,算了,不说了,进入正题吧!首先让我们看一下这款生成器的界面整体…

    2022年5月13日
    42
  • CTFshow刷题日记-WEB-反序列化(web254-278)PHP反序列化漏洞、pop链构造、PHP框架反序列化漏洞、python反序列化漏洞

    CTFshow刷题日记-WEB-反序列化(web254-278)PHP反序列化漏洞、pop链构造、PHP框架反序列化漏洞、python反序列化漏洞非反序列化web254-简单审计这个题是搞笑的么????按着源码顺序走一遍……$username=$_GET[‘username’];$password=$_GET[‘password’];if(isset($username)&&isset($password)){$user=newctfShowUser();if($user->login($username,$password)){if($user->c

    2022年7月14日
    13
  • jar包如何防止反编译_jar包可以反编译成源码吗

    jar包如何防止反编译_jar包可以反编译成源码吗方法就是,向Jar注入无效代码(不合法的,或者根本不是代码的字符串)。那么无效的代码又怎么能正确运行呢?答案就是,你要保证你的代码永远不会执行到那一步。我作一个简单的例子说明:我们建立一个项目:packagecom.TestJar;publicclassMain{ publicstaticvoidmain(String[]args){ System.out.println(Info.g…

    2025年6月16日
    1
  • web ide「建议收藏」

    web ide「建议收藏」webide在做项目中,遇到一个这样的场景,当我们把系统服务搭建好,给用户显示的时候,如果用命令行一步步的走,感觉会把他们弄晕,另外,交付系统,还得一步步的写操作流程,遇到一点问题,就还得补充进去,所以我就想,能不能搭建一个web-ide,用户直接把代码复制上去,点点点,就能完成系统的完整体验。当然,还有就是Web-ide对于移动办公、合作开发也有帮助,比如我想把我的代码给别人看,直接在他电…

    2022年10月18日
    2
  • linux的crontab用法_crontab详解

    linux的crontab用法_crontab详解crontab是用来让使用者在固定时间或固定间隔执行程序之用,类似于windows的计划任务安装: yum-yinstallvixie-cron yum-yinstallcrontabs启动、关闭、重启:/sbin/servicecrondstart#启动服务/sbin/servicecrondstop#关闭服务/sbin/servicecrond…

    2022年8月24日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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