旅行商问题的两种经典求解方法
背景
旅行商问题(Travelling salesman problem, TSP)是一个典型的整数规划问题,给定一系列点集,在点集中从一点出发,寻找一条最短路径,该路径经过点集中的所有点,并且每个点只经过一次。

对于该问题我们可以进行初步建模:
式中表示从节点到节点的路径,表示路径的长度;第一个约束保证一个节点只出发一次,第二个约束保证一个节点值到达一次。但是上述的两个约束并不能解决TSP问题,可能出现如下情况:
如上图,对于一个有6个节点的点集,(1)有子回路(2)无子回路均可以满足上式的约束条件,但很明显(1)有子回路不是TSP问题的解。
对于TSP问题,重点研究的表示如何消除子回路。下面介绍两种消除子回路的TSP问题求解方法。
Dantzig–Fulkerson–Johnson formulation
该方法由Dantzig,Fulkerson 和Johnson提出,模型如下:
式中表示点集中点的个数。
将该模型的第三个消除子回路的约束单独提出来:
式中为的一个真子集,这个式子的含义是:对于一个中的任意真子集,中连通的节点边数小于节点个数。

如上图,对于一个有子回路的点集,其中的子集如,,不满足第三个约束。
Miller–Tucker–Zemlin formulation
该方法由Miller,Tucker和Zemlin,模型如下:
MTZ计算公式通过引入人工变量来消除子回路,单独提出第三个约束:
的值表示回路中节点的次序,对于非连通的两个节点和,上式可以变换为:
该式显然恒成立。
对于连通的两个节点,上式可以变换为:
如上图中的子集,,显然不满足第三个约束。
参考文献
[1] C. E. Miller, A. W. Tucker, and R. A. Zemlin, "Integer Programming Formulation of Traveling Salesman Problems," Journal of the ACM, vol. 7, no. 4, pp. 326-329, 1960-10-01 1960, doi: 10.1145/321043.321046.
[2] A. Langevin, F. Soumis, and J. Desrosiers, "Classification of travelling salesman problem formulations," Operations Research Letters, vol. 9, no. 2, pp. 127-132, 1990.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人