多目标遗传算法NSGA
来源:互联网 发布:免费微场景制作软件 编辑:程序博客网 时间:2024/04/27 13:25
多目标遗传算法NSGA
因所读的一篇论文中,为了解决多目标的最优解问题,作者使用了一种称为NSGA-II(Improved Non-dominated Sorting Genetic Algorithm)的遗传算法,花了两天时间了解下,此为何物。其中NSGA以及NSGA-II的原理说明内容大部分取自2008年李莉的硕士论文《基于遗传算法的多目标寻优策略的应用研究》,故将此文定为转载。
首先需要了解一种称之为‘dominate’的关系:
设一个最大化目标函数为
一般而言,在多目标优化的问题里, efficient solution往往不是唯一的,那么所有efficient solutions的集合,我们称为efficient set。相对应地,所有non-dominated points组成的点集,称为Pareto front(帕累托前沿)。
题外话:一般多目标规划问题,其实都可以建模为找Pareto 最优解的问题。
在一个庞大的解空间中找出所有的Pareto解(Pareto front)是一个NP-hard问题,因此一些有意思启发式算法就诞生了,而本文这里所讲的遗传算法(Genetic Algorithm)就是其中之一。
NSGA(Non-dominated Sorting Genetic Algorithm)
NSGA非支配排序遗传算法就是一种以基本遗传算法为基础的多目标寻优策略,因为其在多目标寻优领域的优势,成为人们的研究热点。
下面将简要说明NSGA的原理[[1]]。
NSGA主要由三部分构成,分别为:
种群分层
假定寻找最大化目标函数为F(x)=(F1(x),F2(x),...,Fm(x)) ,种群规模为n 。
(1)设i=1 ;
(2)对于所有的j=1,2,…,n 且j≠i ,按照以上定义比较个体xi 和个体xj 之间的支
配(dominate)与非支配(non-donimated)关系;
(3)如果不存在任何一个个体xj 优于xi ,则xi 标记为非支配个体;
(4)令i=1+1 ,转到步骤(2),直到找到所有的非支配个体。
通过上述步骤得到的非支配个体集是种群的第一级非支配层,然后,忽略这些已经
标记的非支配个体(即这些个体不再进行下一轮比较),再遵循步骤(1)一(4),就会得到第二
级非支配层。依此类推,直到整个种群被分层。共享小生境技术
为了在演化过程中保持群体的多样性,NSGA中引入了共享小生境技术。
假设第p 级非支配层上有np 个个体,每个个体的虚拟适应度值为fp 。
(1)算出同属于一个非支配层的个体xi 和个体xj 的欧几里得距离:dij=∑l=1l=m(Fl(xi)−Fl(xj)Ful−Fdl)2−−−−−−−−−−−−−−−−−⎷
其中m 目标个数,Ful,Fdl 分别为Fl 的上界和下界。
(2)共享函数(Sharing Function)是表示两个个体间关系密切程度的函数,两个个体xi 和xj 间的共享函数sh(dij) :sh(dij)=⎧⎩⎨⎪⎪1−(dijσshare)α0,dij≤σsharedij>σshare σshare 的值表示了xi 与xj 群体的相似度。dij 表示个体xi 与xj 间的欧式距离。α 用于对sh(dij) 的调整。
由此可见:sh(dij) 越大表明二者关系密切,即相似度高
(3)然后我们计算出节点i 与其他所有节点的累积相似度,称为共享度ci :ci=∑j=1npsh(dij),i=1,2,...,np
(4)计算出个体xi 的共享适应度值:f′p(xi)=fp(xi)/ci
同理我们可以计算出所有个体在小生境条件下的适应度,从而提高了种群在演化时的多样性,因为相似度高的种群,其适应度会得到适当地减小。
整体NSGA工作流程如下图所示(至于遗传算法的具体内容,如果以后接触到,再做详细地了解):
- 多目标遗传算法NSGA
- 【搞搞算法】多目标遗传算法NSGA-II的C语言代码使用手册
- 多目标遗传算法NSGA-II在工业机器人关节空间轨迹优化上的应用
- 多目标遗传算法研究
- 多目标遗传算法研究
- 多目标遗传算法优化
- 遗传算法与多目标遗传算法
- 【搞搞算法】多目标GA算法NSGA-II_论文阅读笔记
- 学习-基于遗传算法的多目标优化算法
- C++实现多目标遗传算法(0/1背包问题)
- 多目标优化系列(一)NSGA-Ⅱ
- 【搞搞算法】用遗传算法解决多目标规划问题_论文阅读笔记
- 多目标遗传算法和有限元相结合程序的计算步骤(伪代码)
- 多目标优化的遗传算法及其改进(浮点数编码),对多个函数进行测试
- 遗传算法求解多约束、多类型车辆、多目标优化的车辆路径问题
- NSGA
- 多目标进化算法
- 多目标优化算法学习
- ubuntu 下解决sublime Text 3的中文输入问题
- C++模板与泛型编程(二)——类模板
- Android 调用系统的拍照与裁剪功能
- [c++]随机生成四个数字,计算24点,并输出算式
- 产品经理之商业模式画布
- 多目标遗传算法NSGA
- 业界应用,技术分享 record_3 不错的分享
- 三分·三分求极值 HihoCoder
- Linux系统编程——生产者与消费者问题
- solr6.4通过ivy解析solr源码
- 前端框架Amaze UI(1)概述
- C/C++高质量编程之常量
- linux下mysql的简单应用
- POJ 1185 状压DP