Luento 3: Simplex-menetelmä Kuten graafinen tarkastelu osoittaa, LP-tehtävän ratkaisu on aina käyvän alueen kulmapisteessä, eli ekstreemipisteessä (extreme point). Simplex-menetelmässä ekstreemipisteitä, ja tehtävän ratkaisua, etsitään algebrallisesti Gaussin eliminointia käyttäen. Lähtökohtana on LP-tehtävä standardimuodossa (standard LP form), joka saadaan seuraavasti: (1) Kaikki muuttujat muutetaan positiivisiksi: Jos x i on rajoittamaton x j = x + j x j,missä x+ j,x j 0. (2) Jokainen epäyhtälörajoitus (paitsi muuttujien positiivisuusrajoitukset) muutetaan yhtälörajoitukseksi lisäämällä tarvittavat alijäämä- tai ylijäämämuuttujat. Jokaisen rajoitusyhtälön oikean puolen täytyy olla positiivinen. Jos näin ei ole, yhtälö kerrotaan -1:llä. (3) Kohdefunktiota voidaan joko maksimoida tai minimoida. Muista: max f(x 1,...,x n )=min f(x 1,...,x n ) Standardia LP-tehtävää vastaavan yhtälöryhmän, eli ns. simplex-taulukon, kantaratkaisut (basic solutions) vastaavat käyvän alueen ekstreemipisteitä. Kantaratkaisujen laskeminen Simplex-taulukossa on m lineaarista yhtälöä ja n tuntematonta, m < n. Valitaan (n-m):n muuttujan arvoksi nolla (ns. nollamuuttujat) ja ratkaistaan yhtälöryhmä m:n muuttujan suhteen (ns. kantamuuttujat). Jos ratkaisu on yksikäsitteinen, ko. ratkaisua kutsutaan kantaratkaisuksi. Jos kantaratkaisun jokainen komponentti 0, sanomme ettäratkaisuonkäypä (vastaa geometristä ekstreemipistettä); muuten sanomme että ratkaisu ei ole käypä, tai on ei-käypä. Kantaratkaisujen maksimilukumäärä on ( n m),elin!/m!(n m)! Esim. x1 + x 2 + 4x 3 + 2x 4 + 3x 5 = 8 4x 1 + 2x 2 + 2x 3 + x 4 + 6x 5 = 4 1
m=2,n=5 korkeintaan 5!/3! 2! = 10 kantaratkaisua. Tapaus 1: Käypä kantaratkaisu Nollamuuttujat: (x 2,x 4,x 5 ) Yhtälöt: x1 + 4x 3 = 8 4x 1 + 2x 3 = 4 Ratkaisu: Yksikäsitteinen x 1 =0,x 3 =2 Status: Käypä kantaratkaisu Tapaus 2: Ei-käypä kantaratkaisu Nollamuuttujat: (x 3,x 4,x 5 ) Yhtälöt: x1 + x 2 = 8 4x 1 + 2x 2 = 4 Ratkaisu: Yksikäsitteinen x 1 =-6,x 2 =14 Status: Ei-käypä kantaratkaisu, koska x 1 < 0. Tapaus 3: Ääretön määrä ratkaisuja Nollamuuttujat: (x 1,x 2,x 5 ) Yhtälöt: 4x3 + 2x 4 = 8 2x 3 + x 4 = 4 Ratkaisu: Ei yksikäsitteistä ratkaisua, koska yhtälöt ovat lineaarisesti riippuvat. Status: Ääretön määrä ratkaisuja. Tapaus 4: Ei ratkaisua 2
Nollamuuttujat: (x 1,x 3,x 4 ) Yhtälöt: x2 + 3x 5 = 8 2x 2 + 6x 5 = 4 Ratkaisu: Ratkaisua ei ole, sillä yhtälöt ovat ristiriitaiset. Status: Ei ratkaisua. Gaussin eliminointi Y 1: ax+ by = e a 1 Y 2: cx+ dy = f 1 x+ a 1 by = a 1 e cx+ dy = f +( c) Y 1 1 x+ a 1 by = a 1 e 0 x+ (d ca 1 b)y = f ca 1 e (d ca 1 b) 1 1 x+ a 1 by = a 1 e +( a 1 b) Y 2 0 x+ 1 y = (d ca 1 b) 1 (f ca 1 e) 1 x+ 0 y = a 1 e a 1 b(d ca 1 b) 1 (f ca 1 e) 0 x+ 1 y = (d ca 1 b) 1 (f ca 1 e) 1 x+ 0 y = (ad bc) 1 [de bf] 0 x+ 1 y = (ad bc) 1 [ ce + af] [ ] [ ][ ] x d b e I =(ad bc) y 1 c a f [ ] a b A = ; deta = ad bc c d [ ] d b A 1 =(deta) 1 c a Gaussin eliminointi: Ax = b I x = A 1 b 3
Optimointitehtävän ratkaiseminen Simplex-menetelmällä Sateenkaaren optimointimallin standardimuoto: max z = 5x 1 +4x 2 s.t. 6x 1 +4x 2 +s 1 = 24 x 1 +2x 2 +s 2 = 6 x 1 +x 2 +s 3 = 1 x 2 +s 4 = 2 x 1, x 2, s 1, s 2, s 3, s 4 0 Aloitus simplex-taulukko: kanta z x 1 x 2 s 1 s 2 s 3 s 4 ratkaisu z 1-5 -4 0 0 0 0 0 z-rivi s 1 0 6 4 1 0 0 0 24 s 1 -rivi s 2 0 1 2 0 1 0 0 6 s 2 -rivi s 3 0-1 1 0 0 1 0 1 s 3 -rivi s 4 0 0 1 0 0 0 1 2 s 4 -rivi Huom.: Kohdefunktiota, eli z-riviä, vastaa yhtälö z 5x 1 4x 2 =0. Aloitusratkaisu: Valitaan x 1 ja x 2 nollamuuttujiksi, x 1 =0,x 2 = 0, jolloin taulukosta voi suoraan lukea käyvän kantaratkaisun s 1 =24,s 2 =6,s 3 =1,s 4 =2.Geometrisesti ratkaisu vastaa origoa ja vastaava kohdefunktion z arvo on 0. Ratkaisu ei ole optimiratkaisu, koska z:n arvoa voidaan kasvattaa liikkumalla positiiviseen suuntaan pitkin x 1 -akselia tai pitkin x 2 -akselia. Valitaan uudeksi kantamuuttujaksi (ns. tuleva muuttuja (entering variable)) x 1, koska z kasvaa jyrkimmin x 1 :n suuntaan. Sääntö on,että tuleva muuttuja on se, jolla on z-rivillä itseisarvoltaan suurin negatiivinen kerroin: z 5x 1 4x 2 =0 x 1 on tuleva muuttuja. 4
x 2 6 5 4 (1) (3) 3 (2) 2 1 C (4) A B 1 0 1 2 3 4 5 6 24 = 4 1 6 = 1 1 6 = 6 1 x 1 Kuva 1: Simplex-iteraation eteneminen Sateenkaaren optimointitehtävässä Kuvan 1 mukaan x 1 :n arvoa voidaan kasvattaa siirtymällä pisteestä A = (0,0) pisteeseen B = (4,0). Algebrallisesti piste B saadaan jakamalla ratkaisusarakkeen luvut vastaavilla x 1 -sarakkeen luvuilla, jolloin saadaan rajoitussuorien ja x 1 -akselin leikkauspisteiden koordinaatit. kanta x 1 ratkaisu suhde s 1 6 24 24/6 = 4 (minimi) s 2 1 6 6/1 = 6 s 3-1 1-1/1 = -1 (ei-käypä) s 4 0 2 2/0 = (ei-käypä) Ainoastaan pienin positiivinen suhde vastaa käypää pistettä, eli pistettä B = (4,0). Kohdefunktion arvo kasvaa 5 4 :llä yksiköllä, kun siirrytään origosta pisteeseen B. 5
Määrätään seuraavaksi kannasta lähtevä muuttuja, eli ns. lähtevä muuttuja (leaving variable), joka saa arvon nolla, kun x 1 :stä tulee uusi kantamuuttuja. Koska s 1 =0vastaapienintä positiivista suhdetta, eli pistettä B,ons 1 lähtevä muuttuja. Uusi kantaratkaisu on siis (x 1,s 2,s 3,s 4 ) ja se lasketaan soveltaen Gaussin eliminointia aloitustaulukkoon. Määritellään pivot-sarake, pivot-rivi ja pivot-alkio ao. taulukosta: kanta z x 1 x 2 s 1 s 2 s 3 s 4 ratkaisu z 1-5 -4 0 0 0 0 0 s 1 0 6 4 1 0 0 0 24 pivot-rivi s 2 0 1 2 0 1 0 0 6 s 3 0-1 1 0 0 1 0 1 s 4 0 0 1 0 0 0 1 2 pivotsarake Pivot-sarake on tulevaa muuttujaa vastaava sarake ja pivot-rivi lähtevää muuttujaa vastaava rivi. Pivot-alkio on alkio jossa pivot-sarake ja pivot-rivi leikkaavat, eli tässä tapauksessa 6. Uusi kantaratkaisu saadaan soveltamalla Gaussin eliminointia tekemällä seuraavat laskut 1. Pivot-rivi: uusi pivot-rivi = (nykyinen pivot-rivi)/(pivot-alkio) 2. Muut rivit: uusi rivi = (nykyinen rivi) - (rivin pivot-sarakkeen alkio) (uusi pivotrivi) Kun laskut suoritetaan ensimmäisen kerran, päädytään taulukkoon, jossa tuleva muuttuja x 1 korvaa lähtevän muuttujan s 1. Seuraava taulukko vastaa siis kantaratkaisua (x 1,s 2,s 3,s 4 ): 6
kanta z x 1 x 2 s 1 s 2 s 3 s 4 ratkaisu z 1 0 2/3 5/6 0 0 0 20 x 1 0 1 2/3 1/6 0 0 0 4 s 2 0 0 4/3 1/6 1 0 0 2 s 3 0 0 5/3 1/6 0 1 0 5 s 4 0 0 1 0 0 0 1 2 Samoin kuin aloitusratkaisu luettiin aloitustaulukosta, voidaan uusi kantaratkaisu nyt lukea uudesta taulukosta, kun nollamuuttujat saavat arvon 0, x 2 = s 1 = 0. Uusi kantaratkaisu on x 1 =4,s 2 =2,s 3 =5,s 4 = 2, ja uusi z:n arvo on 20. Uusi taulukko ei vielä anna optimiratkaisua, koska nollamuuttujan x 2 kerroin z-rivillä on negatiivinen. Kirjoitetaan z-rivi muotoon z = 2x 3 2 5s 6 1 +20, jolloin nähdään että lisäämällä x 2 :n arvoa sen nykyisestä arvosta nolla, voidaan z:n arvoa kasvattaa. x 2 on siis uusi tuleva muuttuja. Lasketaan seuraava simplex-taulukko samaan tapaan kuin edellinen taulukko laskettiin aloitustaulukosta. s 2 on uusi lähtevä muuttuja, sillä sitä vastaa pienin positiivinen suhde (3/2) ao. taulukossa. Kohdefunktion z arvo kasvaa määrällä 2 3 =1, 3 2 jolloin uusi z:n arvo on z = 20 + 1 = 21. kanta x 2 ratkaisu suhde x 1 2/3 4 6 s 2 4/3 2 3/2 (minimi) s 3 5/3 5 3 s 4 1 2 2 Pivot-rivi on s 2 -rivi ja pivot-sarake on x 2 -sarake. Pivot-alkio on 4/3. Gaussin eliminointi tuottaa nyt seuraavan taulukon: kanta z x 1 x 2 s 1 s 2 s 3 s 4 ratkaisu z 1 0 0 3/4 1/2 0 0 21 x 1 0 1 0 1/4 1/2 0 0 3 x 2 0 0 1 1/8 3/4 0 0 3/2 s 3 0 0 0 3/8 5/4 1 0 5/2 s 4 0 0 0 1/8 3/4 0 1 1/2 Koska kummankaan nollamuuttujan s 1,s 2 z-rivin kerroin ei ola negatiivinen, z:n arvoa ei enää voida kasvattaa. Taulukko vastaa siis optimiratkaisua. 7
Optimiratkaisu on x 1 =3,x 2 = 3/2, z = 21. Slack-muuttujien optimiarvot ovat s 1 =0,s 2 =0,s 3 =5/2,s 4 =1/2. Näiden tulkinta on seuraava. Raaka-aineet M1 ja M2 käytetään optimituotannossa kokonaan. Sanotaan, että ko. resurssit ovat niukkoja (scarce resource). Sen sijaan kysyntärajoituksissa slack-muuttujat ovat positiivisia. Sanotaan, että resurssi on runsas (abundant resource) näiden rajoitusten suhteen. Huom. Sateenkaaren optimointitehtävässä kohdefunktiota z maksimoitiin. Jos z:aa pyritään minimoimaan, muuttuu simplex-metodi seuraavasti. Koska min z = max (-z), uusi tuleva muuttuja on aina se nollamuuttuja, jonka z-rivin kerroin on suurin positiivinen luku. Taulukko vastaa optimiratkaisua, kun kaikki z-rivin kertoimet ovat 0. Sääntöjä, joilla uusi tuleva- ja lähtevä muuttuja valitaan, sanotaan optimaalisuus- ja käypyysehdoiksi. Optimaalisuusehto: Kun kohdefunktiota maksimoidaan (minimoidaan) uusi tuleva muuttuja on se, jolla on itseisarvoltaan suurin negatiivinen (positiivinen) z-rivin kerroin. Taulukko vastaa optimiratkaisua, kun jokainen z-rivin kerroin 0 ( 0). Käypyysehto: Kun kohdefunktiota maksimoidaan, tai minimoidaan, uusi lähtevä muuttuja on se kantamuuttuja, jota vastaava suhde on positiivisista suhteista pienin. Simplex-menetelmä etenee siis seuraavasti: Askel 0: Valitaan käypä aloitusratkaisu. Askel 1: Valitaan tuleva muuttuja käyttäen optimaalisuusehtoa. Lopeta, jos tulevaa muuttujaa ei ole. Askel 2: Valitaan lähtevä muuttuja käyttäen käypyysehtoa. Askel 3: Lasketaan uusi kantaratkaisu Gaussin eliminointia käyttäen. Siirrytään askeleeseen 1. 8
Uusi simplex-taulukko muodostetaan käyttäen aina samoja laskuja ja sääntöjä. Simplex-menetelmä on siis iteratiivinen menetelmä ja peräkkäisiä taulukoita kutsutaan Simplex-iteraatioiksi. Kuvasta 1 nähdään, että iteraatiot alkavat ekstreemipisteestä A ja jatkuvat ekstreemipisteen B kautta ekstreemipisteeseen C. Simplex-iteraatiot kulkevat aina käyvän alueen ekstreemipisteiden kautta. Simplex-menetelmä ei siis tuota iteraation aikana käyvän alueen sisäpisteitä, kuten ns. sisäpistemenetelmä, josta puhutaan luennolla 11. Aloitusratkaisun laskeminen M-menetelmä Kun LP-tehtävän kaikki rajoitukset ovat muotoa ( ) ja rajoitusehtojen oikeat puolet ovat ei-negatiivisia, löytyy käypä aloitusratkaisu helposti slackmuuttujien kannasta (x i =0,s i 0). Kun tehtävä sisältää myös (=) ja/tai ( ) rajoituksia, standardimuodossa ei ole käyvän aloitusratkaisun määrittämiseen tarvittavia slack-muuttujia. Näinollentehtävään lisätään keinomuuttujia ajamaan tarvittavien slack-muuttujien asiaa ensimmäisessä iteraatiossa. Tätä samaa periaatetta hyödyntävät hiukan eri tavoin M-menetelmä ja kaksivaihemenetelmä. M-menetelmän toiminta on esitetty seuraavan esimerkin avulla: Olkoon LP-tehtävä muotoa: min z = 4x 1 +x 2 s.t. 3x 1 +x 2 = 3 4x 1 +3x 2 6 x 1 +2x 2 4 x 1, x 2 0 Tehtävä muutetaan standardimuotoon lisäämällä ylijäämämuuttuja (surplusvariable) s 1 ja alijäämämuuttuja (slack-variable) s 2 : 9
min z = 4x 1 +x 2 s.t. 3x 1 +x 2 = 3 4x 1 +3x 2 s 1 = 6 x 1 +2x 2 +s 2 = 4 x 1, x 2, s 1, s 2 0 Toisin kuin sateenkaaren optimointitehtävässä, tästä standardimuodosta ei suoraan saada käypää aloitusratkaisua, koska ensimmäisessä ja toisessa rajoitusyhtälössä ei ole slack-muuttujia, joiden kannasta ratkaisu löytyisi. Näin ollen rajoitusyhtälöihinonlisättävä keinomuuttujat R 1 ja R 2, ajamaan slackmuuttujien asiaa. Koska keinomuuttujat ovat kuitenkin alkuperäisen tehtävän kannalta lisämuuttujia, toisin kuin slack- ja ylijäämämuuttujat, jotka eivät muuta alkuperäisen tehtävän ratkaisua, halutaan varmistaa, että niiden arvo iteroinnin päättyessä on nolla. Tämä tehdään siten, että kohdefunktioon lisätään (vähennetään, kun maksimoidaan) sakkotermi MR i kutakin keinomuuttujaa R i kohti. Tässä M on riittävän suuri luku, jotta sakkotermi toimii. Toisaalta, liian suuri M saattaa aiheuttaa numeerisissa laskuissa hankaluuksia pyöristysvirheiden takia. Näin saadaan LP-tehtävä: min z = 4x 1 +x 2 +MR 1 +MR 2 s.t. 3x 1 +x 2 +R 1 = 3 4x 1 +3x 2 s 1 +R 2 = 6 x 1 +2x 2 +s 2 = 4 x 1, x 2, s 1, s 2, R 1, R 2, 0 Nyt käypä aloitusratkaisu löytyy kannasta R 1, R 2, s 2, eli pisteestä [x 1,x 2,s 1,R 1,R 2,s 2 ] = [0,0,0,3,6,4]. Tehtävä on kirjoitettu alla olevaan simplex-taulukkoon. z-sarake on jätetty pois taulukosta, koska sen arvot eivät muutu iteraatioissa. kanta x 1 x 2 s 1 R 1 R 2 s 2 ratkaisu z 4 1 0 M M 0 0 R 1 3 1 0 1 0 0 3 R 2 4 3 1 0 1 0 6 s 2 1 2 0 0 0 1 4 10
Taulukon z-rivi ei nyt ole konsistentti muun taulukon kanssa, siellä kohdefunktion arvo pisteessä [0,0,0,3,6,4] on z =0+0+0+3M +6M +0=9M, eikä 0, kuten taulukon ratkaisusarakkeessa väitetään. Ongelma poistuu, kun suoritetaan seuraava laskutoimitus. Uusi z-rivi = vanha z-rivi + (M R 1 -rivi + M R 2 -rivi) Tällä operaatiolla eo. taulukko muuttuu muotoon kanta x 1 x 2 s 1 R 1 R 2 s 2 ratkaisu z 4 + 7M 1 + 4M M 0 0 0 9M R 1 3 1 0 1 0 0 3 R 2 4 3 1 0 1 0 6 s 2 1 2 0 0 0 1 4 Nyt iteraatio etenee normaalin simplex-menetelmän tapaan, kunnes z-rivillä ei ole enää positiivisia kertoimia (minimointi). On tärkeää huomata, että M on suuri positiivinen luku. Näin ollen esim. eo. taulukosta tulevaksi muuttujaksi valitaan x 1, sillä -4 + 7M on z-rivin kertoimista suurin positiivinen luku. Ensimmäinen iteraatio johtaa taulukkoon kanta x 1 x 2 s 1 R 1 R 2 s 2 ratkaisu z 0 (1 + 5M)/3 M (4 7M)/3 0 0 4+2M x 1 1 1/3 0 1/3 0 0 1 R 2 0 5/3 1 4/3 1 0 2 s 2 0 3/5 0 1/3 0 1 3 Seuraavaan iteraatioon valitaan x 2 tulevaksi ja R 2 lähteväksi muuttujaksi. Kolmannella iteraatiokierroksella löydetään optimi x 1 = 2/5, x 2 = 9/5, z = 17/5. Kuten esimerkistä huomataan, keinomuuttujat poistuvat kannasta, eli saavat arvon 0, ensimmäisillä iteraatiokierroksilla. Tämä johtuu siitä, että niitä sakotettiin suurella kertoimella M kohdefunktiossa. Kaksivaihemenetelmä M-menetelmän numeerinen ratkaisu saattaa kärsiä pyöristysvirheistä, jotka aiheutuvat suurten ja pienten kertoimien yhtäaikaisesta käsittelystä. Tätä ongelmaa ei ole käytettäessä kaksivaihemenetelmää, jonka ensimmäisessä vaiheessa etsitään käypä aloituspiste ja toisessa vaiheessa sovelletaan normaalia 11
simplex-menetelmää lähtien ensimmäisessä vaiheessa löydetystä aloituspisteestä. Ratkaistaan nyt edellisen kohdan ongelma kaksivaihemenetelmällä. Vaihe I Ensimmäisessä vaiheessa rajoitusehtoihin lisätään keinomuuttujat R 1 ja R 2 samoin kuin M-menetelmässä, mutta nyt minimoidaan näiden summaa. Eli ensimmäisen vaiheen tehtävä onmuotoa min r = R 1 +R 2 s.t. 3x 1 +x 2 +R 1 = 3 4x 1 +3x 2 s 1 +R 2 = 6 x 1 +2x 2 +s 2 = 4 x 1, x 2, s 1, s 2, R 1, R 2 0 Tehtävää vastaava simplex-taulukko on kanta x 1 x 2 s 1 R 1 R 2 s 2 ratkaisu r 0 0 0 1 1 0 0 R 1 3 1 0 1 0 0 3 R 2 4 3 1 0 1 0 6 s 2 1 2 0 0 0 1 4 Samoin kuin M-menetelmän tapauksessa, tässä taulukossa osalla kantamuuttujista on nollasta poikkeava kerroin r-rivillä. Ongelma poistuu seuraavalla laskutoimituksella. Uusi r-rivi = vanha r-rivi + (1 R 1 -rivi + 1 R 2 -rivi) Nyt saadaan seuraava taulukko. kanta x 1 x 2 s 1 R 1 R 2 s 2 ratkaisu r 7 4 1 0 0 0 9 R 1 3 1 0 1 0 0 3 R 2 4 3 1 0 1 0 6 s 2 1 2 0 0 0 1 4 12
Kahden normaalin simplex-iteraation jälkeen päädytään optimiin ja seuraavaan taulukkoon. kanta x 1 x 2 s 1 R 1 R 2 s 2 ratkaisu r 0 0 0 1 1 0 0 x 1 1 0 1/5 3/5 1/5 0 3/5 x 2 0 1 3/5 4/5 3/5 0 6/5 s 2 0 0 1 1 1 1 1 Koska optimissa r = 0, olemme löytäneet käyvän aloitusratkaisun (x 1 = 3/5, x 2 = 6/5, s 2 = 1), ja voimme siirtyä vaiheeseen 2. Mikäli optimiratkaisussa olisi r > 0, tarkoittaisi se, että alkuperäisellä tehtävällä eiolekäypää ratkaisua. Tästä eteenpäin keinomuuttujille (R 1,R 2 ) ei ole enää käyttöä, joten niitä vastaavat sarakkeet voidaan jättää pois seuraavista taulukoista. Vaihe II Vaiheessa II lähdetään siis liikkeelle vaiheessa I löydetystä käyvästä aloitusratkaisusta, mutta kohdefunktion paikalle laitetaan nyt alkuperäinen kohdefunktio z. Näin saadaan muodostettua seuraava taulukko. kanta x 1 x 2 s 1 s 2 ratkaisu z 4 1 0 0 0 x 1 1 0 1/5 0 3/5 x 2 0 1 3/5 0 6/5 s 2 0 0 1 1 1 Jälleen kantamuuttujien arvot z-rivillä poikkeavat nollasta, joten täytyy tehdä seuraava laskutoimitus. Uusi z-rivi = vanha z-rivi + (4 x 1 -rivi + 1 x 2 -rivi) Näin saimme muodostettua seuraavan taulukon, josta löydämme alkuperäisen tehtävän optimin yhdellä simplex-iteraatiolla. kanta x 1 x 2 s 1 s 2 ratkaisu z 0 0 1/5 0 18/5 x 1 1 0 1/5 0 3/5 x 2 0 1 3/5 0 6/5 s 2 0 0 1 1 1 13