遗传算法顾名思义就是模拟生物界的自然选择原理,比如对于TSP问题,遗传算法大体上是可以先随机生成一组大量的解空间,作为一个初始的种群,然后按照一定的策略让种群自由交叉(也就是传说中的交配),变异。按照一定的策略淘汰种群中不符合预期目的的个体。
目前大多数遗传算法使用的是根据随机生成的概率与给定的交叉,变异概率相比来决定是否交叉,变异,但是笔者觉得这种算法虽然更符合自然界的随机交配原则,但是对于解决TSP问题比较盲目,有时候可能走过多弯路。
本文采用的方法是一种修改的遗传算法,具体如下:
1、随机生成一个初始种群
2、计算种群中每个个体的代价,在TSP中也就是路径和。选出最小的两组路径AB,和代价最大的路径CD。
3、AB交叉,产生两个子代EF,大多数情况下EF的代价肯定是小于CD的(ps:帅哥和美女生出的儿子肯定很帅嘛)
用EF替代CD,这样就把种群中两个比较差的个体淘汰掉了。
4、变异这一步,还是使用全部变异的好,有利于种群的进化。对于每个个体随机个概率和给定的概率比较来决定是否变异。
5、计算种群中代价最大的和最小的路径差,如果路径差值小于10的话说明种群已经趋于稳定,跳转6,,否则跳转2,继续交叉变异,进化
6、现在种群的代价已经趋于稳定了,算是可以结束了。代价最小的路径即为TSP的最优解。
完
此算法虽然和正统教材上的算法不一样,但是个人觉得这样效率更高些。如有疏漏还请指正。
由于代码比较长,就不贴了,在此可下载http://download.csdn.net/detail/z598751848/4308735