1. 程式人生 > >Wolsey "強整數規劃“ 建模的+Leapms實踐——無產能批量問題

Wolsey "強整數規劃“ 建模的+Leapms實踐——無產能批量問題

Wolsey "強整數規劃“ 建模的+Leapms實踐——無產能批量問題

《整數規劃》[1]一書作者L. A. Wolsey對批量問題(Lot-sizing Problem)做了不少“強”整數規劃建模[2-5],不是management science就是operations research,大師呀。

一個“弱”整數規劃模型可以通過新增約束使之變“強”(Strong)。由於所新增的約束是線性不等式約束,就是空間上的平面並且把空間分成兩半,一半留在可行解空間裡,一半排除出可行解空間,於是這種約束就被叫成“割平面”(cutting plane)。

本帖記錄一下用+Leapms對模型強化過程的實踐,幾乎是一個可以跟隨的教程貼。如果沒有+Leapms在手上,用其他建模語言和求解器也一樣可以做,不過就是麻煩些。

本帖是本部落格原創,本部落格不轉貼他人貼(除非今後說明)。

無產能批量問題(Uncapacited Lot-sizing Problem)

考慮在未來T個週期的生產-存貯問題,t (t=1,...,T) 週期的產品需求為d[t], 單位生產費用為p[t], 單位存貯費用為h[t], 生產的固定性費用為 f[t]。 要求制定生產t週期的生產量 x[t],使得總費用最少。

這裡的矛盾是:如果生產過於頻繁,則要付出更多的固定性費用;如果一次生產過多,則需要付出更多存貯費,且各個週期的生產費用是不同的,應該儘量避免在高生產費用的週期生產。

各個符號有英文涵義:d[t] -- demand at time t; p[t] -- production cost at time t; h[t] -- holding cost at time t; f[t] - fixed cost at time t。

假設產能是無限的,即x[t]可以取到所有d[t]的和,因此叫做無產能批量問題。

這個例子在Wolsey書的223-227頁。

設$s_t$是t時間的庫存,Wolse 是這樣描述模型的:

 

上面的第一行是說要極小化總費用;第二行是約束。熟悉+Leapms的同學知道上面的$x_t$就是x[t]了。

上面的第二行包括兩個約束式,第一個是說階段t-1的庫存加上t階段的生產等於t階段的需求加上t階段的庫存,顯然符合邏輯。就是這個:

第二個是說如果在t時間內生產,則0-1變數$y_t$必須是1。這個$y_t$表示t階段是否有生產,它要在目標裡面乘上$f$, 即$fy$。

 對這樣的描述寫成+Leapms只需要一分鐘。但是寫之前最好能弄些d,p,h,f的資料,否則是無本之木,沒法實踐。還好Wolsey給出了資料,在224頁第五段:

但是,Wolsey忘記給 p[t]了!發郵件給他被退回,好像老先生已經退休了。好像實踐要泡湯了。

不過思考一下沒事的,因為p在研究強模型時候並不重要,只不過我們沒法精準復現Wolsey的資料了,但是隻要能復現模型由弱變強的性質就好。

首先我們要把“弱”模型寫出來,就是這個:

min sum{t=1,...,T}(h[t]s[t]+f[t]y[t])
subject to
    s[t-1]+x[t]=d[t]+s[t] | t=1,...,T
    x[t]<=M*y[t]|t=1,...,T
    s[0]=0
where
    T,M are numbers
    d,h,f are sets
    s[t] is a variable of nonnegative number|t=0,...,T
    x[t] is a variable of nonnegative number|t=1,...,T
    y[t] is a variable of binary|t=1,...,T
data_relation
    M=sum{t=1,...,T}d[t]
data
    T=6 //階段數
    d={6 7 4 6 3 8}//需求
    h={1 1 3 1 1 2}//單位存貯費用
    f={8 12 8 6 10 23} //時間t內的生產固定費用

用+Leapms鬆弛求解一下:

+Leapms>solve
The LP is solved to optimal.
找到線性規劃最優解.非零變數值和最優目標值如下:
    .........
    x1*=6
    x2*=7
    x3*=4
    x4*=6
    x5*=3
    x6*=8
    y1*=0.176471
    y2*=0.205882
    y3*=0.117647
    y4*=0.176471
    y5*=0.0882353
    y6*=0.235294
    .........
    Objective*=12.1765
    .........
+Leapms>

6個y[t]都不是整數,大體跟Wolsey的圖示一致:

