防盗窗下料问题摘要本文针对寻找经济效果最优的钢管下料方案,建立了优化模型。
问题中的圆形管下料设定目标为切割原料圆形管数量尽可能少且在使用一定数量圆形管的过程中使被切割利用过的原料总进价尽可能低。
问题中的方形管原料不足以提供所需截得的所用钢管,故设目标为使截得后剩余方形管总余量最小。
模型的建立过程中,首先运用了C语言程序,利用逐层分析方法,罗列出针对一根钢材的截取模式;然后根据条件得出约束关系,写出函数关系并对圆形管下料建立了线性模型,对方形管下料建立了非线性模型;接着,在对模型按实际情况进行简化后,借助lingo程序对模型求解,得出了模型的最优解,并给出了最符合经济效果最优原则的截取方案。
关键词:钢管下料;最优化;lingo;问题提出某不锈钢装饰公司承接了一住宅小区的防盗窗安装工程,为此购进了一批型号为304的不锈钢管,分为方形管和圆形管两种,方管规格为25×25×1.2(mm),圆管规格Φ19×1.2(mm)。
每种管管长有4米和6米两种,其中4米圆形管5000根,6米圆形管9000根,4米方形管2000根,6米方形管2000根。
根据小区的实际情况,需要截取1.2m圆管8000根, 1.5m圆管16500根,1.8m圆管12000根,1.4m方形管6000根,1.7m方形管4200根,3m方形管2800根。
请根据上述的实际情况建立数学模型,寻找经济效果最优的下料方案。
基本假设和符号说明1、假设钢管切割过程中无原料损耗或损坏;2、假设余料不可焊接;3、假设同种钢材可采用的切割模式数量不限;4、假设不同长度钢管运费、存储资源价值没有区别;5、假设该304型号不锈钢管未经切割则价值不变,可在其它地方使用。
为便于描述问题,文中引入一些符号来代替基本变量,如表一所示:问题分析与模型建立问题中的圆形管原料足够,寻找经济效果最优的下料方案,即目标为切割原料圆形管数量尽可能少。
考虑到6米圆形管与4米圆形管的采购价格应该是不同的,所以我们寻求的是在使用一定数量6米圆形管与4米圆形管的过程中使被切割利用过的原料总进价尽可能低。
首先要确定针对6米和4米不同规格的圆形管合理的截取模式各有哪几种。
然后我们从所有截取模式中选取若干种截取模式,并设计出最佳的截取方案。
问题中的方形管原料不足以提供所需截得的所用钢管,所用的原料必然都要用于切割,不存在使用总钢管数量最少的说法,故我们可建立模型使截得后剩余方形管总余量最小。
类似于圆形管截取,我们同样首先要确定针对6米和4米不同规格的方形管合理的截取模式各有哪几种。
然后我们从所有截取模式中选取若干种截取模式,并设计出满足目标的最佳截取方案。
确定截取方式可以利用C语言程序,得到所用满足约束的截取方式的罗列;模型可利用lingo软件求解。
圆形管下料模型建立:首先,我们确定怎样的切割模式才是合理的。
通常,一个合理的切割模式的余料不应该大于或等于客户需要的钢管的最小尺寸,在此实际问题中,即余料长度应当小于1.2m。
现在先求6米长圆形管的切割模式,用整数a,b,c分别表示一根圆形管切得的1.2m、1.5m、1.8m钢管数量,则1.2a+1.5b+1.8c≤6。
要使余料长度小于1.2m,使用的钢管长度要大于4.8m,即1.2a+1.5b+1.8c>4.8。
一根6米长圆形管全用于截取1.2m钢管最多可截得的1.2m钢管数量为5根,全用于截取1.5m钢管最多可截得的1.5m钢管数量为4根,全用于截取1.8m钢管最多可截得的1.8m钢管数量为3根,所以0≤a≤5,0≤b≤4,0≤c≤3。
编写C代码得到结果如下表所示(具体代码见附录一):1.5m、1.8m钢管数量,则2.8<1.2a+1.5b+1.8c≤4。
一根4米长圆形管全用于截取1.2m钢管最多可截得的1.2m钢管数量为3根,全用于截取1.5m钢管最多可截得的1.5m钢管数量为2根,全用于截取1.8m钢管最多可截得的1.8m钢管数量为2根,所以0≤a≤3,0≤b≤2,0≤c≤2。
编写C代码得到结果如下表所示(具体代码见附录二):接着,用非负整数rxi表示按照第i种模式(i=1,2,…,11)切割的6米长钢管的根数,用非负整数ryj表示按照第j种模式(j=1,2,…,6)切割的4米长钢管的根数。
要在使用一定数量6米圆形管与4米圆形管的过程中使被切割利用过的原料总进价尽可能低,决策目标为:Min=rp1*Z1+rp2*Z2=rp1*(rx1+rx2+rx3+rx4+rx5+rx6+rx7+rx8+rx9+rx10+rx11)+rp2*(ry1+ry2+ry3+ry4+ry5+ry6)各模式所截得的1.2m圆管总数目不少于8000根, 1.5m圆管总数目不少于16500根,1.8m圆管总数目不少于12000根。
并且可供使用的6米圆形管数量Z1最多不超过9000根,4米圆形管数量Z2最多不超过5000根。
由上得到约束条件:Z 1=rx1+rx2+rx3+rx4+rx5+rx6+rx7+rx8+rx9+rx10+rx11≤9000Z 2=ry1+ry2+ry3+ry4+ry5+ry6≤5000rx4+rx5+2rx6+2rx7+2rx8+3rx9+3rx10+5rx11+ry4+2ry5+3ry6≥8000rx2+4rx3+2rx4+3rx5+rx7+2rx8+rx10+ry2+2ry3+ry5≥165003rx1+2rx2+rx4+2rx6+rx7+rx9+2ry1+ry2+ry4≥12000rxi ,ryj,Z1,Z2∈z+方形管下料模型建立:现在先求6米长的方形管的切割模式,用整数a,b,c分别表示一根方形管切得的1.4m、1.7m、3m钢管数量,则1.4a+1.7b+3c≤6。
要使余料长度小于1.4m,使用的钢管长度要大于4.6m,即1.4a+1.7b+3c>4.6。
一根6米长的方形管全用于截取1.4m钢管最多可截得的1.4m钢管数量为4根,全用于截取1.7m钢管最多可截得的1.7m钢管数量为3根,全用于截取3m钢管最多可截得的3m钢管数量为2根,所以0≤a≤4,0≤b≤3,0≤c≤2。
编写C代码得到结果如下表所示(具体代码见附录三):1.7m、3m钢管数量,则2.6<1.4a+1.7b+3c≤4。
一根4米长圆形管全用于截取1.4m钢管最多可截得的1.4m钢管数量为2根,全用于截取1.7m钢管最多可截得的1.7m钢管数量为2根,全用于截取3m钢管最多可截得的3m钢管数量为1根,所以0≤a≤2,0≤b≤2,0≤c≤1。
编写C代码得到结果如下表所示(具体代码见附录四):i根数,用非负整数syj表示按照第j种模式(j=1,2,…,4)切割的4米长钢管的根数。
要使截得后剩余方形管总余量最小,决策目标为:Min= 1.3sx2+0.9sx3+1.2sx4+0.2sx5+0.1sx6+0.4sx7+sy1+0.6sy2+0.9sy3+1.2sy4需要1.4m方形管6000根,1.7m方形管4200根,3m方形管2800根,并且可供使用的6米方形管数量T1最多不超过2000根,4米圆形管数量T2最多不超过2000根。
由上得到约束条件:T 1=sx1+sx2+sx3+sx4+sx5+sx6+sx7≤2000T 2=sy1+sy2+sy3+sy4≤2000sx4+2sx5+3sx6+4sx7+sy3+2sy4≥6000sx2+3sx3+2sx4+sx6+2sy2+sy3≥42002sx1+sx2+sx5+sy1≥2800sxi ,syj,T1,T2∈z+模型简化与求解圆形管下料模型简化与求解:由于rp1与rp2未知,故取rp1与rp2的比值k,根据k的不同取值,用lingo得到不同的最优解,如下所示:K取值 1.6 1.7 1.8 1.92 2.16m管用量9000689768876887688768854m管用量144049794996499649965000即当k小于等于1.6时,优先选择切割6m管;当k大于等于2.1时,优先选择切割4m管;当k在1.6与2.1之间时,根据k的取值确定使用6m管与4m管的数量配比。
但在实际生活中,同规格的钢管的每根价格往往与长度成正比,厂家在进货时购得钢管以每吨若干元或每米若干元计算。
因此,可简化模型,使k=1.5,即6m管单价是4m管的1.5倍。
此时得到的简化模型如下:决策目标:Min=Z2=ry1+ry2+ry3+ry4+ry5+ry6约束条件:Z 1=rx1+rx2+rx3+rx4+rx5+rx6+rx7+rx8+rx9+rx10+rx11≤9000Z 2=ry1+ry2+ry3+ry4+ry5+ry6≤5000rx4+rx5+2rx6+2rx7+2rx8+3rx9+3rx10+5rx11+ry4+2ry5+3ry6≥8000rx2+4rx3+2rx4+3rx5+rx7+2rx8+rx10+ry2+2ry3+ry5≥165003rx1+2rx2+rx4+2rx6+rx7+rx9+2ry1+ry2+ry4≥12000rxi ,ryj,Z1,Z2∈z+用方形管下料模型简化与求解:要使截得后剩余方形管总余量最小,决策目标:Min= 1.3sx2+0.9sx3+1.2sx4+0.2sx5+0.1sx6+0.4sx7+sy1+0.6sy2+0.9sy3+1.2sy4约束条件:T 1=sx1+sx2+sx3+sx4+sx5+sx6+sx7≤2000T 2=sy1+sy2+sy3+sy4≤2000sx4+2sx5+3sx6+4sx7+sy3+2sy4≥6000sx2+3sx3+2sx4+sx6+2sy2+sy3≥42002sx1+sx2+sx5+sy1≥2800sxi ,syj,T1,T2∈z+由于条件不能全部满足,故分优先级(考虑到截得的钢管越长,后续可加工再利用率越高,故首先满足3m钢管数量要求,最后满足1.4m钢管数量要求):P 1:T1=sx1+sx2+sx3+sx4+sx5+sx6+sx7≤2000;T2=sy1+sy2+sy3+sy4≤2000;sxi,syj,T1,T2∈z+P 2:2sx1+sx2+sx5+sy1≥2800P 3:sx2+3sx3+2sx4+sx6+2sy2+sy3≥4200P 4:sx4+2sx5+3sx6+4sx7+sy3+2sy4≥6000用模型优缺点与改进方向圆形管下料模型有较高的稳定性,但是当k值在1.6以上时,优化结果非最优化结果,可根据初级模型建立带参数k的带参模型,便于代入求得最优解。
方形管下料模型是非线性的,它有较大的结果偏差,稳定性一般。
参考文献[1]姜启源等,《数学模型》,北京:高等教育出版社,2004年[2]长治学院物理系数学建模培训第二次测试论文,钢材截短问题,2011年[3]谢金星薛毅,优化建模与LINGO/LINDO软件,北京:清华大学出版社,2004年[4]韩中庚,数学建模方法及其应用,北京:高等教育出版社,2005年[5]/view/615bf1bdc77da26925c5b09a.html附录附录一:#include <stdio.h>void main(){int a,b,c;for (a=0;a<=5;a++)for (b=0;b<=4;b++)for (c=0;c<=3;c++)if ((1.2*a+1.5*b+1.8*c)<=6 && (1.2*a+1.5*b+1.8*c)>4.8) printf ("a=%d,b=%d,c=%d, 余料=%f\n",a,b,c,6-(1.2*a+1.5*b+1.8*c));}附录二:#include <stdio.h>void main(){int a,b,c;for (a=0;a<=3;a++)for (b=0;b<=2;b++)for (c=0;c<=2;c++)if ((1.2*a+1.5*b+1.8*c)<=4 && (1.2*a+1.5*b+1.8*c)>2.8) printf ("a=%d,b=%d,c=%d,余料=%f\n",a,b,c,4-(1.2*a+1.5*b+1.8*c));}附录三:#include <stdio.h>void main(){int a,b,c;for (a=0;a<=4;a++)for (b=0;b<=3;b++)for (c=0;c<=2;c++)if ((1.4*a+1.7*b+3*c)<=6 && (1.4*a+1.7*b+3*c)>4.6) printf ("a=%d,b=%d,c=%d,余料=%f\n",a,b,c,6-(1.4*a+1.7*b+3*c));}附录四:#include <stdio.h>void main(){int a,b,c;for (a=0;a<=2;a++)for (b=0;b<=2;b++)for (c=0;c<=1;c++)if ((1.4*a+1.7*b+3*c)<=4 && (1.4*a+1.7*b+3*c)>2.6) printf ("a=%d,b=%d,c=%d,余料=%f\n",a,b,c,4-(1.4*a+1.7*b+3*c));}附录五:z1=x1+x2+x3+x4+x5+x6+x7+x8+x9+x10+x11;min=y1+y2+y3+y4+y5+y6;x4+x5+2*x6+2*x7+2*x8+3*x9+3*x10+5*x11+y4+2*y5+3*y6>=8000;x2+4*x3+2*x4+3*x5+x7+2*x8+x10+y2+2*y3+y5>=16500;3*x1+2*x2+x4+2*x6+x7+x9+2*y1+y2+y4>=12000;y1+y2+y3+y4+y5+y6 <= 5000;x1+x2+x3+x4+x5+x6+x7+x8+x9+x10+x11<= 9000;x1>=x2;x2>=x3;x3>=x4;x4>=x5;x5>=x6;x6>=x7;x7>=x8;x8>=x9;x9>=x10;x10>=x11;y1>=y2;y2>=y3;y3>=y4;y4>=y5;y5>=y6;@gin(x1); @gin(x2); @gin(x3);@gin(x4);@gin(x5);@gin(x6);@gin(x7);@gin(x8);@gin(x9);@gin(x10);@gin(x11);@gin(y1);@gin(y2);@gin(y3);@gin(y4);@gin(y5);@gin(y6);@gin(z1);附录六:Global optimal solution found.Objective value: 1440.000Extended solver steps: 0Total solver iterations: 26Variable Value Reduced Cost Z1 9000.000 0.000000 X1 1430.000 0.000000 X2 1430.000 0.000000 X3 1430.000 0.000000 X4 1430.000 0.000000 X5 1430.000 0.000000X6 820.0000 0.000000X7 820.0000 0.000000X8 210.0000 0.000000X9 0.000000 0.000000X10 0.000000 0.000000X11 0.000000 0.000000Y1 240.0000 1.000000Y2 240.0000 1.000000Y3 240.0000 1.000000Y4 240.0000 1.000000Y5 240.0000 1.000000Y6 240.0000 1.000000Row Slack or Surplus Dual Price1 0.000000 0.0000002 1440.000 -1.0000003 0.000000 0.0000004 0.000000 0.0000005 0.000000 0.0000006 3560.000 0.0000007 0.000000 0.0000008 0.000000 0.0000009 0.000000 0.00000010 0.000000 0.00000011 0.000000 0.00000012 610.0000 0.00000013 0.000000 0.00000014 610.0000 0.00000015 210.0000 0.00000016 0.000000 0.00000017 0.000000 0.00000018 0.000000 0.00000019 0.000000 0.00000020 0.000000 0.00000021 0.000000 0.00000022 0.000000 0.000000附录七:model:Min=1.3*sx2+0.9*sx3+1.2*sx4+0.2*sx5+0.1*sx6+0.4*sx7+sy1+0.6*sy2+0.9*sy3 +1.2*sy4;sx1+sx2+sx3+sx4+sx5+sx6+sx7<=2000;sy1+sy2+sy3+sy4<=2000;sx4+2*sx5+3*sx6+4*sx7+sy3+2*sy4>=1200;sx2+3*sx3+2*sx4+sx6+2*sy2+sy3>=4200;2*sx1+sx2+sx5+sy1>=2800;sx1>=sx2;sx2>=sx3;sx3>=sx4;sx4>=sx5;sx5>=sx6;sx6>=sx7;sy1>=sy2;sy2>=sy3;sy3>=sy4;@gin(sx1); @gin(sx2); @gin(sx3);@gin(sx4);@gin(sx5);@gin(sx6);@gin(sx7);@gin(sy1);@gin(sy2);@gin(sy3);@gin(sy4);end附录八:Global optimal solution found.Objective value: 2780.000Extended solver steps: 0Total solver iterations: 11Variable Value Reduced Cost SX2 400.0000 1.300000 SX3 400.0000 0.9000000 SX4 200.0000 1.200000 SX5 200.0000 0.2000000 SX6 200.0000 0.1000000 SX7 0.000000 0.4000000 SY1 1000.000 1.000000 SY2 1000.000 0.6000000 SY3 0.000000 0.9000000 SY4 0.000000 1.200000 SX1 600.0000 0.000000 Row Slack or Surplus Dual Price1 2780.000 -1.0000002 0.000000 0.0000003 0.000000 0.0000004 0.000000 0.0000005 0.000000 0.0000006 0.000000 0.0000007 200.0000 0.0000008 0.000000 0.0000009 200.0000 0.00000010 0.000000 0.00000011 0.000000 0.00000012 200.0000 0.00000013 0.000000 0.00000014 1000.000 0.00000015 0.000000 0.000000。