交叉后可能会产生冲突(访问同一个城市两次),保持交换的基因段(之后简称为交换段)不变,取得冲突基因在交换段内的位置,将交换段外的冲突基因替换为另一染色体对应位置的基因。...6 3 8 7 和 3 7 4 2 ,保持此段不变,对于A,第一个冲突基因为8,取得8在交换段中的位置(6),将交换段外冲突基因替换为B中相应位置的基因,即4....5 1 6 3 8 7 10 4 2
B: 10 5 8 3 7 4 2 6 1 9
下面是代码实现:
function index = isconflict(v, left, right)% 判断向量内是否有冲突...,并确保每个向量经过每个点一次% (v1, v2) input 需要交叉的两个向量% [rv1, rv2] ouptut 交叉完成后的两个向量% 随机生成交叉点len = length...(r2,:), pop(r1,:)] = crossvector(pop(r1,:), pop(r2,:));
endendchildpop = pop;end
MATLAB
变异
随机交换染色体中的两个基因的位置即可