【问题标题】:Minimize the number of trips or Group maximum possible orders最小化旅行次数或组最大可能的订单
【发布时间】:2015-03-04 05:31:26
【问题描述】:

我们有一个配送中心(仓库),我们正在实时获取订单,其到仓库和其他订单地点的时间/距离是已知的。

时间矩阵=

    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 AM

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

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

  1. 我们可以将顺序中的所有订单在它们即将到来时组合在一起,直到它满足订单在订购时间后 2 小时内交货的约束。

  2. 我们可以修改上面的方法来找到瓶颈顺序(由于我们现在不能在方法 1 中加入更多的顺序)。并将其从trip1中拉出并使其成为trip 2(新订单)的一部分,然后等待其他订单将其与trip1或trip2组合在一起。

所有订单都是实时下达的。征服这种情况的最佳方法是什么。如果您需要更清楚地说明这一点,请告诉我。

【问题讨论】:

  • 一辆车还是多辆?换句话说,当一辆车去O1时,我可以从W把另一辆车送到O2吗?
  • 您确定矩阵在您的问题中是不对称的吗?在现实生活中,我很难找到从 A 到 B 是 6 分钟,但从 B 到 A 是 20 分钟的情况。但是,当然,也有可能出现这种情况。我只是想确保矩阵可能是不对称的。
  • @AdamStelmaszczyk 有很多可用的汽车。矩阵是对称的。我已经更新了矩阵。这个矩阵有 moc 数据。

标签: algorithm random mathematical-optimization traveling-salesman


【解决方案1】:

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

  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 设为空集。

示例

对于您的示例数据,它将像这样工作:

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

10:00 + 0:05

...

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

10:20 + 0:26

...

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

10:25 + 0:30

...

11.30.

11:30 + 0:30 >= 10:00 + 2:00,所以我们派车去O3O1O2,然后返回W。他在 11:32、11:39、12:00 访问订单,并在 12:20 回来。等待 67、99 和 100 分钟的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-16
    • 2022-09-30
    • 1970-01-01
    • 2012-10-17
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多