【问题标题】:Cutting Stock Problem切割库存问题
【发布时间】:2011-07-13 23:44:36
【问题描述】:

我正在尝试以最少的掉落或浪费嵌套材料。

Table A

Qty Type Description Length

2   W    16x19       16'
3   W    16x19       12'
5   W    16x19       5'
2   W    5x9         3'


Table B

Type Description StockLength

W    16X19       20'
W    16X19       25'
W    16X19       40'
W    5X9         20'

我已经研究过贪婪算法、装箱、背包、1D-CSP、分支定界、蛮力等。我很确定这是一个切割库存问题。我只需要帮助想出运行它的功能。我不仅有一个库存长度,而且有多个,用户可以输入他自己的不太常见长度的库存。任何帮助确定在 PHP 中使用的函数或算法以提出优化的切割模式和所需的库存长度,同时浪费最少。

谢谢

【问题讨论】:

  • 我曾经玩过cutting-optimization.optimalprograms.com,它解决了1D和2D的这类问题。工作得很好,你也许可以从他们的网站上得到一些东西。
  • @Arik Lewis:假装我是个白痴(在这个问题的范围内,我实际上是)。你能提供输入和输出的例子吗?
  • @Arik Lewis:虽然这听起来可能有点有点奇怪,但你有没有看过日历/事件问题,其中部分时间框架(即世界上通常是整数范围PHP) 正在被玩弄?
  • 嘿,鲍勃,示例是将表 A(切割长度)与表 B(库存长度)嵌套,并得出一个浪费或丢弃最少的购买清单(即特定库存长度的数量) .所以 (1) W 16X19 16', (1) W 16X19 12', AND (2) W 16X19 5' 会得到 38' 并且可以从 40' 的片断中切割出 2' 的落差。
  • 您将不得不自己编写该函数。 PHP 不是一个庞大的计算工具包,它是一种服务器端脚本语言。实施取决于您。

标签: php algorithm knapsack-problem


【解决方案1】:

如果您的问题是“给我代码”,恐怕您没有提供足够的信息来实施一个好的解决方案。如果您阅读此答案的全部内容,您就会明白为什么。

如果您的问题是“给我算法”,恐怕您在错误的地方寻找答案。这是一个面向技术的网站,而不是一个面向算法的网站。尽管我们程序员当然理解算法(例如,为什么在循环的每次迭代中将相同的字符串传递给strlen 效率低下,或者为什么冒泡排序除了非常短的列表之外不合适),这里的大多数问题是比如“我如何使用语言/框架 Y 来使用 API X?”。

回答这样的复杂算法问题需要一定的专业知识(包括但不限于大量数学能力)。 operations research 领域的人们在此类问题上的工作比我们大多数人都多。这是关于该主题的introductory book

作为一名试图找到实际问题的实用解决方案的工程师,我首先会得到以下问题的答案:

  • 您尝试解决的平均问题实例有多大? 由于您的一般问题是 NP 完全问题(正如 Jitamaro 已经说过的),中等大小的问题实例需要使用启发式算法.如果您只打算解决小问题实例,您可能能够通过实现找到精确最优值的算法而侥幸,但是您当然必须警告您的用户,他们不应该使用您的软件来解决大问题实例.

  • 您是否可以使用任何模式来降低问题的复杂性?例如,商品是否总是或几乎总是有特定的尺寸或数量?如果是这样,您可以实施一种贪心算法,专注于为常见场景提供高质量的解决方案。

  • 您的最优性与计算效率之间的权衡是什么? 如果您只需要一个好的答案,那么您不应该浪费精力或计算精力来尝试提供一个最佳答案。信息,无论是由个人提供还是由计算机提供,只有在需要时可用。

  • 您的客户愿意为高质量的解决方案支付多少费用? 与数据库或 Web 编程不同,因为算法被保持在最低限度(例如您很少编写 SQL 数据库提供查询结果的确切过程),运筹学确实需要数学和工程技能。如果你不为他们收费,你就是在赔钱。

【讨论】:

  • 我实际上认为 Phpdna 在这里有“更好”的答案。该答案中的链接教程对于非工程师来说是一个很好的介绍性资源,可以帮助他们了解如何解决问题的基本解决方案(在我的情况下,这正是我想要的)。我认为很多时候,我们非专家寻求的是帮助向前迈出一步,而不是明确说明前进的道路有多困难。
【解决方案2】:

在我看来,这就像一维装箱的变体。你可以尝试一个最合适的,然后用不同的表格排序来尝试。无论如何,在 3/2 的最优值中不存在解决方案,因为这是一个 NP 完全问题。这是一个很好的教程:http://m.developerfusion.com/article/5540/bin-packing。我用了很多来解决我的问题。

【讨论】:

  • 我打算投票,直到我读到“不存在最佳解决方案,因为......”。最优解确实存在。只是从计算的角度来看,找到上述解决方案的过程可能非常昂贵。
  • 我知道它是 NP 完全的,但是我正在寻找的是某种函数。我可以插入 PHP 的东西
  • @Leon:我不确定您的意思,但 1d-bin-packing 证明无论您使用什么功能,都只能实现 85% 的最佳效果。
  • @Jitamaro:个最佳解决方案。最优可能与使用所有可用空间不同,因为使用所有可用空间可能是不可行的。 (根据定义,解决方案必须是可行的。)
  • @Leon:事实上,我将这与 christofides 算法混淆了,后者保证解决方案在最佳解决方案的 3/2 范围内。也许第一次适合和最适合的一维装箱也有这个保证?维基百科说不可能在 3/2 内打包。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多