cutting stock 問題的列生成演算法

2021-10-14 02:41:34 字數 3253 閱讀 3130

本文以 cutting stock 問題為例,介紹列生成演算法的數學模型。

長板長度:10m

子板需求:2m: 100; 3m: 50; 5m: 20 …

優化目標:最小化,長板切割總數

模型引數

引數含義

n

nn子板集合

l il_

li​子板 i

ii 的長度

l

ll長板長度

決策變數

變數型別含義xi,

jx_xi,j

​0-1

子板 i

ii 是否在長板 j

jj 上

約束條件

(1) 分配

∑ j∈

nxi,

j=1∀

i∈n\sum_ x_ = 1 \quad \forall i \in n

j∈n∑​x

i,j​

=1∀i

∈n(2) 長板長度

∑ i∈

nxi,

j⋅li

≤l∀j

∈n\sum_ x_ \cdot l_ \leq l \quad \forall j \in n

i∈n∑​x

i,j​

⋅li​

≤l∀j

∈n(3) 中心子板

x i,

j≤xj

,j∀i

∈n∀j

∈nx_ \leq x_ \quad \forall i \in n \quad \forall j \in n

xi,j​≤

xj,j

​∀i∈

n∀j∈

n(4) 有效不等式:需求量下限

∑ j∈

nxj,

j≥⌈∑

i∈nl

il⌉\sum_ x_ \geq \lceil \frac l_} l \rceil

j∈n∑​x

j,j​

≥⌈l∑

i∈n​

li​​

⌉目標函式

模型引數

引數含義

i

ii所有子板型別的集合

m

mm所有切割方案的集合

a i,

ja_ai,j

​方案 j

jj 中型別 i

ii 的子板數量

d

id_i

di​型別 i

ii 的子板需求量

決策變數

變數型別含義sjs_

sj​r+0

r_^r+

0​按照方案 j

jj 切割的長板數量

約束條件

∑ j∈

mai,

j⋅sj

≥di∀

i∈i\sum_ a_ \cdot s_ \geq d_ \quad \forall i \in i

j∈m∑​a

i,j​

⋅sj​

≥di​

∀i∈i

目標函式

m in

∑j∈m

sjmin \quad \sum_ s_

minj∈m

∑​sj

​決策變數

變數型別含義yiy_

yi​r+0

r_^r+

0​對偶變數

約束條件

∑ i∈

iai,

j⋅yi

≤1∀j

∈m\sum_ a_ \cdot y_ \leq 1 \quad \forall j \in m

i∈i∑​a

i,j​

⋅yi​

≤1∀j

∈m目標函式

m ax

∑i∈i

di⋅y

imax \quad \sum_ d_ \cdot y_

maxi∈i

∑​di

​⋅yi

​決策變數

變數型別含義aia_

ai​z+0

z_^z+

0​當前方案中,型別 i

ii 的子板數量

約束條件

∑ i∈

iai⋅

li≤l

\sum_ a_ \cdot l_ \leq l

i∈i∑​a

i​⋅l

i​≤l

目標函式

m in

1−∑i

∈iai

⋅yimin \quad 1 - \sum_ a_ \cdot y_

min1−i

∈i∑​

ai​⋅

yi​(1)列生成演算法需要一組初始可行解啟動,獲取初始解的啟發式方法因問題而異。

(2)列生成迴圈過程中,主問題為鬆弛問題,即變數為連續變數;求得最終結果的是主啟發式模型,將主問題變數改為整數變數即可。

算例1長板長度:10m

子板需求:1m: 100; 2m: 80; 3m: 70; 5m: 50; 7m: 30; 8m: 10

算例2長板長度:20m

子板需求:1m: 1000; 2m: 500; 3m: 200; 5m: 200; 8m: 100; 10m: 200; 12m: 100; 15m: 150

執行結果

算例模型/演算法

求解結果

求解時間

1原始整數規劃模型

10124.13

1列生成演算法

10222.161

2原始整數規劃模型

5871200 +

2列生成演算法

49322.431

注:(1)求解器:gurobi 伺服器

(2)時間限制:1200s

(3)算例1的最優解:101

問題的問題

有些問題是人出的,或者人造成的 而有些問題是 上帝 出的。我們可以說成是人題和天題。人題一般都是可以解決的,而天題,人根本就找不到答案。人題的解決不會給我們帶來快樂,而天題帶給我們的只是苦惱和困惑。人從出生到死亡,一直都處於迷失和困惑中,因為大部分的東西他都不知道是怎麼回事。是的,他可以不知道,同樣...

問題背後的問題

這兩天,和同事在一起討論問題,告訴她我以前走過的彎路 看到了幾個表面現象,就誤以為可以下結論了。其實,往往事情並非那麼簡單,需要不斷問自己 我真的發現問題的實質了嗎?以前,lg常恨恨地對我說 最討厭你那副自以為一眼把人看到底的清高樣子了 我聽了總是不以為然,我就以為早已把身邊這傢伙看得透透的了,所以...

問題背後的問題

這兩天,和同事在一起討論問題,告訴她我以前走過的彎路 看到了幾個表面現象,就誤以為可以下結論了。其實,往往事情並非那麼簡單,需要不斷問自己 我真的發現問題的實質了嗎?以前,lg常恨恨地對我說 最討厭你那副自以為一眼把人看到底的清高樣子了 我聽了總是不以為然,我就以為早已把身邊這傢伙看得透透的了,所以...