13

我有以下问题。用户有一个购物车,N里面有物品。每个项目都有一个数量Q。此外,还有P仓库,每个仓库对每种产品都有一定的库存水平(可能为0)。每个仓库和客户之间的距离也是已知的。我需要找到一组可以容纳订单并满足以下约束的仓库(按优先级递减排序):

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

任何想法都受到高度赞赏。谢谢!

升级版:

如果一个仓库不能完全完成某个行项目,那么它可以由几个不同的仓库交付。例如,我们需要 10 个苹果,我们有 2 个仓库,库存水平为 7 和 3。那么苹果将由这两个仓库提供(总共提供 10 个)。

UPD 2 可用仓库的数量接近 15 个。所以蛮力在这里无济于事。

4

3 回答 3

10

这可以通过整数规划来解决。

让项目被索引i,仓库被索引j。设Qii购物车Sij中 的 物品 数量 , 为 仓库 中 的 物品 数量 ,i为客户 到 仓库jDj距离j.

首先找到最小的仓库数k。当且仅当订单中涉及仓库时,让二进制变量xj为。是这个程序的价值。1jk

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}

有许多不同的库可以解决整数程序,一些免费/开源。他们通常接受格式类似于但比我在这里介绍的格式更受限制的程序。您必须自己编写一些代码来扩展总和和通用量词(“for all”)。

于 2013-04-11T13:45:00.920 回答
4

我建议使用 David Eisenstat 的解决方案。如果您想进一步了解该主题或需要自己实现求解整数程序的算法,我可以推荐以下参考:

麻省理工学院关于应用数学编程的讲座的第 9 章很好地介绍了整数编程。在第三页,您可以找到仓库位置问题作为整数规划可解决问题的示例。请注意,那里描述的问题比您在问题中描述的问题更普遍:对于您的情况,可以假设仓库始终处于打开状态(y i = 1),并且仓库的固定运营成本 f i始终是f i = 0 在你的情况下。

本章的其余部分将详细介绍整数规划,并重点介绍解决整数规划的各种方法。

于 2013-04-16T11:14:27.227 回答
0

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

如果您的订单上有 10 件商品。

您有 9 件库存

您在一个位置有 5 个,在另一个位置有 4 个。

你拆分订单。无法履行的 1 个产品成为“延期交货”。它可以被取消,因为您不知道您何时或您的供应商是否要交付。确保您坚持使用您的信用卡授权参考。

库存中剩余的 9 种(可配送产品)将根据您的仓储虚拟库存进行查询,以获得最佳组合。

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

仓库 X 的履行人员是否可以轻松地从另一个仓库转移项目?是/否

如果是这样,哪些产品可以转让。

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

如果您严格执行自动化和日复一日波动的虚拟库存,那么您最好对仓库库存进行猜测。

接下来,将订单拆分为两个,并参考主要订单的文件记录。

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

所以基本上这就是你必须编写的代码。

订单 第一眼回顾订单拆分和参考主订单。库存仓库触角功能。基于虚拟库存的加权拆分订单,参考基于仓库能力的主订单从其他仓库检索产品。打印拣货页(仓库功能) 延期交货或部分履行手动功能(客户服务工具) 仅在标记为已发货时收取您履行的物品的费用。

注意事项:确保主订单引用了延期交货和拆分的操作。确保拆分和部分履行订单引用任何其他延期交货订单和拆分。填写您可以标记已发货的内容。在已发货的产品上收取 $$。

希望这会有所帮助,祝你好运!!!

于 2013-04-16T16:23:36.383 回答