非对称TSP问题(asymmetric travelling salesman problem)与对称TSP问题的转换

小伙伴们有没有这样的经验:在上课10分钟前从寝室骑车飞奔向教学楼时,寝室到教学楼的路非常挤;而这个时候,如果有东西落在寝室,从教学楼往寝室飞奔时的车道却很空。换句话说,在一些场合,从点 i i i到点 j j j的行驶时间和从点 j j j到点 i i i的行驶时间是不同的。这个现象当然不会被学者们忽视。这就是我们今天要介绍的非对称类问题(asymmetric)。

非对称TSP与对称TSP

在我们以往介绍的TSP问题和VRP问题中,算例给出的通常是客户点的二维坐标,两点之间的距离通过欧拉距离(平方和开根号)计算,因此两点间不同向的边距离是相同的。因此,我们在设计算子时可以对一些边进行“翻转”,例如“1→2→3→4→5”翻转为“1→4→3→2→5”,这个时候由于距离的对称性,“2→3→4”与“4→3→2”两段路径的距离是相同的,不需要重新计算。但在我们今天介绍的非对称TSP问题中,由于反向后距离发生变化,这两段路径的距离将发生改变,这种去重优化的方法就失效了。

1983年学者Roy Jonker 和 Ton Volgenant 提出了一种将非对称TSP问题转换为对称TSP问题的方法。通过这种方法,我们可以将非对称TSP问题转化为对称TSP问题,然后使用适合对称问题的算法求解该问题,而不是重新设计算法。

转化方法

Roy和Ton通过扩充原问题graph的规模的方式,在新的graph上求解对称TSP问题,然后将新解转化为旧问题的解。

通过以下操作,将一个非对称TSP问题的距离矩阵 C C C转化为对称TSP问题的距离矩阵 C ~ \tilde{C} C~ C ~ T = C ~ \tilde{C}^T = \tilde{C} C~T=C~):

  1. C ˉ = C \bar{C} = C Cˉ=C,其中 c ˉ i i = − M ( i ∈ N ) \bar{c}_{i i}=-M(i \in N) cˉii=M(iN)。(M是一个很大的数,N为节点集合)
  2. U U U为一个n维方阵,对 ∀ i , j ∈ N \forall i, j \in N i,jN u i j = ∞ u_{i j}=\infty uij=
  3. C ~ = [ U C ‾ T C ‾ U ] \tilde{\boldsymbol{C}}=\left[\begin{array}{ll}U & \overline{\boldsymbol{C}}^T \\ \overline{\boldsymbol{C}} & \boldsymbol{U}\end{array}\right] C~=[UCCTU]

得到的矩阵 C \boldsymbol{C} C就是新的对称TSP问题的距离矩阵。可以看出,这个矩阵是一个2n*2n规模的方阵,新的节点集为 { 1 , 2 , … , n , n + 1 , … , 2 n } \{1,2, \ldots, n, n+1, \ldots, 2 n\} {1,2,,n,n+1,,2n}

求解这个新的TSP问题得到的最优解必定是以下形式(或其对称形式):

i 1 → ( i 1 + n ) → i 2 → ( i 2 + n ) → ⋯ → i n → ( i n + n ) → i 1 i_{1} \rightarrow\left(i_{1}+n\right) \rightarrow i_{2} \rightarrow\left(i_{2}+n\right) \rightarrow \cdots \rightarrow i_{n} \rightarrow\left(i_{n}+n\right) \rightarrow i_{1} i1(i1+n)i2(i2+n)in(in+n)i1

其中 i k ∈ N i_{k} \in N ikN

也就是说,新问题的最优解中,每一个节点必定指向到它对应的拓展出的节点,而每一个新的节点必定指向原先图中的某个节点。该解对应的原问题的最优解即为:

i 1 → i 2 → ⋯ → i n → i 1 i_{1} \rightarrow i_{2} \rightarrow \cdots \rightarrow i_{n} \rightarrow i_{1} i1i2ini1

深入理解

看了前文的转化方法,是不是感觉特别简单呢?只需要通过一些简单的矩阵操作得到新的距离矩阵,路径的转化也非常简单,只需要取奇数位的节点编号即可。

在原论文中作者提出一个定理:新问题的最优解必定对应一个原问题的最优解,并没有给出完整证明。事实上转化的思维也很简单,这里小编给大家文字证明一下。

在矩阵操作的第一步得到 C ˉ = C \bar{C} = C Cˉ=C的过程中, c ˉ i i = − M \bar{c}_{i i}=-M cˉii=M在新矩阵 C \boldsymbol{C} C中实际上对应了节点 i k i_{k} ik i k + n i_{k} +n ik+n。所以在新问题的最优解中,必须尽可能多的包含 i k → ( i k + n ) i_{k} \rightarrow\left(i_{k}+n\right) ik(ik+n)这类边。由于一个节点只能访问一次,所以这类边最多存在n条。由于矩阵 U U U的每一个数都是无穷大,因此不存在 ( i k 1 + n ) → ( i k 2 + n ) \left(i_{k1}+n\right) \rightarrow\left(i_{k2}+n\right) (ik1+n)(ik2+n)以及 i k 1 → i k 2 i_{k1} \rightarrow i_{k2} ik1ik2这两种边,因此新解中剩下的边只能是 ( i k 1 + n ) → i k 2 \left(i_{k1}+n\right) \rightarrow i_{k2} (ik1+n)ik2的形式了。

