Algorithm 最大限度地减少行程数或组最大可能订单数

Algorithm 最大限度地减少行程数或组最大可能订单数,algorithm,random,mathematical-optimization,traveling-salesman,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 O2的订购时间=上午10:20 O3订单时间=上午10:25 我希望俱乐部尽可能多的订单,以便任何订单的交付时间不超过其订单时间的2小时。因此,问题是减少旅

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

时间矩阵=

    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

O2的订购时间=上午10:20

O3订单时间=上午10:25

我希望俱乐部尽可能多的订单,以便任何订单的交付时间不超过其订单时间的2小时。因此,问题是减少旅行次数(旅行是指送货代理去送货的时候)

我正试图想出这个算法。有两个相互竞争的因素

  • 我们可以在订单发出时按顺序合并所有订单,直到在订单发出后2小时内满足订单交付的约束条件

  • 我们可以修改上述方法以找到瓶颈订单(因此,我们现在无法在方法1中加入更多订单)。然后将其从trip1中取出,并将其作为trip 2(新订单)的一部分,然后等待其他订单将其与trip1或trip2合并


  • 所有的订单都是实时的。克服这种局面的最佳方法是什么。如果你需要更清楚的解释,请告诉我

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

  • TSP()
    作为一个函数,返回访问给定地点所花费的时间估计值。估计值是悲观的,即实际行驶时间可以更短或等于估计值,但不能更长。为了有一个好的开始,您可以以贪婪的方式非常容易地实现
    TSP()
    :从每个地方到最近的地方。您可以从W中减去较长边的长度,以获得更好的估计值(因此,汽车将始终从W中减去较短边)。如果
    TSP()
    恰好是最优的,那么这里给出的整个算法也是最优的。整个算法与TSP()的实现一样好,它高度依赖于良好的估计

  • earliestOrderTime
    成为最早尚未处理订单的时间

  • 每分钟重复一次:

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

  • 如果(当前时间+
    t
    =
    earliesstordertime
    +2小时):派一辆车进行
    TSP(s+W)
    行程。将
    s
    设为空集

  • 例子 对于示例性数据,其工作原理如下:

    10点<代码>早期存储时间=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,因此我们派车前往
    O3
    O1
    O2
    ,然后返回
    W
    。他在11:32、11:39、12:00访问订单,12:20回来。等待67、99和100分钟的人。

    有一辆车还是多辆车?换句话说,当一辆车开到O1时,我能从W再把另一辆车开到O2吗?你确定在你的问题中矩阵是不对称的吗?在现实生活中,我很难找到从a到B是6分钟,但从B到a是20分钟的情况。但是,当然,也可能出现这种情况。“我只是想确保矩阵可以是不对称的。”AdamStelmaszczyk有很多车可供选择。矩阵是对称的。我已经更新了矩阵。该矩阵具有moc数据。