Php 下料问题

Php 下料问题,php,algorithm,knapsack-problem,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

我试图用最少的滴落或浪费来筑巢

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中使用函数或算法,以最少的浪费获得优化的切割模式和所需的料长,我们将不胜感激


谢谢

在我看来,这就像是1d箱子包装的变体。您可以尝试一个最佳匹配,然后使用表b的不同排序进行尝试。无论如何,在3/2的最优解中不存在解,因为这是一个NP完全问题。这里有一个很好的教程:。我用了很多方法来解决我的问题。

如果你的问题是“给我代码”,恐怕你没有提供足够的信息来实现一个好的解决方案。如果你通读了这个答案,你就会明白为什么

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

回答像这样复杂的算法问题需要一定的专业知识(包括但不限于大量的数学能力)。与我们大多数人相比,从事这一领域工作的人在解决这类问题方面做得更多。下面是关于这个话题的一个例子

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

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

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

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

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


我曾经玩过一款解决1D和2D这类问题的游戏。工作得很好,你也许可以从他们的网站上得到一些东西。@Arik Lewis:假装我是个白痴(在这个问题的范围内,我实际上是个白痴)。你能提供输入和输出的例子吗?@Arik Lewis:尽管这听起来有点奇怪,你有没有研究过日历/事件问题,其中部分时间框架(即PHP世界中的整数范围)被篡改了?嘿,bob,这个例子是将表a(切割长度)与表B(股票长度)嵌套在一起,并给出一个购买列表(即特定库存长度的数量)具有最少的浪费或跌落。因此(1)W 16X19 16’,(1)W 16X19 12’,(2)W 16X19 5'可以让我得到38'并且可以用2'的落差从一个40'的片段中切割出来。你必须自己编写这个函数。PHP不是一个庞大的计算工具包,它是一种服务器端脚本语言。实现一切取决于你。我打算投票,直到我读到“没有最佳解决方案,因为…”。最优解确实存在。只是从计算的角度来看,找到上述解的过程可能非常昂贵。我知道这是一个NP完全问题,但我要寻找的是某种函数。我可以插入其中PHP@Leon:我不知道你的意思,但1d箱包装就是证明无论你使用什么函数,都只能实现85%的优化。@Jitamaro:有一个最优的解决方案。最优的可能不同于使用所有可用空间,因为使用所有可用空间可能是不可行的。(根据定义,解决方案必须是可行的。)@莱昂:事实上,我把这和赫里斯托菲德算法混淆了。赫里斯托菲德算法保证一个解在最优解的三分之二以内。也许一个第一次适合和一个最佳适合的1d垃圾箱包装也有这个保证?维基百科说不可能在三分之二以内包装。我实际上认为Phpdna“更好”答案在这里。该答案中的链接教程对于非工程师来说是一个很好的入门资源,可以帮助他们了解如何解决问题的基本解决方案(在我的例子中,这正是我想要的)我认为很多时候,我们这些非专家所寻求的是向前迈出一步的帮助,而不是明确说明前面的道路有多困难。