Algorithm 计算最有效分组的算法

Algorithm 计算最有效分组的算法,algorithm,Algorithm,我手头有一个很奇怪的问题 我有一份500条不同尺寸木梁长度的清单,如3400毫米、1245毫米、900毫米等。 木梁的最大长度为5400mm,为了减少木材的浪费量,我想找到一种算法,尽一切可能将较小尺寸的木梁组合成5400mm的木梁或尽可能靠近木梁 假设我有五种不同的长度:3000,1000,300,2000,900,我最终会得到: 3000+2000+300=5300//最接近5400的组合,这意味着在这根梁上浪费的木材量只有100毫米 1000+900=1900//其余 我不确定这是否符合旅

我手头有一个很奇怪的问题

我有一份500条不同尺寸木梁长度的清单,如3400毫米、1245毫米、900毫米等。 木梁的最大长度为5400mm,为了减少木材的浪费量,我想找到一种算法,尽一切可能将较小尺寸的木梁组合成5400mm的木梁或尽可能靠近木梁

假设我有五种不同的长度:3000,1000,300,2000,900,我最终会得到:

3000+2000+300=5300//最接近5400的组合,这意味着在这根梁上浪费的木材量只有100毫米

1000+900=1900//其余

我不确定这是否符合旅行推销员问题,我只是开始想象算法可能是什么样子。但既然这里有这么多聪明的人都有组合技能,我就想在我脑袋被打得血淋淋之前把它扔出去

更糟

假设我们确实找到了上述问题的解决方案。木材店的伙计们很少交付5400毫米的横梁,但可以在100毫米的间隔内交付3000至5000毫米的横梁。 所以我会在交货时从他们那里得到一份光束长度的列表

是否有可能匹配列表这是我得到的梁与列表找出所需梁长度的最佳组合

我不确定最终是否值得,但我们非常感谢您的帮助

问候 Richard这是一维中的。它可以简化为,所以它实际上是NP完全的,但它通常是可处理的,并且在没有很多好的近似解的情况下,因为这是一个非常重要的工业问题


它通常是使用动态规划来精确地解决的,这有点像一个傻瓜,但是你可以找到大量的示例实现来帮助你。近似多项式时间解通常调用在不同点具有伪多项式复杂性的动态规划代码,并且周围的代码更简单。我想这里的要点是不要试图自己编写代码,找到其他人的代码并将其移植到您的语言和应用程序环境。

听起来并不完全像TSP,但听起来可能是NP完全问题,更接近于子集和问题。这是一个1D的库存削减问题。具有列生成功能的线性规划运行良好。可以通过向LP添加一些约束来处理这个变量。它听起来有点像背包问题,但只是有点模糊。