多个背包/ Bin打包算法

时间:2018-04-15 17:57:00

标签: algorithm graph knapsack-problem np bin-packing

问题如下:

你有一个包含n个对象的堆栈,每个对象都有卷Vi。你也有k个盒子,都有固定的体积V.对于堆栈顶部的每个物体,如果物体适合当前的盒子,你必须选择将它放入盒子并移动到下一个物体,或关闭此框并跳至下一个框。

每个方框的成本定义为方框中剩余的音量。

您的目标是将所有对象放入框中,并最小化所有框成本的总和。

我应该使用什么算法(我用图表思考一下)?

1 个答案:

答案 0 :(得分:0)

这可以通过动态编程来解决。

状态可以是(整箱数,拍摄对象数)。

该功能是实现这种状态的最低总成本。

转换可以如下进行。 让我们从状态(box, obj)开始,当我们已经知道实现它的最佳方式成本f[box][obj]。 获取对象编号obj+1obj+2...,直到其卷v[i]的总和超过框容量V

在获取每个新对象i后,如果我们关闭当前框会发生什么? 我们已达到状态(box + 1, i),费用为f[box][obj]加上(V减去总量v[obj+1]v[obj+2]...,{的平方{1}})。 如果到目前为止最好的方式是v[i],请将其分配给(box+1, i)

基数为f[box+1][i]

答案是f[0][0] = 0,其中f[k][n]是方框数,k是对象数。

在伪代码中:

n