预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

钢管下料问题 某钢管零售商从钢管厂进货,将钢管按照顾客的要求切割后售出,从钢管厂进货时得到的原料钢管都是19m。 (1)现在一客户需要50根4m、20根6m和15根8m的钢管。应如何下料最节省? (2)零售商如果采用的不同切割模式太多,将会导致生产过程的复杂化,从而增加生产和管理成本,所以该零售商规定采用的不同切割模式不能超过3种。此外,该客户除需要(1)中的三种钢管外,还需要10根5m的钢管。应如何下料最节省。 问题(1)分析与模型建立 首先分析1根19m的钢管切割为4m、6m、8m的钢管的模式,所有模式相当于求解不等式方程: 的整数解。但要求剩余材料。 容易得到所有模式见表1。 表1钢管切割模式 模式4m6m8m余料(m)14003231013201340023503016111171203 决策变量用表示按照第i种模式(i=1,2,…,7)切割的原料钢管的根数。 以切割原料钢管的总根数最少为目标,则有 约束条件为满足客户的需求,4米长的钢管至少50根,有 6米长的钢管至少20根,有 8米长的钢管至少15根,有 因此模型为: 解得: 目标值z=27。 即12根钢管采用切割模式2:3根4m,1根6m,余料1m。 15根钢管采用切割模式6:1根4m,1根6m,1根8m,余料1m。 切割模式只采用了2种,余料为27m,使用钢管27根。 LINGO程序: model: sets: model/1..7/:x; endsets min=x(1)+x(2)+x(3)+x(4)+x(5)+x(6)+x(7); 4*x(1)+3*x(2)+2*x(3)+x(6)+x(7)>=50; x(2)+3*x(5)+x(6)+2*x(7)>=20; x(3)+2*x(4)+x(6)>=15; @for(model(i):@gin(x(i))); end 问题(2)模型建立 首先分析1根19m的钢管切割为4m、6m、8m、5m的钢管的模式,所有模式相当于求解不等式方程: 的整数解。但要求剩余材料。 利用Matlab程序求出所有模式见表2。 求出所有模式的Matlab程序: number=0; fork1=0:4 fork2=0:3 fork3=0:2 fork4=0:3 r=19-(4*k1+6*k2+8*k3+5*k4); if(r>=0)&(r<4) number=number+1; fprintf('%2d%2d%2d%2d%2d%2d\n',number,k1,k2,k3,k4,r); end end end end end 表2钢管切割模式 模式4m6m8m5m余料(m)1001212002033010234011105020126030017100308101129111011012003112002112201031321010143001215310011640003 决策变量用表示按照第i种模式(i=1,2,…,16)切割的原料钢管的根数。 决策目标以切割原料钢管的总根数最少为目标,则有 设第i种切割模式下4米长的钢管根,6米长的钢管根,8米长的钢管根,5米长的钢管根。则约束条件有: 为满足客户的需求,4米长的钢管至少50根,有 6米长的钢管至少20根,有 8米长的钢管至少15根,有 5米长的钢管至少10根,有 为实现最多使用3种切割模式,增设0-1变量。 当时,,表示不使用第i种切割模式;当时,,表示使用第i种切割模式。因此有: ,, 其中足够大,如这里取100。 因此模型为: 解得: 当所用钢管z最少时,求得的解为: ,其余为0。 目标值z=28。 即8根钢管采用切割模式2:2根8m,余料3m。 10根钢管采用切割模式13:2根4m,1根6m,1根5m,余料为0。 10根钢管采用切割模式15:3根4m,1根6m,余料1m。 切割模式采用了3种,余料为34,使用钢管z=28根。 LINGO程序为: model: sets: model/1..16/:a,b,c,d,r,x,y; endsets data: a=0,0,0,0,0,0,1,1,1,1,2,2,2,3,3,4; b=0,0,1,1,2,3,0,0,1,2,0,0,1,0,1,0; c=1,2,0,1,0,0,0,1,1,0,0,1,0,0,0,0; d=2,0,2,1,1,0,3,1,0,0,2,0,1,1,0,0; r=1,3,3,0,2,1,0,2,1,3,1,3,0,2,1,3; enddata min=z; z1=@sum(model(i):r(i)*x(i));!余料; z=@sum(model(i):x(i));!钢管总数; @sum(model(i):a(i)*x(i)