我的手上有一个很奇怪的问题。
我有一个不同大小的木梁长度列表(约500个条目),如3400mm,1245mm,900mm等。 木梁的最大长度为5400mm,为了减少浪费的木材量,我想找到一种算法,该算法尽可能地将较小的尺寸组合成5400mm的横梁或尽可能接近。
所以,让我说我有五种不同的长度:3000,1000,300,2000,900我最终会:
3000 + 2000 + 300 = 5300 //与5400最接近的组合,意味着此梁上浪费的木材量仅为100毫米。
1000 + 900 = 1900 //其余
我不确定这是否符合旅行商问题,我只是开始想象算法的外观。但是因为有很多聪明的人在这里有组合技能,所以我只是想把它扔到那里然后我的脑袋里流着血。
让事情变得更糟
我们说我们确实找到了解决上述问题的方法。在木材店的人很少提供5400毫米光束,但它可以在100毫米间隔内从3000到5000。 因此,我会在发货时从他们那里获得光束长度列表。
是否可以匹配列表"这是我得到的光束"列表"找出所需光束长度的最佳组合"?
我不确定它最终是否值得,但感谢任何帮助。
亲切的问候 理查德
答案 0 :(得分:0)
这是1维Cutting Stock Problem。它可以简化为Knapsack problem,因此它实际上是NP完全的,但它通常易于处理,并且在不存在许多良好的近似解决方案的情况下,因为这是一个工业中非常重要的问题。
它通常使用动态编程来完全解决,这是一种精神错乱,但你可以找到很多示例实现来帮助你。近似多项式时间解决方案通常在不同点调用动态编程代码(其具有伪多项式复杂度),并且周围代码更简单。我想这里的回家消息是不要自己编写代码,找到别人的代码并将其移植到您的语言和应用程序环境中。