TAOP61 Optimering

Kolumngenerering
LP: Optimal baslösning
x=
LP-problem med många variabler:
v ∗ = min
då
cT x
Ax = b
x ≥0
= min
då
n
X
j=1
n
X
Baslösning: xN = 0 och xB = B −1 b.
där ĉj = cj − ajT ŷ , och ŷ = (B −1 )T cB är den optimala duallösningen.
Baslösningen är optimal om ĉ ≥ 0.
Beräkning av xB = B −1 b och ŷ = (B −1 )T cB kräver enbart arbete med B,
en m × m matris.
cj xj
Kontroll av optimalitet: Är ĉj = cj − ajT ŷ ≥ 0 för alla j?
Kontrollera ett j åt gången.
aj xj = b
Kolumner som uppfyller detta behöver ej sparas.
j=1
Om vi hittar en kolumn som inte uppfyller detta villkor, väljer vi
motsvarande variabel som inkommande.
xj ≥ 0 ∀j
där aj är kolumnerna i matrisen A.
Variant av simplexmetoden: Välj första variabeln med ĉj < 0 som
inkommande.
Vi antar att n m och att n, antalet kolumner i A, är mycket stort.
Kaj Holmberg (LiU)
Målfunktion: c T x = cBT xB + cNT xN = cBT B −1 b + ĉNT xN ,
där A är en m × n matris, eller
v∗
xB
xN
TAOP61 Optimering
30 oktober 2015
1 / 17
Kaj Holmberg (LiU)
TAOP61 Optimering
30 oktober 2015
Kolumngenerering
Kolumngenerering: Kapningsproblemet
Om kolumnerna är element i en viss mängd, a ∈ S, kan man generera varje
kolumn genom att använda vissa regler eller formler.
Vi har stockar av en viss längd och ska kapa dessa i olika längder.
Om mängden S beskrivs av bivillkor, kan vi lösa ett optimeringsproblem för
att få kolumnen.
Vi vill finna
v̂ = min ĉj
j
Antag att vi vill få bi enheter av längd li , från stockar som är L långa. Vi
vill kapa så att det totala antalet stockar minimeras, vilket också innebär
att det totala avfallet minimeras.
Vi kallar det sätt en stock kapas ett kapningsmönster och det kan beskrivas
med följande koefficienter.
aij = antalet gånger längden li ingår i kapningsmönster j.
Variabler: xj = antalet gånger kapningsmönster j används.
n
X
∗
v = min
xj
Eftersom vi har ĉj = cj − ajT ŷ , vill vi lösa
v̂ = min(cj − ajT ŷ )
j=1
j
då
Om cj = c T aj :
aij xj = bi
i = 1, . . . , m (1)
xj ≥ 0, integer ∀j
Många variabler. Använd kolumngenerering.
a∈S
TAOP61 Optimering
n
X
j=1
v̂ = (c − ŷ )T aj = min(c − ŷ )T a
Kaj Holmberg (LiU)
2 / 17
30 oktober 2015
3 / 17
Kaj Holmberg (LiU)
TAOP61 Optimering
(2)
30 oktober 2015
4 / 17
Kolumngenerering: Kapningsproblemet
Kolumngenerering: Kapningsproblemet
Ett kapningsmönster är helt enkelt en vektor a sådan att
m
X
ai li ≤ L, ai ≥ 0 och heltal för alla i
Vi får lösningen â(ȳ ) och
i=1
För kapningsproblemet har vi cj = 1, vilket ger ĉj = 1 −
m
X
ĉk = min ĉj = 1 − v̂ (ȳ )
j
aij ȳi :
i=1
ĉk = min ĉj = min(1 −
j
j
m
X
aij ȳi ) = 1 − max
i=1
j
m
X
Om ĉk ≥ 0, dvs. om v̂ (ȳ ) ≤ 1, så är den nuvarande baslösning optimal.
Annars är ĉk < 0, dvs. v̂ (ȳ ) > 1, och motsvarande variabel, xk , ska komma
in i basen.
aij ȳi
i=1
Vi sätter ain+1 = âi (ȳ ) ∀i, dvs. lägger till den nya kolumnen. Sedan görs en
pivotering och en ny baslösning och duallösning erhålls.
Kolumnerna a kan därför genereras genom att lösa följande problem.
m
X
v̂ (ȳ ) = max
ȳi ai
j
då
Detta upprepas iterativt.
i=1
m
X
Eftersom det finns ett ändligt antal kapningsmönster, dvs. variabler,
kommer simplexmetoden att avslutas inom ett ändligt antal iterationer.
li ai ≤ L
i=1
ai ≥ 0, integer ∀i
vilket är ett litet kappsäcksproblem.
Kaj Holmberg (LiU)
TAOP61 Optimering
30 oktober 2015
5 / 17
Kolumngenerering: Numeriskt exempel
Kaj Holmberg (LiU)
TAOP61 Optimering
30 oktober 2015
6 / 17
30 oktober 2015
8 / 17
Kolumngenerering: Numeriskt exempel




