五一数学建模竞赛
题 目 基于分区域排布方案的木板切割问题的求解
关键词:非线性规划、启发式算法、矩形件优化排样、二维紧密排布优化、利
用率、余料、matlab
摘 要:
进入 21 世纪以来,人们的生活条件得到了极大的提高,人类对物质生活的
需求空前地得到了充分的满足。在物质得到极大丰富的大环境、大背景下,人
们不再单一地、过分地追求量的积累,而是更加注重质的提升。人类意识到自
身发展对自然界的侵略和破坏,意识到粗放式的发展已不符合时代要求。节能
减排意识逐渐深入人心。国务院关于印发“十三五”节能减排综合工作方案的
通知强调:充分认识做好“十三五”节能减排工作的重要性和紧迫性。当前,
我国经济发展进入新常态,产业结构优化明显加快,能源消费增速放缓,资源
性、高耗能、高排放产业发展逐渐衰减。但必须清醒认识到,随着工业化、城
镇化进程加快和消费结构持续升级,我国能源需求刚性增长,资源环境问题仍
是制约我国经济社会发展的瓶颈之一,节能减排依然形势严峻、任务艰巨。要
认真落实党中央、国务院决策部署,紧紧围绕“五位一体”总体布局和“四个
全面”战略布局,牢固树立创新、协调、绿色、开放、共享的发展理念,落实
节约资源和保护环境基本国策,以提高资源利用率和改善生态环境质量为目
标,以推进供给侧结构性改革和实施创新驱动发展战略为动力。
为响应国家发展的要求,各企业、各单位要积极贯彻落实改善生产优化改
革,杜绝资源浪费。
基于分区域排布方案的木板切割问题的求解
一、 问题重述
依题所述,徐州某家具厂新进一批长 3000mm,宽 1500mm 的木板用于加工成
家具,在家具加工的过程中,需要使用切割工具生产一系列不同尺寸的产品。新
进的木板尺寸如表 1 所示、产品的具体尺寸要求及各项生产指标如表 2 所示。
表 1 木板的尺寸
木板
S1
长度(mm)
宽度(mm)
3000
1500
表 2 产品尺寸及生产任务
产品名称
长度(mm)
宽度(mm) 生产任务(件) 利润(元/件)
P1
P2
P3
P4
373
477
406
311
201
282
229
225
774
2153
1623
1614
19.9
23.0
21.0
16.0
结合上述各项生产指标及工厂的盈利要求,要求解决以下问题:
问题 1:在一块木板上切割 P1 产品,建立数学模型,要求给出木板利用率
最高(也即剩余木板废料面积最小)的切割方案。
问题 2:在一块木板上切割 P1 和 P3 产品,建立数学模型,给出按照木板利
用率由高到低排序的前 3 种切割方案。
问题 3:在完成表 2 中 P1 和 P3 产品的生产任务的前提下,建立数学模型,
给出木板总利用率最高的切割方案。
问题 4:在完成表 2 中 P1、P2、P3、P4 产品的生产任务的前提下,建立数
学模型,要求给出木板总利用率最高的切割方案。
问题 5:不考虑产品 P1,P2,P3,P4 的需求数量,给定 100 张 S1 木板,按
照表 2 中给出的利润,建立数学模型,要求给出总利润最大的切割方案。
2.1. 对整体分析:
二、 问题分析
本题是一个二维的规则平面图形排布优化问题即二维紧密排布优化问题。
题设采用工厂实际生产中对木板的二次加工引入一系列实际问题。整个题目是
一个非线性规划问题,可以将二维问题转化为两个一维问题求解,采用这种方
式求解起来可以有效地降低难度、同时也方便建立合适的数学模型。
2.2. 对第一问分析:
该问致力于解决如何在矩形木板上切割矩形木块才能做到余料最少(即利
用率最高)。基本思路是:在 S1 上对 P1 进行矩形件优化排样。采用一种排布
最紧密的方法摆放 P1,使得在一块 S1 木板上能切出最多的 P1,将 P1 所有可
能的摆放方式通过设变量在方程中求解得到最优解,此时得到的利用率最高。
2.3. 对第二问的分析:
该问其实是对第一问的升华,相较第一问增加了 P3,这就意味着增加了几
种情况和一系列需要考虑的约束条件。考虑到排布情况复杂多变,我们采用分
区域摆放的方式将 P1、P3 分别摆放,一方面有利于模型的建立,另一方面也能
极大地避免产品间的狭缝。提高利用率。
2.4. 对第三问的分析:
在完成表 2 中 P1 和 P3 产品的生产任务的前提下,采用最优的切割方案或
者组合方案,使得利用率达到最高。由于只要完成了生产任务,再浪费木板单
一地切割某产品而提高利用率已经没有意义。所以,我们只考虑完成任务所需
要的最少 S1 数目,求出其利用率。
2.5. 对第四问的分析:
该问是对第三问的提升,相较第三问增加了 P2 和 P4 两种产品。同样采用
第三问的分析方法。由于第三问求得的方案是最优的组合,所以需要在第三问
的解题基础上再考虑 P2 和 P4 的切割,综合考虑四种产品,求出利用率。
2.6. 对第五问的分析:
在不考虑产品 P1,P2,P3,P4 的需求数量的前提下,给定 100 张 S1 木
板,求出利润最大的切割方案。只需分别设上述问题求得的方案的木板 S1 个数
为 x1,x2……xn,以总利润为目标函数进行求解,得出利润最高的每种方案木板
S1 的个数和总利润的大小。
三、 问题假设
为了近距离剖析问题的本质,抓住问题的主要因素,忽略问题的次要因
素,针对上述的一系列问题作如下假设:
1) 木板厚度和割缝宽度忽略不计
2) 不考虑切割木板过程中产生的废品,即认为切割无误差
3) 切割剩余的余料不可拼接使用
4) 短期内每件产品的利润固定不变
四、 模型的建立与求解
4.1. 问题 1 的模型建立与求解
针对问题 1 的求解,结合前面所作出的假设,我们建立如下模型:将一整
块 S1 木板切割成若干块产品 P1,要得到利用率最高也即余料最少的切割方
法,就必须采用 [1]紧密切割(无缝隙排列)的方式。将 S1 横着摆放,此时就
遇到两种情况:
1)首先将产品 P1 横着摆放,并且彼此间无缝隙紧密排列。排列到最后可
能会出现横着摆放不足以摆放一块,但是竖着摆放还有余量的情况。具体摆放
情况如图。
3000
0
0
5
1
2)首先将产品 P1 竖着摆放,同样也是彼此间无缝隙紧密排列。排列到最
后可能会出现横着摆放不足以摆放一块,但是横着摆放还有余量的情况。具体
摆放情况如图。
3000
0
0
5
1
对以上两种情况分别讨论:
情况一,先采用从上往下逐排排列摆放,假设先将 x1 块 P1 产品紧密横放排
列,x2 块 P1 产品紧密竖放排列;再从下往上逐排排列摆放,将 x3 块 P1 产品紧
密竖放排列,x4 块 P1 产品紧密横放排列。Y 为可切割的产品数(由于同种产品
P1 面积相同,只要得出产品数最大的方案就得出了余料最少的方案)。于是列出
目标函数和约束条件:
目标函数: Y=x1*x3+14*x4+4*x2-x2*x4
约束条件: 373*x1+201*x2<=3000
201*x3+373*x4<=1500
情况二,先采用从上往下逐排排列摆放,假设先将 x1 块 P1 产品紧密竖放排
列,x2 块 P1 产品紧密横放排列;再从下往上逐排排列摆放,将 x3 块 P1 产品紧
密横放排列,x4 块 P1 产品紧密竖放排列。Y 为可切割的产品数(由于同种产品
P1 面积相同,只要得出产品数最大的方案就得出了余料最少的方案)。于是列出
目标函数和约束条件:
目标函数:Y=x1*x3+7*x2+8*x4-x2*x4
约束条件: 201*x1+373*x2<=3000
373*x3+201*x4<=1500
[3]matlab 运行代码见附录 1。比较情况一与情况二得到的结果发现,情况
一 P1 的数量为 56,情况二 P1 的数量为 59,即情况二更优。
木板利用率:w=Y*373*210/(3000*1500)
问题 1 所求得最优解如下表
表 3 问题 1 的结果
P1 的数量
木板利用率
59
98.30%
4.2. 问题 2 的模型建立与求解
针对问题 2 的求解,建立如下模型:每块 P1、P3 产品总共有 4 种摆放方式
(即 P1 横放、竖放,P3 横放、竖放),可以认为,[2]无论如何摆放,都可以通
过平移将同类摆放方式摆到一起。最终得到的排列最紧密、木板利用率最高的摆
放方式为紧密排列方式(即同种产品摆放无缝隙排列,问题 1 已阐明)。将一块
S1 木板分成 4 个区域,分别用于摆放两种产品的四种摆放方式,由这 4 个区域
的相对位置的改变可以得到 6 种分布情况,其中一种示意图如下:
3000
0
0
5
1
排列完成之后尝试在缝隙中插入 P1、P3,从而得到最紧密的排列方案,并
求出 P1、P3 的块数以及木板利用率。
设 Y 为产品面积总和, Sp1 为 P1 面积,Sp1 为 P1 面积。
情况一:x1 为横放的 P1 的长的个数,x5 为横放的 P1 的宽的个数,x2 为竖
放 P1 的宽的个数,x6 为竖放的 P1 的长的个数,x3 为竖放 P3 的宽的个数,x7
为竖放的 P3 的长的个数,x4 为横放的 P3 的长的个数,x8 为横放的 P3 的宽的
个数。
目标函数:Y=(x1*x5+x2*x6)* Sp1+( x3*x7+x8*x4)* Sp3
约束条件:373* x1+201* x2<=1500
229* x3+406* x4<=1500
373* x1+229* x3<=1500
201* x2+406* x4<=1500
201* x5+229* x8<=3000
373* x6+406* x7<=3000
201* x5+406* x7<=3000
373* x6+229* x8<=3000
情况二:x1 为横放的 P1 的长的个数,x5 为横放的 P1 的宽的个数,x2 为竖
放 P1 的宽的个数,x6 为竖放的 P1 的长的个数,x4 为竖放 P3 的宽的个数,x8
为竖放的 P3 的长的个数,x3 为横放的 P3 的长的个数,x7 为横放的 P3 的宽的
个数。
目标函数:Y=(x1*x5+x2*x6)* Sp1+( x3*x7+x8*x4)* Sp3
约束条件:373* x1+201* x2<=1500
229* x4+406* x3<=1500
373* x1+406* x3<=1500
201* x2+229* x4<=1500
201* x5+406* x8<=3000
373* x6+229* x7<=3000
201* x5+229* x7<=3000
373* x6+406* x8<=3000
情况三:x1 为横放的 P1 的长的个数,x5 为横放的 P1 的宽的个数,x2 为竖
放 P3 的宽的个数,x6 为竖放的 P3 的长的个数,x3 为横放的 P3 的长的个数,
x7 为横放的 P3 的宽的个数,x4 为竖放的 P1 的宽的个数,x8 为竖放的 P1 的长
的个数。
目标函数:Y=(x1*x5+x8*x4)* Sp1+( x3*x7+x6*x2)* Sp3
约束条件:373* x1+201* x2<=1500
406* x3+201* x4<=1500
373* x1+406* x3<=1500
229* x2+201* x4<=1500
201* x5+373* x8<=3000
406* x6+229* x7<=3000
201* x5+229* x7<=3000
406* x6+373* x8<=3000
情况四:x1 为横放的 P1 的长的个数,x5 为横放的 P1 的宽的个数,x2 为横
放 P3 的长的个数,x6 为横放的 P3 的宽的个数,x3 为竖放的 P3 的宽的个数,
x7 为竖放的 P3 的长的个数,x4 为竖放的 P1 的宽的个数,x8 为竖放的 P1 的长
的个数。
目标函数:Y=(x1*x5+x8*x4)* Sp1+( x3*x7+x6*x2)* Sp3
约束条件:373* x1+406* x2<=1500
229* x3+201* x4<=1500
373* x1+229* x3<=1500
406* x2+201* x4<=1500
201* x5+373* x8<=3000
229* x6+406* x7<=3000
201* x5+406* x7<=3000
229* x6+373* x8<=3000
情况五:x1 为横放的 P1 的长的个数,x5 为横放的 P1 的宽的个数,x2 为横
放 P3 的长的个数,x6 为横放的 P3 的宽的个数,x3 为竖放的 P1 的宽的个数,
x7 为竖放的 P1 的长的个数,x4 为竖放的 P1 的宽的个数,x8 为竖放的 P1 的长
的个数。
目标函数:Y=(x1*x5+x3*x7)* Sp1+( x4*x8+x6*x2)* Sp3
约束条件:373* x1+406* x2<=1500
201* x3+229* x4<=1500
373* x1+201* x3<=1500
406* x2+229* x4<=1500
201* x5+406* x8<=3000
229* x6+373* x7<=3000
201* x5+373* x7<=3000
229* x6+406* x8<=3000
情况六: x1 为横放的 P1 的长的个数,x5 为横放的 P1 的宽的个数,x2 为
竖放 P3 的宽的个数,x6 为竖放的 P3 的长的个数,x3 为竖放的 P1 的宽的个
数,x7 为竖放的 P1 的长的个数,x4 为横放的 P3 的长的个数,x8 为横放的 P3
的宽的个数。