1. 什么是 TSP 问题
旅行商问题,即TSP问题(Travelling Salesman Problem)又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。
2. 什么是模拟退火算法
关于模拟退火算法请参考之前发的一篇文章,请点击这里。
3. 求解思想
关于解的形式,肯定是一组点的序列,表示了访问顺序。第一个点和最后一个点相同,均为起点。
假设所有的点分别为 {v1,v2,…,vn},起点为 v1。
(1)解空间
解空间 S 可表为的所有固定起点和终点的循环排列集合,即
S={(π1,π2…,πn,π1)|π1=v1,(π2,…,πn)为{v2,v3,…,vn}的一个排列}。
S 中的每一个排列表示一个回路,也就是一个解。 πi=j 表示在第 i-1 次访问目标 j。
(2)目标函数
此时的目标函数为访问所有目标的路径长度或称代价函数。我们要求
minf(π1,π2…,πn,π1)=n∑1d
(2)新解的产生
任选序号 u,v(u < v)交换u与v之间的顺序产生新的路径
4. 编码(C语言)
1 | /* 利用模拟退火算法求解tsp问题 */ |