浅谈NSGA-Ⅱ非支配排序方法
前言
本人发布过一篇NSGA-Ⅱ算法,是用Matlab实现的,并非本人原创,是转发其他博主的文章,个人觉得写的特别好,有很好的借鉴意义,具体代码实现详见本人博客链接:https://blog.csdn.net/qq_42552806/article/details/105822749。
主题
近来随着对该算法的深入研究,我有几点思考记录在此,以便日后查看。以下内容若有幸得到大佬指点,感激不尽。如题所示,本人在此主要探讨该算法的非支配排序方法,不对该算法中的其他算子进行说明。
正文
我在编写该算法的时候,遇到的一个问题是:调试的时候为什么种群分层之后的图像波动性非常强?如下图1所示。本文仅有两个目标函数:目标函数1为左子图,为最大化函数:目标函数2为右子图,为最小化函数。
为解决这个问题,我将种群规模降为6个,最终调试信息如下表1所示。
表1:种群规模为6时的解信息
解集下标 目标函数1 目标函数2 被该解支配的解集合S 支配该解的解个数n 与该解无差异的解
解集下标 | 目标函数1 | 目标函数2 | 被该解支配的解集合S | 支配该解的解个数n | 与该解无差异的解 |
---|---|---|---|---|---|
[0] | -248749809794.13236 | 33345667647.88343 | [1]、[2]、[5] | Null | [3]、[4] |
[1] | -248749980764.31656 | 55989448959.017555 | Null | [0] | [2]、[3]、[4]、[5] |
[2] | -2487499832058.09332 | 98066460554.5226 | Null | [0]、[5] | [1]、[3]、[4] |
[3] | -248749740763.32748 | 260089873394.22165 | [4] | Null | [0]、[1]、[2]、[5] |
[4] | -248749782493.80481 | 391504391232.41193 | Null | [3] | [0]、[1]、[2]、[5] |
[5] | -248749818446.18576 | 96148804155.86333 | [2] | [0] | [1]、[3]、[4] |
从表中,我们不难看出:
1)非支配解为[0]和[3],但是[0]与[3]、[4]为无差异解,但[4]并不是非支配解,这就得到一个结论:与非支配解x无差异的解不一定也是非支配解。
2)这六个解分层后的顺序为:
第一层:[0] [3]
第二层:[1] [4] [5]
第三层:[2]
被解[4]支配的解集合为Null,但解[4]不是最后一层,由此得出另一个结论:被解x支配的解集合为Null时,并不代表该解为最后一层解。
那么,如何解释上述问题呢?原因很简单,上述结论1)就是答案。虽然解[0]在非支配层,解[4]在第二层,但由于解[0]与[4]的无差异性,解[0]对应的目标函数1虽然劣于解[4]对应的目标函数1,但是目标函数2却相反,这在图2中得到了很好的展示。
总结
在多目标求解中,往往很难得到最优解,均衡满意解是其追求的目标,而不是某一个目标函数值达到最优即可;虽然其分层图波动性较大,但不影响其Pareto解集的优越性,因为相应的Pareto前沿一定是均衡意义上最好的解集,这个解集里的元素是无差异的,属于非劣解集。