满足最大客户订单

时间:2016-10-10 06:12:14

标签: algorithm optimization

  

有一些产品库存,例如。 A-10Units,B-15units,C-20Units等。我们有一些产品的客户订单,如customer1 {A-10Units,B-15Units},customer2 {A-5Units,B-10Units},customer3 {A-5Units,B-5Units}。任务是通过我们拥有的有限库存来满足最大客户订单。在这种情况下的结果应该是填写customer2和customer3订单而不仅仅是customer1。[此问题的背景是实时在线零售方案,我们有数百万客户和数百万产品,我们正在努力有效地履行订单尽可能]

我如何解决这个问题?是否存在针对此类问题的算法,例如优化?

编辑:此处的要求已修复。这里唯一的目标是最大化已完成订单的数量,而不管价值如何。但我们拥有数百万用户和数百万种产品。

3 个答案:

答案 0 :(得分:1)

此问题包括背包问题的特殊情况。要了解为什么只考虑一种产品A:产品的存储量是您的包装容量,订单数量是重量,每个岩石值是1.您的问题是最大化您可以放入包中的总价值。

不要期望在多项式时间内找到问题的精确解决方案......

我要采用的方法是随机搜索:列出订单并计算解决方案(即按顺序完成订单,跳过您无法履行的订单)。然后通过在订单上应用排列来更改解决方案,看看它是否更好。

继续搜索,直到时间用完或您对解决方案感到满意为止。

答案 1 :(得分:0)

它可以通过DP解决。 首先按升序对A的所有订单进行排序。

使用此DP:

DP[n][m][o] = DP[n-a][m-b][o-c] + 1 where n-a>=0 and m-b >=0 o-c>=0
DP[0][0][0] = 1;

自下而上计算:

Set DP[i][j][k] = 0 , for all i =0 to Amax; j= 0 to Bmax; k = 0 to Cmax
For Each n : 0 to Amax
   For Each m : 0 to Bmax
      For Each o : 0 to Cmax
         if(n>=a && m>=b && o>= c)
         DP[n][m][o] = DP[n-a][m-b][o-c] + 1;

然后,您必须找到所有i,j,k值的DP [i] [j] [k]的最大值。这是你的答案。 - O(n ^ 3)

答案 2 :(得分:0)

Reams已经写过关于订单履行的文章,但没有人提出标准答案。原因是公司有不同的方法和不同的要求 有这么多变数,一个适合所有人的单一尺寸解决方案是不可能的 在您开始提出适合客户需求的方法之前,您必须坐下来问几百个问题。 实际上,这些需求也可能会有所不同,具体取决于一年中的时间,一周中的某天,当前正在进行的促销活动,客户是否排名,当前采用的采摘和包装人员/机器的数量,性质,尺寸,产品重量,产品在仓库中,某些产品是否采用快速/自动拣选线,标准拣选面或批量生产。列表可以显示无穷无尽 然后考虑是否要填写所有订单,或者您是否允许部分填写订单并延迟缺货产品 整个订单是否必须放在一个盒子中,或者是否允许多个盒子订单 您是在处理多个仓库吗?如果是这样,可以从每个仓库发送部分订单,还是必须转移它们进行合并 应优先考虑本地或海外订单 在您开始计划满足客户特定要求的方法之前,您需要掌握的信息量可能是巨大的,而且遗憾的是,您无法获得明确的答案。它不存在。
虽然我意识到这不是a)答案或b)必然是一个受欢迎的帖子,但事实是,你需要你的客户为你提供他们希望实现的目标,方式和时间的巨大细节。

最初,你的工作是扮演恶魔的倡导者,试图将其击倒 附:欢迎来到S.O。