NSGA

此博客的很多内容均来自 博客园 Alexander 博主的文章,我只做了整理方便今后自己回顾,同时很感谢博主的分享
2017年11月27日

NSGA :Non-Dominated Sorting Genetic Algorithm,非支配排序遗传算法

NSGA和NSGA-ll都是基于遗传算法的多目标优化算法,都是基于Pareto(帕累托)最优解讨论的多目标优化

Pareto支配关系
对于最小化多目标问题,n个目标分量 fi (i=1,…,n)组成的向量 f¯(X¯)=(f1(X¯),f2(X¯),...,fn(X¯)) ,任意给定两个决策变量 X¯u,X¯vU
当且仅当,对于 i{1,...,n} ,都有 fi(X¯u)<fi(X¯v) ,则称 X¯u 支配 X¯v
当且仅当,对于 i{1,...,n} ,都有 fi(X¯u)fi(X¯v) ,且至少存在一个 j{1,...,n} 使得 fj(X¯u)<fj(X¯v) 则称 X¯u 弱支配 X¯v
当且仅当, i{1,...n} ,使得 fi(X¯u)<fi(X¯v) ,且 j{1,...n} ,使得 fj(X¯u)>fj(X¯v) ,则称 X¯u X¯v 互不支配。

简单来说,就是 若方案A在所有的目标上都优于方案B,则称方案A支配方案B。
同样举0/1背包问题作例子。
由于是多目标问题,所以得对最简单的背包问题做修改,改为:
现有一个最大承受体积为Volume的背包,以及N个物品,每个物品的重量为Wi,价值为Vi,体积为Ti,求给出一个方案,使得在背包的承受体积范围内,背包内物品的总价值最大,且总质量最小。
若方案A使得背包内物品的总价值为40,总重量为50;方案B使得背包内物品的总价值为30,总重量为60。因为方案A在两个目标上(价值大,重量小)都优于方案B,所以方案A支配方案B;若方案B的总重量为50,则方案A弱支配方案B;若方案B的总价值为50,则方案A和方案B互不支配。

Pareto最优解定义
多目标优化问题与单目标优化问题有很大差异。当只有一个目标函数时,人们寻找最好的解,这个解优于其他所有解,通常是全局最大或最小,即全局最优解。而当存在多个目标时,由于目标之间存在冲突无法比较,所以很难找到一个解使得所有的目标函数同时最优,也就是说,一个解可能对于某个目标函数是最好的,但对于其他的目标函数却不是最好的,甚至是最差的。因此,对于多目标优化问题,通常存在一个解集,这些解之间就全体目标函数而言是无法比较优劣的,其特点是:无法在改进任何目标函数的同时不削弱至少一个其他目标函数。这种解称作非支配解(non-dominated solutions)或Pareto最优解(Pareto optimal Solutions),定义如下:
对于最小化多目标问题,n个目标分量 fi (i=1,…,n)组成的向量 f¯(X¯)=(f1(X¯),f2(X¯),...,fn(X¯)) X¯uU 为决策变量,若 X¯u 为Perato最优解,则需满足:
当且仅当,不存在决策变量 X¯vUv=f(X¯v)=(v1,...,vn) 支配 u=f(X¯u)=(u1,...,un) 即不存在 X¯vU 使得下式成立:
(v{1,...,n},viui)(i{1,...,n},vi<ui)

简单来说,就是Pareto最优解 X¯u 不被任何其他决策变量所支配。

NSGA的一般流程
NSGA工作原理图

NSGA使用了非支配分层方法和适应度共享策略。非支配分层方法可以使好的个体有更大的机会遗传到下一代;适应度共享策略则使得准Pareto面上的个体均匀分布,保持了群体多样性,克服了超级个体的过度繁殖,防止了早熟收敛。

NSGA与简单的遗传算法的主要区别在于:该算法在选择算子执行之前根据个体之间的支配关系进行了分层。其选择算子、交叉算子和变异算子与简单遗传算法没有区别。

非支配分层
非支配排序算法
考虑一个目标函数个数为K(K>1)、规模大小为N的种群,通过非支配排序算法可以对该种群进行分层,具体的步骤如下:
1. 设j=1;
2. 对于所有的 g=1,2,...,N gj ,基于适应度函数比较个体 Xg 和个体 Xj 之间的支配和非支配关系;
3. 如果不存在任何一个个体 Xg 优于 Xj ,则标记 Xj 为非支配个体;
4. 令j=j+1,转到步骤2,直到找到所有的非支配个体。
通过上述步骤得到的非支配个体集是种群的第一级非支配层;然后,忽略这些标记的非支配个体,再遵循步骤1-4,就会得到第二级非支配;依此类推,直到整个种群被分层。

虚拟适应度值的确定
在对种群进行非支配排序的过程中,需要给每一个非支配层指定一个虚拟适应度值。级数越大,虚拟适应度值越小;反之,级数越小,虚拟适应度值越大。这样可以保证在选择操作中等级较低的非支配个体有更多的机会被选择进入下一代,使得算法以最快的速度收敛于最优区域。另一方面,为了得到分布均匀的Pareto最优解集,就要保证当前非支配层上的个体具有多样性。NSGA中引入了基于拥挤策略的小生境(Niche)技术,即通过适应度共享函数的方法对原先指定的虚拟适应度值进行重新指定。

计算步骤
假设m非支配层上 nm 个个体,每个个体的虚拟适应度值 fm ,且令 i,j=1,2,...,nm ,则具体的实现步骤如下:
1. 计算出同属于一个非支配层的个体i和个体j的欧几里得距离:

d(i,j)=l=1L(xilxjlxalxdl)2

其中,L为问题空间的变量个数, xal xdl xl 的上界和下界。
2. 共享函数s表示个体 xi 和小生境群体中其他个体的关系:
s(d(i,j))={1(d(i,j)σshare)α,0,d(i,j)<σshare

其中, σshare 为共享半径, α 为常数。

这里补充一下共享函数的概念和意义:
共享函数(Sharing Function)是表示群体中两个个体之间密切关系程度的一个函数,可记为s(d(i,j)),表示个体i和j之间的关系。例如,个体基因型之间的海明距离就可以为一种共享函数。这里,个体之间的密切程度主要体现为个体基因型的相似性或个体表现型的相似性上。当个体之间比较相似时,其共享函数值就比较大;反之,当个体之间不太相似时,其共享函数值比较小。
3. j=j+1 ,如果 jnm 转到步骤1,否则计算出个体 xi 的小生境数量为:

ci=j=1nms(d(i,j))

4. 计算出个体 xi 的共享适应度值:
f,m=fmci

反复执行以上的四步可以得到每一个个体的共享适应度值。

之后的交叉、变异等操作就跟SGA(简单遗传算法)没什么不同了。

参考资料
1. 博客园博主Alexander的博客(从NSGA到NSGA-ll),链接如下: https://www.cnblogs.com/bnuvincent/p/5268786.html
2. 遗传算法小生境技术的简介,博主博客:
http://www.blogjava.net/weidagang2046/articles/84798.html#Post

  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值