1 0 0
2 0 0
B =  0 2 0  ger B −1 = 12  0 1 0  och
0 0 2
0 0 1
 
1
ȳ = (cBT B −1 )T = 12  1 . Lös nu
2
1
v̂ (ȳ ) = max 2 a1 + 12 a2 + a3
då 10a1 + 12a2 + 15a3 ≤ 25
ai ≥ 0 integer ∀i
 
1

0  med v̂ (ȳ ) = 1.5.
Lösning: â =
1
 
1
Sätt a4 = â =  0 , och ĉ4 = 1 − v̂ (ȳ ) = − 12 < 0.
1
Låt x4 komma in i basen.




100
10
m = 3, b =  150  , l =  12  and L = 25.
100
15
 
 
 
2
0
0
1
2
3





0 , a =
2
0 
Startbas: a =
and a =
0
0
1
z = min
då
x1 + x2 + x3
2x1
= 100
2x2
= 150
x3
= 100
xj
≥
0 ∀j
som har trivialt lösningen x1 = 50, x2 = 75 och x3 = 100, vilket ger
z = 225.
Kaj Holmberg (LiU)
TAOP61 Optimering
30 oktober 2015
7 / 17
Kaj Holmberg (LiU)
TAOP61 Optimering
Kolumngenerering: Numeriskt exempel
Kolumngenerering
Kolumngenereringsubproblemet är nu
z = min
då
x1 + x2 + x3 + x4
2x1
+x4 = 100
2x2
= 150
x3
+x4 = 100
xj
≥
0 ∀j
Lösning: x1 = 0, x2 = 75, x3 = 0 och x4 = 100, vilket ger z = 175.




1 0 0
2 0 0
B =  0 2 0  ger B −1 = 12  0 1 0  och
1 0 1
−2 0 2
 
0
1
T
−1
T
1 .
ȳ = (cB B ) = 2
2
Kaj Holmberg (LiU)
TAOP61 Optimering
30 oktober 2015
v̂ (ȳ ) = max 12 a2 + a3
då 10a1 + 12a2 + 15a3 ≤ 25
ai ≥ 0 integer ∀i
 
0
Lösning: â =  2  med v̂ (ȳ ) = 1. Vi har nu ĉ5 = 1 − v̂ (ȳ ) = 0, vilket
0
indikerar optimalitet.
 
0

2 , 75
Den optimala lösningen är att använda kapningsmönster 2,
0
 
1

