我正在尝试解决以下问题。给定 192 件具有指定长度和宽度的物品,我想找到一个最小化总表面积的包装订单。这些项目都具有相同的高度(未指定)。每个包裹不能包含超过 12 件物品,并且由于物品的尺寸,同一层中不能存放超过 1 件物品。如果一个项目的宽度和长度不超过下方项目的宽度和长度,则该项目只能堆叠在另一个项目的顶部。
目标是最小化总表面积,即最大物体的表面(在底部)。
我找到了大量关于托盘和垃圾箱装载的文献,但我无法弄清楚我到底需要什么。这是我想出的:
1)选择具有最大表面(宽度*长度)的项目i并将其放在堆栈j的底部。
2)选择具有第二大表面的项目i
a) 如果它的宽度和高度不超过堆栈 j 的底部项目的宽度和高度,则将其放在堆栈 j=1 中的底部项目的顶部
b) 如果它的宽度和高度确实超过了堆栈 j 的底部项目的宽度和高度,则旋转该项目。如果合适,将其放在堆栈 j=1 的底部项目的顶部。
c) 如果旋转后的item的宽度和高度超过stack j的底部item的宽度和高度,将它放在stack j+1 = 2的底部
3)选择具有第三大表面的项目并重复步骤a,b和c
等等...
有什么意见或提示吗?我不知道这是否会产生(最佳)解决方案。