最小化连接多个目的地所需的路径长度

时间:2019-03-03 23:56:38

标签: algorithm graph

在类似乘车票的情况下,给定一张图,必须建立一组路径将不同的目的地连接在一起。这与使总行驶距离最小化的问题(例如旅行商问题)相反。但是,此问题反而使所需路径的距离最小化,因此解决方案可能看起来像许多分支路径。

哪种算法可以实现这一目标?

1 个答案:

答案 0 :(得分:0)

这听起来像Steiner tree problem的图形版本。已知Steiner树很难NP近似,但是实际上这并不是障碍。我能想到的最简单的算法在实践中会很好地起作用,是使用如下所示的整数程序求解器。从类似

的程序开始
minimize sum_{e in edges} length(e) x(e)
subject
x(e) in {0, 1}

然后

  1. 使用库将当前程序优化为最佳状态。
  2. 找到由边e与边x(e) = 1组成的子图的连接部分。
  3. 如果所有端子都属于同一连接的组件,请返回该子图。否则,对于包含至少一个端子的每个连接的组件S,添加以下约束。返回步骤1。

    sum_{e in edges such that one endpoint is in S and the other isn't} x(e) ≥ 1