Bin-Packing装箱问题

一、问题简介

        Bin-Packing问题可以描述为:给定一组大小不同的物品和一个容量有限的背包,如何将物品放入背包,使得背包内物品的总价值最大,且不超过背包容量。这里的物品大小和背包容量均为整数。

        Bin-Packing算法的目标是:将n个物品放入最少数量的背包中,使得每个背包的容量不超过给定值。

        Bin-Packing算法是一种组合优化问题,旨在将一组物品(具有不同的大小)放入有限数量的容器(或“箱子”)中,使得使用的容器数量最小化。该问题属于NP-hard问题,意味着没有已知的多项式时间算法可以解决所有实例。

二、问题分类

装箱问题可分为一维装箱问题,二维装箱问题,三维装箱问题三种:

        (1)一维装箱问题只考虑一个因素,比如重量、体积、长度等。

        (2)二维装箱问题考虑两个因素--给定一张矩形的纸(布料、皮革),要求从这张纸上剪出给定的大小不一的形状,求一种剪法使得剪出的废料的面积总和最小。常见问题包括堆场中考虑长和宽进行各功能区域划分、停车场区位划分、包装材料裁切时考虑怎样裁切使得材料浪费最少、服装布料裁切、皮鞋制作中的皮革裁切等。

        (3)三维装箱问题考虑三个因素--一般指长、宽、高。装车、装船、装集装箱等要考虑这三个维度都不能超。

•  一维装箱问题建模

给定一个物品的集合A = {a1,a2,...,an}和容量为s的箱子若干,物品ai的 大小为wi,i = 1,2,...,n,要求在箱子的容量范围内,把A中的物品装入到箱子中, 目标是最小化所使用箱子的数量。 
由于任意一个物品的大小都不超过箱子的容量,所以最优解的箱子数不会超 过物品的数量n,可以定义箱子的集合为B = {b1,b2,...,bn}。根据装箱问题的定义, 通过引入0-1 决策变量yj和xij,定义yj = 1表示箱子bj被使用,否则,yj = 0;定 义xij = 1 表示将物品ai放入箱子bj中,否则,xij = 0。该问题的数学模型可以描述如下: 

该约束条件保证了放入箱子bj的物品总大小不超过该箱子的容量

该约束条件确保了每个物品恰好放入一个箱子中

•  变尺寸装箱问题

给定一个物品的集合A = {a1,a2,...,an}和m种不同容量的箱子若干, 物品ai的大小为wi,i = 1,2,...,n,每种箱子bj的容量为sj,j = 1,2,...,m。要求在箱子的容量范围内,把A中的物品装入一些箱子中,目标是最小化所使用的箱子的总容量。

由于任意一个物品的大小都不会超过箱子的容量,所以最优解的箱子数不会 超过物品的数量n。对于m种不同容量的箱子,可以假设每种容量的箱子数有n个, 因此箱子集合可以用B ={b1,b2,...,bn,bn+1,...,b2n,...,bmn}表示,箱子的容量为s(bj) , j = 1,2,...,mn,其中s(b1) = s(b2) = ··· = s(bn) ,s(bn+1) = ··· = s(b2n) ,. . ., s(bmn−n+1) = ··· = s(bmn) 。

目标函数表示最小化所使用箱子的总容量。第一个约束条件保证了放入箱 子bj的物品总大小不超过该箱子的容量;第二个约束条件确保了每个物品恰好放入一个箱子。 

•  三维装箱问题

简单介绍下经典的3D-BPP问题:假设有n个长方体物品以及不定数量的长方体容器,它们均具有长、宽、高的属性,物品不允许旋转(即物品的长宽高不可以互换,只能保持与容器边缘平行的状态下放入),如图所示。

f9243c998c4346a1963560d5412cc217.jpeg

经典3D-BPP要解决的问题就是考虑如何合理地将物品摆放到容器中且所需容器数量最小。其常见相关要素可简单表示如下:
• 优化目标:最大化装载率、最小化装载容器(例如纸箱)的表面积等;
• 决策变量:物体放置顺序、物体放置的具体位置等;
• 约束:体积、重量、稳定性、重不压轻、物品价值最大化等;

3D-BPP问题不仅仅是组合优化问题的基础,更广泛应用在现实世界的物流体系中。但随着现实物流的发展需要,3D-BPP问题的约束越来越复杂、货物的异构性越来越强、订单规模越来越大,导致先前尚可维持运行的3D-BPP方案效率降低,难以满足现代物流的装箱需求,该研究致力于在前人研究的基础上提升算法效率,帮助降低物流成本。

