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小时。因此,问题是减少旅行次数(旅行是指送货代理去送货的时候)
我正试图想出这个算法。有两个相互竞争的因素
所有的订单都是实时的。克服这种局面的最佳方法是什么。如果你需要更清楚的解释,请告诉我 非常安全和简单的算法,保证不会超过订单的最大等待时间:
TSP()
作为一个函数,返回访问给定地点所花费的时间估计值。估计值是悲观的,即实际行驶时间可以更短或等于估计值,但不能更长。为了有一个好的开始,您可以以贪婪的方式非常容易地实现TSP()
:从每个地方到最近的地方。您可以从W中减去较长边的长度,以获得更好的估计值(因此,汽车将始终从W中减去较短边)。如果TSP()
恰好是最优的,那么这里给出的整个算法也是最优的。整个算法与TSP()的实现一样好,它高度依赖于良好的估计earliestOrderTime
成为最早尚未处理订单的时间s
为空,则将earliesstordertime
设置为当前时间。将其添加到集合s
。计算t=TSP(s+W)
t
=earliesstordertime
+2小时):派一辆车进行TSP(s+W)
行程。将s
设为空集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数据。