旅行商问题(Travelling salesman problem, TSP)

旅行商问题建模与证明 – 个人学习记录📝

问题介绍

旅行商问题(Travelling salesman problem, TSP)是组合优化中的一个NP困难问题,在运筹学和理论计算机科学中非常重要。问题内容为“给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路。”
本帖只讨论问题的建模,并对公式作进一步的说明补充。
该问题目前的求解方案包括精确精算法(分支定界,动态规划,benders分解等)、启发式解法、强化学习等。

问题建模

TSP 问题可以通过整数线性规划来建模。用数字0 ,…n表示城市,并定义01变量 x(i,j)
在这里插入图片描述
对于 i = 0, …, n,令u(i) 为一人工变量,最后把c(i,j) 作为从城市 i 到 j 的距离。那么TSP可以写成下面的整数线性规划问题:
在这里插入图片描述
大家可以先看看维基百科的证明
在这里插入图片描述

接下来对证明做一些补充,我也是看了几遍才看懂维基百科的证明:
目标函数约束了距离最短。但是读者可能会有两个疑问。一个是模型中的约束是否满足了每个城市只访问了一次(起点除外)并且形成的回路是一个封闭城市序列,二是是否对于任意的一种路径情况,即任意可行解,都存在人工变量u(i)满足约束。
1、模型中两个等式限制了城市A 只能去往一个城市,同样也只有一个城市到城市A。模型的最后一个约束保证了覆盖所有城市的路径只有一条,而不是两条或者多条分散的路径在一起覆盖的。
有两种方法可以证明:
其一是若存在多个回路,则每个子回路经过出发城市0号城市,这将与两个等式约束矛盾。假设不成立。
其二是假设存在多个回路,对其中一个回路中x(i,j) = 1 对应的下式求和:在这里插入图片描述
假设该回路有k个城市,由于是个回路,求和后k(u(i) - u(j)) = 0
得到: nk <= (n - 1) * k
则假设不成立。
2、疑问2的证明维基百科讲的比较明白,这里不再赘述。

参考:
https://zh.wikipedia.org/wiki/%E6%97%85%E8%A1%8C%E6%8E%A8%E9%94%80%E5%91%98%E9%97%AE%E9%A2%98

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值