“中国光谷·华为杯”第十九届中国研究生数学建模竞赛『二等奖』,转发自@队友:Pluto_Ct、M学弟
目录
一、赛题
1.1 问题描述
订单组批问题:在考虑订单交货期、设备产能负荷、仓储容量、材料利用率、生产效率、生产工艺约束等因素下,对生产订单进行组批优化。使具有相同材质、交货期相近、工艺相似的订单安排在同一个生产批次, 通过订单组批优化来保证交货期, 为便于统一处理数据和体现问题本质,本次赛题所有订单的交货期均相同,不做区分。提高原材料的利用率,提高设备生产效率等。批次的定义为完成若干订单全部任务且不含任何不完整订单任务的订单集合。
下料优化问题(也称排样优化问题):根据同一生产批次内方形件的尺寸与数量,选择原片的规格和数量,进行下料排样优化,最大化板材原片利用率。依据切割工序的工艺要求,排样方案必须满足“一刀切”(也称齐头切,Guillotine cut)约束(任何一次直线切割都要保证板材可分离,换言之,每次直线切割使得板材分成两块)。下料优化问题属于具有“一刀切”约束的板型材方形件排样优化问题。
考虑切割工艺的方式不同,分齐头切(guillotine cut)和非齐头切(如图1),齐头切又可以细分精确方式和非精确方式(涉及到切割的阶段数,如图2).图2中的三阶段排样方式主要有三种不同的类型:三阶段非精确(3NE)排样方式、三阶段匀质排样方式(3E)、三阶段同质排样方式(3H)。其中 3E 和 3H 排样方式可在三个阶段内切割出准确尺寸的方形件,因此都属于精确排样方式。3NE 排样方式中,部分方形件还需要额外的第四阶段切割才能得到满足规格尺寸要求。
由于涉及到阶段数不同,不同文献对于切割每个阶段的称呼不一样,为了便于理解和统一表述形式,采用英文的方式形容关键阶段模块的描述,具体可参见图3(实际切割过程中,第一刀可能垂直于长边,也可能垂直于短边,图3以垂直于其中一条边为例)。
因为常见的阶段最多为3-4个,因此以3阶段的切割方式为例(如图3),第1阶段的横向切割生成模块称之为stripe(条带),如Stripe1和Strip2;第2阶段纵向切割生成模块称之为stack(栈),如Strip1继续被切割分成Stack1、Stack2和Stack3;第三阶段横向切割生成模块称之为item(产品项),如Stack1继续被切割分成Item1、Item2和Item3。
1.2 问题和数据说明
本赛题由两个子问题组成,第二个子问题的约束都基于第一个子问题并与之相容,但两个子问题所提供的数据不相关。如果概念定义和过程描述与业界有所出入,皆以本赛题为准。本题假定:
- 只考虑齐头切的切割方式(直线切割、切割方向垂直于板材一条边,并保证每次直线切割板材可分离成两块);
- 切割阶段数不超过3,同一个阶段切割方向相同;
- 排样方式为精确排样;
- 假定板材原片仅有一种规格且数量充足;
- 排样方案不用考虑锯缝宽度(即切割的缝隙宽度)影响。
子问题1:排样优化问题。要求建立混合整数规划模型,在满足生产订单需求和相关约束条件下,尽可能减少板材用量。
约束:
- 在相同栈(stack)里的产品项(item)的宽度(或长度)应该相同;
- 最终切割生成的产品项是完整的,非拼接而成。
本子问题要求编程,以数据集A为输入,输出结果要求见第五部分。
子问题2:订单组批问题。要求建立混合整数规划模型,对数据集B中全部的订单进行组批,然后对每个批次进行独立排样,在满足订单需求和相关约束条件下,使得板材原片的用量尽可能少。
在满足子问题1约束的基础上进一步要求:
- 每份订单当且仅当出现在一个批次中;
- 每个批次中的相同材质的产品项(item)才能使用同一块板材原片进行排样;
- 为保证加工环节快速流转,每个批次产品项(item)总数不能超过限定值;
- 因工厂产能限制,每个批次产品项(item)的面积总和不能超过限定值;
本子题要求编程,以数据集B为输入,输出结果要求见第五部分。
输入数据说明
每套输入数据由两部分组成,一部分是输入参数(参见后文),另一部分是产品项(item)数据(需要另外下载),这里仅给出格式描述。
1. 输入参数:
- 单个批次产品项(item)总数上限 max_item_num = 1000
- 单个批次产品项(item)的面积总和上限max_item_area = 250(m2)
- 原片长度plate_length = 2440(mm)
- 原片宽度plate_width = 1220 (mm)
2. 产品项数据格式
序号
item_id
材质item_material
数量
item_num
长度(mm)
item_length
宽度(mm)
item_width
订单号
item_order
0
JL-18-E0
1
553
60
CR02707168
3. 数据集:
- 数据集A:dataA1~A4
- 数据集B:dataB1~B5
二、摘要
排样优化和订单组批是生产制造企业的重要工序,在投产前合理组批排样可以大幅节约企业的生产成本,增加企业效益。排样优化(Layout Optimization)是工件在板材中布局的组合优化问题,以其高计算复杂度特征吸引了运筹领域国内外无数学者的青睐;订单组批(Order Batching)是排产过程中的关键问题,有效的分批策略能够显著提高订单的拣选效率、设备的利用率及原材料的利用率,满足企业定制化生产和降本增效的要求。本文针对矩形件产品三阶段一刀切精确排样约束下的排样优化和订单组批问题展开研究,着重考虑不同切割方式、切割方向和工件可旋转性进行求解。
针对问题一,本文提出了一种三阶段启发式构造排样(Three-Stage Constructive Nesting)算法。问题一的目标是在“一刀切”和“三阶段精确排样”的排样约束下,对板材进行合理排样优化,以提高板材利用率,减少板材浪费。在问题背景下,本文提出了两个推论并进行了有效验证:Item旋转可为排样问题增加更多的可能性从而取得更高利用率;三阶段不同切割方式可能对板材利用率产生影响。基于此推论,本文综合考虑了多个排样特征,在方形件、版型材、“一刀切”等基础约束条件下考虑“三阶段精确排样”、Item可旋转、三阶段切割方向性因素,对现有文献中的“一刀切”排样优化模型做了补充改进,使得模型更加符合现实问题,为提升板材利用率提供新的可能。本文建立的求解算法具有贪婪启发式特征,运行速度快、效果出色、表现稳定。在dataA1~A4数据集的排样问题上CPU时间均不超过1s;使用板材数量分别为87、86、87和85块,板材面积利用率达到96.02%、96.37%、96.24%和96.30%;本文设计的算法能够提供多个最优排版方案,可视化效果良好,为管理者带来更多的选择以供决策。
针对问题二,本文在问题一的基础上考虑批约束,将订单组批和排样优化视作一个问题,建立了完整的三阶段组批剪切排样模型。基于问题特征,本文设计了考虑多级优先级的订单组批优化算法,层层递进。第一优先级为“低需求材质优先”,将低需求量材质所属订单尽量集中在同一批次内以减少浪费;第二优先级为“多材质订单优先”,在综合考虑极限最小批次数和材质与现有批次适应度阈值的情况下建立初始批,进一步降低问题规模;第三优先级为“适应度优先”,将剩余未入批订单(组)以材质数为序计算其与现有批次的适应度,采用最佳适配(Best Fit)策略,将其归入符合约束的最适合批次,若现有批次无法满足则建立新的批次;最后,对初始批次数进行扰动,反复迭代并计算目标函数,当批次数等于初始批次数或最优解n次迭代未改进时到达终止条件,输出最优结果和排样图。本文提出的算法运行速度快,表现良好,在dataB1~B5数据集的组批优化问题上CPU时间均不超过150s,批次数量分别为36、23、24、25和37批,板材面积利用率达到75.65%、73.13%、74.15%、74.07%和72.60%。
本文的创新点主要包括模型创新和算法创新。模型方面,问题一对现有文献中的模型进行了改进,考虑了方形件、版型材、“一刀切”、 “三阶段精确排样”、Item可旋转、三阶段切割方向性等约束条件,建立混合整数规划模型,贴近现实问题;问题二考虑了订单组批与排样布局的全局优化,基于问题一模型进行改进,建立三阶段分批剪切排样模型。算法方面,本文算法均基于Python语言实现,用户友好、可读性强、易于实现;在大规模问题上表现十分优异,运行速度快,复杂度低,很好的适应了问题特征。
本文设计的模型算法贴合现实,可以广泛应用到制造业企业生产流程中,如棒材切割、报刊排版、家具下料等,极具现实意义;同时,本文模型算法也可用于码头装卸、单机/多机批调度等其他组合优化问题。此外,本文也提出了一些后续的改进方向,例如考虑多级优先级的订单组批优化算法中优先级的级别设置可以进行调整,为算法性能的提升提供更多可能性等。
关键词:组批排样优化;一刀切;三阶段精确排样;Item可旋转;多优先级
三、问题一的模型建立与求解
3.1 问题分析
排样优化(Layout Optimization)问题,从计算复杂度来看是属于具有最高计算复杂性的NP完全问题[3],在制造业企业生产排样流程中,该问题广泛出现。棒材的切割、冲裁件排样、玻璃切割、报刊排版、家具下料、服装裁剪、皮革裁剪等等都是典型的排样优化问题。广义的排样问题除了指工件在板料中的优化布局外,还应考虑各布局的下料数量,即各布局的组合优化,因此也称下料问题。
问题一的任务是在掌握排样特征的前提下,满足生产订单需求和相关约束,对板材合理排样优化。本题中板材的数量不限,方形件数量已知,目标是使得使用的板材数量尽可能少。按照不同的维度来划分,排样问题可以分成“一维排样优化”、“二维排样优化”和“三维排样优化”。显然,问题一属于二维排样优化问题。二维排样优化问题一般划分为两类,矩形件排样和不规则件排样,本题面向的是形状规则的方形件和长宽固定统一的板型原材料,即问题一是一个板型材方形件排样优化问题。数据集A中每一个数据集的Item只有一种材料类型,因此问题一可以不考虑材料类型约束。除此之外,考虑到切割工艺和排样方式的约束,问题一的排样优化具有“一刀切”和“三阶段精确排样”的特征。考虑到三阶段的多样性和Item的可旋转性,问题一的排样优化具有三阶段切割多样性和Item可旋转特征。
排样问题从诞生至今已有80多年[4],研究热度经久不衰。到目前为止,针对矩形件二维排样问题,国内外很多学者已经提出了一些切实可行的精确或启发式算法。Baker等人[5]最早提出了bottom-left算法,后续一些学者[6-8]基于此改进提出和应用了bottom-left-filling、最低水平线、下台阶算法等矩形件排样优化方法。曹大勇等学者[9]将该问题视为二维装箱问题,设计了一套两阶段启发式算法,解决了二维一刀切非旋转约束下的排样问题,取得了较好的效果。曾晓亮等人[10]将遗传算法应用到二维矩形件的排样问题中,引入自适应的交叉和变异概率调整方法,提高了板材的利用率,证明该方法的有效性。Puchinger等人[11]在二维矩形排样问题中同时考虑了三阶段、一刀切的约束,采用分支定价算法,使用CPLEX求得接近最优的方案。
然而,同时考虑本题中多个排样优化特征(二维、矩形件、一刀切、精确排样、Item可旋转、三阶段切割多样性等)的文献较少。矩形件排样优化中,较少的文献考虑了Item的可旋转性;三阶段排样优化中,几乎没有文献考虑了三阶段的不同切割方式。不难看出,这两个特征影响了原材料的利用率,因此我们得到了两个推论并试图证明它。详见推论1、推论2。
推论1:Item的旋转会对排样优化的原料面积利用率产生影响,尤其是在大规模、多批次、多品类的个性化生产场景中,如下图所示。
考虑Item旋转将为排样问题带来更多的可能性,左图为长与x轴平行的单一排样方式,右图为Item可旋转的排样方式。右图3个Item可沿等长边组成Stack,左图Item 3与Item 1和Item 2的x轴方向长度不等,只能拼接为Stack,可能造成更多的面积浪费。
推论2:三阶段不同切割方式会对排样优化的原料面积利用率产生影响,尤其是在大规模、多批次、多品类的个性化生产场景中,如下图所示。
三阶段不同切割方式可能对板材的利用率产生影响。左图为“横-竖-横”切割方式,右图为“竖-横-竖”切割方式;左图共编排了15个Item,右图在编排Item 3~14后,其余部分无法排入Item 1~2组成的栈。可见不同切割方式会对板材利用率产生影响,在排样时应考虑多种可能性。
综上所述,在现有方形件二维排样优化问题研究成果的基础上,我们有必要额外考虑Item可旋转、三阶段切割方向因素,建立新的模型,并结合数据特征针对性设计合理的算法求解。
3.2 模型建立
基于以上问题分析,在参考已有模型[11-12]的基础上,我们额外考虑了Item可旋转和两种三阶段切割方式,建立了一个混合整数规划模型——三阶段剪切排样优化模型。
1)目标函数
以最大化板材原片面积利用率为目标,即
2)决策变量
3)相关约束
要满足所有的Item项都被排样,则有
由于Item可以旋转,设 为Item排样时沿x轴的长度, 为Item沿y轴的长度,易得
需满足Item沿x轴的长度小于板材的长,沿y轴的长度小于板材的长宽,即
要满足相同Stack里的产品项Item的宽度或长度应该相同,换言之,需保证Stack在切割方向的边长相同。三阶段“一刀切”的切割方式有两种,横纵横与纵横纵,不同切割方式会影响排版样式进而影响面积利用率,因此引入决策变量 综合考虑两种切割方式,设Stack在切割方向边长为 ,则
此外,要保证每个Stack拼接方向的边长不大于板材在该方向的边长,设 dj 为Stack j 在拼接方向的边长,易得
需满足
由于Stack拼接方向的拼接方向是Stripe的切割方向,上式既保证了Stack拼接方向的边长不大于板材在拼接方向的边长,又保证了Stripe的切割方向边长不大于板材在该方向的边长。因此,只需保证每一个Stripe拼接方向的边长不大于板材在该方向的边长,设 为Stripe k 在拼接方向的边长, 为Stripe k 在切割方向的边长,易得
需满足
类似地,对于板材,只需满足板材中拼接方向对应的Stripe边长之和不大于面板在该方向的边长,设 为板材i 中拼接方向Stripe边长之和,易得
需满足
综上,针对问题一我们建立的混合整数规划模型如下:
s.t.
本文提出的模型在现有三阶段排样优化模型的基础上,综合考虑了Item旋转、剪切下料及两种三阶段切割方式,对现有的三阶段排样优化模型做了补充改进,使得模型更加符合现实问题。
3.3 算法求解
排样优化/下料/装箱问题以其难度和计算复杂度著名,本文的模型在普通排样优化模型的基础上综合考虑了多种特征,使得模型贴近实际的同时进一步提高了计算的复杂度。
本文提出的模型具有非线性特征,常见做法是可以通过引入额外的变量使用线性化技巧[13-15]将0-1变量乘积带来的非线性拉回线性空间。但观察数据A的问题规模,如图一,数据A四个子问题均属于大规模问题(200以上),求解器只适合求解小规模线性规划问题,而变量的增加又会直接影响求解速度,因此该模型不适合用求解器求解。由于问题规模很大,现有精确算法和启发式算法计算耗时长,表现不佳,且没有完全适合本模型特征的启发式算法。因此,本文针对问题特征在前人研究的基础上设计了一个三阶段启发式构造排样(Three-Stage Constructive Nesting)算法。
数据A问题规模
数据表 | 1 | 2 | 3 | 4 |
Item数量 | 752 | 731 | 823 | 799 |
3.3.1 算法原理
为满足三阶段一刀切精确排样的限制,将该问题分阶段优化,逐步构造出各阶段的解,一步一步合并优化,降低问题难度,每一阶段的问题都是一个一维装箱问题。本文对三阶段的定义如下:第一阶段将原片切割分为条带(Stripes),第二阶段将条带切割分为栈(Stacks),第三阶段将栈切割分为工件(Items)。
不难看出,三个阶段的限制条件不同,本文提出的算法采取自底向上的拼接顺序进行规划。第三阶段将Stack切割分为Item时,为符合“一刀切”工艺,每个Stack内的所有Item必须满足有一条等长边;第二阶段将Stripe切割分为Stack时,不同Stack的公共边(即第二阶段切割方向)应与第三阶段切割方向垂直。第一阶段的切割方向与第三阶段切割方向平行,即三个阶段的切割方向具有依赖性。
算法具体流程如下:
Step 1:将Item组合成Stack——考虑Item可旋转的长边优先组合策略
Item可旋转后进行拼接,因此Item的长和宽统一视为边不做区分;按照长边优先原则,筛选工件的等长边并降序排列;相同长度的工件边即为为Stack的切割边,将拥有等长边的工件沿等长边进行拼接,拼接长度不超过设置的Stack高度阈值,初始阈值设为原片沿Stack拼接方向的边长,即2440或1220。如超过该阈值则开启一个新Stack。无法与其他工件拼接的工件单独作为一个栈,长度超过板材短边的工件只能将长边作为Stack的拼接边,反之选择短边作为Stack的拼接边。最终所有Item都会被分配到各自的Stack。
阶段一的算法流程图如下所示:
其中,栈排样的示意图如下图所示。
Step 2:将Stack组合成Stripe——拼接长度相近优先的组合策略
鉴于一刀切约束,在Stack层面,切割边长度相同的Stack才有可能拼接成一个Stripe,保证了条带的切割方向与栈的切割方向垂直。算法首先将Stack按拼接长度降序排列,将拼接长度相近的Stack拼接到一起成为Stripe,此过程形成的Stripe可能有部分区域无法利用。除此之外,由于原片的切割方向与Stripe切割方向垂直,需判断Stripe的切割边是否超过板材的短边,若超过短边,Stripe的拼接长度应小于原片的短边,保证Stripe能够排版;否则,Stripe的拼接长度不超过原片的长边,减少后续Stripe组合成板材时的浪费。
算法流程图如下所示:
Stripe排样的示意图如下图所示:
Step 3:将Stripe组合为板材原片——FFD(First Fit Decreasing)算法
在贪婪策略的指导下,阶段2得到的Stripe长度均接近并不大于原片的短边/长边。至此问题变成一个一维装箱问题,将Stripe集按照切割方向(纵/横)分为两组,分别进行规划。本文使用FFD算法,将Stripe按照拼接长度降序排列,每次依序选择一个Stripe,选择第一个满足装箱条件(拼接长度不大于原片在该方向的长度)的箱子/原片,如果没有就开启一个新箱子,直到所有的Stripe全部装箱完毕。
算法流程图如下:
由Stripe组成的原片需满足三阶段一刀切精确排样约束,示意图如下:
在此算法过程中,Step1中Stack的高度阈值是一个影响很大的参数。在初始阈值情况下针对数据集dataA1得到的排样方案如下所示,共消耗112块木板。
观察图形不难发现,排样效果不佳,很多板材利用率不到50%,浪费巨大。经计算,dataA1的所有Item面积之和为248.68平方米,每块原料的面积是2.98平方米,需要至少 83.54块板材,向上取整即为84块,面积利用率为99.45%。即问题一的上界为99.45%,112块模板的面积利用率距离上界较远,需要调整Stack高度阈值继续寻优。
3.3.2 求解结果
针对Stack的高度阈值,本文以步长为5对高度阈值属于[200,800]的区间进行搜索,得到不同栈高限制下A1~A4数据所板材原片数,并绘制图形如下:
结合图形和算法结果,当Stack的高度阈值在[275,320]区间内时,四个子问题均能达到最优。
不难理解,囿于Item的长宽规格限制,高度阈值在某一区间内变化时不会对板材使用数目产生影响。但增加了解的多样性,能够更多种排样优化的选择,对于大规模、小批量、多种类定制化生产具有极高的现实意义。同时算法以它的高速运行给高度阈值的搜索提供了时间保障,成功实现短时间内找到多个近似最优解。
最终,本文将Stack的高度阈值固定在305,将A1~A4数据输入,求解结果如下所示:
子问题1 | ||||
数据集 | dataA1 | dataA2 | dataA3 | dataA4 |
板材数量 | 87 | 86 | 87 | 85 |
板材利用率 | 96.02% | 96.37% | 96.24% | 96.30% |
四个问题中板材的面积利用率均在96%以上,算法效果出色。
将A1~A4数据排版方案分别输出到对应的“cut_program.csv”,详见附件。从所有结果中挑选部分板材排版方案进行展示,用三种颜色表示排样图中的未利用空间,绿色表示Stripe内未利用的区域、蓝色表示Stack内未利用的区域、灰色表示Stripe拼接后产生的浪费区域,如下图所示。
A1_0号板材中的238、316、358号Item均发生了旋转,更好的适应了板材尺寸,有效证明考虑旋转的必要性,增大了提高板材利用率的可能性。
上面两种 “三阶段”切割方式不同,A1_0号板材第一阶段沿x轴方向切割,A3_49号板材第二阶段沿y轴方向切割。不同Item类型适用于不同切割类型,有效证明同时考虑两种切割方式的必要性,为提高板材利用率提供了新的可能。
A1~A4数据全部的排样方案效果概览图如下所示:
结合数据和图表结果分析,总体而言,排样优化效果优异,浪费空间较少。
3.4 算法分析
本文提出的算法基于迭代优化的思想,性能优异。算法求解速度快,复杂度低,表现稳定,在4个大规模问题上均有出色的表现。使用Python语言进行编程实现,相较于其他语言更易于实现,用户友好,可读性强。算法性能指标如下:
子问题1 | ||||
数据集 | dataA1 | dataA2 | dataA3 | dataA4 |
问题规模 | 752 | 731 | 823 | 799 |
利用率极限上界 | 99.45% | 99.85% | 99.68% | 99.82% |
算法最优解结果 | 96.02% | 96.37% | 96.24% | 96.30% |
与上界距离 | 3.43% | 3.58% | 3.44% | 3.52% |
CPU时间 | <1s | <1s | <1s | <1s |
最优解与问题上界之间Gap值均小于3.6%,效果出色、表现稳定。由于设计了合理的启发式规则,算法运行速度很快,在4个大规模问题上CPU时间均不超过1s。且算法能够在1s内提供多种最优解方案,弥补了很多启发式算法只能输出一个近似最优解的不足,为决策者提供多个排样方案,为实际生产问题增添了灵活性。
四、问题二的模型建立与求解
4.1 问题分析
订单组批(Order Batching)问题是排产过程中的关键问题[16]。订单组批是在考虑订单交货期、设备产能负荷、仓储容量、材料利用率、生产效率、生产工艺约束等因素下,将多个相同材质、交货期相近、工艺相似的订单合并成一个批次。批次中不能存在任何不完整的订单集合。在排产过程中,有效的分批策略能够显著提高订单的拣选效率、设备的利用率及原材料的利用率,满足企业定制化生产和降本增效的要求。
问题二的目的是在问题一现有约束条件的基础上,考虑订单分批,合理对订单规划组批,并对所有分批进行排样得到最终的排样结果,使得总板材使用数量尽可能少。根据现实情况的不同,组批问题的约束条件也会不同。基于题目给出的条件,本题所有order的交货期均相同,因此不需要考虑订单的交货时间,问题得到了简化。则本题是一个单目标优化问题,需要最大化所有批次的板材面积利用率。与问题一相比,需要额外考虑Item的材质类型约束。
在工业生产中,订单组批和排样优化通常作为两个独立的阶段分开规划,且国内制造业的智能化水平不高,主要依赖手工化和半自动化的方式排产,效率低下且排产结果不理想;现有研究中[17-19],通常单独对订单组批或排样优化问题展开单独研究,通常以最小化订单总完成时间和最大化面积利用率为目标。这两个问题都是组合优化领域的热门研究方向,且十分具有现实意义。现有算法在小中规模问题上能够很好的解决订单组批或排样优化问题,少量研究同时考虑订单组批和排样,但更多的是将该问题定义成一个两阶段问题,设计一些启发式策略针对两个阶段分别求解,忽略了订单组批与排样优化之间的强耦合关联,这样得到的是两个阶段的局部最优解,距离全局最优较远。仅有几篇文献[1,20]将排样优化当作一个问题求解,但现有文献中研究的主要是小规模问题,算法在小规模问题上表现良好,但在大规模问题上仍有改进空间。
因此,我们有必要建立订单组批排样优化模型,并针对数据规模和模型特征设计算法对组批排样问题进行协同优化。
4.2 模型建立
在问题一约束的基础上,考虑由于订单分批带来的批约束,改进建立三阶段分批剪切排样模型。
1)目标函数
分批排样之后,目标函数为所有批次的总板材面积利用率最大,即
2)决策变量
增加三个决策变量,如下所示:
其中
3)批约束
根据问题要求,要保证每一份订单只能够出现在一个批次里面,则
要保证一批中相同材质产品项在一块板材原片排样,即i)保证一个板材只属于一个批,ii)保证所有分配到该板材的Item材质类型与该板材相同,如式(5.7)-(5.8)
每个批次Item总数不能超过限定值1000,则
每个批次Item的面积总和不能超过限定值250 ,则
纳入问题一排样优化的相关约束,得到一个完整的三阶段分批剪切排样模型,如下所示:
s.t.
4.3 算法求解
订单组批和排样优化两个子问题都是运筹学领域经典的组合优化问题,单独来看,订单组批、排样优化问题均是NP-hard问题,十分复杂,求解困难。融合两个子问题的组批排样问题更是难上加难,其求解空间和计算复杂度进一步加大。观察题目所给数据集B,如下表所示,五个data的数据量规模都在380以上,属于大规模问题无疑。基于目前技术水平,大规模的组批排样模型无法利用已有求解器在合理时间内得到解;而当问题规模很大时,利用现有启发式算法如SA、蚁群、GA、Memetic等求解时会因为搜索空间庞大而耗时太长,无法在短时间内提供一个令人满意的解,失去启发式的效果。因此,如何设计启发式搜索策略,缩小搜索空间,让算法在随机性和探索性达到更好的平衡,是算法优化的重要方向。遵循随机性和探索性的平衡原则,我们设计了一个考虑多级优先级的订单组批优化算法。
数据B订单规模
数据表 | 1 | 2 | 3 | 4 | 5 |
订单数量 | 546 | 403 | 410 | 381 | 604 |
4.3.1 算法原理
与问题一的数据集相比,数据集中包含了不同材质的工件需求,能在同一板材原片上排样的Item必定是同一批中相同材质产品项。考虑到订单规模很大,盲目随机搜索耗时长且效果不佳,因此,本文首先分析问题特征对订单设置优先级,并设计了考虑多级优先级的订单组批优化算法。
具体算法流程如下:
Step 1:低需求材质优先组批—— Low Demand First Batching
由于需求量低的Item对应的材质极度容易造成板材浪费,应尽量集中在同一批次内。因此,本文以低需求材质优先为第一优先级进行组批。
筛选数据集中所有订单中总面积不高于10张板材面积的材质类型,提取各材质的关联订单(所有包含该材质的订单集合),若组批结果满足批的面积约束和Item数量约束,将其组合成订单组。该策略使得问题规模得到降低。
Step 2:基于批次下界的多材质订单优先组批——Multi Material First Batching
计算批次数下界,批次数下界Τ=Max (Item 总数/单批Item 数量上限,Item 总面积/单批Item面积上限)。以下界T 为初始批数量,以多材质订单优先为第二优先级进行组批。
将Step2得到的结果按订单(组)材质类型数量降序排列,每次拿出一个订单(组),判断其与已有批次的适应度,适应度的计算方法如式(5.13)。若已有批次数未超过批次数下界,将该订单(组)放入适应度大于0.8且适应度最佳的批次内,否则建立新的批次,直到批次数达到批次下界时停止。该策略使得问题规模进一步降低。
Step 3:剩余订单适应度优先组批——Suitability Best Batching
由于实际批数量不低于批次数下界,使用Step2策略之后,仍有部分订单未组批。该阶段以适应度优先为第三优先级进行组批。
将剩余未入批订单(组)按照材质类型数量降序排列,每次拿出一个订单(组);计算该订单(组)与现有批次的适应度;使用最佳适配(BF)策略,在满足批容量与批面积的约束条件下将该订单(组)放入适应度最佳的批次若现有批次;若现有批次均不满足条件,建立新的批次,至此所有的订单组批完毕。使用问题一的算法对所有批进行排样优化,计算板材利用率。
Step 4:参数调优
计算Step3得到的批次数量与批次数下界之间的差异,若存在差异,以1为步长提高Step2中的初始批数量,以期将材质类型较多但与其他订单(组)适应度不高的订单(组)均匀分布在各批次中,达到降低批次数、增加板材利用率的目的。每次迭代计算目标函数值,若目标函数值有改进,接受新解,n(n=5)次迭代无改进时停止迭代。不断重复上述过程,直到Step3得到的批次数量与初始批数量一致时停止迭代。输出最优解和排样图。
算法的伪代码如下所示。
-
问题
2算法:考虑多级优先级的订单组批优化算法
-
输入:Order集合M,批面积限制S,批容量限制N,板材面积S^
', 批次数下界Τ
-
材质类型集合A={a_1,a,a,…,a_n},π=
0,μ=
0
-
输出: 组批结果Batch={b_1,b_2,b_3,…,b_j },所有批次面积利用率f;
-
Step1:Low Demand First Batching
-
for
each a ∈A
do
-
if S(a)<
10S^
' then
-
exact relative Order O_a
-
end
-
if S(O_a )≤S,N(O_a )≤N
then
-
Batch(a)=O_a
-
end
-
end
-
Step2:Multi Material First Batching
-
Order ← {Batch,Order} MaterialType Decreasing
-
Batch={},k=
0;
-
while k≤Tdo
-
for
each i ∈Order
do
-
if S(i,Batch(j))≤S,N(i,Batch(j))≤N
then
-
Batch(j)←Max(Suitability(i,Batch(j)))
-
if Max(Suitability(i,Batch(j)))>
0.8
then
-
Batch(j)←Batch(j)+i
-
else
-
k←k+
1
-
Batch(k)←Batch(k)+i
-
end
-
end
-
end
-
end
-
Step3&
4:Suitability Best Batching
-
ROrder ← Order/ Batch
-
ROrder ← ROrder MaterialType Decreasing
-
t=
1,λ=
5
-
for
each i ∈ROrder
do
-
if S(i,Batch(j))≤S,N(i,Batch(j))≤N
then
-
Batch(j)←Max(Suitability(i,Batch(j)))
-
Batch(j)←Batch(j)+i
-
else
-
k←k+
1
-
Batch(k)←Batch(k)+i
-
end
-
end
-
使用问题
1算法计算得到f_π;
-
While k≠T
do
-
π←π+
1
-
T←T+
1
-
返回step2;
-
if f_π>f_(π
-1)
do
-
接受新解,Bestsol=Sol(π);
-
else
-
μ←μ+
1
-
if μ≤λ Continue;
-
else
-
break 输出最优解;
-
end
-
end
4.3.2 求解结果
将数据集B中的B1~B5输入,分别求解,得到最优批次数及板材利用率如下所示:
子问题2 | |||||
数据集 | dataB1 | dataB2 | dataB3 | dataB4 | dataB5 |
板材利用率 | 75.65% | 73.13% | 74.15% | 74.07% | 72.60% |
批次数 | 36 | 23 | 24 | 25 | 37 |
材质类型的多样性会对排样优化结果产生影响,使得板材利用率降低。本文设计的算法在五个子问题上得到的板材利用率均大于72%,表现效果良好。
B1~B5数据的组批结果均导入对应的“sum_order.csv”,详见附件。由于组批排样方案图过多,无法一一展示,详见论文附录。这里从所有结果中挑选部分批次的板材排版方案进行展示,用三种颜色表示排样图中的未利用空间,蓝色表示Stack内未利用的区域、绿色表示Stripe内未利用的区域、灰色表示Stripe拼接后产生的浪费区域,如下图所示。
4.4 算法分析
本文针对问题二设计的算法紧密结合问题特征,基于启发式思想定义多级优先级,保证求解速度的同时兼顾组批优化的效果。使用Python语言进行编程实现,相较于其他语言更易于实现,用户友好,可读性强。问题二算法性能指标如下:
子问题2 | |||||
数据集 | dataB1 | dataB2 | dataB3 | dataB4 | dataB5 |
问题规模 | 546 | 403 | 410 | 381 | 604 |
整批利用率(上界) | 89.22% | 86.95% | 86.02% | 87.73% | 87.70% |
算法最优解 | 75.65% | 73.13% | 74.15% | 74.07% | 72.60% |
与上界距离 | 13.57% | 13.82% | 11.87% | 13.66% | 15.1% |
CPU时间 | 150s | 65s | 45s | 57s | 140s |
囿于材质类型的多样性影响很大,整批利用率(上界)和组批优化之间的Gap值必然会有大幅度的提高。问题二组批优化算法与上界之间的Gap值均在13%左右,表现稳定。
算法运行速度快,在5个大规模问题上CPU时间均不超过150s。
五、模型评价与推广
5.1 模型的优点
模型一:
1. 模型综合考虑了方形件、版型材、“一刀切”、 “三阶段精确排样”约束,并额外考虑了Item可旋转、三阶段切割方向性因素,更加符合现实问题;
2. 算法基于Python实现,用户友好,可读性强,易于实现;
3. 算法复杂度低,运行速度快,且能提供多种最优解;
4. 算法在大规模问题上表现优异稳定;
模型二:
1. 模型考虑组批排样全局优化,建立了完整的三阶段分批剪切排样模型
2. 算法基于Python实现,用户友好,可读性强,易于实现;
3. 算法复杂度低,运行速度快;
4. 算法在大规模问题上表现优异稳定;
5.2 模型的缺点
问题一:
1. 模型计算复杂度高,难以精确求解;
2. 算法参数仍有调优提升的空间;
问题二:
1. 模型计算复杂度高,难以精确求解;
2. 算法参数仍有调优提升的空间;
5.3 模型推广
本文设计的模型算法贴合现实,可以广泛应用到制造业企业生产流程中,如:棒材切割、冲裁件排样、玻璃切割、报刊排版、家具下料、服装裁剪、皮革裁剪等等,极具现实意义。
六、结论与展望
6.1 结论
问题一综合考虑了多个排样特征,在方形件、版型材、“一刀切”的基础约束条件下纳入“三阶段精确排样”、Item可旋转、三阶段切割方向性因素,对现有“一刀切”排样优化模型做了补充改进,使得模型更加符合现实问题,为提升板材利用率提供新的可能。针对模型一设计的三阶段启发式构造排样(Three-Stage Constructive Nesting)算法,运行速度很快,效果出色、表现稳定;算法最优解与问题上界之间Gap值均小于3.6%,在4个大规模问题上CPU时间均不超过1s,且能提供多个最优排版方案。
问题二在问题一的基础上考虑批约束,将订单组批和排样优化视作一个问题,建立了完整的三阶段组批剪切排样模型。针对模型二设计的考虑多级优先级的订单组批优化算法,紧密结合问题特征,运行速度快,表现良好,在5个大规模子问题上算法与上界之间的Gap值均在13%左右;CPU时间均不超过150s。
6.2 不足与展望
本文的模型综合考虑了多种特征,使得模型更加符合现实问题。但特征的多样性不可避免地引入更多决策变量,使得原本就属于NP_hard的问题复杂度大大增加,大规模问题几乎不可能使用精确求解方法求解。
后续研究中考虑多级优先级的订单组批优化算法中优先级的级别设置可以进行调整,为算法性能的提升提供更多可能性。
七、参考文献
[1] 张磊. PCB定制生产的组批与拼版联合优化方法研究[D].广东工业大学,2019.
[2] 蒋瑞斌,刘熠.二维矩形零件排样算法的研究[J].机电工程技术,2007(01):71-73+103.
[3] 贾志欣.排样问题的研究现状与趋势[J].计算机辅助设计与图形学学报,2004(07):890-897.
[4] Kantorovich L V. Mathematical methods of organizing and planning production[J]. Management science, 1960, 6(4): 366-422.
[5] Baker N A, Eleazer P D, Averbach R E, et al. Scanning electron microscopic study of the efficacy of various irrigating solutions[J]. Journal of endodontics, 1975, 1(4): 127-135.
[6] Hamdi-Dhaoui K, Labadie N, Yalaoui A. Algorithms for the two dimensional bin packing problem with partial conflicts[J]. RAIRO-Operations Research, 2012, 46(1): 41-62.
[7] 黄河, 许超. 基于优先度的改进最低水平线排样算法[J]. 锻压装备与制造技术, 2015, 50(3): 106-109.
[8] 邓文浩. 满足“一刀切”约束的矩形件排样问题研究[D].大连海事大学,2019.DOI:10.26989/d.cnki.gdlhu.2019.000811.
[9] 曹大勇,杨梅,科托夫·弗拉基米尔·米哈伊拉维奇,刘润涛.二维一刀切装箱问题的两阶段启发式算法[J].计算机集成制造系统,2012,18(09):1954-1963.
[10] 曾晓亮,吴琼,袁旭华.二维矩形件排样问题的自适应多岛遗传算法优化[J].锻压技术,2020,45(12):53-58.DOI:10.13330/j.issn.1000-3940.2020.12.009.
[11] Puchinger J, Raidl G R. Models and algorithms for three-stage two-dimensional bin packing[J]. European Journal of Operational Research, 2007, 183(3): 1304-1327.
[12] Mostajabdaveh M, Salman F S, Tahmasbi N. Two dimensional guillotine cutting stock and scheduling problem in printing industry[J]. Computers & Operations Research, 2022: 106014.
[13] 乐鹏,叶晓斌.非线性整数规划多个解的一种寻找方法[J].重庆理工大学学报(自然科学),2011,25(09):100-103.
[14] 邓晓敏,张军朋,吴先球.利用origin确定实验中非线性函数的曲线关系[J].大学物理实验,2011,24(01):73-76.
[15] 马永和,罗向东,杨大战,潘志魁.非线性函数的分段线性近似方法[J].工业仪表与自动化装置,1993(03):20-26+7.
[16] 陈炫锐,陈庆新,毛宁.板式家具企业的订单组批问题研究[J].工业工程,2019,22(02):96-102.
[17] 张娜,赵罘,龚堰珏,刘玲玲.基于动态最低水平线法和蚁群算法的排样优化[J].计算机应用与软件,2021,38(05):268-273.
[18] 陈仕军,许继影,戎爱英,周伟刚.空白矩形填充和邻域搜索结合的矩形件排样优化算法[J].锻压技术,2021,46(02):52-58.
[19] 李庆予,朱宏.钢铁企业供应链客户订单的组批优化技术研究[J].工业工程与管理,2003(02):51-53+70.
[20] 张浩. 面向板式产品定制生产的组批与排样协同优化方法[D].广东工业大学,2019.
八、比赛总结与启示
问题一取得了不错的效果,问题二由于时间仓促还有很多的改进空间。算法方面主要基于理性主义,随机性不够,可能忽略一些更好的优化方向。继续努力!