提货和交货问题算法帮助

时间:2011-05-08 18:44:19

标签: algorithm graph-algorithm planning traveling-salesman

让我们假设多家餐馆的送餐服务(比如说20)。有(比如10个)司机可用。此外,假设我们在4小时内获得100份订单,​​将这些餐厅的食物送到家中。

因此,司机必须协调在一个地方提取食物,并在家中交付给客户。

主要目标是最大限度地缩短交货时间,即订单到达家中的时间。次要目标是最大化驱动器容量(即,递送所有订单的最少时间)。

请记住,订单会在四个小时内完成,所以让我们说均匀,即一个非常3分钟。另外,我们假设这些订单是随机到20家餐馆的。

假设我可以计算从任何地点到目的地的旅行时间。

我实时了解所有驱动程序的位置。我也知道他们的状态,即他们目前正在接收订单(到达已知目的地),他们是否已经接到订单并且已经到达已知目的地。

约束是: 1)必须在给定时间后领取订单(即餐厅的准备时间) 2)必须在45分钟内交付订单(否则提醒) 3)必须以“x”分钟填充时间以适应步行到存储到取件订单等的时间。 4)必须以“y”分钟填充时间,以适应向客户交付订单和收取付款的时间。 5)司机只有一套给定的付款方式(例如Cash,Visa,Amex,MasterCard)。我们必须将客户要求(现金,签证等)与驾驶员能力(现金,签证,美国运通等)相匹配。

因此,例如,如果我得到两个目的地靠近并靠近取件位置的订单,即使有另一个“免费”驱动程序(没有做任何事情),使用相同的驱动程序拾取两个订单会更有效订单并交付两个订单。

您可以假设每个餐厅都会执行交付区域,这意味着,从他们那里订购的大多数人很可能会接近他们。因此,此算法应设法将驱动程序自动分段到城市区域,并且已经支持区域内的驱动程序。

2 个答案:

答案 0 :(得分:1)

这听起来像带时间窗的车辆路径问题的在线版本。我建议你谷歌,并阅读出现的论文。

答案 1 :(得分:1)

这取决于算法本身的开发时间(不包括GUI,警报等)。

  • 如果您正在谈论1或2天,请转到确定性算法:将订单放入FIFO堆栈,然后迭代地接受下一个订单并将其分配给第一个可用的驱动程序。这几乎是人类如何做到的。它也不是很有效(特别是有3家或更多餐馆)。
  • 如果你有更多的时间(因为你正在为一家大公司谈论这个问题),那么乐趣就开始了。研究元启发式(禁忌搜索,遗传算法,模拟退火)。看看现有的库,为您完成大部分工作。例如,如果您使用的是Java,请查看Drools Planner
顺便说一句:如果你正在考虑暴力强迫它。不要打扰:它不会扩展。

相关问题