旅游销售人员 - 进化算法

时间:2015-11-10 09:06:34

标签: genetic-algorithm traveling-salesman evolutionary-algorithm

我对进化算法的工作原理有所了解。我写了一个来找到n维空间中方程的最大值。

我可以看到使用相同设计解决TSM问题的问题。 当我使用交叉,甚至变异时,我可能会创建一个人,可以两次去同一个城市,或者不会访问每个城市。

我可以采取哪些措施来确保我的人口中的每个人只访问每个城市一次?也就是说,每个人都是一个有效的答案。

2 个答案:

答案 0 :(得分:0)

解决这个问题的常用技术是施加“惩罚”,其中,任何没有访问过的城市的染色体都会增加惩罚。例如,如果染色体有五个未访问过的城市,则对染色体适应度分数加5x惩罚。在这种情况下,任何没有访问过城市的染色体,逐渐从人口中移除并允许其他人(没有访问过的城市)个人在人口中维持。

答案 1 :(得分:0)

一种方法是使用双点有序交叉。这种类型的交叉会从单个父母创建一个孩子。选择两个父母并选择染色体上的两个随机点。点之间的基因传递给孩子。剩余的基因从同一亲本转移,但按照它们出现在第二亲本中的顺序。结果是,子项包含来自单个父项的所有值,但包括父母双方的排序和特征。

此处显示了使用此类运算符求解TSP的两个示例;

cutoff_frequency

http://johnnewcombe.net/blog/gaf-part-4/

这些例子中的第一个使用整数来引用城市,第二个例子通过使用基于对象的基因来将城市存储在染色体中来简化这一过程。