什么是MOP问题?

本文深入浅出地介绍了MOP,包括其概念、数学表示、Pareto优势与非劣解、图像化解释、进化算法在MOP中的应用,特别是NSGA-Ⅱ算法的拥挤度比较。通过实例和生动比喻,帮助读者理解复杂的目标优化问题求解过程。
摘要由CSDN通过智能技术生成

1. 什么是MOP

MOP是multi-objective optimization problem的缩写,翻译成中文是多目标优化。

举一个简单的例子:工厂生产商品。工厂生产商品消耗不同数量的原料;产品的生产过程中产生污染;产品带来收益。如何在有限数量原料条件下,使得污染最小,收益最高,就是一个MOP问题。

然而很多时候,减少污染和提高收益是矛盾的。如果有两个方案:一个污染稍低收益稍低,另一个污染稍高效益稍高,若是没有一个标准来衡量污染和收益的重要性,就没有办法判断这两个方案的优劣。

(举这个例子仅为说明,我也是环保人士...请大家不要在意这些细节)

事实上,MOP问题求解出来的是很多个方案,这些方案之间并没有优劣关系,只能说它们“一样好”。


2. MOP的基本概念

  1. 数学表示

    x是自变量,Ω是x的定义域。F(x)可以理解为m个f函数的集合,每1个f函数就是1个目标,m个f函数就是m个目标。minimize在此应理解为尽量小,就是找到某个x,能让这m个f函数,有尽量多的f函数能尽量小。

    对应到上面的例子,x就是原料。通常还会有g和h函数限制x的范围,对应了例子中的“有限的原料”,本文不讨论g和h。而污染和收益可理解成f1和f2两个函数。可能有同学会疑惑:噫?不是要使收益最大嘛?

    求最大的函数,加一个符号就转化成求最小了。在MOP问题中一般都是求最小

    不同的f函数之间可能是不相容的:要是减少了某个f函数值,就会不可避免地增加另一个f函数值。因此才会有那么多的方案。

  2. Pareto支配(Pareto Dominate

    Pareto支配在MOP问题中支配是一个重要的概念,以下简称为支配。

    支配的描述为:有两个解x1和x2,x1支配x2的充要条件是对于任意的i(i=1,2, 3...m),均有fi(x1)<=fi(x2),且对于任意的i(i=1, 2, 3...m),存在fi(x1)<fi(x2)。记为x1≺x2。(和离散数学里的偏序关系相似)

    这个概念看起来不好懂?其实就类似于小于关系,我的记法很简单:全部小于等于,至少1个小于

  3. Pareto最优解(Pareto Optimal Solution)

    某个解x'是最优解,当且仅当x'不被任何其他解支配。

    大家是否发现,x'只是不被其他解支配,而不是支配了其他所有解,就能称为最优解了。前面说过,MOP问题往往求出很多个解,这些解的优劣关系是无法确定的。

    只要某个解不被其他解支配,就说明这个解不比其他解差,就能称其为最优解了,也叫非劣解

  4. pareto集(Pareto Set)

    如果一组解集(也就是多个x)中的任意两个解都不能支配对方,那么这个集合称为Pareto集,简称PS。

  5. pareto前沿(Pareto Front)

    PS中,每个解对应的目标函数值组成的集合称为pareto前沿,简称PF。

  6. 劣解/非劣解 

    如果数据集中存在一个解可以完全支配当前解,则当前解为劣解,非劣解就是前面的Pareto最优解

相信大家到这也对这些概念很不理解,本人思考了很久也才想明白。不影响,就算上面的概念你一点没懂,看完下面形象的解释你会全部明白!


2. MOP的形象解释

下面以m=2即2个目标函数的情况来理解MOP问题。

横轴是f1,纵轴是f2,p1对应x1,p2对应x2,p3对应x3,p4对应x4。

MOP问题求最小,怎么算“小”?

看图,横轴方向越往左就越小,纵轴方向越往下就越小。因此我们有一个很直观的感受,左下角的点总是比较好的。换句话说,我们想要当x取某个值的时候,p点越往左下越好

现在我们理解一下支配这个概念。x1是否支配了x2?

是的。为什么?看p1和p2,再想想支配的充要条件:全部小于等于,至少1个小于。虽然在f1的数值上两者相等,但在f2的数值上,p1更小。

这样想想,支配实际上表明了哪个解更好。x1≺x2表明了x1比x2更好,看图我们也知道p1的位置是比p2要往下的。

下面我们先不看p1,只看p2和p3和p4,来理解最优解。

x2是最优解吗?是的。因为没有其他解支配x2。x3是最优解吗?同样是的。

看一看p2和p3的位置关系。喔原来是左上和右下的关系。前面说了左下是最好的,而p2更左,p3更下,这样就没法比较了。只能说x2和x3都是最优解。

PS呢?{x2, x3}就是一个PS,因为这个集合里的解互不支配。

PF呢?{p2, p3}就是一个PF。下面祭出一个真正的MOP问题的求解结果来理解PF。

当很多点排布在一起,看起来就像是线了。这些”线“就是前沿,前沿就像是一个边界,代表了最优的解所能到达的边界。由于f函数的限制,已经无法再取到更往左下的解了。

唔所以MOP倒底是在干嘛?一句话说明白:就是要找左下的点,越多越好

在超过2个目标的情况下,也是再找”左下“的点!这个”左下“的意思是尽量让更多的f函数值尽量小。

我找了很多关于MOP问题的解释,负责任地说,这是最最形象的解释了!


4. 进化算法在MOP的应用

到这我们知道了,原来MOP就是死了命地要找到左下的点。虽然明确了目标,但是能不能找到,找到多少个似乎还有看一下f函数的脸色?

精髓来了!看进化算法是如何解决MOP问题的!

主要是3个应用:变异、交叉、多样性。

  1. 变异

    我就直接解释了:取某一个解x0,让x0随机地变化,比如增加0.1得x1,减少0.1得x2之类,看看变化之后和原来有什么不同。

    要是变化之后,发现了更左下的点?是不是就说明发现了更优的解?这时我们可以保留左下的点、淘汰右上的点。这是不是和生物的变异、优胜劣汰非常相似?

    需要注意的是:变异不是一定能够产生更左下的点的,但是只要出现了,我们就能把它保留下来!

    如图,p点可以变异形成另外四个点,我们可以保留更左下的点。

  2. 交叉

    叫做交配更好理解。直接上解释:假如有两个解x1和x2,分别对应左上的p1和右下的p2,那么我们可以想办法融合x1和x2的优良性状,这就是交叉。

    比如,我们可以取x3=(x1+x2)/2,看看x3相对于x1和x2的位置,要是x3是更优的解,同样可以保留x3。

    和变异相同,交叉也不是一定能产生更左下的点的。

  3. 多样性

    多样性这个概念不是很好理解,这里再次祭出真实的求解结果

    忽略最左边的点,可以发现有三条线。

    所谓多样性就是:保持 找到尽可能多的解的 可能性。从上往下,分别为种群1,2,3。

    在变异和交叉里我们提到了淘汰和保留。要是稍微往右或者往上的点都被淘汰了,留下的全是往左下的点,就可能导致最后只发展成了种群2,种群1和3都没有出现!因为有可能发展出种群1和3的个体因为过于严格的选择方法,早早就被淘汰掉了,根本没有发展的机会。

    可见,如何淘汰和保留也是有技巧的。

  4. 总能找到最优解

    进化算法的思想虽然有点非主流,但是给它足够的时间,它总是能让你得到满意的结果

    进化算法的步骤就是:

    任意初始化一个种群,一个种群就是很多个个体的集合,1个个体就是1个解(一开始我还不理解真的是任意吗?后来去看了算法的源代码发现还真是用的任意数!可能也保证了种群的多样性)。

    让这些个体变异、交叉(随机地变化、相互结合产生新的解),然后看保留优良的个体(往左下的点),同时要保持种群多样性,以保留发展出新种群的可能性(让右下和左上的点也有几率留下来)。

    经过若干代,种群就会趋于稳定(解已经很接近真实的最优解了)。进化到一定次数就停止算法。


5. NSGA-Ⅱ算法

既然有Ⅱ自然是有Ⅰ的,这里不说Ⅰ,只说Ⅱ。为什么不说Ⅰ,很简单,因为我不会。

MSGA-Ⅱ的思想也是进化算法的思想。你如果懂了进化算法的思想,也会很容易懂NSGA-Ⅱ。

NSGA-Ⅱ中还包含了一个选择个体的方法:拥挤度比较

i的拥挤度和i-1点和i+1点的位置有关,上图i点的拥挤度就是方形的周长(也就是虚线的总长度)。最左边和最右边的点的拥挤度设置为无限大。

我们喜欢拥挤度大的点(拥挤度大实际上是和周围的点相隔远),因为它们更能保持种群多样性,更容易发展出新种群。

前面说了,左上和右下的点是无法比较的,但是拥挤度提供了一个比较的思路。

下面举一个简单的例子演示NSGA-Ⅱ算法的流程。设种群大小为5,目标函数2个,f1和f2我想不到合适的,就不管了。

  1. 初始化

    初始化5个个体为初代。

  2. 交叉、变异

    原先的5个个体变异,再任选两个进行交叉,交叉又产生5个个体,现在总共有10个个体了。

  3. 非支配排序

    把种群分成几个PS并赋予等级,越往左下的PS等级越高(因为越优)。rank越小,等级越高

  4. 选择

    我们自然是选择rank高的个体了,rank=1和rank=2的个体,总共3个被保留。

    我们要再次凑成5个个体的种群。我们就在rank=3的个体中选,但是也不能全要,因为会超过5个!

    那咋办嘛?这就用到拥挤度了,选择拥挤度大的,那么就是最左边和最右边的两个,因为我们定义了这两个的拥挤度是无限大。

  5. 迭代

    选择完了又回到第2步,直到进化到了一定的次数,结束算法

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值