在多目标优化优化算法如NSGA2,RVEA等算法中,需要对种群个体进行操作,种群个体经过交叉变异产生的子代有可能会产生重复个体,需要对重复个体进行删除,本文列举几个Matlab函数用于对重复个体进行删除。所列举的例子都是以行为一个实体进行操作。
目录
1:unique:删除矩阵中重复元素
A=unique(A,'rows')将A中每一行视作一个实体,返回A中唯一行。
A=[1 2 3;4 5 6;1 2 3;5 6 7];
A=unique(A,'rows');
结果
2:ismember:判断数组元素是否为集数组成员
Lia = ismember(A,B,'rows') 将 A 和 B 中的每一行视为一个实体,当 A 中的行也存在于 B 中时,将返回包含逻辑值 1 (true) 的列向量。数组中的其他位置将包含逻辑值 0 (false)
A=[1 2 3;4 5 6];
B=[1 2 3;5 6 7];
index=ismember(A,B,'rows');
C=A(index==0,:)
结果:
3:setdiff:设置两个数组的差集
C=setdiff(A,B,'rows')将 A 和 B 的每一行都视为单个实体,并返回 A 中存在但 B 中不存在的行,不包括重复项。
A=[1 2 3;4 5 6];
B=[1 2 3;5 6 7];
C=setdiff(A,B,'rows')
结果: