直角边零件的轮廓由直角边组成, 并且任意相邻两边之间的夹角都是直角, 对这种零件的排样布局称为直角边零件下料问题. 直角边零件在许多领域中都有广泛的应用, 如普通机械、专业设备等制造行业的型材、金属切割、木材加工、建筑行业的平板玻璃切割等, 但直角边零件加工普遍存在余料剩余较多, 加工效率较低, 原材料浪费等问题[1, 2]. 因此, 优化直角边零件排样布局, 使直角边零件下料后产生的废料最少, 即板材的利用率最高, 对降低企业生产成本具有重要意义和实用价值.
目前直角边零件下料布局优化问题已有大量相关研究, Gilmore和Gomory[3]利用动态规划算法求解矩形零件的布局被认为是解决二维切割问题的基本方法; 张燕玲等[2]基于改进的Basely模型[4]设计实现了一种可用于直角边下料问题的整数规划模型; 戚得众等[5]提出了一种基于工艺与形状特征的下料零件分组下料优化模型; Fabio Furini等[6]通过建立混合整数线性规划模型表示二维切削问题中一般切刀约束的问题; 葛志辉等[7]提出一种基于工艺约束策略的二维不规则排样算法; 张旭等[8]给出了一种基于最大移动距离的启发式算法, 改善了排样结果. 然而, 由于直角边零件下料布局优化是NP-Hard (Non-deterministic Polynomial Hard)[9] 问题, 不能在多项式时间内解决, 多数研究获得的结果只能趋近于最优解而很难达到最优解; 即便获得最优解, 由于现有研究普遍将材料利用率作为唯一的优化目标, 获得的排样结果虽然是理论上的最优, 但切割操作难度却较大, 依然存在实用性不强的问题.
针对上述问题, 本文提出了一种基于排样矩形的动态规划方法, 将板材的布局问题转化为若干个优化子问题, 而每个子问题的最优解能够通过本文提出的排样矩形得到, 在此基础上, 基于动态规划思想构建直角边零件下料问题的求解算法, 该算法通过将NP-Hard问题转换为在多项式时间内可以进行求解的一般问题, 降低了算法求解的时间复杂度. 实验结果表明, 对于一般直角边零件, 本算法与传统的直角边零件板材切割相比, 板材的利用率提高了30%–50%; 同时, 本算法在减少板材余料的同时保证了排样简单操作可行, 降低了对工艺的要求, 在工厂生产中容易实现.
1 问题描述不失一般性, 将板材抽象为L×W的长方形R, L和W表示R的长与宽, 左下角为坐标原点(0,0), 右上角坐标为(L,W), 将R在长和宽两个方向上按照单位长度进行划分得到L×W个小正方形, 称之为格点[10], 格点的角点坐标表示为(x, y), 其中0 ≤ x ≤ L, 0 ≤ y ≤ W. 如图1.
任意直角边零件m均存在一个最小外接矩形r, 称r为零件m的最小包络矩形[11], 表示为rm=(rmtr, rmbl), 其中rmtr =(rmtxr, rmtry)、rmbl =(rmblx, rmbly)分别为r的右上角和左下角坐标. 将rmtxr−rmblx记为零件的长, rmtry−rmbly记为零件的宽, 其中包络矩形r由其右上角坐标和左下角坐标确定. 直角边不规则零件及其包络矩形如图2.
定义1(m在R上的规范摆放方式). 直角边零件m在R上可以有任意种摆放方式, 当m的各直角边要么与最小包络矩形r的直角边垂直要么与最小包络矩形r的直角边平行时, 称为m在R上的规范摆放方式.
如图1所示, 板材R上的T字型零件的规范摆放方式有4种. 易见, 对任何直角边零件m, 通过旋转, 其在板材R上规范的摆放方式最多有4种. 对给定的板材R (L×W), 寻找一种使得直角边零件按规范方式摆放个数最多的排样布局, 即切割后余料最少, 这是一个NP-Hard问题, 不能在多项式时间内进行求解.
设有N个直角边零件在R上规范摆放, ri表示直角边零件i(1 ≤ i ≤ N)的包络矩形, 令
直角边零件下料问题: 求解在给定长为L, 宽为W的板材R上排样N个直角边零件最省料的排样模式, 即是求解以下目标函数:
$\begin{split} &\;\;\;\;\;\;\;\;\;\;\;\;\;\;\max \cap \{ {r_i}|1 \le i \le N\} \\ &{\rm {s.t.}}\left. {\left\{ {\begin{array}{*{20}{c}} { \cap \{ {m_i}|1 \le i \le n\} = \Phi ,r_i^{\rm {trx}} - r_i^{\rm {blx}} \le l,1 \le i \le N}\\ { \cap \{ {m_i}|1 \le i \le n\} = \Phi ,r_i^{\rm {try}} - r_i^{\rm {bly}} \le w,1 \le i \le N} \end{array}} \right.} \right\} \end{split}$ | (1) |
优化子问题1. 求解在R上给定宽为w(w ≤ W)的局域长方形区域内排样p个直角边零件最省料的排样模式, 即是求解以下目标函数:
$\begin{split} &\;\;\;\;\;\;\;\;\;\;\;\;\;\;\max \cap \{ {r_i}|1 \le i \le p\} \\ &{\rm {s.t.}} \cap \{ {m_i}|1 \le i \le p\} = \Phi ,r_i^{\rm {try}} - r_i^{\rm {bly}} \le w,1 \le i \le p \end{split}$ | (2) |
优化子问题2. 求解在R上给定长为l(l ≤ L)的局域长方形区域内排样q个直角边零件最省料的排样模式, 即是求解以下目标函数:
$\begin{split} &\;\;\;\;\;\;\;\;\;\;\;\;\;\;\max \cap \{ {r_i}|1 \le i \le q\} \\ &{\rm {s.t.}} \cap \{ {m_i}|1 \le i \le q\} = \Phi ,r_i^{\rm {trx}} - r_i^{\rm {blx}} \le l,1 \le i \le q \end{split}$ | (3) |
针对优化子问题1和问题2, 要在全排列中确定一个最优的排列组合, 也是一个NP-Hard问题. 但是, 对于此问题, 数据量较少时可以通过合理的穷举进行解决. 根据文献[12], 下面给出排样矩形(Layout Rectangle)的定义.
定义2(排样矩形). 根据先验知识对板材R的某一小块区域进行手动排样, 确定一个排样矩形LR, 使得按照LR沿水平或竖直方向进行排样有一定的规律可循. 其中, 沿水平方向有规律可循的称为水平排样矩形(Horizontal Layout Rectangle, HLR), HLR的宽度为常数w, 长度为可变参数x, 零件在HLR上的排样个数满足规律函数Gx (x); 同样, 沿竖直方向有规律可循的称为竖直排样矩形(Vertical Layout Rectangle, VLR), VLR的长度为常数l, 宽度为可变参数y, 零件在VLR上的排样个数满足规律函数Gy (y).
2 基于排样矩形的直角边下料模型对于直角边零件m, 假设总共有4种不同的规范摆放方式, 对于每种摆放方式, 都分别存在一个HLR和VLR, 则直角边零件m共有8个排样矩形. 将直角边零件m沿第j (j=1, 2, 3, 4, 下同) 种规范摆放方式得到的水平排样矩形记为HLRj, 排样矩形的宽度记为wj, m在HLRj的排样个数满足的规律函数记为
针对于直角边下料问题, 把它分解成若干优化子问题1和优化子问题2, 然后从这些子问题的解得到原问题的解.
由定义2可得, 采用HLR进行排样可以使得在宽度为w的矩形中零件m的数量最多, 因此优化子问题1的解转换为:
$\max \{ {G_{{x_j}}}(x)\} ,j = 1,2,3,4$ | (4) |
同理可得, 采用VLR进行排样可以使得在长度为l的矩形中零件m的数量最多, 因此优化子问题2的解转换为:
$\max \{ {G_{{y_j}}}(y)\} ,j = 1,2,3,4$ | (5) |
按照动态规划[13]的思想, 直角边零件在(x, y)处按照方式j(j=1, 2, 3, 4)放置时点(x, y)的最大放置数量N(x, y)的有:
(1)如果排样矩形采用HLR, 当y > wj时, 设点(x, y)的最大放置数量为N(x, y), 则N(x, y)与点(x, y−wj)的最大放置数量N(x, y−wj)有关. 点(x, y)的最大放置数量N(x, y)可表示为:
$N(x,y) = N(x,y - {w_j}) + {G_{{x_j}}}(x),y > {w_j}$ | (6) |
(2)如果排样矩形采用VLR, 当x > lj时, 点(x, y)的最大放置数量为N(x, y),则N(x, y)与点(x−lj, y)的最大放置数量N(x−lj, y)有关. 点(x, y)的最大放置数量N(x, y)可表示为:
$N(x,y) = N(x - {l_j},y) + {G_{{y_j}}}(y),x > {l_j}$ | (7) |
根据上述讨论可知, 板材在点(x, y)若要获得最大的零件放置数量, 需要考虑以下8种情况:
$\!\!\!\!\!\!\!\!\begin{split} & N(x,y) = \max \left\{ {\begin{array}{*{20}{l}} {0,x < \min \{ {w_j},{l_j}\} ,j = 1,2,3,4}\\ {0,y < \min \{ {w_j},{l_j}\} ,j = 1,2,3,4}\\ {N(x,y - {w_j}) + {G_{{x_j}}}(x),y > {w_j},j = 1,2,3,4}\\ {N(x - {l_j},y) + {G_{{y_j}}}(y),x > {l_j},j = 1,2,3,4} \end{array}} \right.\\ &\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;{\rm {s.t.}}\left\{ \begin{array}{l} 0 \le x \le L\\ 0 \le y \le W \end{array} \right. \end{split}\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!\!$ | (8) |
采用文献[14]的动态规划算法对建立的式(8)进行求解, 具体的算法步骤如下:
Step 1. 根据特定的直角边零件m, 确定排样矩形对应的规律函数
Step 2. 按照由左至右、由上至下的顺序递推出在该点(x, y)处的零件最大放置数量, 并将(x, y)处的切割方案记录在T(x, y)中.
Step 3. 判断当前坐标可否放置零件. 将当前坐标记为(x, y), 若min(x, y) < min{ wj, lj}(j=1, 2, 3, 4), 则表示当前坐标不能放置零件, N(x, y)=0, T(x, y)=0, 转至Step 2, 否则转至Step 4.
Step 4. 根据动态规划的思想, 如果已经求得当前点的所有子状态的最优解, 那么当前状态的最优解根据式(8)可用所有子状态的最优解推导出来.
Step 5. 求解得到整块板材的最优解N(L,W), 根据矩阵T(L,W)回溯得到具体的切割方案.
算法的伪代码如算法1.
算法1. 切割算法
输入: 问题的实例参数N, T, wj, lj (j=1, 2, 3, 4),规律函数
输出: 问题实例的最优解方案
0 初始化N, T
1 N= zeros(L, W)
2 T= zeros(L, W)
3 For x in range(0, L): #约束个数
4 For y in range(0, W):
5 If y>=wj:
6 tyj=N(x, y−wj )+
7 Endif
8 If x>=lj:
9 txj=N(x−lj, y)+
10 Endif
11 N(x, y)=max(tyj, txj)
12 T(x, y)=对应N(x, y)取最大值时的切割方案
13 Endfor
14 Endfor
3 算例与结果分析使用的计算机配置环境为Win10, intel CORE i5 8th Gen, 8 GB内存. 选用的软件语言Python 3.7.
采用几组相关的基准数据进行测试, 基准数据[2]由北京铁路信号公司的生产实例中产生.
针对不同的排样零件类型以及不同的板材尺寸, 生成相应地排样方案, 并计算出对应的板材利用率, 与传统排样算法进行比较, 具体结果如表1及图4至图11所示. 如表1所示, 针对不同的直角边零件, 本文提出的算法与传统的排样算法相比其材料利用率都有较大的提高.
对于一些常见的直角边零件, 将本文算法与已有研究文献中的算法进行比较, 具体结果如表2和表3所示. 结果表明, 针对于T字型零件、十字型零件、凸字型零件, 本文提出的算法在材料利用率优于文献[2,15,16]阐述的算法, 包括格点改造算法、顶点覆盖算法、以及滚动优化算法. 同时, 排样矩形的引入使得本文算法提供的排样方案有一定的规律可循, 与目前存在的所有算法相比, 降低了对机器工艺的要求, 更具有实际操作意义.
4 总结与展望
本文针对直角边零件下料优化布局问题, 提出了一种基于排样矩形的动态规划求解算法, 该算法通过将整块板材的优化问题转换为若干最小子优化问题, 采用动态规划的思想进行模型的建立与求解. 实验表明, 与现有的排样算法相比, 本算法能够显著提高材料利用率, 同时减少了复杂排样的产生, 便于在生产中进行操作. 未来将进一步拓展本文算法将其应用于二维不规则零件的下料布局优化问题.
[1] |
贾志欣. 排样问题的研究现状与趋势. 计算机辅助设计与图形学学报, 2004, 16(7): 890-897. DOI:10.3321/j.issn:1003-9775.2004.07.003 |
[2] |
张燕玲, 陆一平, 吴九蕊, 等. 二维直角边不规则零件下料问题研究. 计算机工程与设计, 2014, 35(6): 2197-2201. DOI:10.3969/j.issn.1000-7024.2014.06.061 |
[3] |
Moretti AC, de Salles Neto LL. Nonlinear cutting stock problem model to minimize the number of different patterns and objects. Computational & Applied Mathematics, 2008, 27(1): 61-78. |
[4] |
Afsharian M, Niknejad A, Wäscher G. A heuristic, dynamic programming-based approach for a two-dimensional cutting problem with defects. OR Spectrum, 2014, 36(4): 971-999. DOI:10.1007/s00291-014-0363-x |
[5] |
戚得众, 饶运清, 余天. 板类零件分组下料优化研究. 机械设计与制造, 2015(6): 129-133. |
[6] |
Furini F, Malaguti E, Thomopulos D. Modeling two-dimensional guillotine cutting problems via integer programming. INFORMS Journal on Computing, 2016, 28(4): 736-751. DOI:10.1287/ijoc.2016.0710 |
[7] |
葛志辉, 王阳, 潘海鸿, 等. 工艺约束策略下的二维不规则零件排样算法. 广西大学学报(自然科学版), 2018, 43(2): 580-588. |
[8] |
张旭, 王莉莉, 杨博韬. 带有一刀切约束的二维非规则装箱算法. 计算机科学, 2020, 47(5): 212-216. DOI:10.11896/jsjkx.190400078 |
[9] |
Hartmanis J. Computers and intractability: A guide to the theory of NP-completeness (Michael R. Garey and David S. Johnson). SIAM Review, 1982, 24(1): 90-91. |
[10] |
Belov G, Kartak V M, Rohling H, et al. Conservative scales in packing problems. OR Spectrum, 2013, 35(2): 505-542. DOI:10.1007/s00291-011-0277-9 |
[11] |
卢蓉, 范勇, 陈念年, 等. 一种提取目标图像最小外接矩形的快速算法. 计算机工程, 2010, 36(21): 178-180. DOI:10.3969/j.issn.1000-3428.2010.21.064 |
[12] |
邓国斌, 沈萍, 潘立武. 基于多段排样方式的卷材二维剪切下料算法. 锻压技术, 2019, 44(9): 46-50. |
[13] |
Cui YD, Huang BX. Reducing the number of cuts in generating three-staged cutting patterns. European Journal of Operational Research, 2012, 218(2): 358-365. DOI:10.1016/j.ejor.2011.10.047 |
[14] |
Korte B, Vygen J. The knapsack problem. In: Korte B, Vygen J, eds. Combinatorial Optimization: Theory and Algorithms. Berlin Heidelberg: Springer, 2012. 459–470.
|
[15] |
裘瀚照. 二维不规则下料问题的几何干涉检查及模型简化研究[硕士学位论文]. 北京: 北京交通大学, 2015.40–70.
|
[16] |
周俊鹏. 不规则钣金零件的下料优化系统研究[硕士学位论文]. 北京: 北京交通大学, 2016.29–40.
|