论文解读:快速实现PICEA-w算法中的字典排序(Lexicographic ordering)

4 篇文章 0 订阅

如何在Matlab中实现矩阵行向量按字典次序排序并获得排名

写在前面

最近在研究关于多目标问题的协同演化算法。感觉PICEA-w算法框架还有很大的扩展空间,因此尝试着复现这个算法的程序。不幸的是,当写到coEvolve过程的selectS模块时,遇到了一个对于我来说比较新的概念,好在后来摸索出来。其实不难,只不过刚开始被概念整懵了。现在把解决办法分享出来,如有错误请指正!

需要解决关键问题

在这里插入图片描述
正如论文中提到的那样,selectS模块主要分两步进行:
首先:需要得到一个按行升序排序的矩阵Rsort(具体过程略)。
然后:对Rsort执行字典排序(Lexicographic ordering,即上图的高亮部分),并输出名次 r r r 和个体(每一行看作一个解个体)的适应度 F i t s i Fit_{s_i} Fitsi
这里,主要需要实现功能在第二步中

难点

主要困难有两个:

  1. 理解字典排序的原理;
  2. 如何统计个体的排名(注意,不是排序后的次序)。

实现方案

字典排序的概念就不说了,自行摆渡。
在Matlab中,如果仅仅实现字典排序很简单,使用sortrows函数即可。但是如何得到每个向量的名次呢?正如论文中的示例,要求相同个体的排名也相同:
在这里插入图片描述
解决方法如下:
在这里插入图片描述
至此,问题好像解决了。不知有么有说明白,欢迎一起讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值