将盒子堆叠成预定高度的最少堆叠

时间:2018-04-08 03:11:39

标签: c++ algorithm optimization combinatorics

我有一个难以解决的问题,它看起来像这样:Stacking boxes into fewest number of stacks efficiently?

基本上,我有一组已知尺寸的盒子。我必须将它们全部堆叠到最小数量的堆栈中。与上面链接中已经提到的问题的不同之处在于,我获得了堆叠不能超过的最大高度。 显然,如果盒子的宽度和长度都小于盒子的宽度和长度,那么它只能堆叠在另一个盒子上面。不允许轮换。

在贪婪的盒子分配后,我想到了本地搜索。每次都会破坏最小高度的堆栈,并将其盒子放入其他堆栈中。此时,其中一些将超过允许的最大高度。这将使用本地搜索来解决,该搜索将尝试重新分配框以产生可接受的解决方案(即,没有堆栈超过高度限制的解决方案)。我建议的本地搜索是堆栈的混合,其中将堆叠成对的堆栈(如在遗传算法上),每次最小化堆栈高度之间的差异。在实践中,如果没有给出可接受的解决方案,这将非常快地落入局部最优状态。

是否有任何算法,不一定是本地搜索,我可以适应有效地解决这个问题?任何线索都会有很大的帮助!

0 个答案:

没有答案