我正在尝试使用遗传算法解决旅行商问题(TSP)。我的基因组是图形中顶点的排列(推销员的路径)。
我应该如何在基因组上进行交叉操作?
在哪里可以找到C#中我的问题的实现?
您应查看Gokturk Ucoluk撰写的“ TSP避免特殊交叉和变异的遗传算法解决方案 ”。它概述了用于排列的特殊交叉运算符,并提出了一种与标准交叉效果很好的排列的巧妙表示(即,对两个排列进行交叉总是产生两个排列)。
关键的见解是将置换表示为其反转序列,即对于每个元素i,存储a[i]比置换i左边大的元素数i。与直接表示不同,对的唯一约束a[i]是局部约束,即a[i]不能大于N - i。这意味着两个有效反转序列的简单交叉总是产生两个有效反转序列-无需对重复元素进行特殊处理。
i
a[i]
N - i