鋼管下料問題
例 某鋼管零售商從鋼管廠進貨,將鋼管按照顧客的要求切割後售出。從鋼管廠
進貨時得到的原料鋼管都是 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:cx);
@for(row(i):[con1]@sum(col(j):a(i,j)x(j))>=b(i));
@for(col:@gin(x));
[remainder]y=@sum(col:c0x);
end求得按照模式 2 切割 15 根原料鋼管,按模式 5 切割 5 根,按模式 7 切割 5 根,共
25 根,可算出總餘料量為 35m。但各長度的鋼管數恰好全部滿足要求,沒有多切割。
與上面得到的結果比較,總餘料量增加了 8m,但是所用的原料鋼管的總根數減少了 2
根。在餘料沒有什麼用途的情況下,通常選擇總根數最少為目標。
鋼管下料方案的生成方法(python3)
更新10根解的演算法 標準鋼管6公尺 根,需要截斷成不同長度的料,比如 1.2m,0.8m 5,2.3m,4.1m,0.65m 10,3m 2,1.8m,1.9m 6,1.5m,5.1m 2,3.1m 3 如何獲取最優計畫 需要多少根標準鋼管,每一根怎麼截 def getbestplan dict ...
動態規劃 鋼管切割問題
給一條鋼管,切割成不同長度的鋼管 也可以不切割 不同的鋼管長度對應不同的價值,求這根鋼管獲得的最大價值。輸入 第一行包含乙個正整數l,為鋼管的長度。第二行包含l個正整數a1 al,為長度從1到l的鋼管對應的價值。輸出 輸出一行,為鋼管能獲得的最大價值。輸入樣例1 5 1 2 4 8 16 輸出樣例1...
Day2補充 鋼管切割問題
某公司生產長鋼管,然後一般,會將鋼條切斷,變成不同長度,然後去售賣。其中有個問題是,不同長度的鋼管的售價是不一樣的,但是它們並不是完全按照比例來,比如2公尺的鋼管售價要比3公尺的鋼管售價要少,但是並不是2比3的比例。鋼管的長度售價表如下 長度i123 4567 8910 891017 1720 24...