php - 订单履行优化算法

标签 php algorithm magento

我正在 Magento 中开发一个模块,我需要在其中进行 100% 订单履行优化,例如:

有现货,我们有以下产品:

Product1    - 2 (Qty in stock)
Product2    - 2
Product3    - 3
Product4    - 5

在商店中,我们有以下需要准备发货的订单:

Order1      -   Product1    - 1 (Ordered Qty)
                Product2    - 2
                Product3    - 1
                Product4    - 4

Order2      -   Product2    - 2
                Product4    - 1

Order3      -   Product1    - 1 
                Product3    - 2
                Product4    - 4

如果我将开始从上到下为订单挑选产品,如下所示:

Case 1 for assignment of Products to Orders

Order1      -   Product1    - 1 (Ordered Qty)   -  1 (Assigned Qty from Stock)
                Product2    - 2                 -  2
                Product3    - 1                 -  1
                Product4    - 4                 -  4

Order2      -   Product2    - 2 (Ordered Qty)   -  0 (No Stock Remain)
                Product4    - 1                 -  1 

Order3      -   Product1    - 1 (Ordered Qty)   -  1 
                Product3    - 2                 -  2 
                Product4    - 4                 -  0 (No Stock Remain)

但是,如果我开始从底部挑选产品,如下所示:

Case 2 for assignment of Products to Orders

Order1      -   Product1    - 1 (Ordered Qty)   -  1 (Assigned Qty from Stock)
                Product2    - 2                 -  0 (No Stock Remain)
                Product3    - 1                 -  1 (Short Picked) 
                Product4    - 4                 -  0 (No Stock Remain)

Order2      -   Product2    - 2 (Ordered Qty)   -  2 (Assigned Qty from Stock) 
                Product4    - 1                 -  1 

Order3      -   Product1    - 1 (Ordered Qty)   -  1 (Assigned Qty from Stock)
                Product3    - 2                 -  2 
                Product4    - 4                 -  4        

如您所见,在案例 1 中,我们仅完成了 33% 的订单履行,其余 66% 的订单未完全完成。但在案例 2 中,我们仅完成了 66% 的订单履行,其余 33% 的订单未完全完成。

例如,我们采用了自上而下和自下而上的方法,但它可以以任何方式处理以获得最大的订单完成百分比。

如果有人以前处理过此类问题,我们将不胜感激。

最佳答案

好消息 您的问题可以建模为 Integer Programming problem很容易:

输入:让 S(j)产品库存jo(i,j)即产品数量j按顺序i .

变量: 让x(i)等于1如果订单完成并且0否则。

公式:你要解决以下问题:

max sum x(i)

s.t. sum ( o(i,j) x(i) ) <= s(j)对于任何 j

坏消息是解决这类问题是NP-hard因此,没有已知的多项式算法可以最优地解决这个问题。因此,您必须使用启发式方法以近似的方式解决它,例如,按订单所需的商品数量对订单进行排序。

关于php - 订单履行优化算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48577427/

相关文章:

php - 使用 jquery 和 php 处理目录中的文件 - 获取状态并更新进度条

c++ - 使用一维数组的 LCS 动态规划

algorithm - 二叉搜索树在现实世界程序中的使用?

api - Magento Soap 错误 - 标签定义第 2 行中的数据过早结束

php - 多对多关系、IN 运算符和不正确结果的可能性

php - 我想在 php mysql 中添加两个文本框的数值

php - 在网页上创建动态网格系统

Python/Numpy 查找长度变量跨度

mysql - 无法进行编号为 : 36 - MySQL Error No : 1059 的查询

image - Magento:交易电子邮件。如何从自定义模板添加图像