多目标遗传算法NSGA

因所读的一篇论文中,为了解决多目标的最优解问题,作者使用了一种称为NSGA-II(Improved Non-dominated Sorting Genetic Algorithm)的遗传算法,花了两天时间了解下,此为何物。其中NSGA以及NSGA-II的原理说明内容大部分取自2008年李莉的硕士论文《基于遗传算法的多目标寻优策略的应用研究》,故将此文定为转载。

首先需要了解一种称之为‘dominate’的关系:
设一个最大化目标函数为F(x)=(F1(x),F2(x),...,Fk(x))F(x) = (F_1(x), F_2(x), ..., F_k(x)), 因为是一个多目标最优的问题,所以这里的目标数量k≥2k \ge 2。假定x0x_0, x1x_1是解空间XX中的两个解。如果∃i∈[1,k] \exists i \in [1,k]使得Fi(x0)>Fi(x1)F_i(x_0) > F_i(x_1)成立,并且∀i∈[1,k]\forall i \in [1, k]时,Fi(x0)≥Fi(x1)F_i(x_0) \ge F_i(x_1)也成立,那么就称解x0x_0占优(dominate)x1x_1。如果在所有的解空间XX中找不到其他能占优x0x_0的解,那么我们称解x0x_0是一个efficient solution。该x0x_0在空间中对应的点,称为 non-dominated point。个人感觉efficient solution其实就是一个Pareto最优解,即,不可能在使得至少一个人收益变得更好情况下而保证其他人的收益不变差。
一般而言,在多目标优化的问题里, 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))F(x) = (F_1(x), F_2(x), ..., F_m(x)),种群规模为nn。
    (1)设i=1i=1;
    (2)对于所有的j=1,2,…,nj=1,2,…,n且j≠ij \ne i,按照以上定义比较个体xix_i和个体xjx_j之间的支
    配(dominate)与非支配(non-donimated)关系;
    (3)如果不存在任何一个个体xjx_j优于xix_i,则xix_i标记为非支配个体;
    (4)令i=1+1i=1+1,转到步骤(2),直到找到所有的非支配个体。
    通过上述步骤得到的非支配个体集是种群的第一级非支配层,然后,忽略这些已经
    标记的非支配个体(即这些个体不再进行下一轮比较),再遵循步骤(1)一(4),就会得到第二
    级非支配层。依此类推,直到整个种群被分层。

  • 共享小生境技术
    为了在演化过程中保持群体的多样性,NSGA中引入了共享小生境技术。
    假设第pp级非支配层上有npn_p个个体,每个个体的虚拟适应度值为fpf_p。
    (1)算出同属于一个非支配层的个体xix_i和个体xjx_j的欧几里得距离:

    dij=∑l=1l=m(Fl(xi)−Fl(xj)Ful−Fdl)2−−−−−−−−−−−−−−−−−⎷

    \begin{equation}d_{ij} = \sqrt{\sum_{l=1}^{l=m}(\frac{F_l(x_i)-F_l(x_j)}{F_l^u-F_l^d})^2} \end{equation}
    其中mm目标个数,Ful,FdlF_l^u,F_l^d分别为FlF_l的上界和下界。
    (2)共享函数(Sharing Function)是表示两个个体间关系密切程度的函数,两个个体xix_i和xjx_j间的共享函数sh(dij)sh(d_{ij}):

    sh(dij)=⎧⎩⎨⎪⎪1−(dijσshare)α0,dij≤σsharedij>σshare

    \begin{eqnarray*} sh(d_{ij}) = \left\{\begin{array}{ll} 1 - (\frac{d_{ij}}{\sigma_{share}})^{\alpha} & , d_{ij} \le \sigma_{share} \\0 & d_{ij} > \sigma_{share} \end{array} \right. \end{eqnarray*}
    σshare\sigma_{share}的值表示了xix_i与xjx_j群体的相似度。
    dijd_{ij}表示个体xix_i与xjx_j间的欧式距离。
    α\alpha用于对sh(dij)sh(d_{ij})的调整。
    由此可见:
    sh(dij)sh(d_{ij})越大表明二者关系密切,即相似度高
    (3)然后我们计算出节点ii与其他所有节点的累积相似度,称为共享度cic_i:

    ci=∑j=1npsh(dij),i=1,2,...,np

    \begin{equation}c_i = \sum_{j=1}^{n_p}sh(d_{ij}), i = 1,2,...,n_p \end{equation}
    (4)计算出个体xix_i的共享适应度值:

    f′p(xi)=fp(xi)/ci

    \begin{equation}f_p^{'}(x_i) = f_p(x_i)/c_i \end{equation}
    同理我们可以计算出所有个体在小生境条件下的适应度,从而提高了种群在演化时的多样性,因为相似度高的种群,其适应度会得到适当地减小。

整体NSGA工作流程如下图所示(至于遗传算法的具体内容,如果以后接触到,再做详细地了解):

多目标遗传算法NSGA相关推荐

  1. 多目标遗传算法NSGA-II原理详解及算法实现

    在接触学习多目标优化的问题上,经常会被提及到多目标遗传算法NSGA-II,网上也看到了很多人对该算法的总结,但真正讲解明白的以及配套用算法实现的文章很少,这里也对该算法进行一次详解与总结.会有侧重点的 ...

  2. 多目标遗传算法及MATLAB代码

    需要求一个比较复杂的矩阵,一般方法解不出来,故尝试用多目标遗传算法(Multiobjective Genetic Algorithm)求解.不是专门做研究遗传算法的,根据自己需求进行了简单学习,并做如 ...

  3. 基于帕累托的多目标遗传算法优化的原理与 Python 实现

    文章目录 帕累托多目标遗传算法 代码实现 排序函数 查找所需索引函数 Pareto 法得到帕累托前沿函数 拥挤度计算 从父代和子代中选择下一个父代 帕累托多目标遗传算法 在优化领域,遗传算法绝对占得上 ...

  4. MATLAB代码:基于多目标遗传算法的分布式电源选址定容研究

    关键词:选址定容 分布式电源 多目标 遗传算法 参考文档:<Optimal Siting and Sizing of Distributed Generation in Radial Distr ...

  5. 【搞搞算法】多目标遗传算法NSGA-II的C语言代码使用手册

    这是2014年4月在其他博客写的,转帖到CSDN博客上. 在之前的博文里提到过,多目标遗传算法NSGA-II的提出者之一--Kalyanmoy Deb教授实验室的网站http://www.iitk.a ...

  6. 基于多目标遗传算法的IEEE14节点系统分布式电源选址定容matlab程序

    基于多目标遗传算法的IEEE14节点系统分布式电源选址定容matlab程序 摘 要: 为更好地解决分布式电源选址定容问题,提出一种改进的多目标遗传算法.之后,考虑投资成本.网损以及电压稳定性三因素建立 ...

  7. 多目标遗传算法电力系统系统分布式电源选址定容

    多目标遗传算法电力系统系统分布式电源选址定容(matlab程序) 基于IEEE14节点的电力系统多目标优化的遗传算法分布式电源选址定容 对于网损.容量和.电压稳定值的目标优化出来的选址定容 分为有DG ...

  8. 多目标遗传算法NSGAII求解环境经济调度(Python代码实现)

    目录 1 电力系统环境经济调度数学模型 2 算例--IEEE10节点 2.1 数据​ 2.2 Python代码学习 3 一点拓展知识 1 电力系统环境经济调度数学模型   2 算例--IEEE10节点 ...

  9. 基于改进多目标遗传算法的城市轨道列车运行控制曲线优化研究

    摘要:构建多目标改进遗传算法求解城市轨道列车运行仿真模型,求出最优运行曲线.在列车控制系统中,运行方式的转换点是基因编码的基础,由多个基因组成的染色体代表一个控制方案,通过这种方式可以形成初始种群.根 ...

最新文章

  1. MAC安装vmware虚拟机,安装window xp Ghost步骤
  2. 数据库系统概论:第十一章 并发控制
  3. 《HelloGitHub》第 19 期
  4. windows清理剪切板
  5. mysql 与gemfire的同步_(转)分布式缓存GemFire架构介绍
  6. 位运算求整数中二进制1的个数
  7. ha 配置ssl_haproxy ssl 配置方式-阿里云开发者社区
  8. [Swift]LeetCode212. 单词搜索 II | Word Search II
  9. 考上了乡镇的公务员,又不想去了,很纠结,怎么办?
  10. JAVA转为wasm/JavaScript,可以考虑CheerpJ
  11. 计算机键盘运算符号输入,电脑上感叹号怎么打出来(电脑键盘符号大全)
  12. html banner 居中,关于CSS banner图响应式居中显示的方法
  13. 如何评价 IEEE Access 成为了 Top 期刊?
  14. 塑胶模具设计中的几个小问题,学会不吃亏
  15. STM32+ESP8266+MQTT微信小程序SoftAP一键配网接入腾讯物联网平台
  16. 关于 IO、存储、硬盘和文件系统
  17. mysql get seq no_mysql的存储怎么写?帮我看看我这个写的哪里有问题?谢谢
  18. 零经验小白的独游历程——俯视角45度游戏,人物用2D还是3D
  19. jeesite4中图片上传功能
  20. 抢抓数字经济机遇加快云南省数字化发展——云南省数字经济发展实践

热门文章

  1. 计算机专业常用的软件
  2. linux系统类AE软件,一文详解 Linux系统常用监控工具
  3. java程序的开发步骤,全套教学资料
  4. 《Euclidea3》-Eta-07
  5. carla官方文档笔记1
  6. 【UE4教程】Unreal 4.22 CustomButton 自定义按钮点击范围 异形按钮
  7. matlab khatri rao,一种基于Khatri-Rao积3DMU-MIMO的预编码方法
  8. mysql检测不到运行库_请自行检查是否安装VC9运行库??
  9. 【数理方程】分离变量法
  10. 计算机考研408哪个视频好,408计算机考研视频课哪个好