钢构件的优化排料问题.docx
- 文档编号:2501826
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:21
- 大小:1.82MB
钢构件的优化排料问题.docx
《钢构件的优化排料问题.docx》由会员分享,可在线阅读,更多相关《钢构件的优化排料问题.docx(21页珍藏版)》请在冰点文库上搜索。
钢构件的优化排料问题
1、问题的重述
1.1背景
在当今激烈的市场竞争中,降低生产成本、提高生产效率和增强对市场的应变能力,是企业保持竞争力的主要实现手段。
在钢构件制造产品的生产过程中,依照产品零件尺寸从板料中截取大小适当的零件过程称之为排料,也称之为下料。
排料是钢构件制造的第一道工序。
在这道工序中,不同的排料方案具有不同的材料利用率,而原材料的利用率直接影响产品的成本。
材料费用是制造企业主要的生产成本,一般占总成本的60%~80%,在大批量生产中,材料的利用率即使提高1%,所创造的经济效益也相当可观。
据调查,优化下料后,制造企业材料利用率可平均提高5%~10%。
另外由于切割工艺的要求,切割只能实行“一刀切”的工艺(在整料或余料中,从一边的某点到另外一边某点的连线一次切割,但可以在切割下来的板料中再次切割)。
板材的利用率就是所有零件面积之和与在一刀切工艺后继续切割的那部分板材面积的比值。
1.2问题
对于第一问,对1张板料和若干规则形状零件,求如何在板料中摆放零件使其板料的利用率最高。
规则形状零件即指矩形零件。
其描述一般只需用矩形的长和宽。
规则形状零件的排料问题的实质是研究如何组合零件摆放问题,使得在整个原料上摆放大量的不同长和宽的零件产生的废料最少、整料和余料的利用率最高。
排放时,其零件间的搭接关系的处理相对容易,只需考虑长、宽两个因素(含预留的损耗量)。
板材大小:
2350*900【1张】。
表1是九个规则形状零件的具体规格。
表1
零件
一
二
三
四
五
长(mm)
350
350
500
500
500
宽(mm)
300
200
240
210
350
个数
2
2
2
2
2
零件
六
七
八
九
长(mm)
300
250
500
500
宽(mm)
250
200
400
200
个数
2
2
2
2
对于第二问,对1张板料和若干不规则形状零件,如何在板料中摆放零件使其板料的利用率最高。
与第一问类似,但是此时需要切割出来的零件不具有矩形般对边平行的条件,切割较为麻烦,同时可能会造成更多边角料的产生,降低板料的利用率。
图1和表2是题目要求的两种不规则零件的具体形状和规格。
板材大小:
2380*1630【1张】。
表2
零件
一
二
个数
14
14
图1
零件一零件二
对于第三问,考虑到实际的切割过程中,一张板料并不能满足所有零件的生产需求,故而要求设计对2张板料和若干规则形状零件,如何在板料中摆放零件使其板料的利用率最高。
还有一点与问题一不同,即各零件要求生产的个数有所改变。
板材大小:
4550*1630【2张】。
具体见下表3。
表3
零件
一
二
三
四
五
个数
4
0
5
6
6
零件
六
七
八
九
个数
4
2
2
4
2、符号规定与模型假设
2.1符号规定
符号
表示意义
L
板材的长度
W
板材的宽度
hi
矩形件的长,i=1,2,3…
w
矩形件的宽,i=1,2,3…
ni
矩形件的数量,i=1,2,3…
η
板材利用率
Ri
零件的种类,i=1,2,3…
2.2模型假设
1.切割机垂直切割,不考虑料板的厚度,即将问题转化为二维平面问题;
2.切割不会导致料板的长度或宽度减小,忽略切割损耗;
3.切割方式为一刀切,即在整料或余料中,从一边的某点到另外一边某点的连线一次切割;
4.忽略切割效率,本文着眼点在于料板利用率的提高;
5.对于问题二中的六边形,可看作是矩形一角删去一个150×150的正方形,而这一步骤利用一刀切不可能实现,故而假设六边形ABCDEF当作五边形ABCDE对待(图2),该零件的后续加工后文不予考虑。
图2
3、问题分析
本题目三个问题所研究的是一刀切下料,问题一和问题三属于二维规则图形的优化排料问题,问题二属于二维不规则图形的优化排料问题。
排料问题是典型的优化组合问题,具有很高的计算复杂性,属于NP完全问题。
“一刀切”的实际现象给了本问题一个最基础的约束,使得排样有了一个这样一个基础:
每次切割都将板材一分为二。
图3给出了一刀切下料与非一刀切下料的比较。
图3
问题一和问题三要求制作的零件规格有9种,因此属于多零件下料问题。
多种零件,需要解决如何选择将零件合理高效的布置在板材上。
本文的研究目的是在这些约束条件下实现优化排样,提高板材利用率。
排样目标为:
尽可能提高一块板的利用率。
排料需要满足的基本约束条件有:
①零件之间互不重叠;②零件的排布不得超出板材边缘;③满足一刀切条件。
4、模型建立
4.1模型的准备
由于问题一和二要求在一张料板上规划,问题三要求在两张规格相同的料板上规划,故而在料板数量上简化模型,仅考虑在一张规格已知的料板进行排料规划。
对于二维排料问题,排料方式要满足零件长,宽方向上的套裁。
将N个零件记为R1、R2、…Rn合理的排布在板材A中,其中满足:
Max()=Max(j=0NSprA*100%)(1.1)
且满足:
(1)Rr∈Aj=1,2…N…,
(2)Rj⋂Rk=∅(j≠k,jk=1,2…N…)(1.2)
其中为排料的材料利用率,应满足最大的原则。
Spj为第j个板材Rj的零件面积,A为第一次一刀切后继续用于一刀切的原料板材的面积,也即布局板材所消耗的原料面积,一般有
A=A0+A1+A2(其中A0=r=0NSpr,A1为工艺废料,A2为结构废料)。
从式(1.1)中可以看出,理论上若废料(包括工艺废料和结构废料)面积减至0,材料的利用率能够接近1,但该理论值在实际生产中无法达到。
工艺废料由行业的工艺要求产生,如切割损耗和余料,本题在建模过程中暂不考虑实际生产中的切割损耗。
结构废料由具体板材的结构形状所决定。
在生产中结构废料无法控制,要提高材料的利用率只有从减少工艺废料入手,通过采用更合理的排料方案,减少余料(工艺废料)。
4.2模型的建立
4.2.1问题一模型的建立
设共有M张面积大小都为A的板材,N类目标零件板材。
记板材的集合为:
(X={Wi,Hii∈M},零件集合为:
Y={wj,hjj∈N}j类零件的数量为nj,板材i上j类零件的数量为nji,已知第k个j类零件在板材上的排列位置可以由其左下角坐标与右上角坐标唯一确定,可记第k个j类零件在下料板材i上的左下角坐标为(x0jki,y0jki),右上角坐标记为(x1jki,y1jki)零件k在
0纵排
下料板材i上的排列方式记为pjki=,目标是最大化板材的利用率。
1横排
根据以上分析,将多板材下料问题用数学模型表示为:
Max()=Max(j=0NSprA*100%)(1.3)
pr∈Aj=1,2…2N…,(1.4)
pj⋂pk=∅(j≠kjk=1,2…2N…)(1.5)
j,kmaxx1jki≤Wi,(1.6)
j,kmaxy1jki≤Hi,(1.7)
1Inji=nj(1.8)
式(1.3)为目标函数,表示最大板材利用效率;式(1.4)为零件规格约束;式(1.5)保证零件互不重叠;式(1.6)和式(1.7)为板材规格约束,式(8)为零件数量约束。
4.2.2问题二模型的建立
该问属于二维不规则零件排样问题[2],此类问题的求解主要有两种思路:
一种是对这类问题直接在原材料上进行摆放;另一种则是将不规则零件转化为规则矩形件,然后按照矩形件进行优化排样。
[4]
如果将不规则零件排放在矩形形状的板材上,其在板材上的位呈由三个参数决定,这三个参数是该零件的一个给定点在板材上的坐标(x,y)和该零件的排放角度θ,这三个参数确定后,该零件的其他各顶点参数均可通过这三个参数计算出来。
[5]
首先定义以下参数:
——排样零件;
——排样零件图形;
——排样零件给定点的坐标。
零件在板材上的排样定位过程如下:
先将该零件的给定点在板材上平移至,然后再将该零件以为轴作角度为的旋转,这时零件在板材上的方向可表示为。
则零件排样优化的模型为:
其中L为板材的长,W为板材的宽;N为排样零件的数目;为排样零件的面积;变量表示零件在板材上的排样状态,如果可以排放则取1,不能排放则取0。
排样的约束条件如下:
其中第一式约束了任意两个零件互不重叠;第二,三式约束了零件中任意点的坐标都必须在排样材料范围内,不能超出板材之外。
我们对于问题二的求解采用第二种方法,由于问题二给出的五边形和六边形并不是特别复杂的多边形,同时五边形具有直角。
我们采用穷举法列出了6种较为常见排列方案,在这里对每种方案的利用率进行讨论,得出最佳矩形件优化方案。
矩形面积:
277425
利用用率:
228189.5/277425*100%=82.25%
方案一(图4)
矩形面积:
=399*617=246183
利用效率:
=221583/246183*100%=90.01%
方案二(图5)
矩形面积:
=411*558=229338
利用效率:
=221100/229338*100%=96.41%
方案三(图6)
矩形面积:
=411*664=272904
利用效率:
=228050/272904*100%=83.56%
方案四(图7)
矩形面积:
:
=462*519=239778
利用效率:
=221100/239778*100%=92.21%
方案五(图8)
矩形面积:
:
=400*350=140000
利用效率:
=128750/140000*100%=91.96%
方案六(图9)
经过综合分析,我们拟采用方案三和方案六组合切割。
至此,将不规则形状零件的排料问题简化为矩形零件的排料问题,可参照问题一模型来求解。
4.2.3问题三模型的建立
与前两问有所不同的是,问题三要求在两张规格相同的料板上进行排料。
经过计算得知,,故而我们在问题一模型的基础上,又可分两种方案进行比较:
(1)在一张板材上进行排板,看是否可以节省一整张料板;
(2)在两张板材上进行排版,排板顺序为两张同时进行,以求获得更大的剩余的料板整体面积。
4.3算法模型
4.3.1算法结构框图图10
4.3.2排样算法基本规则:
(1)插入规则
①大边尺寸,指板材或者零件长度和宽度的较大边尺寸。
②最大零件,指大边尺寸最大的待处理零件。
③最小空穴,指大边尺寸最小的待下料板材。
启发式算法[6]将待下料零件按大边尺寸降序排序,将原料板材按大边尺寸升序排序,并规定新一轮的下料排样总是选取待下料零件中的最大零件,搜索空穴列表,从满足零件下料尺寸的空穴中选择最小空穴[1]作为下料板材。
(2)放置规则--靠左靠下
在求解初始排样方案中,对于给定空穴,规定从待排零件中选择高度最低、宽度最大的零件靠左靠下放置。
(3)转向规则--整除求余
设空穴小边为x(x=min(W,L),W和L分别为空穴的宽度和长度),按插入规则和放置规则选定的零件宽度为w长度为l,则x与w,l之间满足以下线性关系:
x=aw+l1,x=bh+d2。
若d1 (4)切割线替换规则[1] 对于任意可行解,若存在另一条切割线满足第一条切割线的切割条件,则以这条切割线为第一条切割线所形成的排样方案与原解相同。 证明: 如图11所示,已知区域O存在以x为第一条切割线的可行解Ix,则O中存在局部区域P,使得P中以x为第一条切割线的解iox⊆I,现已经找到另外一条满足性质1的切割线y,需要证明Iy=Ix。 此时切割线y有两种情况: 一种为y平行于x,另一种为y垂直于x。 下面分别就这两种情况进行证明。 (1)y平行于x。 x将O划分为{AC}和B两部分,y将O划分为A和{BC}两部分。 易知iA∪C⊆I且iB⊆I,同理iA⊆iA∪C且iC⊆iA∪C,根据集合的传递性,有iA⊆I且iC⊆I。 所以以y为第一条切割线所形成的排样方案与原解相同。 (2)y垂直于x。 x将O划分为{AD}和{BC}两部分,y将O划分为{CD}和{AB}两部分。 易知: iA∪D⊆I且iB∪C⊆I,同理iA⊆iA∪D且iD⊆iA∪D,iB⊆iB∪C且iC⊆iB∪C,根据集合的传递性,有iA⊆I,iB⊆I,iC⊆I,iD⊆I。 所以以y为第一条切割线所形成的排样方案与原解相同。 切割线替换定理得证。 图11 4.3.3排样优化思想: ①采用二叉树的生成过程来描述板材的分割过程,则生成的二叉树就表示一个排样结果,即得到一个全局排样解。 ②用I={N,G|N={nj},G={gj},j=1,2,…}表示一个全局排样解,其中N表示排样解中各类零件的个数集合;G表示排样解中零件的规格集合。 ∃i={Ni,Gi|Ni⊆N,Gi⊆G}是I的局部区域,则称i是I的一个局部解。 一刀切的切割特点决定了满足一刀切约束的排样解具有以下条件: 条件1排样解中的第一条切割线必须满足: 长度等于分割区域中与其平行的那条边的长度,且不影响任意零件的完整性。 条件2设I为满足一刀切的全局解,对于I中的任意局部解i,i一定满足一刀切。 条件3对于任意可行解,若存在另一条切割线满足第一条切割线的切割条件,则以这条切割线为第一条切割线所形成的排样方案与原解相同。 4.4下料优化问题的二叉树算法的构造 二叉树是一种常用的空间数据结构,因其结构简单,操作方便、快速而广泛应用于数据的排序和计算内部寻址等方面。 本文主要基于VC++6.0开发平台,对零件排料涉及到的二叉树算法进行了编写。 在排样过程中,由于一刀切的特性,1块矩形区域划分后,可得到2块小的矩形区域。 在这2块矩形区域继续进行排样,就会得到4块矩形区域。 不断进行下去,这个排样过程就是一种二叉树的结构。 本文将二叉树用于矩形物体布局空间状态的表达,具体应用如下: 已知一个布局空间的矩形区域,按权值从可选布局物体中选择一个相对于该矩形区域来说是最优的布局物体A,并将其定位于该矩形区域的左下角。 这样原布局空间变成了一个¬形区域。 将这个¬形区域分成图12所示2个矩形A1和A2,分别用根结点的左、右2个子结点表示。 这样,剩余的布局空间就变成了2个独立的布局空间,分别对这2个布局空间重复上述过程,直至没有可选布局物体满足要求时停止分解。 图12 其中,每个圆圈和数字代表二叉树的节点,代表在矩形中进行了一次子排样。 根节点1为板材,进行一次子排样后,会生成2块空白矩形,相应产生2个节点: 节点2和节点3。 节点2的空白矩形进行一次子排样后,又会产生2个新的节点: 节点4和节点5。 节点之间的关系如图13所示: 图13 二叉树路径中的标号xi表示空白矩形分割方式。 以节点1为例,定义X1=0时,对节点1的进行子排样后的空白区域进行横划分。 X1=1时,对剩余空白区域的划分为竖划分。 显然,当x1取值不同时,生成的节点2,3中的原始空白矩形也不一样,更影响了后面的节点和排样结果。 具体步骤如下: 1.定义零件,二叉树节点的结构体,将板材和零件的长、宽与数量放置到数组中,并将零件按照长度从高到低,相同长度按照宽度从宽到窄进行排序。 如下所示: //定义待排零件 structORIGINAL_SQUARE { intlength;//长 intwidth;//宽 intnum;//数量}; //定义已排零件 structSQUARE{ intlength;//长 intwidth;//宽 intnum;//数量}; //定义二叉树节点 structNODE{ structSQUAREblankSquare;//排布前的空白矩形 structSQUARE*filledSquare;//空白矩形内排布的一列矩形 intfillesSquareNumber;//排布的矩形数目 intoriginalIndex;//排布的是哪个初始矩形 intremainLength;//顺着排布方向无法排布的矩形的长 intremainWidth;//顺着排布方向无法排布的矩形的宽 structNODE*lastNode;//上个节点的地址}; //构建数组,存储数据,冒泡排序 #include usingnamespacestd; intmain(intargc,char**argv) { //建立九行三列的二维数组 introw,col; inti,n,k; int**p;//p是一个二维int数组 row=9; col=3; p=newint*[row];//创建行指针 for(i=1;i<=row;i++) { p[i]=newint[col];//为每一行分配空间 } cout<<"\n请按顺序依次输入零件的长,宽与数量,并用空格隔开: \n"; for(n=1;n<=row;n++) { for(k=1;k<=col;k++) cin>>p[n][k]; } cout<<"\n您输入的是: \n"; cout<<"\n长度\t宽度\t数量\n"; for(n=1;n<=row;n++) { for(k=1;k<=col;k++) cout< cout<<"\n"; } cout<<"按照零件长度从高到低,相同长度下宽度从宽到窄排序得: \n"; for(n=1;n<=row;n++){//for循环进行冒泡排序 for(intj=n+1;j<=row;j++){ if(p[n][1] { intt=p[n][1]; p[n][1]=p[j][1]; p[j][1]=t; intr=p[n][2]; p[n][2]=p[j][2]; p[j][2]=r; intw=p[n][3]; p[n][3]=p[j][3]; p[j][3]=w; } if(p[n][1]==p[j][1]&&p[n][2] { intt=p[n][2]; p[n][2]=p[j][2]; p[j][2]=t; intw=p[n][3]; p[n][3]=p[j][3]; p[j][3]=w; } } } cout<<"\n长度\t宽度\t数量\n"; for(n=1;n<=row;n++) { for(k=1;k<=col;k++) cout< cout<<"\n"; } cout< return0;} 2.一张板材上的每次下料都优先选择长度最长,宽度最宽的零件靠左、靠下排列。 此处选择权值法,引入权值公式计算板材的利用率: Intw=λ1*u+λ2*t+λ3*r+λ4*a 其中,u表示单个待排零件占空白区域比例;t表示一次子排样下的所有零件面积之和占空白区域比例;r表示剩余区域局部矩形的宽度;a表示剩余区域的面积;λ1,λ2,λ3,λ4分别代表u,t,r,a的加权系数。 以上的加权法直接影响的仅仅是一次排样,但由于全部零件的排样是由各个零件排样完成的,因此,通过调整加权系数,可以改变板材中排样的进程。 多次调整权值并横向比较。 选取总体排样率最高的权值,就可以得到较优的解。 3.在满足约束条件的情况下建立二叉树并实现遍历、搜索等操作: #include #include #include usingnamespacestd; //二叉树链式存储结构的形式定义 //二叉树结点 typedefstructBiTNode{ chardata;//数据 structBiTNode*lchild,*rchild;//左右孩子指针 }BiTNode,*BiTree; //二叉树的创建 //按先序序列创建二叉树 intCreateBiTree(BiTree&T){ chardata; //按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树 cin>>data; if(data=='#'){ T=NULL; } else{ T=(BiTree)malloc(sizeof(BiTNode)); //生成根结点 T->data=data; //构造左子树 CreateBiTree(T->lchild); //构造右子树 CreateBiTree(T->rchild); } return0; } //输出 //二叉树的遍历 //递归算法 voidVisit(BiTreeT){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 构件 优化 问题