例如,我要求生产以下长度和数量的条: 2件248mm, 5个1150毫米, 6个,2843毫米, 3个3621毫米。
这是分区输出。
在输入端我有(例如) 3条2500毫米, 2条5000毫米, 6条8000毫米 和3个10000毫米的棒。
我应该找到一种如何最佳地切割输入条的方法 - 切割后的其余部分(其余部分太小而不能使用)应该尽可能小。
我创建了算法,只需创建所有可能的组合,然后在其中选择最好的组合。代码有效,但只要输入和输出稍微大一些,计算就可以持续很长时间,所以我必须找到解决问题的新方法。
你有任何提示吗?
答案 0 :(得分:5)
您的问题是运筹学中非常常见的问题。看着 Cutting stock problem。这个问题基本上是NP难的,因为你已经想到了自己。它不能很好地扩展。
如何解决?在能够找出模型之后,最好调用一些混合整数编程求解器。我以前使用过LPSolve 5.5
可能有一些简单的算法可以代码处理这个问题。当您需要添加作者未想到的一些辅助约束时,通常会出现这些算法的问题。 MIP求解器是更通用的工具。
答案 1 :(得分:4)
这称为可变大小的装箱问题。这是NP难,这意味着你的解决方案总是会因大输入而失败。本文here,遗憾的是我无法访问,解决了这个问题,并以金属切割行业为例。
答案 2 :(得分:1)
线性编程是你的朋友。一般情况下请参阅http://en.wikipedia.org/wiki/Linear_programming,尤其是http://en.wikipedia.org/wiki/Linear_programming#Uses,http://en.wikipedia.org/wiki/Linear_programming#Algorithms。
答案 3 :(得分:1)
看起来它类似于背包问题(知道真的很讨厌)我在NIST DADS(方便参考)上发现这比非ACM成员更容易获得Bin Packing