用于分发片段的算法

时间:2012-04-28 19:03:24

标签: php algorithm

您正在为一家以这种方式运作的制造公司工作

我们获得特定尺寸的材料卷,我们的供应商可以说每卷8000米。然后我们从2000米,3000米等小尺寸的不同客户处获得订单。我想知道如何创建一个软件,他们只需输入他们当前的卷尺和我们现有的不同订单。生成切割不同卷筒的最佳方法,以尽量减少浪费。

例如,在特定时间点,我们可能会有以下订单 2件3000米 2件4000米 6件1500米

然后我们应该输入的是上面的订单以及供应商为我们提供的卷尺寸,我们假设它是8000米。

然后软件应该生成输出,如 第1卷 - 两片4000米卷绕0 卷2 - 两件3000米和1件1500(Roll Wasted 500) 第3卷 - 五件15000(Roll Wasted 500)

应优化脚本,因为上面的示例非常小。通常情况下,我们一次订购约200件

我正在考虑在PHP和MYSQL中这样做,因此它可以基于Web,公司周围的人可以使用它。

我知道我们可以通过蛮力尝试每种组合来做到这一点。但在这种情况下是否还有其他排序算法和技术可以提供帮助。

2 个答案:

答案 0 :(得分:1)

这是众所周知的cutting stock problem,您希望在完成所有订单后最大限度地减少浪费。

以下是维基百科的描述:

  

切割库存问题是一个优化问题,或更多   具体地说,是整数线性规划问题。它起源于   许多工业应用。想象一下,你在造纸厂工作   并且你有许多固定宽度的纸卷等待   切,但不同的客户需要不同数量的卷   各种尺寸的宽度。你打算如何切割卷筒   最大限度地减少浪费(剩余的数量)?

一般情况是NP-hard,这意味着没有快速算法来产生最佳结果。

但是,您可以编写一个生成近似解决方案的算法,这些解决方案可以快速计算并且“合理地”良好。


编辑(@David礼貌):

如果您从制造商处获得的原始卷总是相同的尺寸,在这种情况下是8000米,那么切割库存问题会减少到1D bin packing problem,这有点容易解决(但是仍然是NP-hard。)

@david在他删除的答案中提出的贪婪解决方案是获得近似解决方案的快速而廉价的方法。


编辑2:

我稍微说错了。对于装箱问题,没有已知的多项式时间近似方案。 greedy algorithm is actually pretty alright, though.

答案 1 :(得分:0)

您正在寻找1d bin-packing算法。有许多策略可以解决它First-Fit,Best-Fit,Random-Fit。我在phpclasses.org上写了一个php解决方案。你可以免费下载我的程序(bin-packing)。事实上,我赢得了奖项。如果你的问题不是那么大,我会尝试一种暴力方法。