算法查询 - 多个驱动程序,多个位置

时间:2016-03-27 00:45:32

标签: php algorithm scheduling traveling-salesman

老实说,我不确定在哪里/什么发布这个,但我会非常感谢任何人提供你可以提供的任何建议。

我希望创建一个算法,计算出租车(长途私人租赁)公司的最佳时间表,有多个司机和多个预订。

在任何一天,可能会有大约5-10个工作岗位,每个工作岗位都会以不同的里程数运行。

我可以通过Google Distance API获取坐标和所有位置之间的距离。

我想计算最佳时间表,以便最小化驾驶员里程/时间,以便尽可能有效地完成所有工作。工作时间和位置是固定的,但是驱动程序可以是最多10个池中的任何一个。每个驱动程序不一定每天都要完成一项工作。一些司机可以在一天内完成多个工作,只要他们不重叠。

例如:

司机A从A点到达B点。

当天晚些时候B点还有另外一份工作,因此驾驶员A应该自然而然地被分配到这份工作,因为驾驶员A可以在B点等待下一个工作的开始时间,而不是浪费燃料让另一个车手去用空车到B点。

我试图简明扼要,道歉。我不期待一个完整的答案,但如果有人试图类似,一些提示将不胜感激!

1 个答案:

答案 0 :(得分:1)

我会尝试用一些调度伪代码来帮助你。我们来试试吧!

首先,您需要一个具有N个队列和每个队列M个插槽的调度结构。您必须拥有每天的计划,每个可能的驱动程序的队列和可变数量的插槽。

在我看来,我会将这一天分成15分钟。考虑到这种结构,调度算法将是一个交互式过程,其中每个新的交互将尝试分配新的路由。

第一步是命令所有待定路线为路线中的每个终点找到最近的起点。有了大量有序路线,下一步就是将这些路线移动到第一个可用的路径,直到当天所有的时段都被填满。对于下一个驱动程序,您将继续执行相同的拆分,直到无法再安排交付为止。

有可能在没有所有“插槽”概念的情况下处理这类问题,但我认为这是一种安全的措施,可以避免制定一个不可能超级紧凑的时间表。这个提出的算法也没有处理从起点到起点(卡车装载的地方)的时间。我认为通过对所有计划进行第二次传递并从负载点添加所需的路由,可以获得公平但非优化的解决方案。通过这样做,您将需要将一些驾驶员的最后路线移动到另一个驾驶员,以便“回到家”路线适合。

祝你好运。希望它有所帮助!