【发布时间】:2017-04-01 00:17:52
【问题描述】:
我正在处理一个算法问题。我有一个具有单个中心节点的已知图形算法。目的是通过两个运输商将货物从这个中心节点运送到其他一些指定的节点。每个运输机最多可以携带。一个单位的货物,这样在每个节点访问后,他们会回到中心节点进行下一次访问。我应该计算出最短的时间来做到这一点。
我的方法是使用dijkstra algorithm 作为中心节点,考虑到节点之间的不同距离,找到通往所有其他节点的最短路径。然后对于运输者应该去的所有节点(有时甚至不止一次到特定节点),我将值加倍,因为来回距离。我将值分成两组,总和尽可能接近,因为有两个传输器,并打印更大的一个。
但是,该解决方案似乎并不完美。我需要另一个东西来构建它。如果第一个运输者知道他结束了工作,比方说提早 8 个单位,那么他可以在交付期间的某个时候为途中的第二个运输者准备一个货物,这样他就不必在中心节点之前来取它,但要少一点。那么他们的总时间将相等,但考虑到两者都更短。不幸的是,这并不总是可能的(例如,只有一次交付到一个节点等)。我需要将此方面添加到我的程序中。
【问题讨论】:
-
你有一个完整的例子,需要这个动作来达到最佳时间吗?
-
我想到了这个简单的example。想象一下,他们需要将三种货物从中心 1 运送到节点 2、3、3。根据我的解决方案,他们的时间是 16,12。在更好的解决方案中,第一个在节点 3 方向上携带项目 5 单元,让它在那里,回到中心并处理节点 2。第二个首先处理节点 3,然后完成另一个节点 3 任务。两者的时间都是 14。问题是对于所有可能的情况,对于给定的已知图,如何确定这种优化是可能的。
-
2个transporter最后需要回到中心节点吗?如果没有,您可以通过让它们最后提供遥远的节点来节省时间。
-
这是一个车辆路线问题,在引擎盖下这需要计算成本矩阵,例如通过 Dijkstra 算法从路由引擎。这两个问题都可以用开源软件解决,车辆路线软件见 jsprit:github.com/graphhopper/jsprit 路线引擎见github.com/graphhopper/graphhopper(注意:我参与构建这些东西)
标签: algorithm graph-algorithm dijkstra shortest-path partition-problem