钢管下料问题

钢管下料问题
例 某钢管零售商从钢管厂进货,将钢管按照顾客的要求切割后售出。从钢管厂
进货时得到的原料钢管都是 19m 长。
(1)现有一客户需要 50 根 4m 长,20 根 6m 长和 15 根 8m 长的钢管。应如何下
料最节省?
(2)零售商如果采用的不同切割模式太多,将会导致生产过程的复杂化,从而增
加生产和管理成本,所以该零售商规定采用的不同切割模式不能超过 3 种。此外,该客
户除需要(1)中的三种钢管外,还需要 10 根 5m 长的钢管。应如何下料最节省?
2.1.1 问题(1)的求解
(1)问题分析
首先,应当确定哪些切割模式是可行的。所谓一个切割模式,是指按照客户需要在原料钢管上安排切割的一种组合。例如,我们可以将 19m 长的钢管切割成 3 根 4m
长的钢管,余料为 7m;或者将 19m 长的钢管切割成 4m,6m 和 8m 长的钢管各 1 根,
余料为 1m。显然,可行的切割模式是很多的。
其次,应当确定哪些切割模式是合理的。通常假设一个合理的切割模式的余料不
应该大于或等于客户需要的钢管的最小尺寸。例如,将 19m 长的钢管切割成 3 根 4m
的钢管是可行的,但余料为 7m,可以进一步将 7m 的余料切割成 4m 钢管(余料为 3m),
或者将 7m 的余料切割成 6m 钢管(余料为 1m)。在这种合理性假设下,切割模式一共
有 7 种,如表 3 所示。表 3 钢管下料的合理切割模式
    4m 钢管根数 6m 钢管根数  8m 钢管根数  余料(m)
模式 1    4       0        0      3
模式 2    3       1        0      1   
模式 3    2       0        1     3
模式 4    1       2        0      3
模式 5    1       1        1      1
模式 6    0       3        0      1
模式 7    0       0        2      3
问题化为在满足客户需要的条件下,按照哪些种合理的模式,切割多少根原料钢
管,最为节省。而所谓节省,可以有两种标准,一是切割后剩余的总余料量最小,二是
切割原料钢管的总根数最少。下面将对这两个目标分别讨论。
(2)模型建立
决策变量:用 i x 表示按照第i 种模式(i = 1,2,L,7 )切割的原料钢管的根数,显
然它们应当是非负整数。
决策目标:以切割后剩余的总余料量最小为目标,则由表 3 可得
minz1=3x1+x2+3x3+3x4+x5+x6+3x7 (6)
minz2=x1+x2+x3+x4+x5+x6+x7     (7)
下面分别在这两种目标下求解。
约束条件:为满足客户的需求,按照表 3 应用
4x1 + 3x2 + 2x3 + x4 + x5 ≥ 50 (8)
x2 + x4 + x5 + 3x6 ≥ 20 (9)
x3 + x5 + 2x7 ≥15 (10)
(3)模型求解
i)将式(6)、(8)~(9)构成的整数线性规划模型(加上整数约束)输入 LINGO
model:
TITLE 钢管下料-最小化余量;
sets:
col/1…7/:c,x;
row/1…3/:b;
link(row,col):a;
endsets
data:
c=3 1 3 3 1 1 3;
b=50 20 15;
a=4 3 2 1 1 0 0
0 1 0 2 1 3 0
0 0 1 0 1 0 2;
enddata
min=@sum(col:c*x);
@for(row(i):@sum(col(j):a(i,j)x(j))>=b(i));
@for(col:@gin(x));
end
求得按照模式 2 切割 12 根原料钢管,按照模式 5 切割 15 根原料钢管,共 27 根,
总余料量为 27m。但 4m 长的钢管比要求多切割了 1 根,6m 长的钢管比要求多切割了
7 根。显然,在总余料量最小的目标下,最优解将是使用余料尽可能小的切割方式(模
式 2 和模式 5 的余料为 1m),这会导致切割原料钢管的总根数较多。
ii)将式(7)~(10)构成的整数线性规划模型输入 LINGO
model:
TITLE 钢管下料-最小钢管数;
sets:
col/1…7/:c0,c,x;
row/1…3/:b;
link(row,col):a;
endsets
data:
c0=3 1 3 3 1 1 3;
c=1 1 1 1 1 1 1;
b=50 20 15;
a=4 3 2 1 1 0 0
0 1 0 2 1 3 0
0 0 1 0 1 0 2;
enddata
min=@sum(col:c
x);
@for(row(i):[con1]@sum(col(j):a(i,j)x(j))>=b(i));
@for(col:@gin(x));
[remainder]y=@sum(col:c0
x);
end
求得按照模式 2 切割 15 根原料钢管,按模式 5 切割 5 根,按模式 7 切割 5 根,共
25 根,可算出总余料量为 35m。但各长度的钢管数恰好全部满足要求,没有多切割。
与上面得到的结果比较,总余料量增加了 8m,但是所用的原料钢管的总根数减少了 2
根。在余料没有什么用途的情况下,通常选择总根数最少为目标。

你可能感兴趣的:(钢管下料,lingo)