2013-04-11 52 views
11

我遇到以下问题。用户有一个购物车,其中有N项。每件商品的数量为Q。此外,还有P仓库,每个仓库都有一定的库存水平(可能为0)。每个仓库与客户之间的距离也是已知的。我需要找到一组可以容纳订单和满足以下限制仓库(通过降低优先级排序):最佳订单履行

  1. 它应该包含仓库最少数量的
  2. 所有仓库应尽可能贴近客户尽可能。

任何想法,高度赞赏。谢谢!

UPD:

如果一个仓库不能完全满足一些行项目,那么就可以通过几个不同的仓库交付。例如。我们需要10个苹果,而我们有2个仓库,库存水平为7和3.然后苹果将由这两个仓库提供(总共提供10个)。

UPD 2 可用仓库的数量是近15个。所以强力在这里没有帮助。

+1

你需要指定多一点:会发生什么,如果一个客户的订单量'Q'比库存水平'S'一些仓库的高?另一个仓库是否必须交付所有'Q'项目,或者它们能够共享订单(即,第一个仓库发送'S'项目,另一个仓库发送'QS'? – blubb 2013-04-11 08:40:28

回答

3

我会推荐David Eisenstat的解决方案。如果你想了解更多关于这个主题或需要实现一个自己解算整数程序的算法,我可以推荐下面的参考文献:

Chapter 9来自麻省理工学院关于应用数学规划的讲座给出了一个很好的介绍整数规划。在第三页上,您会发现仓库位置问题作为整数编程可解决问题的示例。请注意,这里所描述的问题比您在问题中描述的问题稍微普遍一些:对于您的情况,可以假定仓库始终打开(y i = 1),而固定运营成本f i一个仓库总是f = 0在你的情况。

本章的其余部分将介绍整数编程的细节,并着重介绍解决整数程序的各种方法。

+0

感谢您的参考 – 2013-04-16 20:35:20

+0

@volodymyr:很高兴我能帮助!也谢谢:) – blubb 2013-04-16 20:46:52

+0

@blubb:是否有解决此问题的解决方案,您知道现在为止? – 2017-11-28 10:07:46

10

这可以通过整数编程来解决。

让物品按i索引,仓库索引j。假设Qi是购物车中物品i的数量,Sij是物品i在仓库jDj的数量是从客户到仓库的距离j

首先找到最小仓库数k。当且仅当仓库j参与订单时,让二进制变量xj1k是这个程序的价值。

minimize sum over j of xj 
subject to 
for all i, (sum over j of min(Sij, Qi) * xj) >= Qi 
for all j, xj in {0, 1} 

第二找到最近的仓库。我将假设我们想要最小化距离的总和。

minimize sum over j of Dj * xj 
subject to 
for all i, (sum over j of min(Sij, Qi) * xj) >= Qi 
(sum over j of xj) <= k 
for all j, xj in {0, 1} 

有许多不同的库来解决整数程序,一些免费/开源。他们通常接受的格式与我在此处介绍的格式类似,但比我更受限制。你将不得不自己编写一些代码来扩展总和和通用量词(“为所有人”)。

+0

谢谢。也许您可以建议一些文章/教程/ book ?为了更好的理解这个话题 – 2013-04-12 13:53:23

+0

我学到了一类这个材料没有使用教科书,对不起 – 2013-04-12 16:14:39

+0

@DavidEisenstat什么样的道路来此物质是由 – 2013-04-16 09:15:20

0

您可能会也可能不会喜欢这样,但我有仓储和订单履行处理经验。我个人的真实生活经历并不需要算法,而是需要一系列仓库和客户服务后端工具(希望这将成为您和其他人在仓储运营开发领域苦苦挣扎的食物):

如果您有10个订单上的物品。

你有9股

你必须在其他5在一个位置和4。

您拆分订单。不能满足的1种产品成为'回单'。它可以被取消,因为你不知道你什么时候或者你的供应商要交付。确保你坚持你的信用卡授权参考。

库存中剩余的9个(可实现的产品)将针对您的仓储虚拟库存进行查询以获得最佳组合。

在我们的例子中,我们做了三两件事:

可以从另一个仓库容易在项目仓库X传输履行人员?是/否

如果是的话,哪个产品可以转让。

这可能需要基于仓库负载和功能的人机交互。

如果您严格按照日复一日的自动化和虚拟库存进行调整,那么您可以对仓库库存进行最佳猜测。

接下来,将订单拆分为两个,并参考纸张主要订单的顺序。

然后,您可以打印到您的目的地,并希望他们能够履行,如果他们不能,那么希望他们能够部分履行订单并生成可根据客户要求取消的订单。

所以基本上这里是你必须编码。

订单 第一眼看回订单拆分并参考主订单。 库存仓库检测器功能。 基于虚拟库存的加权拆分订单,参考基于仓库能力的主要订单来从其他仓库检索产品。 打印拣配页面(仓库功能) 退货订单或部分履行手动功能(客户服务工具) 收集货物时仅记录装运时标明的物品。

注意事项: 确保主要订单引用行动回订单和拆分。 确保拆分和部分履行订单参考任何附加的后退订单和拆分。 全满你可以 标记已发货。 在发货的产品上收取$$$。

希望这有助于和好运!