0 , 100 gånger, vilket kräver 175 stockar.
gånger och mönster 4,
1
9 / 17
Kelleys plansnittningsmetod
Kaj Holmberg (LiU)
TAOP61 Optimering
30 oktober 2015
10 / 17
Kelleys plansnittningsmetod
Vi ska lösa det konvexa problemet
v ∗ = min c T x då x ∈ X = {x : gi (x) ≤ 0 i = 1, . . . , m}.
Vi ersätter X med kuben Q (1) = {x : −M ≤ xj ≤ M ∀j}.
Q (k) ska bli alltmer lik X , samtidigt som X ⊆ Q (k) .
1
Lös LP-problemet min c T x då x ∈ Q (k) , vilket ger lösningen x (k) .
2
Konstruera Q (1) och sätt k = 1.
Lös min c T x då x ∈ Q (k) , och låt lösningen vara x (k) .
Om Q (k) = ∅, stopp. Problemet har ingen tillåten lösning.
Om x (k) ∈ X så är x (k) optimum, och vi slutar.
3
Om x (k) ∈ X , stopp. x (k) är optimallösningen.
Om x (k) 6∈ X , tar vi fram ett linjärt bivillkor som gör x (k) otillåten.
4
Finn gl (x (k) ) = max gi (x (k) )) och låt
i
Q (k+1) = Q (k) ∩ {x : ∇gl (x (k) )T x ≤ ∇gl (x (k) )T x (k) − gl (x (k) )}.
Finn det mest överskridna bivillkoret, gl (x (k) ) = maxi gi (x (k) ), och
konstruera bivillkoret som
gl (x (k) ) + ∇gl (x (k) )T (x − x (k) ) ≤ 0.
5
Låt k = k + 1 och gå till 2.
x (k) uppfyller inte detta bivillkor, men alla punkter i X gör det.
Sätt nu
Q (k+1) = Q (k) ∩ {x : ∇gl (x (k) )T x ≤ ∇gl (x (k) )T x (k) − gl (x (k) )}
Kaj Holmberg (LiU)
TAOP61 Optimering
30 oktober 2015
11 / 17
Kaj Holmberg (LiU)
TAOP61 Optimering
30 oktober 2015
12 / 17
Kelleys plansnittningsmetod: Numeriskt exempel
Kelleys plansnittningsmetod: Numeriskt exempel
min −x1 − x2 då x12 + 4x22 ≤ 1.
Vi ska lösa
Vi får
∇g (x (1) )
=
Starta med Q (1) = {−1 ≤ x1 ≤ 1, −1 ≤ x2 ≤ 1}.
g (x) =
x12
+
4x22
− 1 ≤ 0, och ∇g (x) =
(1)
(1)
Första LP-lösningen blir x1 = 1, x2
lösningen är inte alls tillåten.
Kaj Holmberg (LiU)
2x1
8x2
30 oktober 2015
13 / 17
Kaj Holmberg (LiU)
TAOP61 Optimering
30 oktober 2015
14 / 17
Kelleys plansnittningsmetod: Numeriskt exempel
(3)
Vi får nu Q (3) = Q (2) ∩ {2x1 + 4x2 ≤ 3}, och LP-lösningen blir x1 = 1,
(3)
x2 = 0.25, vilket ger g (x (1) ) = 0.25, så lösningen närmar sig tillåtenhet.
2
(3)
Vi får ∇g (x ) =
, och det nya bivillkoret blir 2x1 + 2x2 ≤ 2.25.
2
TAOP61 Optimering
, och det nya bivillkoret blir 2x1 + 8x2 ≤ 6.
(2)
Kelleys plansnittningsmetod: Numeriskt exempel
Kaj Holmberg (LiU)
Vi får nu Q (2) = Q (1) ∩ {2x1 + 8x2 ≤ 6}, och LP-lösningen blir x1 = 1,
(2)
x2 = 0.5, vilket ger g (x (1) ) = 1, så lösningen lite mindre otillåten.
2
(2)
Vi får ∇g (x ) =
, och det nya bivillkoret blir 2x1 + 4x2 ≤ 3.
4
.
= 1, vilket ger g (x (1) ) = 4, så
TAOP61 Optimering
2
8
30 oktober 2015
15 / 17
(4)
Vi får nu Q (4) = Q (3) ∩ {2x1 + 2x2 ≤ 2.25}, och LP-lösningen blir x1 = 1,
(4)
x2 = 0.125, vilket ger g (x (1) ) = 0.0625, så lösningen är nästan tillåten.
2
(4)
Vi får ∇g (x ) =
, och det nya bivillkoret blir 2x1 + x2 ≤ 2.0625.
1
Kaj Holmberg (LiU)
TAOP61 Optimering
30 oktober 2015
16 / 17
Kelleys plansnittningsmetod: Numeriskt exempel
Vi får nu Q (5) = Q (4) ∩ {2x1 + x2 ≤ 2.0625}, och LP-lösningen blir
(5)
(4)
x1 = 0.9375, x2 = 0.1875, vilket ger g (x (1) ) = 0.01953125.
Nu anser vi att lösningen är tillräckligt nära tillåtenhet för att avbryta
metoden.
Kaj Holmberg (LiU)
TAOP61 Optimering
30 oktober 2015
17 / 17