加割平面讓模型變強(Strong)

加第1個割平面,原文這樣寫

加進來的+Leapms這樣寫:

x[t]<=d[t]y[t]+s[t]|t=1,...,T  //割平面1

加第2個割平面,原文這樣寫

照抄寫成+Leapms: 

s[t]>=d[t](1-y[t])|t=1,...,T //割平面2

用+Leapms求解怪怪的!分析。。。分析。。。分析。。。

原來Wolsey寫錯了,正確的應該是:

重新寫成+Leapms:

s[t-1]>=d[t](1-y[t])|t=1,...,T //割2

加了上面兩個割平面,用+Leapms鬆弛求解一下看:

+Leapms>solve
The LP is solved to optimal.
找到線性規劃最優解.非零變數值和最優目標值如下:
    .........
    s1*=5.96296
    s2*=4
    s4*=2.22581
    s5*=8
    x1*=11.963
    x2*=5.03704
    x4*=8.22581
    x5*=8.77419
    y1*=1
    y2*=0.148148
    y4*=1
    y5*=0.258065
    .........
    Objective*=38.5472
    .........
+Leapms>

可以看見,只剩下兩個0-1變數 y2和y5不是整數了。看一下Wolsey的結果:

分析。。。分析。。。分析, 大體一致!

 

下面Wolsey還有另外兩個割,他們看起來差不多,仔細看還是大不一樣啊:

什麼?這樣的割也能寫成+Leapms嗎?

必須的!寫出來是這樣的:

    s[k-1]>=(sum{t=k,...,l}d[t])(1-sum{i=k,...,l}y[i]) | k=1,...,T;l=1,...,T;k<=l//割平面3
    s[k-1]>=sum{t=k,...,l}(d[t](1-sum{i=k,...,l}y[i])) | k=1,...,T;l=1,...,T;k<=l//割平面4

所有割都加完了,用+Leapms求解其鬆弛求一下吧:

+Leapms>solve
The LP is solved to optimal.
找到線性規劃最優解.非零變數值和最優目標值如下:
    .........
    s1*=6.30249
    s2*=2.69039
    s5*=8
    x1*=12.3025
    x2*=3.3879
    x3*=1.30961
    x4*=6
    x5*=11
    y1*=1
    y2*=0.0996441
    y3*=0.327402
    y4*=1
    y5*=1
    .........
    Objective*=44.8078
    .........
+Leapms>

模型確實強了不少,而且與Wolsey畫出的結果大體一致:

好了,實踐做完了。

強模型PDF摘錄

所謂強模型pdf摘錄就是+Leapms自動附加生成的一個pdf文件,包含了+Leapms格式的模型和數學概念模型:

 

 其他

問:+Leapms只能求鬆弛解嗎?

答:當然不是。用solve命令得出的是鬆弛解,用mip呼叫+Leapms自身求解器得出的是整數解,用cplex命令則呼叫cplex生成整數解,用grb命令。。。。

 

問:上面PDF中的數學公式是+Leapms自動生成的嗎?

答:當然是。

 

問:+Leapms能生成MPS模型嗎?

答:當然能,用savemps命令就行。

 

問:+Leapms能生成lp格式模型嗎?

答:當然能,用savelp命令就行。

 

問:那麼能否讓+Leapms生成其他建模語言模型?

答:當然能,很神奇。

 

附錄1:+Leapms生成的lp模型

\==================================\
\Problem UncapacitatedLotSizingStrong
\.lp file gnerated by +Leapms
\==================================\
Minimize 
 Obj: s1+s2+3s3+s4+s5+2s6+8y1+12y2+8y3+6y4+10y5+23y6 
