用遗传算法求解TSP问题
最近在做人工智能的课设,碰到一个与TSP类似的问题,今天尝试了一下用遗传算法求解TSP,下面是我碰到的问题以及我的一些想法:
1.如何对个体进行编码?
TSP问题的实质是求一个最短的哈密顿回路,如果将城市标号为0,1,2...n-1,那么TSP的一个解就是一个圆排列,等价于一个规定了起点的排列,所以容易想到可以用顺序编码方式,即用一个数组保存旅游顺序。
2.如何快速初始化种群?
根据上述编码方式,种群初始化就是产生一系列随机排列,c++有一个函数rand_shuffle(V.begin(),V.end())可以打乱一个排列,用这个可以实现种群的快速初始化。
3.如何交叉?
这个问题可以说是遗传算法求TSP的关键,也是难点所在,在这里,交叉形式上就是由两个排列产生两个新的排列,但是要保持原来的排列的优越性。目前用的比较多的是顺序交叉法。
4.变异算子
求TSP时,变异算子采用比较多的是交换2个站点的旅游顺序。变异的目的是增加种群的多样性,我有一个想法,就是将一个排列变成它的互补排列,例如将1 4 2 3变成4 1 3 2,这样应该也满足增加多样性的要求,可以试一试。
暂时就写这么多吧,若有错的地方或者大家有更好的想法,还望不吝指教。