这个问题在这里已有答案:
我正在努力解决以下问题:
仓库有一个需要履行的数百个订单池。完成订单的第一步是选择在整个仓库中搁置的产品。工人分批挑选16个订单,将所有16个订单的选择分组到一个工作中。
对于给定的订单,运营商必须选择一组有限的位置才能选择订单所需的产品。这些位置通常会与其他订单所需的位置重叠。因此,创建具有多个重叠位置的批次是理想的,以减少工作人员前往的位置数量。如何为批次选择一组16个订单,以最大限度地减少工人必须去的位置总数?
这似乎是旅行商问题的一个变种。例如,对于100个货物的集合,蛮力方法是尝试16个订单的所有(100 choose 16) = 1.3E18
组合,并选择具有最少位置的集合。这是TSP问题还是有另一种方法?如果是,如何使问题更容易处理?
以下是该问题的简化示例。有一个8个订单的池:a..h
。在所有订单中,产品被搁置在7个不同的位置:1..7
。
订单地点:
a => [1]
b => [2,3,4]
c => [2,3,4]
d => [5]
e => [6]
f => [2,3,4]
g => [2,3,4]
h => [7]
要从这个8池中挑选一批4个订单,理想的是[b,c,f,g]
将路由到位置[2,3,4]
这不是旅行推销员,因为您可能不止一次重访网站,并且可能没有必要返回开始(我不知道)。不要在这里过多介绍TS理论,而应考虑寻找网站的最佳方法(除非它们已经修复)。您可能希望将喜爱的网站放置得离您更近,而将更稀有的网站放置得更远。
之后,考虑额外行驶距离与计算成本的成本。分成多个行程肯定会减少计算量,但可能会增加一些距离(在您的示例中,我们仍然需要访问1,5,6,7)。有许多近似解决方案可以非常快速地运行并且产生非常接近最优的解决方案。 Christofides的算法是第一个真正的好算法。请参阅维基百科文章“旅行商问题”以及其他人。我研究过这个问题,但是大学是1981年或1982年,所以我确信它已经有了改进。
祝好运!