【发布时间】:2020-02-08 05:34:14
【问题描述】:
我正在尝试解决具有不完整图形的多路径旅行推销员的变体。
编辑:根据@daniel_junglas 的反馈更改了描述(两次)。
更多的话:
- 只有 1 名销售人员
- 销售人员只能访问每个城市一次
- 销售人员可以驾驶各种交通工具(例如火车、汽车、船)。每种交通方式都会改变城市之间的旅行时间
- 销售人员可以更改城市之间的交通方式(需要付费),但不能在城市中更改。这种变化可以看作是两个城市之间的另一个优势,具有相关的特定权重
- 并非每种交通方式都可以游览每个城市(例如,只有船可以到达城市 D)
- 图表不完整,因此并非所有城市都相连,但存在一条或多条哈密顿路径
基于示例:
- 4 个城市 (1-4),每个节点都有停车场 (C)、火车站 (T)、船只港口 (B)。
- 以 1C 开始和结束
- 每个城市都必须去一个
- 没有从火车站到港口到停车场的链接,只能在城市以外的地方换车(例如1C到2T)。
- 每个链接都有一个与其关联的权重,基于距离、运输方式的速度和改变运输方式的时间损失
- 示例路径:
- 1C -> 2T -> 3T -> 4T -> 1C
- 1C -> 2C -> 3T -> 4T -> 1C
我打算用 concorde/cplex 解决这个问题。
我试过用 pyconcorde 解决它。为此,我将每条平行边编码为与新节点(A,A',A'')相同的节点,但我找不到说只能访问一个 A 节点的限制。我看到许多非对称 TSP 和多 TSP 解决方案,但没有一个符合我的要求。
我的问题:我应该如何解决这个问题(教程链接、嵌入提案等)以找到恰好访问所有城市一次的最短路线?哪个工具可以帮助我?
附:我知道各种单一算法的解决方案,包括概率的和精确的。但是,我正在寻找一种结合各种技术(例如 cplex)的工具,希望对我的特定数据有更好的结果。
P.S.2。我知道这个问题可能很广泛。我愿意接受任何评论以改进我的问题
【问题讨论】:
-
你说
but my solution included every node。为什么这是个问题?这不是 TSP 的定义吗?还是您的问题是图中的某些节点必须被访问,而其他节点是可选的访问?这会让人想起 Steiner 树的问题,也许有 TSP 的“Steiner 版本”,你可以找到它的软件吗? -
顺便说一句,如果您在两个城市之间有多条路径,那么首先计算任何两个城市之间的最短路径,然后删除除那些最短路径之外的所有路径会不会更容易。这为您提供了一个图表,您可以在该图表上解决标准 TSP。
-
@DanielJunglas 根据您的反馈更新了描述。 * 抱歉,在我的实现中我有虚拟节点 A'、A'' 等,因为我不知道如何放置平行边 * 你是对的,我忘了添加运输方式限制。在这种情况下,可以先在本地进行优化,但会在运输方式的不断变化中产生巨大的成本
标签: optimization cplex traveling-salesman