如果用遗传算法解tsp问题,那么基因应该是n个城市的排列顺序,适应度应该是城市之间的距离总和
以上是我的理解,现在问题来了,选择了基因以后,新生成的基因里面不会有重复经过的城市么?
例如:
1,2,3,4,5,6,7,8
8,7,5,6,4,3,2,1
这两条基因如果在 “3” 处交叉,就是如下
1,2,3,6,4,3,2,1
8,7,5,4,5,6,7,8
这不就是没用了么,究竟是怎么一回事?
看了半天资料了都没有什么头绪。

解决方案 »

  1.   

    交叉算子
    两个亲体(切割点以“|”标记)
    p1=(1 2 3 | 4 5 6 7 | 8 9)
    p2=(4 5 2 | 1 8 7 6 | 9 3)
    将按照下面的方式产生后代。首先,切割点之间的片段被拷贝到后代里:
    o1=(x x x | 4 5 6 7 | x x)
    o2=(x x x | 1 8 7 6 | x x)
    为了得到o1,我们只需要移走p2中已在o1中的城市4、5、6和7后,得到
    2—1—8—9—3
    该序列顺次放在o1中:
    o1=(2 1 8 | 4 5 6 7 | 9 3)
    相似地,我们可以得到另一个后代:
    o2=(2 3 4 | 1 8 7 6 | 5 9)变异算子
    原个体:(1 2 3 4 5 6 7 8 9)
    随机选择两点:(1 2 | 3 4 5 6 | 7 8 9)
    倒置后的个体:(1 2 | 6 5 4 3 | 7 8 9)
      

  2.   

    我这里有一个现成的求tsp问题的程序,要的话:QQ:375300625