写在前面
最近在研究关于多目标问题的协同演化算法。感觉PICEA-w算法框架还有很大的扩展空间,因此尝试着复现这个算法的程序。不幸的是,当写到coEvolve过程的selectS模块时,遇到了一个对于我来说比较新的概念,好在后来摸索出来。其实不难,只不过刚开始被概念整懵了。现在把解决办法分享出来,如有错误请指正!
需要解决关键问题
正如论文中提到的那样,selectS模块主要分两步进行:
首先:需要得到一个按行升序排序的矩阵Rsort(具体过程略)。
然后:对Rsort执行字典排序(Lexicographic ordering,即上图的高亮部分),并输出名次
r
r
r 和个体(每一行看作一个解个体)的适应度
F
i
t
s
i
Fit_{s_i}
Fitsi。
这里,主要需要实现功能在第二步中
难点
主要困难有两个:
- 理解字典排序的原理;
- 如何统计个体的排名(注意,不是排序后的次序)。
实现方案
字典排序的概念就不说了,自行摆渡。
在Matlab中,如果仅仅实现字典排序很简单,使用sortrows函数即可。但是如何得到每个向量的名次呢?正如论文中的示例,要求相同个体的排名也相同:
解决方法如下:
至此,问题好像解决了。不知有么有说明白,欢迎一起讨论。