最大限度地减少出行次数或分组最大可能订单

时间:2015-03-04 05:31:26

标签: algorithm random mathematical-optimization traveling-salesman

我们有一个配送中心(仓库),我们实时获得订单,其距离仓库和其他订单位置的时间/距离是已知的。

时间矩阵=

    W   O1   O2   O3
W   0   5    20    2
O1  5   0    21   7
O2  20  21    0    11
O3  2   7    11   0

订单时间O1 = 10:00 AM

订单时间O2 = 10:20 AM

O3的订购时间=上午10:25

我想订购尽可能多的订单,以便任何订单的交货时间不超过订单时间的2小时。因此,问题是减少旅行次数(旅行是在送货代理人送货时)。

我正在尝试为此提出算法。

时有两个相互竞争的因素
  1. 我们可以按顺序组合顺序中的所有订单,直到它在订购时间的2小时内满足订单交付的约束。

  2. 我们可以修改上述方法来找到瓶颈订单(由于我们现在无法在方法1中订购更多订单)。并将它从trip1中取出并使其成为行程2(新订单)的一部分并等待其他订单以trip1或trip2取决于它。

  3. 所有订单都是实时发送的。什么是征服这种情况的最佳方法。如果您需要更清楚,请告诉我。

1 个答案:

答案 0 :(得分:0)

非常安全且简单的算法,保证不超过订单的最长等待时间:

  1. TSP()成为一个函数,它返回访问给定位置所花费的时间估计值。估计是悲观的,即实际的骑行时间可以更短或等于估计,但不会更长。为了良好的开端,您可以非常轻松地以贪婪的方式实施TSP():从每个地方前往最近的地方。您可以减去从W出来的较长边的长度以获得更好的估计(因此汽车将始终从W出来的较短边缘)。如果TSP()碰巧是最优的,那么这里给出的整个算法也是最优的。整体算法与TSP()实现一样好,它在很大程度上取决于良好的估计。

  2. earliestOrderTime成为最早未处理订单的时间。

  3. 每分钟重复一次:

  4. 如果有新订单:如果s为空,请将earliestOrderTime设置为当前时间。将其添加到集s。计算t = TSP(s + W)

  5. 如果(当前时间+ t> = earliestOrderTime + 2小时):发送一辆汽车进行TSP(s + W)行程。将s设为空集。

  6. 实施例

    对于您的示例性数据,它将如下工作:

    10:00。 earliestOrderTime = 10:00。 s = {O1}t = TSP({01, W}) = 10 - 5 = 5

    10:00 + 0:05< 10:00 + 2:00,所以我们还没发车,我们等。

    ...

    10:20。 s = {O1, O2}t = 46 - 20 = 26

    10:20 + 0:26< 10:00 + 2:00,所以我们等。

    ...

    10:25。 s = {O1, O2, O3}t = 2 + 7 + 21 + 20 - 20 = 30

    10:25 + 0:30< 10:00 + 2:00,所以我们等。

    ...

    11.30

    11:30 + 0:30> = 10:00 + 2:00,我们发送汽车前往O3O1O2并返回{ {1}}。他在11:32,1:39,12:00访问订单,并在12:20回来。等待67分,99分钟和100分钟的人。