根据目标的不同,三维装箱问题可分成以下几类:

        (1)箱柜装载问题(three-dimensional bin packing problem,简称3D-BPP):给定一些不同类型的方型箱子和一些规格统一的方型容器,问题是要把所有箱子装入最少数量的容器中。

        (2)容器装载问题(three-dimensional container-packing problems,简称3D-CPP):在该问题中,所有箱子要装入一个不限尺寸的容器中,目标是要找一个装填,使得容器体积最小。

        (3)背包装载问题(three-dimensional knapsack loading problems,简称3D-KLP):每个箱子有一定的价值,背包装载是选择箱子的一部分装入容器中,使得装入容器中的箱子总价值最大。如果把箱子的体积作为价值,则目标转化为使容器浪费的体积最小。

三、相关算法

1、FF算法(First Fit Algorithm)是另一种常见的启发式算法,用于解决装箱问题。该算法按顺序逐个考虑物品,并尝试将物品放入第一个能够容纳它的容器中。

主要步骤如下:
(1)初始化:打开第一个容器,并将其作为当前容器。
(2)对于每个物品,按顺序进行如下操作:
①从第一个容器开始,逐个检查容器是否有足够的剩余空间容纳该物品。
②如果找到一个容器可以容纳物品,则将物品放入该容器中,并更新容器的剩余空间。
③如果所有容器都无法容纳物品,则打开一个新的容器,并将物品放入新的容器中。
(3)重复步骤2,直到所有物品都被处理完毕。

FF算法的优点:具有较高的容器利用率,即较少的剩余空间。

FF算法的缺点:它可能导致容器的分布不均衡,即某些容器可能装满,而其他容器可能相对较空。

2、NF算法(Next Fit Algorithm)是一种简单而高效的启发式算法,用于解决装箱问题。该算法按顺序逐个考虑物品,并尝试将物品放入当前打开的容器中。如果当前容器无法容纳该物品,则打开一个新的容器并将物品放入其中。

主要步骤如下:
(1)初始化:打开第一个容器,并将其作为当前容器。
(2)对于每个物品,按顺序进行如下操作:
①如果物品可以放入当前容器,则将物品放入当前容器中,并更新容器的剩余空间。
②如果物品无法放入当前容器,则关闭当前容器,打开一个新的容器,并将物品放入新的容器中,并将新容器设置为当前容器。
(3)重复步骤2,直到所有物品都被处理完毕。

NF算法的优点:简单且易于实现,同时具有较好的效率。

NF算法的缺点:它可能导致容器利用率较低,即可能会产生较多的剩余空间。

3、BF算法(Best Fit Algorithm)是一种常见的启发式算法,用于解决装箱问题。与FF算法和NF算法不同,BF算法在每次放置物品时尝试找到一个最合适的容器来容纳该物品,以最小化剩余空间。

主要步骤如下:
(1)初始化:打开第一个容器,并将其作为当前容器。
(2)对于每个物品,按顺序进行如下操作:
①从所有已打开的容器中选择一个剩余空间最小且足够容纳物品的容器。
②如果找到一个合适的容器,则将物品放入该容器中,并更新容器的剩余空间。
①如果所有容器都无法容纳物品,则打开一个新的容器,并将物品放入新的容器中。
(3)重复步骤2,直到所有物品都被处理完毕。


BF算法的优点:通过选择最合适的容器来最小化剩余空间,因此通常能够实现较高的容器利用率,避免了FF算法可能导致的容器分布不均衡问题,并且相对于NF算法,可以减少剩余空间的产生。


BF算法的缺点:在每次放置物品时需要搜索所有已打开的容器,这可能导致较高的计算成本。此外,BF算法可能会导致容器的分散使用,即物品可能被分散放置在多个容器中。

    ▪  First Fit:按顺序放入第一个合适的容器

    ▪  Best Fit:放入能够容纳剩余空间最小的容器。

    ▪  Next Fit:在上一个容器无法放入时,尝试放入新的容器。

    ▪  Worst Fit:放入剩余空间最大的容器。

    ▪  贪心算法:Bin-Packing问题的贪心算法通常表现良好,但不能保证找到最优解。相较于动态规划,贪心算法实现简单且效率高。

    ▪  动态规划:可以找到最优解,但时间复杂度较高,适合物品数量和箱子数量较小的情况。

    ▪  回溯算法:通过尝试所有可能的组合来找到最优解,适合小规模问题,但效率低下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值