Subject to
 C1: s0-s1+x1=6
 C2: s1-s2+x2=7
 C3: s2-s3+x3=4
 C4: s3-s4+x4=6
 C5: s4-s5+x5=3
 C6: s5-s6+x6=8
 C7: x1-34y1<=-0
 C8: x2-34y2<=-0
 C9: x3-34y3<=-0
 C10: x4-34y4<=-0
 C11: x5-34y5<=-0
 C12: x6-34y6<=-0
 C13: s0=-0
 C14: -s1+x1-6y1<=-0
 C15: -s2+x2-7y2<=-0
 C16: -s3+x3-4y3<=-0
 C17: -s4+x4-6y4<=-0
 C18: -s5+x5-3y5<=-0
 C19: -s6+x6-8y6<=-0
 C20: s0+6y1>=6
 C21: s1+7y2>=7
 C22: s2+4y3>=4
 C23: s3+6y4>=6
 C24: s4+3y5>=3
 C25: s5+8y6>=8
 C26: s0+6y1>=6
 C27: s0+13y1+13y2>=13
 C28: s0+17y1+17y2+17y3>=17
 C29: s0+23y1+23y2+23y3+23y4>=23
 C30: s0+26y1+26y2+26y3+26y4+26y5>=26
 C31: s0+34y1+34y2+34y3+34y4+34y5+34y6>=34
 C32: s1+7y2>=7
 C33: s1+11y2+11y3>=11
 C34: s1+17y2+17y3+17y4>=17
 C35: s1+20y2+20y3+20y4+20y5>=20
 C36: s1+28y2+28y3+28y4+28y5+28y6>=28
 C37: s2+4y3>=4
 C38: s2+10y3+10y4>=10
 C39: s2+13y3+13y4+13y5>=13
 C40: s2+21y3+21y4+21y5+21y6>=21
 C41: s3+6y4>=6
 C42: s3+9y4+9y5>=9
 C43: s3+17y4+17y5+17y6>=17
 C44: s4+3y5>=3
 C45: s4+11y5+11y6>=11
 C46: s5+8y6>=8
 C47: s0+6y1>=6
 C48: s0+13y1+13y2>=13
 C49: s0+17y1+17y2+17y3>=17
 C50: s0+23y1+23y2+23y3+23y4>=23
 C51: s0+26y1+26y2+26y3+26y4+26y5>=26
 C52: s0+34y1+34y2+34y3+34y4+34y5+34y6>=34
 C53: s1+7y2>=7
 C54: s1+11y2+11y3>=11
 C55: s1+17y2+17y3+17y4>=17
 C56: s1+20y2+20y3+20y4+20y5>=20
 C57: s1+28y2+28y3+28y4+28y5+28y6>=28
 C58: s2+4y3>=4
 C59: s2+10y3+10y4>=10
 C60: s2+13y3+13y4+13y5>=13
 C61: s2+21y3+21y4+21y5+21y6>=21
 C62: s3+6y4>=6
 C63: s3+9y4+9y5>=9
 C64: s3+17y4+17y5+17y6>=17
 C65: s4+3y5>=3
 C66: s4+11y5+11y6>=11
 C67: s5+8y6>=8
Binaries
  y1
  y2
  y3
  y4
  y5
  y6

End
\==================================\

  

附錄2 MPS模型

MPS是機器交換模型,不是給人看的。供參考。

*MPS FILE GENERATED FROM +LEAPMS
NAME          UncapacitatedLotSizingStrong
ROWS
 N   OBJCT
 E   C1
 E   C2
 E   C3
 E   C4
 E   C5
 E   C6
 L   C7
 L   C8
 L   C9
 L   C10
 L   C11
 L   C12
 E   C13
 L   C14
 L   C15
 L   C16
 L   C17
 L   C18
 L   C19
 G   C20
 G   C21
 G   C22
 G   C23
 G   C24
 G   C25
 G   C26
 G   C27
 G   C28
 G   C29
 G   C30
 G   C31
 G   C32
 G   C33
 G   C34
 G   C35
 G   C36
 G   C37
 G   C38
 G   C39
 G   C40
 G   C41
 G   C42
 G   C43
 G   C44
 G   C45
 G   C46
 G   C47
 G   C48
 G   C49
 G   C50
 G   C51
 G   C52
 G   C53
 G   C54
 G   C55
 G   C56
 G   C57
 G   C58
 G   C59
 G   C60
 G   C61
 G   C62
 G   C63
 G   C64
 G   C65
 G   C66
 G   C67
