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
© Copyright 2024