由于 ( i k 1 + n ) → i k 2 \left(i_{k1}+n\right) \rightarrow i_{k2} (ik1+n)ik2的距离与 i k 1 → i k 2 i_{k1} \rightarrow i_{k2} ik1ik2的距离相等,并且每个新问题最优解中必定存在n条距离为-M的边,因此新的目标函数相当于原问题的目标函数减去一个常数(n*M),因此原问题与新问题等价。

小编解释的可能有点绕,不过原理并不复杂,相信同学们能够思考清楚。

代码分享

为了验证方法的准确性,小编基于干货 | JAVA调用cplex求解一个TSP模型详解中的TSP模型代码编写了将非对称TSP问题转化对称TSP问题进行求解的代码。(代码下载见文末)事实上,上述文章提到的模型不需要改动也可以作为非对称TSP问题的模型,只需要修改输入为矩阵形式,一样可以求解。小编简单测试了“直接通过模型求解”和“转化为对称问题通过模型求解”两种形式,验证转化方法的正确性:

直接求解模型结果:

在这里插入图片描述

转化为对称问题求解模型结果:

在这里插入图片描述

可以看到,对于测试算例(9个节点的小算例),两种方法得到的路径是一模一样的。下图中可以看到,新模型的目标值是-88398.0,正好等于9*(-10000)+1602.0 (M=10000),这与我们之前的推理也吻合。由于转化后问题的节点规模为原来的两倍,相应的算法时间消耗也扩大了很多(0.183s到1.203s)。

先提醒一下,如果问题存在不止一个最优解,可能两次得到的路径会不一样哦,小伙伴们自己测试时遇到了可别骂小编弄错了。

结语

自此,非对称TSP问题转化为对称TSP问题的方法已经介绍完了。值得一提的是,原作者1983年的论文还提出了一种针对局部非对称TSP问题(也就是部分节点距离不对称,部分对称)的转化方法,不需要增大节点规模到2n。可惜的是,该方法后来被证明有误,新解的结果只能作为原问题最优解的下界,作者在1986年的论文中承认了自己的错误。看来学术研究即使暂时被承认,也一样要经受时间的考验啊!

小编在查阅文献也时发现,较新的关于非对称问题的研究更多是直接设计对应算法,很少关于非对称TSP问题转对称的研究。或许是因为本文提到的方法已经相当经典,比较难有改进了吧。

参考文献:

  1. Jonker, R., & Volgenant, T. (1986). Transforming asymmetric into symmetric traveling salesman problems: erratum. Operations Research Letters, 5(4), 215-216.
  2. Jonker, R., & Volgenant, T. (1983). Transforming asymmetric into symmetric traveling salesman problems. Operations Research Letters, 2(4), 161-163.

代码下载:

关注公众号【数据魔术师】,在公众号内输入【ATSP】
或访问github:https://github.com/zll-hust/ATSP
即可获得本文代码文献!

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
非对称TSP(Asymmetric Traveling Salesman Problem)是一个经典的组合优化问题,在建立数学模型时,我们需要明确以下几个要素: 1. 城市集合:假设有 n 个城市,我们用集合 V = {1, 2, ..., n} 表示城市的编号。 2. 距离矩阵:对于任意两个城市 i 和 j,我们需要定义它们之间的距离 d(i, j)。这可以通过实际地理距离、时间、成本等因素来确定。 3. 决策变量:我们引入一个二进制决策变量 x(i, j),表示是否从城市 i 直接前往城市 j。若 x(i, j) = 1,则表示从城市 i 出发直接前往城市 j;若 x(i, j) = 0,则表示不经过城市 j。 基于以上要素,可以建立如下的非对称TSP数学模型: 目标函数: minimize ∑∑d(i, j) * x(i, j) (i ≠ j) 约束条件: ∑x(i, j) = 1 for all i ∈ V ∑x(i, j) = 1 for all j ∈ V ∑x(i, j) = 0 for all i ∈ V, j ∈ V ∑x(i, j) + x(j, i) = 1 for all i ≠ j ∈ V x(i, j) ∈ {0, 1} for all i, j ∈ V 其中,第一个约束条件确保每个城市只能作为起点或终点被访问一次;第二个约束条件确保每个城市只能作为起点或终点被访问一次;第三个约束条件排除了自环;第四个约束条件确保每个城市都与其他城市有且仅有一条连接。 通过求解上述数学模型,可以得到最优的路径和总距离,从而解决非对称TSP问题。需要注意的是,非对称TSP是一个NP-hard问题,因此求解最优解可能需要使用复杂的优化算法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值