Mat-.34 Lineaarinen ohjelmointi 5..7 Luento Kertausta Lineaarinen ohjelmointi - Syksy 7 /
LP ja Simplex Kurssin rakenne Duaalisuus ja herkkyysanalyysi Verkkotehtävät Kokonaislukutehtävät Lineaarinen ohjelmointi - Syksy 7 /
LP-tehtävä Jokainen LP-tehtävä voidaan muuttaa standardimuotoon: min c x s.e. Ax=b x LP:n käypä alue on aina monitahokas LP:n optimiratkaisu löytyy aina käyvän alueen kulmapisteestä Lineaarinen ohjelmointi - Syksy 7 / 3
Simplex Kulmapistettä vastaa käypä kantaratkaisu x Kantamuuttujia x B vastaa kantamatriisi B = A:n kantamuuttujia vastaavat sarakkeet Ei-kantamuuttujat x N = Huomaa: Ax=Bx B +A N x N =Bx B =b => x B =B - b c x = c B x B +c N x N =c B x B = c B B - b Lineaarinen ohjelmointi - Syksy 7 / 4
Simplex Simplex-taulukko: Red. kustannukset -Kustannus - c B ' B - b c' c B 'B - A Kantamuuttujien arvot B - b B - A -Kantasuunnat Red. kustannukset: miten muuttujan tuominen kantaan vaikuttaa kustannukseen? Kantamuuttujilla nollia. j. kantasuunta -B - A j : mitä kantamuuttujille tapahtuu, kun x j tuodaan kantaan? Lineaarinen ohjelmointi - Syksy 7 / 5
Simplex Jos c j <, pienentää x j :n kasvattaminen kustannusta => kantaan! Kasvatetaan, kunnes ensimmäinen kantamuuttuja menee nollaksi eli poistuu kannasta Kannasta poistuva muuttuja x B(l) se, jonka indeksi B(l) minimoi lausekkeen: xb( l), ub( l) > u B( l), jossa u B(l) = Simplex-taulukon j. sarakkeen ja l. rivin alkio eli muuttujaa x B(l) vastaava j. kantasuunta Lineaarinen ohjelmointi - Syksy 7 / 6
Kannan vaihto: Simplex Muutetaan kantaan tulevaa muuttujaa vastaava sarake yksikkövektoriksi, jossa kannasta poistuvan rivin alkio ykkönen ja muut nollia Jos nyt red. kustannukset ei-negatiivisia, ollaan optimissa Jos ei, toistetaan edellinen Lineaarinen ohjelmointi - Syksy 7 / 7
Simplexin implementaatiot Kirjan esimerkki 3.5: min s.e. x x x x + x + x 3 x + x + x 3 x + x + x 3 x x, x, 3 3 s.e. min x x x x + x + x + x 3 4 = x + x + x + x 3 5 = x + x + x + x 3 6 = x,..., x 6 3 Aloitusratkaisuksi x=(,,,,,) eli c = c ' x = ja c c = B B B x B = ( x, x, x ) 4 5 6 Lineaarinen ohjelmointi - Syksy 7 / 8
Simplex x 3 A=(,,) B=(,,) / = / = x 4 = x 5 = x 6 = x x x 3 - - - x 4 x 5 x 6 *- *-.5 *5 / D=(,,) E=(4,4,4) C=(,,) / = x x x Lineaarinen ohjelmointi - Syksy 7 / 9
Simplex x 3 A=(,,) B=(,,) x 4 = x = x 6 = x x -7.5.5 x 3 - - x 4 x 5 5 -.5.5 - x 6 D=(,,) E=(4,4,4) C=(,,) x x Lineaarinen ohjelmointi - Syksy 7 /
Simplex x 3 A=(,,) B=(,,) x 3 = x = x 6 = x x -4.5 -.5 x 3 x 4 - x 5 4 -.5 -.5 x 6 D=(,,) E=(4,4,4) C=(,,) x x Lineaarinen ohjelmointi - Syksy 7 /
Simplex x 3 A=(,,) B=(,,) x 3 = x = x = 36 4 4 4 x x x 3 x 4 3.6.4 -.6.4 x 5.6.4.4 -.6 x 6.6 -.6.4.4 D=(,,) E=(4,4,4) C=(,,) x x Lineaarinen ohjelmointi - Syksy 7 /
Duaalitehtävä LP:lle voidaan muodostaa duaalitehtävä Idea: relaksoidaan rajoite Ax=b, mutta sakotetaan sen rikkomisesta hinnalla p (duaalimuuttuja) P: D: min c x max p b s.e. Ax=b s.e. p A c x p vapaa Jos primaalille ja duaalille löytyy optimiratkaisut, ovat vastaavat optimikustannukset samat, eli c x*=p* b Lineaarinen ohjelmointi - Syksy 7 / 3
Duaalitehtävä Duaaalin ja primaalin optimiratkaisuja yhdistävät täydentyvyysehdot (complementary slackness): p i *(a i x*-b i ) = x j *(p* A j -c j ) = Duaalimuuttuja vastaa primaalin rajoitetta ja toisinpäin Ei-degeneroituneessa tapauksessa em. ehdoista saadaan laskettua x* kun p* tunnetaan tai toisinpäin Lineaarinen ohjelmointi - Syksy 7 / 4
Duaalitehtävä Duaalimuuttujan tulkinnat: Sakko rajoitteen rikkomisesta (tehtävän määritelmästä) Marginaalikustannus (b i b i +, p i b i p i b i +p i ) Oikea hinta Peliteoreettinen näkökulma Lineaarinen ohjelmointi - Syksy 7 / 5
Duaalitehtävä Duaalimuuttuja p =c B B - Sijoitetaan duaalitehtävän rajoitusehtoon: p A c c - c B B - A => duaalikäypyys = primaalin optimaalisuus! Ratkaisu primaalikäypä ja duaalikäypä optimaalinen! Simplex etenee primaalikäypyydestä kohti duaalikäypyyttä duaalisimplex etenee duaalikäypyydestä kohti primaalikäypyyttä Lineaarinen ohjelmointi - Syksy 7 / 6
Duaalisimplex Lähtötilanne: duaalikäypä, muttei primaalikäypä ratkaisu Ts. redusoidut kustannukset ei-negatiivisia, mutta jokin kantamuuttuja negatiivinen Poistetaan neg. muuttuja x B(l) kannasta Kantaan muuttuja x j, jonka indeksi j minimoi lausekkeen: c j, vlj < v lj, jossa v lj on taulukon l. rivin ja j. sarakkeen alkio Lineaarinen ohjelmointi - Syksy 7 / 7
Duaalisimplex Esimerkki: P: min x + x D: s.e x + x x = 3 x x 4 = x,,3,4 max s.e p + p p + p p p, Primaali voidaan esittää kahdessa dimensiossa, kun ja kohdellaan surplus-muuttujina x x3 4 Lineaarinen ohjelmointi - Syksy 7 / 8
Duaalisimplex Aloitetaan duaalikäyvästä ratkaisusta x =(,,-,-), jolla c'= (,,,) Tällöin p' = c ' B = (,) B x c x x 3 x 4 = = -* - x x x x 3 4 - - - / /(-) p / b p Lineaarinen ohjelmointi - Syksy 7 / 9
Duaalisimplex x x =(,,,-), p =(/,) c x x x x 3 4 x x x 4 = = - -* / / - / -/ * *(-) p b / p Lineaarinen ohjelmointi - Syksy 7 /
Duaalisimplex x=(,/,,), p=(/,/) x B optimi! x c x x = = -3/ / x x x x 3 4 / -/ / / - p b x / p Lineaarinen ohjelmointi - Syksy 7 /
Herkkyysanalyysia Optimiratkaisu tehtävälle olemassa Tehtävää poikkeutetaan muuttamalla A:ta, b:tä tai c:tä, tai lisäämällä tehtävään uusi muuttuja tai rajoite Uusi optimiratkaisu voidaan saada johdettua alkuperäisestä ratkaisusta ei tarvetta aloittaa alusta (ks. luento 7) Sama kanta poikkeutuksen jälkeen optimaalinen => tehtävä robusti Kanta vaihtuu => datan suhteen on herkkyyttä Lineaarinen ohjelmointi - Syksy 7 /
Herkkyysanalyysia Data voidaan esittää myös parametrisessa muodossa, jos siitä ei ole täyttä varmuutta min x +(4+ θ) x min x +x s.e. x +x = s.e. x +x = + θ x,x x,x Optimiratkaisu θ:n funktio: Esiintyy c:ssä red. kustannukset & Simplex Esiintyy b:ssä käypyys & duaalisimplex Lineaarinen ohjelmointi - Syksy 7 / 3
Verkkotehtävät Verkon määrittävät solmut N ja kaaret A Solmuille on määrätty divergenssit b i = verkon ulkopuolelta solmuun tuleva/siitä lähtevä virtaus Kaarille on määrätty kustannukset ja virtauskapasiteetit Yleinen tehtävä: etsi virtausvektori, joka täyttää divergenssiehdot minimikustannuksella 3,[,] 3 5 4 Lineaarinen ohjelmointi - Syksy 7 / 4
Verkkotehtävät Verkkotehtävä voidaan esittää standardimuotoisena LP:nä min c f s.e. Af = b f, missä päätösmuuttujat ovat kaarten virtaukset, b divergenssivektori ja A matriisi, joka kuvaa solmujen ja kaarten yhteyksiä Tehtävä voidaan täten ratkaista Simplexillä Tehtävällä erikoisrakenne => verkkosimplex Lineaarinen ohjelmointi - Syksy 7 / 5
Verkkosimplex Verkkotehtävässä käypä kantaratkaisu = käypä puuratkaisu Puuratkaisu: Muodostetaan puu (yhtenäinen verkko, jossa ei syklejä) Asetetaan puuhun kuulumattomien kaarten virtaus nollaksi Lasketaan puun kaarten virtaus divergenssiehdoista 3 3 3 5 4 Lineaarinen ohjelmointi - Syksy 7 / 6
Verkkosimplex Idea: Voidaanko puuhun lisätä kaari siten, että muodostuvaa sykliä pitkin virtausta työntämällä saadaan kustannusta pienennettyä? Jos, työnnetään virtausta, kunnes jonkin kaaren virtaus nollaksi => kanta vaihtuu 3 3 Lineaarinen ohjelmointi - Syksy 7 / 7
Verkkosimplex Kaaren red. kustannus negatiivinen => kaaren tuottama sykli vähentää kustannusta Verkkotehtävissä red. kustannus lasketaan duaalimuuttujien eli solmuhintojen avulla Puun T kaarille pätee: p p i p j n = = c ( i, j) T Käytetään edellä laskettuja solmuhintoja, jolloin red. kustannus: c = c ( p p ) ( i, j) T. ij ij i ij, j Lineaarinen ohjelmointi - Syksy 7 / 8
Solmuhintojen tulkinta: Verkkosimplex p i -p j pienin kustannus solmusta i solmuun j ratkaisupuun kaaria käyttämällä Puun kaarille siis pätee p i -p j =c ij Jos p i -p j > c ij jollekin ( i, j) T (red. kustannus negatiivinen), kannattaisi käyttää mielummin ko. kaarta kuin puuta => kaari kantaan Virtausta työnnetään muodostuvaan sykliin, kunnes jonkin takaperin suunnatun kaaren virtaus menee nollaan => poistuu kannasta Lineaarinen ohjelmointi - Syksy 7 / 9
Verkkosimplex Esimerkki: Kapasiteettirajoitukseton tehtävä; kuvassa tarjonnat, kysynnät ja kaarten kustannukset Alla lähtöratkaisu, jolle: p p c Siis kaari (,) kantaan! 5 = p = = p c 5 + c 5 ( p = p 5 = p c 5 = ) = < 3 3 3 Lineaarinen ohjelmointi - Syksy 7 / 3 3 3 5 4 5 4
Verkkosimplex Syklin kaaret (5,) ja (,5) takaperin suunnattuja θ* = Siis kaari (5,) pois kannasta! Nyt c ij p i = = f min ( k, l) B =, f kl f 5 = min{,3} = = ( i, j) T i, f 5 = c3= c3=, c5 = c5 = 3 3 Lineaarinen ohjelmointi - Syksy 7 / 3 5 Kuvan kanta optimaalinen, kustannus! 4
Verkkotehtävä Verkkotehtävän erikoistapauksilla räätälöityjä algoritmeja Lyhyimmän polun tehtävä: Bellman-Ford nimikettä korjaava Dijkstra nimikkeen asettava Maksimivirtaustehtävä: Ford-Fulkerson tutkitaan, löytyykö polkua, jota pitkin virtausta voidaan lisätä Jos löytyy, lisätään kapasiteettien rajoissa; jos ei, ollaan optimissa Lineaarinen ohjelmointi - Syksy 7 / 3
Kokonaislukutehtävä LP:tä hankalampi ratkaista Ei tunnettuja tehokkaita algoritmeja Kurssilla käsiteltiin Gomoryn leikkaava taso perustuu Simplextaulukkoon Branch & Bound edellistä tehokkaampi; jaetaan tehtävää osatehtäviin, joille lasketaan kustannuksen alarajoja tai kokonaislukuratkaisun löytyessä ylärajoja Branch & Cut tehostaa edellistä syvemmillä leikkauksilla; leikkauksen löytyminen hankalaa Lineaarinen ohjelmointi - Syksy 7 / 33
Esimerkki: min s. e. x 4x x x + 6x + x x, x x, x 4 Ζ Branch & Bound 9 F : x 3 F : x Relaksaation ratkaisu x*=(.5,.5); jaetaan alue x :n suhteen ko. murtoluvun poissulkeviin alueisiin F ja F aktiivisten osatehtävien lista {F, F } x* LP-relaksaation kustannus = -3.5, joten koko alueen alarajaksi b(f)=-3.5 Ei löydettyjä kok.lukuratkaisuja, joten U= Lineaarinen ohjelmointi - Syksy 7 / 34
Branch & Bound Osatehtävä F ei ole käypä poistetaan listasta Ratkaistaan osatehtävän F relaksaatio, josta saadaan alarajaksi b(f )=-3.5 (tiukempi) F 4 : x F : x x * F 3 : x F :n relaksaation optimi x *=(.75, ), joten jaetaan edelleen x :n suhteen osatehtäviksi F 3 ja F 4 aktiivisten osatehtävien lista {F 3, F 4 } Lineaarinen ohjelmointi - Syksy 7 / 35
Branch & Bound Osatehtävän F 3 relaksaation ratkaisu x*=(,), eli kokonaislukuratkaisu! Kustannus -3, joten U:=-3. F 3 tutkittu eli pois aktiivisten listasta Osatehtävän F 4 relaksaation ratkaisu (,3/) ja optimikustannus -3, eli b(f 4 ) U => poistetaan F 4 listasta Lista on tyhjä, eli alkup. tehtävän optimiratkaisu löydetty! x*=(,), c x*=-3. x 4 * x 3 * Lineaarinen ohjelmointi - Syksy 7 / 36
Tentti To.. klo 9-, sali M Uusinta ma 4.. klo 9-, salit D,E,L Viisi tehtävää Kotitehtävä- ja harjoitustyöpisteet voimassa vuoden 9 tammikuun uusintatenttiin asti Lineaarinen ohjelmointi - Syksy 7 / 37