【问题标题】:Multi-path traveling salesman optimization多路径旅行商优化
【发布时间】: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


【解决方案1】:

在高层次上,Concorde 是 TSP 的列生成(分支、价格和削减)的非常有效的实现。

您当然可以为您的问题开发一个非常有效的列生成实现,其中路由将满足您的约束。

Marco Luebecke 拥有a very nice general-purpose tutorialThe TSP book 是该主题的参考作品。

【讨论】:

    【解决方案2】:

    我不确定您是否可以创建一个表示您的模型的图,并且您可以在该图上解决一个普通的 TSP:如果您在节点之间有多个边,那么我们已经同意您可以删除除最便宜的边之外的任何边。如果您改为复制节点,那么您将遇到的问题是您不再想访问所有节点,而只想访问一组重复项中的一个节点。 TSP 求解器无法解决此问题。

    但是,您说要解决 concorde/cplex。放弃协和部分怎么样?您可以为 TSP 采用 MIP 公式。这应该很容易扩展以包含您的其他约束。例如,您可以返回多个边并添加诸如“如果您开车进入城市 A,那么您必须开车离开或支付额外的 N”之类的条件。然后,您可以将其提供给像 CPLEX 这样的通用 MIP 求解器。

    【讨论】:

      【解决方案3】:

      Gurobi 有一个很好的例子,它有一个交互式地图和示例代码see here。他们基本上解决了您描述的相同问题,您只需要提供自己的输入位置和连接即可。

      【讨论】:

      • 谢谢,但这个例子似乎是一个普通的 TSP 实现。关于扩展的问题。
      猜你喜欢
      • 2010-10-26
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 2021-01-19
      • 1970-01-01
      相关资源
      最近更新 更多