COLUMNS
    s0        OBJCT           0.0000   C1              1.0000
    s0        C13             1.0000   C20             1.0000
    s0        C26             1.0000   C27             1.0000
    s0        C28             1.0000   C29             1.0000
    s0        C30             1.0000   C31             1.0000
    s0        C47             1.0000   C48             1.0000
    s0        C49             1.0000   C50             1.0000
    s0        C51             1.0000   C52             1.0000
    s1        OBJCT           1.0000   C1             -1.0000
    s1        C2              1.0000   C14            -1.0000
    s1        C21             1.0000   C32             1.0000
    s1        C33             1.0000   C34             1.0000
    s1        C35             1.0000   C36             1.0000
    s1        C53             1.0000   C54             1.0000
    s1        C55             1.0000   C56             1.0000
    s1        C57             1.0000   
    s2        OBJCT           1.0000   C2             -1.0000
    s2        C3              1.0000   C15            -1.0000
    s2        C22             1.0000   C37             1.0000
    s2        C38             1.0000   C39             1.0000
    s2        C40             1.0000   C58             1.0000
    s2        C59             1.0000   C60             1.0000
    s2        C61             1.0000   
    s3        OBJCT           3.0000   C3             -1.0000
    s3        C4              1.0000   C16            -1.0000
    s3        C23             1.0000   C41             1.0000
    s3        C42             1.0000   C43             1.0000
    s3        C62             1.0000   C63             1.0000
    s3        C64             1.0000   
    s4        OBJCT           1.0000   C4             -1.0000
    s4        C5              1.0000   C17            -1.0000
    s4        C24             1.0000   C44             1.0000
    s4        C45             1.0000   C65             1.0000
    s4        C66             1.0000   
    s5        OBJCT           1.0000   C5             -1.0000
    s5        C6              1.0000   C18            -1.0000
    s5        C25             1.0000   C46             1.0000
    s5        C67             1.0000   
    s6        OBJCT           2.0000   C6             -1.0000
    s6        C19            -1.0000   
    x1        OBJCT           0.0000   C1              1.0000
    x1        C7              1.0000   C14             1.0000
    x2        OBJCT           0.0000   C2              1.0000
    x2        C8              1.0000   C15             1.0000
    x3        OBJCT           0.0000   C3              1.0000
    x3        C9              1.0000   C16             1.0000
    x4        OBJCT           0.0000   C4              1.0000
    x4        C10             1.0000   C17             1.0000
    x5        OBJCT           0.0000   C5              1.0000
    x5        C11             1.0000   C18             1.0000
    x6        OBJCT           0.0000   C6              1.0000
    x6        C12             1.0000   C19             1.0000
    MARK0001  'MARKER'                 'INTORG'
    y1        OBJCT           8.0000   C7            -34.0000
    y1        C14            -6.0000   C20             6.0000
    y1        C26             6.0000   C27            13.0000
    y1        C28            17.0000   C29            23.0000
    y1        C30            26.0000   C31            34.0000
    y1        C47             6.0000   C48            13.0000
    y1        C49            17.0000   C50            23.0000
    y1        C51            26.0000   C52            34.0000
    y2        OBJCT          12.0000   C8            -34.0000
    y2        C15            -7.0000   C21             7.0000
    y2        C27            13.0000   C28            17.0000
    y2        C29            23.0000   C30            26.0000
    y2        C31            34.0000   C32             7.0000
    y2        C33            11.0000   C34            17.0000
    y2        C35            20.0000   C36            28.0000
    y2        C48            13.0000   C49            17.0000
    y2        C50            23.0000   C51            26.0000
    y2        C52            34.0000   C53             7.0000
    y2        C54            11.0000   C55            17.0000
    y2        C56            20.0000   C57            28.0000
    y3        OBJCT           8.0000   C9            -34.0000
    y3        C16            -4.0000   C22             4.0000
    y3        C28            17.0000   C29            23.0000
    y3        C30            26.0000   C31            34.0000
    y3        C33            11.0000   C34            17.0000
    y3        C35            20.0000   C36            28.0000
    y3        C37             4.0000   C38            10.0000
    y3        C39            13.0000   C40            21.0000
    y3        C49            17.0000   C50            23.0000
    y3        C51            26.0000   C52            34.0000
    y3        C54            11.0000   C55            17.0000
    y3        C56            20.0000   C57            28.0000
    y3        C58             4.0000   C59            10.0000
    y3        C60            13.0000   C61            21.0000
    y4        OBJCT           6.0000   C10           -34.0000
    y4        C17            -6.0000   C23             6.0000
    y4        C29            23.0000   C30            26.0000
    y4        C31            34.0000   C34            17.0000
    y4        C35            20.0000   C36            28.0000
    y4        C38            10.0000   C39            13.0000
    y4        C40            21.0000   C41             6.0000
    y4        C42             9.0000   C43            17.0000
    y4        C50            23.0000   C51            26.0000
    y4        C52            34.0000   C55            17.0000
    y4        C56            20.0000   C57            28.0000
    y4        C59            10.0000   C60            13.0000
    y4        C61            21.0000   C62             6.0000
    y4        C63             9.0000   C64            17.0000
    y5        OBJCT          10.0000   C11           -34.0000
    y5        C18            -3.0000   C24             3.0000
    y5        C30            26.0000   C31            34.0000
    y5        C35            20.0000   C36            28.0000
    y5        C39            13.0000   C40            21.0000
    y5        C42             9.0000   C43            17.0000
    y5        C44             3.0000   C45            11.0000
    y5        C51            26.0000   C52            34.0000
    y5        C56            20.0000   C57            28.0000
    y5        C60            13.0000   C61            21.0000
    y5        C63             9.0000   C64            17.0000
    y5        C65             3.0000   C66            11.0000
    y6        OBJCT          23.0000   C12           -34.0000
    y6        C19            -8.0000   C25             8.0000
    y6        C31            34.0000   C36            28.0000
    y6        C40            21.0000   C43            17.0000
    y6        C45            11.0000   C46             8.0000
    y6        C52            34.0000   C57            28.0000
    y6        C61            21.0000   C64            17.0000
    y6        C66            11.0000   C67             8.0000
