多人和地点的有效安排

时间:2015-10-29 21:54:40

标签: python

我正在尝试创建一个程序来安排异步拼车调度。例如,给定由此行代表的单个长街:

一个----------------------乙----------------------- ----ç------------------------- d

如果Alice,Bob和Chad都需要同时在D点,并分别从A,B和C点开始,但Bob没有车,程序需要输出最佳解决方案是让Alice选择Bob。如果Google Maps API用于确定两点之间的距离和时间(精度可能是近似值),那么确定最有效的一组操作的最佳方法是什么?

在这个简化的场景中,可能性相当有限(Alice选择Bob,Chad选择Bob,Bob走路),根据时间或行程距离迭代和评估它们相当简单,但是当数千或数百万的可能性数量时,这种方法不能很好地扩展。我已经工作了几个月试图开发更复杂的算法,但由于我的知识有限,我还没有非常成功

1 个答案:

答案 0 :(得分:0)

我建议对这个问题进行概括,这是我对它的理解:

根据图表G描述地图上L={l_0, ..., l_n}位置之间的关联,以及一组参与者P = {p_0, ..., p_n},找到每个参与者从其中旅行的最佳行程I={l_s, ..., l_d}相应的源位置l_s到共同目的地l_d,使得所有参与者都能够独立于他们的旅行方式到达目的地。有些参与者可能需要绕道而行去接收其他参与者,在这种情况下,我们希望找到总成本最低的解决方案(如需要的旅行时间)

这是我如何尝试解决这个问题的粗略草图:

  1. 构建所有节点及其连接方式的图表(例如,在您的示例中,图表为G = [(A,B),(B,C),(C,D)])。

  2. 为每条边添加一个重量,用一些标准化的方式描述它的距离(公制,恒定速度/时间......)

  3. 为每个参与者指定可用的最大速度,具体取决于他们可以携带的模式(例如汽车,自行车,步行)。

  4. 对于有车的参与者(A,C),使用最短路径算法(例如A* (a star))计算每个人从各自的源位置到达目标目的地所需的实际时间。这实际上是一个两步过程,步骤1:计算最短路径,步骤2:计算每个边缘行进所需的时间。

  5. Google的地图API可能已经提供了进行这些计算所需的全部或大部分数据(甚至可以为您进行计算)。

    因此,您可以获得每位参与者的最佳行程。现在我们必须考虑没有车的参与者(这里是B)。为此,我们必须找到参与者绕道而行,以便绕行成本最低。因此,

    1. 计算A,C两个最短路径路径中的每一个,即步骤1:源位置=>绕行位置(B),步骤2:绕行位置(B)=>目的地(D)

    2. 选择最佳选项,即最小化总旅行时间

    3. 由于您将此标记为Python问题,因此您可能需要查看NetworkXgraph-tool才能实施。

      免责声明:显然这会遗漏很多细节,甚至可能完全没有。反馈意见。至paraphrase Donald Knuth,我只是想到了这一点,我没有实施或测试它。