问题背景
在做多目标离散问题优化算法时,利用多个不同的进化算子产生了重复的解 ,所以有必要记录一下如何去掉重复的解,精简问题规模,尤其时迭代到后期,很多相同的解
解决办法
unique(A,'rows',setOrder)
其中,setOrder
参数有两种取值,默认是’sorted’
即去掉重复后排序输出(以第一个元素大小位依据),另一个是'stable'
代表去掉重复后按原来顺序输出
常用 unique(A,'row','stable')
示例
>> a=[1 0 1;1 0 1; 1 1 1;2 5 1; 1 1 1;0 1 2 ;0 4 5 ;0 1 2]
a =
1 0 1
1 0 1
1 1 1
2 5 1
1 1 1
0 1 2
0 4 5
0 1 2
>> unique(a,'row','stable')
ans =
1 0 1
1 1 1
2 5 1
0 1 2
0 4 5
>> unique(a,'row')
ans =
0 1 2
0 4 5
1 0 1
1 1 1
2 5 1
>>
补充
如果你的这个矩阵还有与之关联的另一个矩阵,比如我的每一个解还对应着他的两个目标值,那你可能还需要返回行的下标,用于处理关联矩阵,如下
[uniqueA row]=unique(A,'row','stable')
再者,你如果有从去重后的矩阵回复原矩阵的想法,那你可能还需要另一个返回值用于重构原矩阵,如下
[uniqueA row rebuilt]=unique(A,'row','stable')
不过一般来讲,我们会保留原始举证,不太会把他丢掉,直接用去重覆盖的方式也比较少见。