切割库存问题

时间:2011-07-13 23:44:36

标签: php algorithm knapsack-problem

我正试图以最少的丢弃或浪费来筑巢材料。

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'

我一直在寻找贪心算法,Bin装箱,背包,1D-CSP,分支机构,蛮力等等。我很确定这是一个切割库存问题。我只是需要帮助来提供运行它的功能。我不只是有一个库存长度而是多个,并且用户可以输入他自己的不常见长度的库存。任何帮助计算在PHP中使用的函数或算法来提出最少浪费所需的优化切割模式和库存长度将非常感激。

由于

2 个答案:

答案 0 :(得分:3)

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

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

回答像这样的复杂算法问题需要某种专业知识(包括但不限于大量的数学能力)。 operations research领域的人们比我们大多数人更多地处理过这类问题。这是关于该主题的introductory book

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

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

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

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

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

答案 1 :(得分:2)

这对我来说就像1d bin-packing的变体。您可以尝试最合适,然后尝试不同的表格b。无论如何,在最佳的3/2中不存在解决方案,因为这是NP完全问题。这是一个很好的教程:http://m.developerfusion.com/article/5540/bin-packing。我用了很多东西来解决我的问题。