这些都不是我写的,我只是看了下。都是从mathworks的fileexchange上找到的,关于程序更多的资料,你可以到上面去找,很容易可以找到的。

首先说下Matlab自带的tsp程序吧,如果你有在help里面搜过的话你会发现matlab里面是有一个例子的,用的也是遗传算法。文件名称是traveling_salesman_demo.m,可以自己看下,是在global optimization toolbox里面的。基本是有3个函数creation, crossover, mutation。

还是先说模拟退火算法吧,网上搜到的这个模拟退火程序相比遗传算法来说,速度好像算比较慢的,而且效果好像也没有遗传算法的好,当然这也是对于这个特定问题的也许,算法是由一个distance来计算总的距离的,然后swapcities来产生新的距离。主程序是simulatedannealing。压缩包里面的其他一些是他提供的一些模拟的数据。不过这个作者是很用心的,他竟然还提供了一份PDF的说明文档!而且很好的排版了。可以好好阅读这个文档,对程序的理解会有很多帮助。

个人觉得模拟退火的对于退火的初始温度,退火速度的公式,还有如果你求一些特定问题的时候有些初始的值以及退火的步数是要很好掌握才好的。不然退火会很慢,也许要好久好久才能找到你想要的解。

但是这个模拟退火的求TSP问题有些慢的一些原因和另外一个遗传算法比起来,有些是因为他对每次的交换完城市后的距离每次都要求解。

然后这里的遗传算法首先是对城市间的距离做了一个N*N的矩阵,然后就是每个行取一个,当然是不同的列,也就是说这里就只是取数据的方式不同了。所以就不用每一次都要去计算很多步数了。这的确是一个好的方法,当然可能是参考matlab里面的例子,不过这个程序明显比例子要显得简练很多,比如城市之间的距离直接用了

   1: dmat = reshape(sqrt(sum((xy(a,:)-xy(a',:)).^2,2)),N,N);

这样的一行就出来了。

具体的可以看程序吧。

另外就是说一个出来的优化结果,最好的结果好像是都不会有交叉的,然后组成一个闭合的曲线,然后。。。好像是有那么一个名词?--简单几何体?    大概就是如果给它充气就是成为一个圆的意思。不过城市多的话确实看的眼花缭乱的晕(估计travel man也不会走那么多路那么累啊)。