MS-C2105 Optimoinnin perusteet Malliratkaisut 3 Ehtamo Demo 1: Simplex-menetelmä Muodosta lineaarisen tehtävän standardimuoto ja ratkaise tehtävä taulukkomuotoisella Simplex-algoritmilla. max 5x 1 + 4x 2 s.e. x 1 + x 2 4 6x 1 + 3x 2 18 x 1 0, x 2 0 Ratkaisu Simplex-menetelmä perustuu tietoon siitä, että lineaarisen tehtävän optimi löytyy käyvän alueen nurkkapisteistä. Menetelmässä on kolme vaihetta: 1) Valitaan seuraava etenemissuunta. 2) Lasketaan käypyysehdon avulla, kuinka pitkälle tähän suuntaan edetään. 3) Ratkaistaan tämä nurkkapiste Gaussin eliminoinnilla. Tämän jälkeen tarkistetaan, ollaanko saavuttu optimiin. Algoritmi aloitetaan muuttamalla tehtävä aluksi standardimuotoon. Tässä muodossa kaikki muuttujat ovat positiivisia, ja rajoitusehdot ovat muotoa a 1 x 1 + a 2 x 2 +... + a n x n = b Epäyhtälörajoitukset muutetaan yhtälörajoitteisiksi lisäämällä tai vähentällä uusi slack- tai surplus-muuttuja s. Tämän tehtävän standardimuoto on max 5x 1 + 4x 2 s.e. x 1 + x 2 +s 1 = 4 6x 1 + 3x 2 +s 2 = 18 x 1 0, x 2 0, s 1 0, s 2 0 Simplex-algoritmin keskeinen työkalu on niin kutsuttu Simplex-taulukko. Taulukon ensimmäisellä rivillä ovat kohdefunktion kertoimet negatiivisina. Seuraavat rivit vastaavat kukin yhtä rajoitusehtoa. Taulukossa on yksi sarake kutakin muuttujaa kohden ja lisäksi yksi tulossarake. Tämän tehtävän Simplex taulukko on: x 1 x 2 s 1 s 2 Tulos Kohde 5 4 0 0 0 s 1 1 1 1 0 4 s 2 6 3 0 1 18 Vasemmanpuoleisimmassa sarakkeessa olevat muuttujat (nyt s 1 ja s 2 ) ovat niin kutsutut kantamuuttujat, eli muuttujat, jotka eivät ole nollia. Kantamuuttujia on aina yhtä monta kuin on rajoitusehtoja. Näiden muuttujien arvon voi lukea Tulossarakkeesta vastaavalta riviltä. Muut muuttujat (nyt x 1 ja x 2 ) sen sijaan ovat nollia. Kuten nyt, Simplex usein aloitetaan tilanteesta, jossa varsinaiset muuttujat (x i ) ovat nollia, ja slack- ja surplus-muuttujat (s i ) positiivisia. Jos näin ei ole, täytyy kantamuuttujat valita käsin, jotta Simplex-taulukko olisi oikeaoppinen. Kantamuuttujien sarakkeet ovat nollia, lukuunottamatta sitä alkiota, joka on kantamuuttujaa vastaavalla rivillä. Tämä alkio on aina 1. 1
Algoritmin ensimmäinen vaihe on seuraavan nurkkapisteen valinta. Valitaan suunnaksi se muuttuja, jonka suuntaan siirtyminen parantaa kohdefunktion arvoa kaikista eniten. Nyt kyseessä on maksimointi, joten valitaan se muuttuja, jonka kerroin on suurin positiivinen. Kohdefunktiorivillä kertoimet merkittiin negatiivisina, joten suurin kasvusuunta vastaa pienintä negatiivista kerrointa. Pienin negatiivinen kerroin on x 1 :lla, -5. Nyt x 1 :stä kutsutaan tulevaksi muuttujaksi, koska se tulee kantaan. Vastaavaa saraketta kutsutaan pivot-sarakkeeksi. Huomaa. Minimoitaessa valittaisiin luonnollisesti suurin positiivinen kerroin, eli se muuttuja, jonka suuntaan kohdefunktio pienenee nopeiten. Seuraavaksi laskemme, kuinka pitkälle haetussa suunnassa edetään. Tämä tapahtuu laskemalla tulossarakkeen ja pivot-sarakkeen alkioiden osamäärä, eli niin kutsuttu käypyysehto: s 1 4/1 = 4 s 2 18/6 = 3 Valitaan näistä se, jossa osamäärä on pienin positiivinen. Tilanne voidaan ajatella niin, että edetään jollain rajoitussuoralla, ja osamäärät vastaavat toisten, leikkaavien, suorien leikkauspisteitä. Haluamme mennä eteenpäin (vain positiiviset luvut) ja valita ensimmäisen leikkauskohdan (pienin luku), jotta emme joudu käyvän alueen ulkopuolelle. Huomaa. Mikäli joudut jakamaan nollalla, voit käsitellä arvoa äärettömänä. Pienin positiivinen osamäärä oli rivillä, joka vastasi kantamuuttujaa s 2. Muuttujaa s 2 kutsutaan nyt lähteväksi kantamuuttujaksi, koska se poistuu kannasta. Nyt olemme saaneet ratkaistua uudet kantamuuttujat, joten siirrymme vaiheeseen 3. Seuraavaksi ratkaisemme uuden nurkkapisteen käyttäen Gaussin eliminointia. Tavoite on saada uusia kantamuuttujia vastaavat sarakkeet nolliksi, paitsi kutakin kantamuuttujaa vastaava alkio ykköseksi. Yhtälöryhmän ratkaisemisessa voi käyttää kahta sääntöä: 1. Uusi pivot-rivi = Vanha pivot-rivi / pivot-alkio 2. Muut rivit: Uusi rivi = Vanha rivi - Vanhan rivin pivot-alkio Uusi pivot-rivi Esimerkiksi riville 1 (Kohde) saadaan uudet arvot: x 1 x 2 s 1 s 2 Tulos Vanha rivi 5 4 0 0 0 Uusi pivot-rivi = Vanha pivot-rivi/pivot-alkio 1 1/2 0 1/6 3 Vanhan rivin pivot-alkio Uusi pivot-rivi 5 5/2 0 5/6 15 Uusi rivi 0 3/2 0 5/6 15 Näillä laskusäännöillä saammekin seuraavan Simplex-taulukon: Pivot-sarake x 1 x 2 s 1 s 2 Tulos Kohde 0 3/2 0 5/6 15 s 1 0 1/2 1 1/6 1 x 1 1 1/2 0 1/6 3 Pivot-rivi Huomaa. Kantamuuttujat ovat nyt vaihtuneet, joten taulukon s 2 rivi on nyt x 1 rivi. 2
Taulukosta voidaan nyt lukea kantamuuttujien s 1 ja x 1 arvot: 1 ja 3. Kohdefunktiorivin Tulos-sarakkeesta voidaan lukea kohdefunktion arvo tässä pisteessä. Muut muuttujat ovat nollia. Olemme saaneet nyt yhden Simplex-iteraation valmiiksi. Tarkistetaan, ollaanko optimissa. Katsotaan kohdefunktiorivin kertoimia: muuttujaa x 2 vastaava kerroin on negatiivinen, eli tähän suuntaan funktion arvo kasvaa. Piste siis ei ole optimi. Piste on kuitenkin lähempänä optimia, ja seuraava Simplex-iteraatio voidaan aloittaa: valitaan lähtevä ja saapuva kantamuuttuja ja ratkaistaan seuraava nurkkapiste. Jyrkin kasvusuunta on nyt muuttujan x 2 suuntaan (pienin kerroin, 3/2). Tulossarakkeen ja pivot-sarakkeen osamäärät ovat (käypyysehto): s 1 1/( 1 2 ) = 2 x 1 3/( 1 2 ) = 6 Pienin positiivinen arvo on 2, eli lähteväksi muuttujaksi valitaan s 1. Suoritetaan seuraava Gauss-eliminointi: x 1 x 2 s 1 s 2 Tulos Kohde 0 0 3 1/3 18 x 2 0 1 2 1/3 2 x 1 1 0 1 1/3 2 Nyt kohdefunktiorivillä kaikki kertoimet ovat positiivisia, eli kohdefunktio ei kasva mihinkään suuntaan edetessä. Kohdefunktion arvo voidaan lukea tulossarakkeesta: 18. Kantamuuttujien arvot ovat myös tulossarakkeesta: x 1 = 2, x 2 = 2. Slackmuuttujat eivät ole kannassa, joten niiden arvot ovat nollia. Tämä tarkoittaa, että molemmat rajoitusehdot ovat aktiivisia, eli kummankin rajoitusehdon vasen ja oikea puoli ovat yhtäsuuria. Demo 2: M-menetelmä Ratkaise tehtävä M-menetelmällä ja taulukkomuotoisella Simplex-algoritmilla lähtemällä alkuarvauksesta x 1 = 0 ja x 2 = 0. min 4x 1 + 6x 2 s.e. x 1 + x 2 5 3x 1 + 8x 2 24 x 1 0, x 2 0 Ratkaisu M-menetelmää tarvitaan, kun tavallinen alkuratkaisu (x i = 0 i), ei ole käypä. Näin käy usein kun tehtävässä on yhtälörajoitteita tai -muotoisia rajoitteita. Käydään aluksi läpi M-menetelmän vaiheet, jonka jälkeen ratkaistaan tehtävä käymällä kaikki vaiheet tarkemmin läpi. 1. Muutetaan tehtävä standardimuotoon. 2. Lisätään apumuuttujat ja kohdefunktion sakkotermit. 3. Kirjoitetaan tehtävän Simplex-taulukko. 4. Korjataan epäjohdonmukaisuudet taulukosta 5. Ratkaistaan kuten tavallinen Simplex-tehtävä. 3
Muutetaan tehtävä aluksi standardimuotoon lisäämällä surplus-muuttujat s 1 ja s 2 : min 4x 1 + 6x 2 s.e. x 1 +x 2 s 1 = 5 3x 1 +8x 2 s 2 = 24 x 1 0, x 2 0, s 1 0, s 2 0 Nyt tavallinen aloitusratkaisu (x 1 = x 2 = 0) ei ole käypä millään positiivisilla s 1 ja s 2 muuttujien arvoilla. Tämän vuoksi lisätään kuhunkin yhtälöön vielä yksi keinomuuttuja, R i. Keinomuuttujien arvo lopullisessa ratkaisussa tulisi olla nolla, sillä nyt ne kertovat, kuinka paljon rajoitetta joudutaan rikkomaan. Lisäämällä kohdefunktioon kumpaakin kerrointa vastaavat termit suurella positiivisella painokertoimella M, optimointi pitää huolen, että R i -termit menevät optimissa nollaan. Tehtävä saa muodon: min 4x 1 + 6x 2 +MR 1 +MR 2 s.e. x 1 +x 2 s 1 +R 1 = 5 3x 1 +8x 2 s 2 +R 2 = 24 x 1 0, x 2 0, s 1 0, s 2 0, R 1 0, R 2 0 Nyt voidaan käyväksi kantaratkaisuksi valita x 1 = x 2 = s 1 = s 2 = 0, ja kirjoittaa tehtävän Simplex-taulukko. Sijoitetaan samalla kertoimen M arvoksi jokin suuri positiivinen luku, esimerkiksi 20. Kohde 4 6 0 0 20 20 0 R 1 1 1 1 0 1 0 5 R 2 3 8 0 1 0 1 24 Taulukossa on eräs epäjohdonmukaisuus: Kantamuuttujia vastaavat sarakkeet tulisi olla muuten nollaa, paitsi vastaavalla rivillä tulisi olla arvo 1. Nyt kohdefunktiorivillä on kuitenkin kummankin kohdalla nollasta poikkeava kerroin 20. Tämä voidaan korjata laskemalla: Uusi Kohdefunktiorivi = Vanha Kohdefunktiorivi + M R 1 -rivi + M R 2 -rivi, jolloin saamme Simplex-taulukon: Kohde 76 174 20 20 0 0 580 R 1 1 1 1 0 1 0 5 R 2 3 8 0 1 0 1 24 Nyt voimme aloittaa varsinaisen Simplex-iteraation: Valitaan kohdefunktioriviltä suurin positiivinen kerroin (suunta, johon kohdefunktio vähenee nopeiten), joka on nyt x 2 :n kerroin 174. Saapuva muuttuja on siis x 2. Lasketaan käypyysehto, eli Tulossarakkeen ja äsken valitun sarakkeen välinen osamäärä: R 1 5/1 = 5 R 2 24/8 = 3 4
Pienin positiivinen arvo on 3, eli poistuvaksi muuttujaksi valitaan R 2. Lasketaan seuraava Simplex-taulukko Gauss-eliminoinnilla: Kohde 43/4 0 20 7/4 0 87/4 58 R 1 5/8 0 1 1/8 1 1/8 2 x 2 3/8 1 0 1/8 0 1/8 3 Kohdefunktiorivillä on edelleen positiivisia kertoimia, joten suoritetaan toinen Simplexiteraatio. Suurin positiivinen kerroin on muuttujalla x 1, joten valitaan se saapuvaksi muuttujaksi. Tulossarakkeen ja äsken valitun sarakkeen osamäärä on: R 1 2/( 5 8 ) = 3.2 x 2 3/( 3 8 ) = 8 Pienin positiivinen on 3.2, eli valitaan lähteväksi muuttujaksi R 1. Nyt voimme taas suorittaa seuraavan Gauss-eliminoinnin: Kohde 0 0 14/5 2/5 86/5 98/5 118/5 x 1 1 0 8/5 1/5 8/5 1/5 16/5 x 2 0 1 3/5 1/5 3/5 1/5 9/5 Nyt kaikki kohdefunktiorivin kertoimet ovat negatiivisia, eli olemme optimissa. Muuttujien arvot ovat x 1 = 16/5 ja x 2 = 9/5, ja kohdefunktion arvo 118/5. Apumuuttujat R 1 ja R 2 eivät ole kannassa, eli niiden arvo on 0, kuten pitikin. Tehtävä 1: Simplex-menetelmä Muuta lineaarinen tehtävä standardimuotoon ja ratkaise tehtävä Excelissä taulukkomuotoisella Simplex-menetelmällä. a) b) max 5x 1 + 6x 2 s.e. x 2 4 2x 1 + x 2 6 x 1 0, x 2 0 max 7x 1 + 5x 2 s.e. 4x 1 + x 2 16 2x 1 + 3x 2 18 5x 1 2x 2 2 x 1 0, x 2 0 Ratkaisu a) Muutetaan tehtävä aluksi standardimuotoon. Kaikki rajoitukset tulee olla yhtälömuotoisia, ja muuttujien positiivisia. Tämä tehtävä saadaan standardimuotoon lisäämällä kumpaankin epäyhtälöön slack-muuttuja s i. max 5x 1 + 6x 2 s.e. x 2 +s 1 = 4 2x 1 + x 2 +s 2 = 6 x 1 0, x 2 0, s 1 0, s 2 0 5
Tehtävän Simplex-taulukko on: x 1 x 2 s 1 s 2 Tulos Kohde 5 6 0 0 0 s 1 0 1 1 0 4 s 2 2 1 0 1 6 Saapuvaksi muuttujaksi valitaan se, jota vastaava kerroin kohdefunktiorivillä on pienin, eli nyt x 2. Lasketaan käypyysehto: s 1 4/1 = 4 s 2 6/1 = 6 Lähteväksi muuttujaksi valitaan se, jolla osamäärä on pienin positiivinen, eli tällä kertaa s 1. Nyt meillä on uudet kantamuuttujat: x 2 ja s 2. Ratkaistaan yhtälöryhmä Gauss-eliminoinnilla: jaetaan pivot-rivi pivot-alkiolla, ja vähennetään muista riveistä uusi pivot-rivi kerrottuna rivin pivot-alkiolla. Näin saadaan seuraava Simplex-taulukko: x 1 x 2 s 1 s 2 Tulos Kohde 5 0 6 0 24 x 2 0 1 1 0 4 s 2 2 0 1 1 2 Olemme saaneet yhden Simplex-iteraation valmiiksi. Kohdefunktiorivillä on edelleen negatiivisia kertoimia, joten emme ole vielä optimissa. Valitaan seuraava saapuva muuttuja: x 1 (pienin kerroin). Käypyysehto saatiin osamääristä: 4/0 = 2/2 = 1 Seuraava lähtevä muuttuja on siis s 2 (pienin positiivinen osamäärä). Gausseliminoinnilla saadaan seuraava Simplex-taulukko: x 1 x 2 s 1 s 2 Tulos Kohde 0 0 7/2 5/2 29 x 2 0 1 1 0 4 x 1 1 0 1/2 1/2 1 Kohdefunktiorivin kertoimet ovat nyt kaikki positiivisia, eli ei ole enää suuntaa, johon kohdefunktion arvo paranisi. Olemme siis optimissa. Muuttujien arvot voidaan lukea taulukosta: x 1 = 1, x 2 = 4. Kohdefunktion arvo on 29. b) Muutetaan tehtävä standardimuotoon. Lisätään slack- ja surplusmuuttujat s 1, s 2 ja s 3. Kerrotaan kolmas rajoite -1:llä, jolloin saadaan: max 7x 1 + 5x 2 s.e. 4x 1 + x 2 +s 1 = 16 2x 1 + 3x 2 +s 2 = 18 5x 1 + 2x 2 +s 3 = 2 x 1 0, x 2 0, s 1 0, s 2 0, s 3 0 Muuttujan s 3 rivi kerrottiin -1:llä, jotta se voitaisiin ottaa taulukkoon kantamuuttujaksi. Kantamuuttujien sarakkeet tulee olla nollia, lukuunottamatta sitä alkiota, joka on kantamuuttujaa vastaavalla rivillä. Näiden alkioiden tulee 6
olla 1. Kantamuuttujia tulee olla yhtä monta kuin rajoitusehtoja. Simplextaulukoksi saadaan näin: x 1 x 2 s 1 s 2 s 3 Tulos Kohde 7 5 0 0 0 0 s 1 4 1 1 0 0 16 s 2 2 3 0 1 0 18 s 3 5 2 0 0 1 2 Suoritetaan ensimmäinen Simplex-iteraatio. Saapuvaksi muuttujaksi valitaan x 1, koska vastaava kerroin on pienin. Lasketaan käypyysehto: s 1 16/4 = 4 s 2 18/2 = 9 s 3 2/ 5 = 0.4 Lähtevä muuttuja on s 1, koska sitä vastaava osamäärä on pienin positiivinen. Ratkaistaan seuraava nurkkapiste Gauss-eliminoinnilla: x 1 x 2 s 1 s 2 s 3 Tulos Kohde 0 13/4 7/4 0 0 28 x 1 1 1/4 1/4 0 0 4 s 2 0 5/2 1/2 1 0 10 s 3 0 13/4 5/4 0 1 22 Ensimmäinen iteraatio on valmis. Kohdefunktiorivillä on negatiivisia kertoimia, joten emme ole vielä optimissa. Seuraavaksi saapuvaksi muuttujaksi valitaan x 2 (pienin kerroin). x 1 4/ 1 4 = 16 s 2 10/ 5 2 = 4 s 3 22/ 13 4 = 6.7692 Seuraava lähtevä muuttuja: s 2 (pienin positiivinen suhde). Lasketaan seuraava Simplex-taulukko Gauss-eliminoinnilla. x 1 x 2 s 1 s 2 s 3 Tulos Kohde 0 0 11/10 13/10 0 41 x 1 1 0 3/10 1/10 0 3 x 2 0 1 1/5 2/5 0 4 s 3 0 0 19/10 13/10 1 9 Toinen Simplex-iteraatio on valmis. Kohdefunktiorivillä on kaikki kertoimet positiivisia, eli olemme optimissa. Muuttujien arvot ovat: x 1 = 3 ja x 2 = 4. Kohdefunktion arvo on 41. 7
Tehtävä 2: M-menetelmä Ratkaise tehtävät Excelissä taulukkomuotoisella Simplex-menetelmällä. a) b) min 7x 1 + 5x 2 s.e. x 1 + x 2 5 3x 1 + x 2 9 x 1 0, x 2 0 min 2x 1 + x 2 s.e. x 1 + x 2 7 x 1 + 2x 2 10 x 1 + 2x 2 2 x 1 0, x 2 0 Ratkaisu a) Muutetaan tehtävä standardimuotoon. Koska aloitusratkaisu ei ole käypä, lisätään apumuuttujat R 1 ja R 2 niihin rajoitteisiin, jotka eivät ole alkupisteessä voimassa. Apumuuttujia varten täytyy myös kohdefunktioon lisätä M- termi, jotta apumuuttujien arvo saadaan optimoinnissa pakotettua nollaksi. Tässä on käytetty M:n arvoa 20. min 7x 1 + 5x 2 +20R 1 +20R 2 s.e. x 1 + x 2 s 1 +R 1 = 5 3x 1 + x 2 s 2 +R 2 = 9 x 1 0, x 2 0, s 1 0, s 2 0, R 1 0, R 2 0 Tehtävän Simplex-taulukko on: Kohde 7 5 0 0 20 20 0 R 1 1 1 1 0 1 0 5 R 2 3 1 0 1 0 1 9 Taulukossa on epäjohdonmukaisuus, sillä kantamuuttujien kertoimet kohdefunktiorivillä ovat nollasta poikkeavat. Korjataan tämä kertomalla riviä rajoiteriveillä: Uusi Kohdefunktiorivi = Vanha Kohdefunktiorivi + M R 1 -rivi + M R 2 -rivi, Tällöin saadaan oikeaoppinen Simplex-taulukko: Kohde 73 35 20 20 0 0 280 R 1 1 1 1 0 1 0 5 R 2 3 1 0 1 0 1 9 Aloitetaan Simplex-iterointi: Saapuvaksi muuttujaksi voidaan valita x 1 (minimointitehtävä, suurin kerroin). R 1 5/1 = 5 R 2 9/3 = 3 8
Lähtevä muuttuja on R 2 (pienin positiivinen suhde). Lasketaan uusi Simplextaulukko Gauss-eliminoinnilla: Kohde 0 32/3 20 13/3 0 73/3 61 R 1 0 2/3 1 1/3 1 1/3 2 x 1 1 1/3 0 1/3 0 1/3 3 Kohdefunktiorivin kertoimet eivät ole kaikki negatiivisia, joten emme ole vielä optimissa. Valitaan saapuva muuttuja: x 2 (suurin kerroin). R 1 2/ 2 3 = 3 x 1 3/ 1 3 = 9 Osamäärien perusteella saadaan lähtevä muuttuja: R 1 (pienin positiivinen osamäärä). Seuraava Simplex-taulukko saadaan Gaussin eliminoinnilla: Kohde 0 0 4 1 16 19 29 x 2 0 1 3/2 1/2 3/2 1/2 3 x 1 1 0 1/2 1/2 1/2 1/2 2 Kertoimet ovat kaikki negatiivisia, joten olemme optimissa. Muuttujien arvot ovat x 1 = 2 ja x 2 = 3. Kohdefunktion arvo 29. b) Muutetaan tehtävä standardimuotoon. Koska aloitusratkaisu ei ole käypä, lisätään apumuuttujat R 1 ja R 2 niihin rajoitteisiin, jotka eivät ole alkupisteessä voimassa. Apumuuttujia varten täytyy myös kohdefunktioon lisätä M- termi, jotta apumuuttujien arvo saadaan optimoinnissa pakotettua nollaksi. Tässä on käytetty M:n arvoa 20. min 2x 1 + x 2 +20R 1 +20R 2 s.e. x 1 + x 2 s 1 +R 1 = 7 x 1 + 2x 2 s 2 +R 2 = 10 x 1 + 2x 2 s 3 = 2 x 1 0, x 2 0, s 1 0, s 2 0, s 3 0, R 1 0, R 2 0 Kirjoitetaan tehtävän Simplex-taulukko. Kantamuuttujiksi voidaan valita apumuuttujat R 1 ja R 2, sekä surplus-muuttuja s 3. x 1 x 2 s 1 s 2 s 3 R 1 R 2 Tulos Kohde 2 1 0 0 0 20 20 0 R 1 1 1 1 0 0 1 0 7 R 2 1 2 0 1 0 0 1 10 s 3 1 2 0 0 1 0 0 2 Taulukossa on 2 epäjohdonmukaisuutta, sillä kantamuuttujia vastaavat sarakkeet eivät ole oikein. Korjataan R i -muuttujien ongelma tämä lisäämällä kohdefunktioriviin R i -rivit kerrottuna M-vakioilla. Muuttujan s 3 sarake on muuten oikein, mutta ainoa nollasta poikkeava kerroin on -1 eikä 1 niinkuin pitäisi. Korjataan tämä kertomalla rivi -1:llä. x 1 x 2 s 1 s 2 s 3 R 1 R 2 Tulos Kohde 38 59 20 20 0 0 0 340 R 1 1 1 1 0 0 1 0 7 R 2 1 2 0 1 0 0 1 10 s 3 1 2 0 0 1 0 0 2 9
Voimme aloittaa tavallisen Simplex-iteraation. Saapuvaksi muuttujaksi valitaan x 2 (minimointitehtävä, suurin positiivinen luku). R 1 7/1 = 7 R 2 10/2 = 5 s 3 2/ 2 = 1 Osamääristä perusteella valitaan lähteväksi muuttujaksi R 2 (pienin positiivinen suhde). Seuraava Simplex-taulukko saadaan Gauss-eliminoinnilla: x 1 x 2 s 1 s 2 s 3 R 1 R 2 Tulos Kohde 17/2 0 20 19/2 0 0 59/2 45 R 1 1/2 0 1 1/2 0 1 1/2 2 x 2 1/2 1 0 1/2 0 0 1/2 5 s 3 2 0 0 1 1 0 1 12 Kohdefunktiorivillä on vielä positiivisia kertoimia, joten emme ole optimissa. Valitaan saapuva muuttuja: s 2 (suurin kerroin). Ratkaistaan käypyysehto jakamalla Tulos-sarake pivot-sarakkeella: R 1 2/ 1 2 = 4 x 2 5/ 1 2 = 10 12/ 1 = 12 s 3 Lähteväksi muuttujaksi valitaan R 1 (pienin positiivinen). Ratkaistaan seuraava Simplex-taulukko Gauss-eliminoinnilla: x 1 x 2 s 1 s 2 s 3 R 1 R 2 Tulos Kohde 1 0 1 0 0 19 20 7 s 2 1 0 2 1 0 2 1 4 x 2 1 1 1 0 0 1 0 7 s 3 3 0 2 0 1 2 0 16 Kohdefunktiorivin kertoimet ovat negatiivisia, eli olemme optimissa. Muuttujien arvot ovat x 1 = 0 ja x 2 = 7. Kohdefunktion arvo on 7. Tehtävä 3: Yhtäsuuruusrajoitus Ratkaise tehtävä Excelissä taulukkomuotoisella Simplex-menetelmällä: max x 1 + x 2 s.e. x 1 + x 2 = 7 x 1 + 4x 2 = 16 3x 1 + 2x 2 = 18 x 1 0, x 2 0 Ratkaisu Kirjoitetaan tehtävä standardimuotoon. Nyt kaikki rajoitteet ovat yhtälörajoitteita, eikä yksikään rajoite ole voimassa tavallisessa aloituskantaratkaisussa, jossa x 1 = x 2 = 0. Lisätään kuhunkin rajoitteeseen apumuuttujat R i. Lisätyt muuttujat pitää 10
lisätä myös kohdefunktioon, jotta optimointi pakottaisi niiden arvot nolliksi. max x 1 + x 2 20R 1 20R 2 20R 3 s.e. x 1 + x 2 +R 1 = 7 x 1 + 4x 2 +R 2 = 16 3x 1 + 2x 2 +R 3 = 18 x 1 0, x 2 0, R 1 0, R 2 0, R 3 0 Tehtävän Simplex-taulukko on: x 1 x 2 R 1 R 2 R 3 Tulos Kohde 1 1 20 20 20 0 R 1 1 1 1 0 0 7 R 2 1 4 0 1 0 16 R 3 3 2 0 0 1 18 Poistetaan epäjohdonmukaisuudet lisäämällä kohdefunktioriviin kukin R i -rivi kerrottuna M:llä: x 1 x 2 R 1 R 2 R 3 Tulos Kohde 101 141 0 0 0 820 R 1 1 1 1 0 0 7 R 2 1 4 0 1 0 16 R 3 3 2 0 0 1 18 Aloitetaan tavallinen Simplex-iterointi. Saapuvaksi muuttujaksi valitaan x 2 (maksimointitehtävä, pienin kerroin). Lasketaan käypyysehto: R 1 7/1 = 7 R 2 16/4 = 4 R 3 18/2 = 9 Lähteväksi muuttujaksi valitaan R 2 (pienin positiivinen osamäärä). Lasketaan seuraava Simplex-taulukko Gauss-eliminoinnilla: x 1 x 2 R 1 R 2 R 3 Tulos Kohde 263/4 0 0 141/4 0 256 R 1 3/4 0 1 1/4 0 3 x 2 1/4 1 0 1/4 0 4 R 3 5/2 0 0 1/2 1 10 Kohdefunktiorivillä on vielä negatiivisia kertoimia, joten emme ole vielä optimissa. Jatketaan valitsemalla seuraava saapuva muuttuja: x 1 (pienin kerroin). Käypyysehto: R 1 3/ 3 4 = 4 x 2 4/ 1 4 = 16 R 3 10/ 5 2 = 4 Pienin positiivinen suhde on kahdella eri muuttujalla. Valitaan jompi kumpi, esimerkiksi R 1. Lasketaan seuraava Simplex-taulukko Gauss-eliminoinnilla: x 1 x 2 R 1 R 2 R 3 Tulos Kohde 0 0 263/3 40/3 0 7 x 1 1 0 4/3 1/3 0 4 x 2 0 1 1/3 1/3 0 3 R 3 0 0 10/3 1/3 1 0 Kohdefunktiorivin kertoimet ovat positiiviset, eli olemme optimissa. Muuttujien arvot x 1 = 4 ja x 2 = 3. Kohdefunktion arvo on 7. 11
Tehtävä 4: Jättisimplex Ratkaise tehtävä Excelissä taulukkomuotoisella Simplex-menetelmällä: max x 1 + 2x 2 + 3x 3 + 4x 4 s.e. 4x 1 + 2x 2 + 3x 3 + 1x 4 70 2x 1 + 4x 2 + 3x 3 + 2x 4 10 6x 1 + 5x 2 + 2x 3 + 3x 4 100 3x 1 + 3x 2 + 3x 3 + 4x 4 65 4x 1 + 5x 2 + 2x 3 + 5x 4 120 x 1 0, x 2 0 x 3 0, x 4 0 Ratkaisu Muutetaan tehtävä standardimuotoon lisäämällä slack- ja surplus-muuttujat. Lisätään apumuuttujat R i niihin ehtoihin, joilla ei ole käypää ratkaisua millään positiivisilla x i ja s i arvoilla: max x 1 +2x 2 +3x 3 +4x 4 1000R 1 1000R 2 s.e. 4x 1 +2x 2 +3x 3 +1x 4 +s 1 = 70 2x 1 +4x 2 +3x 3 +2x 4 s 2 +R 1 = 10 6x 1 +5x 2 +2x 3 +3x 4 +s 3 = 100 3x 1 +3x 2 +3x 3 +4x 4 s 4 +R 2 = 65 4x 1 +5x 2 +2x 3 +5x 4 +s 5 = 120 x 1 0, x 2 0 x 3 0, x 4 0 Valitaan kantamuuttujiksi ne muuttujat, joita vastaavat sarakkeet ovat kohdeufunktioriviä lukuunottamatta oikein. Saadaan tehtävän Simplex-taulukko: x 1 x 2 x 3 x 4 s 1 s 2 s 3 s 4 s 5 R 1 R 2 Tulos Kohde 1 2 3 4 0 0 0 0 0 1000 1000 0 s 1 4 2 3 1 1 0 0 0 0 0 0 70 R 1 2 4 3 2 0 1 0 0 0 1 0 10 s 3 6 5 2 3 0 0 1 0 0 0 0 100 R 2 3 3 3 4 0 0 0 1 0 0 1 65 s 5 4 5 2 5 0 0 0 0 1 0 0 120 Poistetaan taulukon epäjohdonmukaisuudet lisäämällä kohdefunktioriviin -M:llä kerrotut R i -rivit. Saadaan: x 1 x 2 x 3 x 4 s 1 s 2 s 3 s 4 s 5 R 1 R 2 Tulos Kohde 5001 7002 6003 6004 0 1000 0 1000 0 0 0 75000 s 1 4 2 3 1 1 0 0 0 0 0 0 70 R 1 2 4 3 2 0 1 0 0 0 1 0 10 s 3 6 5 2 3 0 0 1 0 0 0 0 100 R 2 3 3 3 4 0 0 0 1 0 0 1 65 s 5 4 5 2 5 0 0 0 0 1 0 0 120 Nyt voimme aloittaa tavallisen Simplex-iteroinnin. Saapuvaksi muuttujaksi valitaan x 2 (maksimointitehtävä, pienin kerroin). Lasketaan käypyysehto: s 1 70/2 = 35 R 1 10/4 = 2.5 s 3 100/5 = 20 R 2 65/3 = 21.7 s 5 120/5 = 24 12
Lähteväksi muuttujaksi valitaan R 1 (pienin positiivinen osamäärä). Ratkaistaan seuraava nurkkapiste Gauss-eliminoinnilla: x 1 x 2 x 3 x 4 s 1 s 2 s 3 s 4 s 5 R 1 R 2 Tulos Kohde 1500 0 2503 0 0 1000 0 3501/2 0 57495 s 1 3 0 3/2 0 1 1/2 0 0 0 1/2 0 65 x 2 1/2 1 3/4 1/2 0 1/4 0 0 0 1/4 0 5/2 s 3 7/2 0 7/4 1/2 0 5/4 1 0 0 5/4 0 175/2 R 2 3/2 0 3/4 5/2 0 3/4 0 1 0 3/4 1 115/2 s 5 3/2 0 7/4 5/2 0 5/4 0 0 1 5/4 0 215/2 Kohdefunktiorivillä on vielä negatiivisia kertoimia, eli emme ole optimissa. Seuraava saapuva muuttuja on x 4 (pienin kerroin). Käypyysehto: s 1 x 2 5 s 3 175 R 2 115 s 5 215 65/0 = 2 / 1 2 = 5 2 / 1 2 = 175 2 / 5 2 = 23 2 / 5 2 = 43 Lähteväksi muuttujaksi valitaan x 2 (pienin positiivinen). Ratkaistaan seuraava Simplextaulukko Gauss-eliminoinnilla: x 1 x 2 x 3 x 4 s 1 s 2 s 3 s 4 s 5 R 1 R 2 Tulos Kohde 1003 5006 3003 0 0 2002 0 1000 0 3002 0 44980 s 1 3 0 3/2 0 1 1/2 0 0 0 1/2 0 65 x 4 1 2 3/2 1 0 1/2 0 0 0 1/2 0 5 s 3 3 1 5/2 0 0 3/2 1 0 0 3/2 0 85 R 2 1 5 3 0 0 2 0 1 0 2 1 45 s 5 1 5 11/2 0 0 5/2 0 0 1 5/2 0 95 Kohdefunktiorivillä on vielä negatiivisia kertoimia, eli emme ole optimissa. Seuraava saapuva muuttuja on s 2 (pienin kerroin). Käypyysehto: s 1 65/ 1 2 = 130 x 4 5/ 1 2 = 10 s 3 85/ 3 2 = 56.7 R 2 45/2 = 22.5 s 5 95/ 5 2 = 38 Lähteväksi muuttujaksi valitaan R 2 (pienin positiivinen osamäärä). Ratkaistaan seuraava Simplex-taulukko Gauss-eliminoinnilla: x 1 x 2 x 3 x 4 s 1 s 2 s 3 s 4 s 5 R 1 R 2 Tulos Kohde 2 1 0 0 0 0 0 1 0 1000 1001 65 s 1 13/4 5/4 9/4 0 1 0 0 1/4 0 0 1/4 215/4 x 4 3/4 3/4 3/4 1 0 0 0 1/4 0 0 1/4 65/4 s 3 15/4 11/4 1/4 0 0 0 1 3/4 0 0 3/4 205/4 s 2 1/2 5/2 3/2 0 0 1 0 1/2 0 1 1/2 45/2 s 5 1/4 5/4 7/4 0 0 0 0 5/4 1 0 5/4 155/4 Kohdefunktiorivillä on vielä negatiivisia kertoimia, eli emme ole optimissa. Seuraava 13
saapuva muuttuja on s 4 (pienin kerroin). Käypyysehto: 4 / 1 4 = 215 4 / 1 4 = 65 4 / 3 4 = 68.3 2 / 1 2 = 45 4 / 5 4 = 31 214 s 1 65 x 4 205 s 3 45 s 2 155 s 5 Lähteväksi muuttujaksi valitaan s 5 (pienin positiivinen osamäärä). Ratkaistaan seuraava Simplex-taulukko Gauss-eliminoinnilla: x 1 x 2 x 3 x 4 s 1 s 2 s 3 s 4 s 5 R 1 R 2 Tulos Kohde 11/5 2 7/5 0 0 0 0 0 4/5 1000 1000 96 s 1 16/5 1 13/5 0 1 0 0 0 1/5 0 0 46 x 4 4/5 1 2/5 1 0 0 0 0 1/5 0 0 24 s 3 18/5 2 4/5 0 0 0 1 0 3/5 0 0 28 s 2 2/5 2 11/5 0 0 1 0 0 2/5 1 0 38 s 4 1/5 1 7/5 0 0 0 0 1 4/5 0 1 31 Kohdefunktiorivillä on vielä negatiivisia kertoimia, eli emme ole optimissa. Seuraava saapuva muuttuja on x 3 (pienin kerroin). Käypyysehto: s 1 46/ 13 5 = 17.7 x 4 24/ 2 5 = 60 s 3 28/ 4 5 = 35 s 2 38/ 11 5 = 17.3 s 4 31/ 7 5 = 22.1 Lähteväksi muuttujaksi valitaan s 1 (pienin positiivinen osamäärä). Ratkaistaan seuraava Simplex-taulukko Gauss-eliminoinnilla: x 1 x 2 x 3 x 4 s 1 s 2 s 3 s 4 s 5 R 1 R 2 Tulos Kohde 51/13 33/13 0 0 7/13 0 0 0 9/13 1000 1000 1570/13 x 3 16/13 5/13 1 0 5/13 0 0 0 1/13 0 0 230/13 x 4 4/13 11/13 0 1 2/13 0 0 0 3/13 0 0 220/13 s 3 34/13 22/13 0 0 4/13 0 1 0 7/13 0 0 180/13 s 2 30/13 15/13 0 0 11/13 1 0 0 3/13 1 0 1000/13 s 4 25/13 20/13 0 0 7/13 0 0 1 9/13 0 1 725/13 Kohdefunktiorivin kertoimet ovat kaikki positiivisia, eli olemme optimissa. Muuttujien arvot ovat: x 1 = 0, x 2 = 0,x 3 = 230/13 ja x 4 = 220/13. 14