RHS
    RHS1      C1              6.0000   C2              7.0000
    RHS1      C3              4.0000   C4              6.0000
    RHS1      C5              3.0000   C6              8.0000
    RHS1      C20             6.0000   C21             7.0000
    RHS1      C22             4.0000   C23             6.0000
    RHS1      C24             3.0000   C25             8.0000
    RHS1      C26             6.0000   C27            13.0000
    RHS1      C28            17.0000   C29            23.0000
    RHS1      C30            26.0000   C31            34.0000
    RHS1      C32             7.0000   C33            11.0000
    RHS1      C34            17.0000   C35            20.0000
    RHS1      C36            28.0000   C37             4.0000
    RHS1      C38            10.0000   C39            13.0000
    RHS1      C40            21.0000   C41             6.0000
    RHS1      C42             9.0000   C43            17.0000
    RHS1      C44             3.0000   C45            11.0000
    RHS1      C46             8.0000   C47             6.0000
    RHS1      C48            13.0000   C49            17.0000
    RHS1      C50            23.0000   C51            26.0000
    RHS1      C52            34.0000   C53             7.0000
    RHS1      C54            11.0000   C55            17.0000
    RHS1      C56            20.0000   C57            28.0000
    RHS1      C58             4.0000   C59            10.0000
    RHS1      C60            13.0000   C61            21.0000
    RHS1      C62             6.0000   C63             9.0000
    RHS1      C64            17.0000   C65             3.0000
    RHS1      C66            11.0000   C67             8.0000
BOUNDS
 FR BND       s0
 FR BND       s1
 FR BND       s2
 FR BND       s3
 FR BND       s4
 FR BND       s5
 FR BND       s6
 FR BND       x1
 FR BND       x2
 FR BND       x3
 FR BND       x4
 FR BND       x5
 FR BND       x6
 UP BND       y1         1
 UP BND       y2         1
 UP BND       y3         1
 UP BND       y4         1
 UP BND       y5         1
 UP BND       y6         1

ENDATA

附錄3 整數規劃解

+Leapms>mip
relexed_solution=44.8078; number_of_nodes_branched=0; memindex=(1,2)
The Problem is solved to optimal as an MIP.
找到整數規劃的最優解.非零變數值和最優目標值如下:
  .........
    s1* =11
    s2* =4
    s5* =8
    x1* =17
    x4* =6
    x5* =11
    y1* =1
    y4* =1
    y5* =1
  .........
    Objective*=47
  .........
+Leapms>

參考文獻

[1] Wolsey L A. Integer Programming. New York: Jonh Wiley & Sons, 1998 / ISBN 978-0-471-28366-9

[2] Barany I. Strong Formulations for Multi-Item Capacitated Lot Sizing[J]. Management Science, 1984, 30(30):1255-1261.

[3] Wolsey L A. Uncapacitated Lot-Sizing Problems with Start-Up Costs[J]. Operations Research, 1989, 37(5):741-747.

[4] Belvaux G, Wolsey L A. bc-prod: A Specialized Branch-and-Cut System for Lot-Sizing Problems[J]. Management Science, 2000, 46(5):724-738.

[5] Wolsey L A. Erratum: A tight formulation for uncapacitated lot-sizing with stock upper bounds[J]. Mathematical Programming, 2017, 161(1-2):1-7.