1. 引言
一维装箱问题是指把一定数量的物品放入容量相同的一些箱子中,使得每个箱子中的物品大小之和不超过箱子容量并使所用的箱子数目最少。一维装箱问题是组合优化问题中最基本的一类NP-hard问题 [1],在20世纪70年代就引起了广泛的谈论与研究,并有了显著的成果 [2] [3] [4]。然而随着社会的发展,研究者们对经典装箱算法的研究已经较为成熟,想要进一步突破经典装箱的求解算法难度很大。因此,研究者们开始研究与现代化实际应用相结合的带约束的装箱问题 [5] [6] [7] [8]。
在当今社会上,装箱问题往往与装箱时间相联系,例如:物流运输既需要使用车辆的数目较少,也需要装车时间较短。而装箱时间与装箱机器的速度有关,由于机器的老化会导致装箱的速度不同,从而导致不同机器装同一个物体的时间有差异。因此,本文考虑了一种新的时间约束类型的装箱问题即带时间效率约束的一维装箱问题,分析了问题的NP困难性,给出了一种求解带时间效率约束的一维装箱问题的近似算法,并证明出目标近似比的乘积为
(其中
)。
2. 相关知识
一维装箱问题是给定n个物品序列
,每个物品
的尺寸为
,
,要求把这些物品装入若干个单位容量箱子中,目标是使得所使用的箱子数目达到最少。
对于一个装箱问题,L是问题的任意输入物品序列,设A是求解装箱问题的一个近似算法,算法A返回的解的目标值为
,序列L对应最优解的目标值为
,则算法的近似比定义为
。
求解一维装箱问题的近似算法有很多 [9] [10] [11],其中下次适应算法(Next Fit Algorithm,简称为NF算法)是最简单也是最早研究的一个算法,其策略为:按照物品给定的顺序装箱时,始终保持只打开一个箱子,对于当前要装入的物品,检查是否能装入当前打开的箱子,若不能,则关闭该箱子打开一个空箱子装该物品。NF算法的时间复杂度为
,最坏情况渐近性能比为2。
3. 问题描述
经典一维装箱问题的目标是使用单位箱子数目最少,但此模型过于单一。该问题的数学模型为
其中目标函数为使用箱子数目;公式(3.1)表示物品装入箱子的总容量(或总体积)不能超过箱子的容量(或体积);公式(3.2)表示每个物品只能装入一个箱子;公式(3.3)中,当
时表示物品i被装入箱子j中,当
时表示物品i未被装入箱子j中;公式(3.4)中,当
时第j个箱子被使用,当
时第j个箱子未被使用。
本文考虑的装箱问题加上了时间效率约束,同时考虑装箱数目和时间,在数目上,要求装箱数目最少;在时间上,要求装箱时间最少。为了确保达同时到两个目标,本文采用了一种新的目标设定方法,即目标是装箱数目近似比与装箱时间近似比的乘积最小。与传统的解决多目标问题的方法比较,这种目标设定方法合理地避免了多目标规划问题求解过程中可能出现的达到一级目标但达不到二级目标的结果。
效率约束是指,当使用不同机器装箱时,由于机器的老化程度不同,每个机器的装箱速度不同,不妨设装箱速度最快的机器的效率为1,且效率低于0.5时机器需要维修。装箱时间与机器效率成反比,例如使用效率为1的机器将n个物体装箱的时间为
,那么使用效率为0.6的机器将n个物体装箱的时间为
。
带效率约束的一维装箱问题描述如下:给定n个物品序列
,每个物品
的尺寸为
,
,让m个正常使用的机器同时装箱,机器效率
,
,使用效率为1的机器将n个物体装箱的时间为
,要求把所有物品装入若干个单位容量的箱子中。目标是装箱数目近似比与装箱时间近似比的乘积最小。
4. 研究内容
4.1. 数学模型
其中:(4.1)表示用算法A装箱使用的箱子数目;(4.2)表示m个机器中装箱时间最长的机器所花费的时间;(4.3)表示算法A装箱数目近似比;(4.4)表示算法A装箱时间近似比;(4.5)表示物体总量不超过箱子容量;W = 1表示箱子容量;(4.6)表示每一个物体只能装入一个箱子;(4.7)表示每一个物体只能分配给一个机器;(4.8)中
表示第i个物品装入第r个箱子,反之表示第i个物品未装入第r个箱子;(4.9)中
表示第i个物品分配给第j个机器,反之表示第i个物品未分配给第j个机器;(4.10)中
表示第r个箱子被使用,反之表示第r个箱子未被使用;(4.11)表示所有机器都被使用。
4.2. 算法设计
算法A
Input:物品序列
以及每个物品
的尺寸为
,
,机器效率
,
,使用效率为1的机器将n个物体装箱的时间为
。
Output:使用的箱子数及装箱方案。
Begin
Step 1:将物体按照装箱时间从大到小排序
,如果装箱时间相同,那么按照物品尺寸排序。
Step 2:将机器效率按照从大到小排序
,其中
,
。
Step 3:若
,则n不变;若
(k为任意整数),则
,且
。
Step 4:若k为偶数,记物体集合为
,
其对应的装箱时间集合为
。
若k为奇数,记物体集合为
,
其对应的装箱时间集合为
。
那么每个机器所需装箱物体的个数为k个。
Step 5:令
表示
中元素相加的总和,将
从大到小重新排序,设为
,将第j个子集
中所有元素分配给机器
,其效率为
。分配后的第j台机器所花费的总时间用
表示,即
。
Step 6:对于第j台机器:
令装箱总数
。
Step 7:输出箱子数目h和装箱方案
。
End
4.3. 算法分析
引理1:对任意的
,对任意实例I,有
。
证明:设
,
则有
。设机器
所需装箱的元素集合为
,对应装箱时间为
,机器
的元素集合为
,对应装箱时间为
。因此
。
下面讨论
的大小。
当
时,令
那么
为了方便计算,不妨设
。
那么
这时,我们有
。
当
时,若
,由算法可知,
。就有
即
。而
,故有
。
若
,由算法可知
,且有
,即
。此时有
。当
确定时,这种情况是可数的,并且在这种情况下,
的极限情
况是当
时。
那么此时有
而
。
故当
时,
。
综上我们有
,那么就有
从而有
。得证。
引理2:对任意实例I,有
(其中
)。
证明:由算法可知,第j台机器所需装箱的元素集合为
,假设使用算法将
装完需要
个箱子,那么将
中的所需箱子两两结合相加得到
中所有元素大小之和
,对
求和,就可以得到
又因为
,
,那么有
,而
表示使用m个机器同时装箱对应的最优解,那么就有
。令
,那么
,则有
。得证。
定理1:装箱时间近似比与装箱数目近似比的乘积是
(其中
)。
证明:由定理1和定理2可知装箱时间近似比为
,箱子数目的近似比为(
) (
),故装箱时间近似比与装箱数目近似比的乘积是
(其中
)。
定理2:算法A的时间复杂度为
。
证明:算法中的step 1的时间复杂度为
,step 2和step 5的时间复杂度为
,step 6的时间复杂度为
,所以算法A的时间按复杂度为
。
4.4. 算法应用
下面给一个算法的应用实例。给定物品序列
,其尺寸为
,
,两台机器同时装箱,装箱效率为
,
,使用效率为1的机器将n个物体装箱的时间为
。
那么使用算法A装箱的结果为
,
,而
,
,故满足算法证明结果。
5. 小结
本文提出了一种带时间效率约束的一类一维装箱问题,在传统一维装箱的基础上加了时间效率约束,同时考虑装箱数目和装箱时间,设计算法求出近似比,分析其时间复杂度,并取得了较好的结果。
此外,当物品数目较少且机器数目较多时,该算法的性能较差,本文进一步的工作是根据物品数目的多少来选择不同数量的机器装箱,以达到省时省力的最佳效果。我们未来的工作将继续研究此类问题,以期能对实际生活提供帮助。
致谢
非常感谢对本稿提出意见的审稿人及导师。
基金项目
云南民族大学数学与计算机科学学院研究生项目(SJXY-2021-025)。