TSP通过用户定义的点

时间:2014-09-04 09:20:02

标签: algorithm shortest-path traveling-salesman graph-traversal logistics

我有一些点,并且有一些点的子集,标记为“静态”。所以我需要解决TSP,这将创建最佳路径,包括静态位置中的标记点。我该怎么解决呢?

可能是我的问题可以通过另一种方式解决:积分有两个主要特征 - 彼此之间的距离和时间,推销员必须在哪里。是否存在一些解决这一物流任务的问题?

UPD 我不明白,非静态点的TSP如何与TSP合并用于静态点?

2 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,那么这只是您的静态非静态位置和距离/时间矩阵定义的另一个旅行商问题。如果您的原始问题非常大,那么首先解决原始问题的TSP(并且只有一次)可能是有意义的。然后,可以使用已生成的解决方案来指定新的初始解决方案,考虑您的“非静态”或用户定义的位置,例如:只需一个简单的最佳插入。然后,您可以使用由Lin-Kernighan(http://en.wikipedia.org/wiki/Lin%E2%80%93Kernighan_heuristic)开发和应用的k-opt启发式来改进此初始解决方案。
如果您的原始问题很小,只需解决另一个TSP(考虑您的“静态”和“非静态”位置)。

答案 1 :(得分:0)

TSP基本上有三种方法:

  1. 蛮力
  2. 启发式
  3. 逼近
  4. 对于少量节点,使用强力可以是一种选择。它涉及生成所有(n-1)!排列并仅计算它们的长度。根据您的问题,您需要更改的是生成可能的往返的算法,以排除静态点不在其指定位置的那些。

    使用启发式算法(例如模拟退火),您可以针对更大的问题计算TSP,但不能保证完美的往返,只有好的往返。这些通常采用现有的解决方案,并从中获得随机的不同解决方案(或多个解决方案)。根据您的问题,如果违反了静态点位于指定位置的要求,您只需丢弃派生解决方案。

    第三种变体使用的算法可以在多项式时间内进行往返,例如沿着最小的生成树行走,向一个方向扫过,或者贪婪地穿过它们。那些提供了良好的时机,但在产生往返的质量的权衡。我不清楚如何使这些适应需要某些点在某个位置的解决方案。由于它们的简单性,它们不容易根据这些额外要求进行调整。