鋼管下料問題

2021-09-20 18:26:45 字數 2891 閱讀 9783

鋼管下料問題

例 某鋼管零售商從鋼管廠進貨,將鋼管按照顧客的要求切割後售出。從鋼管廠

進貨時得到的原料鋼管都是 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...