多目标遗传算法

本文最早发表于本人博客:http://www.gotoli.us/?p=1773

很多优化问题是多目标优化问题,目标之间一般都是互相冲突的。比如在公路路线设计中,需要兼顾至少两个目标:1)路线经过多的居民点,方便大家出行,2)路线尽量少经过居民点附近,减少土地征用和房屋拆迁费用。在遗传算法出现之后,有人提出了各种方法将遗传算法应用于多目标优化。多目标遗传算法按照选择方法可以分为两种类型:基于线性加权和基于Pareto排序。

1)基于线性加权的多目标遗传算法

这种算法的思路很简单,将多目标按照线性加权的方式转化为单目标,然后应用传统遗传算法求解,如下公式所示

其中w_i表示第i个目标的权重,f_k表示归一化之后的第i个目标值。我们很容易知道,这类方法的关键是怎么设计权重。比如,Random Weight Genetic Algorithm (RWGA) 采用随机权重的方式,每次计算适应度都对所有个体随机地产生不同目标的权重,然后进行选择操作。 Vector-Evaluated Genetic Algorithm (VEGA) 也是基于线性加权的多目标遗传算法。如果有K个目标,VEGA 会随机地将种群分为K个同等大小子种群,在不同的子种群按照不同的目标函数设定目标值,然后再进行选择操作。VEGA 实质上是基于线性加权的多目标遗传算法。VEGA 是第一个多目标遗传算法,开启了十几年的研究潮流。

2)基于Pareto排序的多目标遗传算法

基于线性加权的多目标遗传算法给大家的感觉怪怪的,并不是真正多目标优化的实质。那么什么是真正的多目标优化。Pareto 在1986 年提出 Pareto 支配概念,其定义为:假设两个解决方案 I1 和 I2,对所有目标而言,I1 均优于 I2,则我们称 I1 支配I2。若 I1 没有被其他解所支配,则 I1 称为 Pareto 解。Pareto 解的集合被称为Pareto front。真正的多目标优化应该求解出Pareto front,选择Pareto front中的解应该提交人工解决。基于Pareto 排序的多目标遗传算法便是致力求解出 Pareto front。Multi Objective Genetic Algorithm (MOGA)、 Non -dominated Sorting Genetic Algorithm (NSGA) 和 improved Non-dominated Sorting Genetic Algorithm (NSGA-II) 都是常用的基于 Pareto 排序的多目标遗传算法。

基于 Pareto 排序的多目标遗传算法首先要解决的是适应度函数设计问题。MOGA 采用的适应度函数fitness(I) = 1 + nq(I),其中nq(I)表示被个体 I 支配的个体数量。NSGA 和 NSGA-II 再采用另外一种计算适应度函数的方法

  step 1: 令i=1
  step 2: 在种群 P 中找到所有不支配其他个体的个体,将它们的适应度设为i;
  step 3: 令i = i + 1
  step 4: 将step2中找到的个体从种群删除。如果种群不为空,则重新从step2开始执行;否则结束。

上面两种适应度函数都能够挖掘种群中 Pareto 支配关系,效果如下图所示(左边的图表示 NSGA 和 NAGA-II 的适应度函数,右边的图是 MOGA 的适应度函数)。


多目标遗传算法_第1张图片

基于Pareto排序的多目标遗传算法还有另一个关键点:我们要找的是 Pareto 解的集合,而不是一个 Pareto 解,因此我们需要鼓励多样性。不同算法有不同鼓励多样性的手段。MOGA 和 NSGA 采用的多样性方法被称为 fitness sharing 。fitness sharing 方法首先用下面的公式计算不同个体之间的距离。


其中f_k {max}表示目前找到的最大k目标值,同理可知f_k{min}。对于个体 I ,我们可以计算它的 niche count (求高手翻译,这个是啥玩意?)

再用个体的 niche count 调整个体的适应度

NSGA-II采用的是另一种被称为 crowding distance 的方法。个体 I 的crowding distance 用 cd(I) 表示。适应度值为i的个体用集合F_i表示。对于每个集合F_i,我们执行如下操作:

  step 1:对于每一个目标k, 我们按照目标值从小到大将集合F_i中个体排序;
  step 2:假设集合 F_i 中个体有l个,则cd_k(I(1,k))和cd_k(I(l,k))等于无限,其他
  其中 I[i,k]表示按照第k个目标值排在第i位的个体。
  step 3:计算cd(I) = \sum_{k=1}^{K}cd_k(I)。

计算得到每个个体的 crowding distance 之后,我们不用它去调整适应度,而是用了一种别样的选择方法。我们随机选择两个个体。如果两个适应度不同,则选择适应度大的个体;如果适应度相同,则选择 crowding distance 大的个体。下图就是 fitness sharing 和 crowding distance 的示意图(左边图表示 fitness sharing, 右边图表示 crowding distance)。


多目标遗传算法_第2张图片

自1985年VEGA发表之后,Fonseca、Deb 和 Goldberg 等大神引领着研究者们为了更好的多目标遗传算法贡献自己的聪明才智,引发了一波研究潮流。时光荏苒,岁月如梭。几十年过去了,转眼到了 2000 年后,多目标遗传算法的坑大部分被填完,研究基本定型,便很难看到有影响力的多目标遗传算法研究了。一篇 2006 年综述对十几年来的研究成果进行总结,算是给多目标遗传算法的研究画上了一句号。潮起了十几年又潮落了。


多目标遗传算法_第3张图片

你可能感兴趣的:(多目标遗传算法)