问题简述:
BPP问题是指一维装箱问题(Bin Packing Problem),也被称为装箱问题。在BPP问题中,有一组具有不同大小的物品需要装入一组容器中,每个容器的容量有限。核心是如何将一组物品放入容量有限的箱子中,使得所用的箱子数量最少。
问题分类:
1、一维装箱问题:最简单的形式,物品和容器都被简化为一维的长度或重量问题,目标是尽可能少地使用容器来装下所有物品。
2、二维装箱问题:扩展到二维平面,物品和容器都被视为矩形。问题的关键是如何在不重叠的情况下,最有效地利用矩形容器的空间。
3、三维装箱问题:进一步扩展到三维空间,涉及将不同大小的立方体物品装入立方体容器中。它在货物装载、仓储管理等方面有着重要应用。
建模:
一维装箱问题建模:
给定:
物品集合A={a1,a2......an},每个物品ai大小为Wi
容器集合B={b1,b2......bn},每个容器容量为s。
引入变量:
yi:表示容器bj是否被使用(1表示使用,0表示未使用)
xij:表示物品ai是否被放入容器bj(1表示放入,0表示未被放入)
目标:
最小化 使用容器数量 :
约束条件:
1、容量约束:每个容器已安装物品的总大小不能超过其容量
2、物品放置约束:每个物品必须且只能被放入一个容器
二维装箱问题建模:
二维装箱问题扩展了一维BPP,涉及将一组矩形物品放置到最少数量的矩形容器中。
给定:
物品集合A={a1,a2,......an}每个物品ai有高度Wi和高度Hi
容器集合B={b1,b2,......bn}每个容器有宽度和高度Wc和Hc
引入变量:
xi,yi:表示物品ai在容器左下角坐标
ri:表示物品是否被旋转90度放置(1代表旋转,0代表不旋转)
目标:
最小化 :使用容器的数量,同时达到最大空间利用率。
约束条件:
1,位置约束:物品位于容器内:
0
≤ xi+Wi
≤ Wc, 0
≤ yi+Hi
≤ Hc
2,不重叠约束:不同的物品不能相互重叠:
(xi+Wi≤ xj)v (xj+Wj≤xi)v (yi+Hi≤yi)v (yi+Hi≤yi)
相关算法:
启发式算法因其计算效率高、实现简单、能够在较短时间内提供较好的近似解
1、首次适应算法(First Fit,FF)
该算法按顺序逐个考虑物品,并尝试将物品放入第一个能够容纳它的容器中。
算法步骤:
(1)
初始化:打开第一个容器,并将其作为当前容器。
(2)
对于每个物品,按顺序进行如下操作:
•从第一个容器开始,逐个检查容器是否有足够的剩余空间容纳该物品。
•如果找到一个容器可以容纳物品,则将物品放入该容器中,并更新容器的剩余空间。
•如果所有容器都无法容纳物品,则打开一个新的容器,并将物品放入新的容器中。
(3)
重复步骤(2)
,直到所有物品都被处理完毕。
优缺点:
具有较高的容器利用率,即较少的剩余空间,然而,它可能导致容器的分布不均衡
例:
2、最佳适应方法(Best Fit,BF)选择剩余空间最小的那个仍能容纳当前物品的箱子,从而最大限度地利用空间。
算法步骤:
(1)
初始化:打开第一个容器,并将其作为当前容器。
(2)
对于每个物品,按顺序进行如下操作:
•从所有已打开的容器中选择一个剩余空间最小且足够容纳物品的容器。
•如果找到一个合适的容器,则将物品放入该容器中,并更新容器的剩余空间。
•如果所有容器都无法容纳物品,则打开一个新的容器,并将物品放入新的容器中。
(3)
重复步骤
2
,直到所有物品都被处理完毕。
3、下一个适应方法(Next Fit,NF)始终尝试将当前物品放入上一个使用的箱子中。如果当前箱子不能容纳物品,则开启一个新箱子。
算法步骤:
(1).
初始化:打开第一个容器,并将其作为当前容器。
(2).
对于每个物品,按顺序进行如下操作:
•如果物品可以放入当前容器,则将物品放入当前容器中,并更新容器的剩余空间。
•如果物品无法放入当前容器,则关闭当前容器,打开一个新的容器,并将物品放入新的容器中,并将新容器设置为当前容器。
(3).
重复步骤
2
,直到所有物品都被处理完毕。
优缺点:简单且易于实现,同时具有较好的效率。然而,它可能导致容器利用率较低,即可能会产生较多的剩余空间。
例: