Luento 7: Kokonaislukuoptimointi Lineaarisessa optimointitehtävässä (LP) kaikki muuttujat ovat jatkuvia. Kokonaislukuoptimoinnin (ILP = Integer LP) tehtävässä kaikilla muuttujilla on kokonaislukurajoitus (x i Z, i). Sekalukutehtävässä kokonaislukurajoitus on osalla muuttujista. Binääritehtävässä (BILP) kaikki muuttujat saavat arvon joko nolla tai yksi. Yleisimmin käytetty ja luotettavin menetelmä ILP-tehtävän ratkaisuun on branch-and-bound algoritmi. Leikkaavien tasojen menetelmät (cutting-plane methods) ovat myös käytettyjä, mutta vaikeampia ja epävarmempia. Niiden käytössä esiintyy myös ongelmallisia pyöristysvirheitä. Valintamuuttuja Binäärimuuttujan yleinen käyttökohde on binäärinen valinta, jossa tehdään valinta kahden päätösvaihtoehdon välillä. Tämä valinta voidaan mallintaa binäärimuuttujalla x x = {, päätös 0, päätös eli asetetaan x joko nollaksi tai yhdeksi riippuen päätösvaihtoehdosta. Tässä päätösvaihtoehto voi tarkoittaa melkein mitä tahansa. Päätösmuuttujien riippuvuuksia Binääriset päätösvaihtoehdot voivat olla riippuvaisia toisistaan. Rajoitteella () voidaan rajata, että päätösmuuttujista x i enintään a kappaletta saa arvon. Jos halutaan, että muutttujista x i täsmälleen a kappaletta saa arvon, muutetaan epäyhtälö yhtälörajoitteeksi. n x i a, a {0,,...,n} () i=
Olkoon riippuvuussuhde sellainen, että joko molemmat tai ei kumpikaan vaihtoehdoista x ja y voi tapahtua. Riippuvuussuhde voidaan mallintaa rajoitusehdolla () x y = 0 () Toisin sanoen tämä on ekvivalenssirelaatio, (x y). Esimerkiksi, jos x = 0, niin y = 0 ja jos x =, niin y =. Vastaavasti implikaatio (x y) voidaan mallintaa rajoitusehdolla (3) x y (3) Esimerkiksi, jos x = 0, niin y = 0 tai y = ja jos x =, niin y =. Olkoon z riippuvainen binäärimuuttujasta x:stä siten, että jos x = 0 z = 0, muutoin 0 z,u R. Tämä suhde voidaan esittää seuraavan epäyhtälöryhmän avulla z ux 0 z 0 (4) Esitellään nyt muutamia kokonaislukuoptimoinnin sovelluksia. Selkärepun täyttöongelma Selkärepun täyttöongelma (Knapsack Problem) kuvaa erämaavaeltajan vaikeutta valita tarpeellisimmat esineet reppuunsa vaellusta varten. Vaeltaja voi kantaa vain K kilogramman kuorman. Hänen on valittava mukaansa osa esineistä kaikkiaan n esineen joukosta, joista jokaisella esineellä j on massa m j ja hyöty c j matkan aikana. Vaeltajan tarkoitus on maksimoida esineistä saatava kokonaishyöty. Binäärimuuttuja x i saa arvon yksi, jos esine i otetaan mukaan, muuten nolla. Vaeltajan ongelma voidaan esittää binääritehtävänä muodossa
max x s.e. n c j x j (a) n m j x j K (b) j= j= x j {0, } j (c) (5) Työnjako-ongelma Työnjako-ongelmassa (AP = Assignment Problem) yhtiöllä on m työtehtävää ja n työntekijää tai konetta, missä n m. Jokainen työ tehdään yhden työntekijän voimin ja jokainen työntekijä voi suorittaa korkeintaan yhden työtehtävän. Kaikki työtehtävät on suoritettava. Jos työntekijä i tekee työtehtävän j, siitä aiheutuu kustannus c ij. Tarkoituksena on minimoida kokonaiskustannus. Binäärimuuttuja x ij saa arvon yksi, mikäli työtehtävän j suorittaa työntekijä i, muuten nolla. Tehtävä on kokonaisuudessaan muotoa min x s.e. m n c ij x ij (a) n x ij = j =,...,m (b) i= m x ij i =,...,n (c) i= j= j= x ij {0, } i,j (d) (6) Rajoiteella (b) saadaan varmistettua, että jokainen työtehtävä j tulee suoritetuksi ja rajoitteella (c) saadaan huomioitua, että jokainen työntekijä i voi suorittaa korkeintaa yhden työtehtävän. Täydellinen sovitusongelma Sovitusongelmassa (Perfect Matching Problem) yrityksellä on työntekijöitä parillinen määrä n ja tehtävänä on muodostaa työntekijöistä työpareja kokonaistehokkuus maksimoiden. Olkoon c ij työntekijöiden i ja j välinen yhteistyötehokkuus. ja binäärimuuttuja x ij saa arvon yksi, kun työntekijät i ja j muodostavat työparin, muuten nolla. Tehtävä on muotoa 3
max x s.e. n n i= j=i+ i k= c ij x ij k=i+ (a) x ki + n x ik = i =,..., n (b) x ij {0, } i,j (c) (7) Rajoitteella (b) saadaan varmistettua, että jokaisella työntekijällä on vain yksi pari. Tehtaan sijoitusongelma Tehtaan sijoitusongelmassa (Facility Location Problem) on joukko asiakkaita I = {,...,m} ja joukko mahdollisia tehtaan sijoituspaikkoja J = {,...,n}. Tehtaan sijoittaminen paikkaan j tuottaa kustannuksen c j,j J ja asiakkaan i kysynnän tyydyttäminen paikasta j tuottaa kustannuksen d ij. Tarkoituksena on valita sopiva osajoukko sijoituspaikoista tehtaita varten kokonaiskustannuksen minimoiden. Binäärimuuttuja x j saa arvon yksi, jos tehdas sijoitetaan paikkaan j, muuten nolla. Olkoon paikkaan j sijoitetun tehtaan kapasiteetti u j ja asiakkaan i kysyntä b i. Määritellään lisäksi jatkuva muuttuja y ij, joka osoittaa toimitusten määrää paikasta j asiakkaalle i. Tehtävä on muotoa min x,y s.e. n c j x j + m j= i= j= n d ij y ij (a) n y ij = b i, i I (b) j= m y ij u j x j, j J (c) i= y ij 0, i,j (d) x j {0, } j (e) (8) Rajoitteella (b) varmistetaan että asiakkaiden kysynnät tulee tyyydytettyä. Tehtaan kapasiteetin ylittyminen saadaan estettyä rajoitteella (c). Se myös kertoo sen, että jos paikkaan j ei tule tehdasta (x j = 0), tavaravirtaus paikasta j on nolla. 4
Kauppamatkustajan ongelma Kauppamatkustajan ongelma (TSP = Traveling Salesman Problem) on ehkä tunnetuin kombinatorinen optimointitehtävä. Kauppamatkustaja aloittaa matkustamisen kotipaikkakunnalta, vierailee etukäteen määritellyissä kaupungeissa ja palaa takaisin lähtöpaikkaan. TSP:ssä on tarkoitus löytää kokonaiskustannuksen minimoiva reitti siten, että jokaisessa kaupungissa on vierailtu vain kerran. Olkoon kaupunkien lukumäärä N ja c ij kaupunkien i ja j välisen kaaren, esimerkiksi tien tai lentoreitin kustannus. Kustannuksena voi olla etäisyys, raha, aika tai näiden kombinaatio. Jos c ij = c ji, tehtävä on symmetrinen, muuten ei-symmetrinen. Olkoon binäärimuuttuja x ij yksi, jos kauppamatkustaja jatkaa kaupungista i kaupungiin j, muuten nolla. Olkoon kauppamatkustajan kotipaikkakunta kaupunki nro.. Tehtävän formulointi on min x s.e. N N c ij x ij i= j= (a) N x ij =, j =,...,n (b) i= N x ij =, i =,...,n (c) j= x ij S, S N, S N, (d) i,j σ(s) x ij {0, } (e) (9) Rajoitteilla (b) ja (c) huolehditaan siitä, että jokaiseen kaupunkiin saavutaan ja sieltä poistutaan. Alireittien muodostuminen estetään rajoitteella (d), missä joukko S on kaupungeista N valittu ei-tyhjä osajoukko ja itseisarvolla tarkoitetaan tässä yhteydessä S:n alkioiden lukumäärää. σ(s) määritellään seuraavasti: σ(s) = {(i,j) i S,j S } (0) Jos kaupunkien joukossa S pätee i,j σ(s) x ij > S, on joukossa S kehä, jolloin on siis muodostunut alireitti. Ilman rajoitetta (d) ratkaisu voisi olla kuvan mukainen. 5
Kuva : Esimerkki kahdesta alireitistä 9-kaupungin TSP:ssä Joukon peitto-, pakkaus- ja ositustehtävät. Huutokauppatehtävä Olkoon M = {,...,m} ja N = {,...,n}. Olkoon M,M,...,M n kokoelma joukon M osajoukkoja. Jokaiselle osajoukolle M j on liitetty kustannus, tai arvo, c j. Joukon N osajoukko F on peite (cover) M:lle, jos F on pakkaus (packing), jos j F M j = M. M j M k =, j,k F, j k. F on M:n ositus (partition), jos se on sekä peite että pakkaus M:lle. Osajoukon F kokonaiskustannus on j F c j. Kuvassa on havainnollistus peitteestä, osituksesta ja pakkauksesta. Peite Ositus Pakkaus Kuva : Peite, ositus ja pakkaus 6
Joukon peittotehtävässä (set-covering problem, SCP) etsitään kokonaiskustannuksen minimoiva peite F, pakkaustehtävässä (set-packing problem, SPP) kokonaiskustannuksen maksimoiva pakkaus F ja ositustehtävässä (set-partitioning problem, SPP) kokonaiskustannuksen minimoiva (maksimoiva) ositus F. Olkoon a ij =, jos i M j, muuten nolla ja x j =, jos j F. Määritellään vektorit x = (x,...,x n ), ja e = (,...,), jonka dimensio on m, sekä matriisi A, (A) ij = a ij. F on peite, pakkaus tai ositus jos ja vain jos Ax e, Ax e, Ax = e. Huutokauppatehtävä Olkoon internetissä toimivalla huutokauppiaalla M tuotetta (esim. jonkin asuinkiinteistön huonekalut). Huutokaupan periaate on seuraava: jokainen asiakas tekee M:n osajoukosta (osajoukoista) M j tarjouksen tietämättä toisten tekemistä tarjouksista. Olkoon b(m j ) korkein osajoukolle M j tehdyistä tarjouksista ja N osajoukkojen M j lukumäärä. Keille asiakkaille huutokauppiaan kannattaa myydä tuotteet tarjouksien jälkeen, jotta voitto maksimoituisi? Tämä tehtävä on joukon pakkakkaustehtävä. Olkoon a ij =, jos i M j, muuten nolla ja x j = jos osajoukko M j myydään. Huutokauppiaan tehtävä on siten: max b(m j )x j (a) jen s.e. a ij x j i M (b) () j N x j {0, } j N (c) Esimerkkejä Esimerkki Budjetointi. Kyllä - ei -rajoitus. Pääoma budjetoidaan viiteen projektiin, joista kunkin kesto on 3 vuotta. Projektien odotetut tuotot ja kustannukset sekä käytössä oleva pääoma ovat ao. taulukossa. Yritys maksimoi kokonaistuottoaan. 7
kustannukset (ME)/vuosi projekti 3 tuotto (ME) 5 8 0 4 7 0 40 3 3 9 0 4 7 4 5 5 8 6 0 30 käytettävä pääoma (ME) 5 5 5 Mitkä projektit tulisi toteuttaa? Määritellään binäärimuuttujat x j seuraavasti: x j = {, jos projekti j toteutetaan 0, jos projektia j ei toteuteta Kyllä - ei -rajoitus toteutetaan siis 0 tai arvoisilla muuttujilla. Nyt ILP-tehtävä saa muodon max z = 0x + 40x + 0x 3 + 5x 4 + 30x 5 s.t. 5x + 4x + 3x 3 + 7x 4 + 8x 5 5 x + 7x + 9x 3 + 4x 4 + 6x 5 5 8x + 0x + x 3 + x 4 + 0x 5 5 x, x, x 3, x 4, x 5 {0, } Tämä tehtävä voidaan ratkaista esim. Excel in solverilla. Ratkaisuksi saadaan x = x = x 3 = x 4 =, x 5 = 0 ja kohdefunktiolle arvo z = 95 (milj. E). Eli projektit -4 toteutetaan. ILP-tehtävän ratkaisua on mielenkiintoista verrata vastaavaan jatkuvien muuttujien, 0 x j, j, LP-tehtävään. Ratkaisu on tässä tapauksessa x = 0.5789, x = x 3 = x 4 =, x 5 = 0.7368, ja z = 08.68. Tulos on merkityksetön, koska x ja x 5 ovat desimaalilukuja eivätkä näin ollen vastaa kyllä - ei kysymykseen. Jos taas koitetaan pyöristystä, saadaan x j =, j, joka ei vastaa optimiratkaisua. Esimerkki Joko - tai -rajoitus. Yritys käyttää yhtä konetta kolmen 8
eri työtehtävän suorittamiseen. Tehtävien suoritusajat, eräpäivät ja myöhästymissakot on annettu taulukossa. työ suoritusaika (päivä) eräpäivä (päivä) myöhästymissakko (E/päivä) 5 5 9 0 3 5 35 34 Tehtävänä on määrittää töiden suorituksen aloituspäivät s.e. maksettava myöhästymissakko minimoituu. Käytetään seuraavia merkintöjä: p j = d j = tehtävän j suoritusaika tehtävän j eräpäivä Määritellään päätösmuuttujat: x j = tehtävän j aloituspäivä Tehtävässä tarvitaan kahdenlaisia rajoitusehtoja:. On estettävä töiden yhtäaikainen suorittaminen.. Eräpäivärajoitus. Töitä i ja j ei suoriteta yhtäaikaa, jos pätee: joko x i x j + p j, tai x j x i + p i Matemaattisiin algoritmeihin ei tällaista joko - tai -ehtoa voi tällaisenaan syöttää. Se on muunnettava kahdeksi aina voimassa olevaksi rajoitukseksi. Tähän tarvitaan seuraavia apumuuttujia: {, jos i suoritetaan ennen j:tä y ij = 0, jos j suoritetaan ennen i:tä Nyt voidaan muodostaa rajoitukset My ij + (x i x j ) p j, ja M( y ij ) + (x j x i ) p i, 9
missä M on riittävän suuri luku. Nyt pätee: Jos j on ennen i:tä y ij = 0, joten x i x j p j ; mutta myös M + x j x i p i, kunhan M on riittävän suuri luku. Eräpäivää vastaava rajoitus on x j + p j + s j = d j. Jos s j 0, saadaan työ valmiiksi ennen eräpäivää. Jos taas s j 0, joudutaan sakkoa maksamaan s j :n ilmoittamalta määrältä päiviä. Muuttujanvaihdolla s j = s + j s j ; s+ j, s j 0 rajoitusehto saadaan muotoon: x j + s + j s j = d j p j Koska tavoiteena on minimoida myöhästymissakoista muodostuvat kustannukset, voidaan muodostaa seuraava ILP-tehtävä. minz = 9s + s + 34s 3 s.t. x x +My 0 x x My 5 M x x 3 +My 3 5 x +x 3 My 3 5 M x x 3 +My 3 5 x +x 3 My 3 0 M x +s + s = 5 5 x +s + s = 0 x 3 +s + 3 s 3 = 35 5 x,x,x 3,s +,s,s +,s,s + 3,s 3 0 y,y 3,y 3 {0, } Valitsemalla M:n arvoksi esimerkiksi M = 000, voidaan tehtävä ratkaista jollain kokonaislukuohjelmoinnin algoritmilla. Optimiratkaisu on x = 0, x = 0, x 3 = 5, eli työ aloitetaan heti, työ päivänä 0 ja työ 3 päivänä 5. Myöhästymissakkoja joudutaan tällöin maksamaan 5 34E = 70E. 0
Branch-and-bound menetelmä (B &B - menetelmä) Branch and bound menetelmä on luotettava menetelmä ILP-tehtävien ratkaisemiseen. Siinä alkuperäisen kokonaislukutehtävän käypä joukko, joka siis muodostuu kokonaislukuvektoreista, muutetaan jatkumoksi, jolloin saadaan ILP:n sisältävä LP-tehtävä, ns. ILP:n LP-relaksaatio. Ko. LP-tehtävä ratkaistaan. Jos ratkaisu ei ole kokonaislukuvektori, tehtävään lisätään erityisrajoitukset, jolloin LP-tehtävä muutetaan kahdeksi uudeksi LP-tehtäväksi, jotka kuitenkin sisältävät alkuperäisen ILP-tehtävän käyvät kokonaislukupisteet. Ko. LP-tehtävät ratkaistaan ja menetelmää toistetaan kunnes ILPtehtävän ratkaisu löytyy. Menetelmän toiminta kuvataan seuraavan esimerkin avulla. Esimerkki Olkoon ratkaistava ILP-tehtävä max z = 5x +4x s.t. x +x 5 0x +6x 45 x,x Z + Kuvaan merkityt pisteet ovat ILP-tehtävän käypä joukko. ILP-tehtävästä muodostetaan LP-relaksaatio poistamalla kokonaislukurajoitukset. Olkoon LP0 alkuperäisen tehtävän LP-relaksaatio. LP0:n ratkaisu on x = 3.75, x =.5, z = 3.75. Tämä ratkaisu ei ole kokonaislukuarvoinen. Valitaan jokin luku x j, joka ei ole kokonaisluku, esimerkiksi x. Alueella 3 < x < 4 LP0:n käyvässä joukossa ei ole yhtään kokonaislukuratkaisua, joten ko. aluetta ei tarvitse huomioida ILP-tehtävän ratkaisua haettaessa. Seuraavaksi muodostetaan LP0:sta kaksi alitehtävää LP ja LP seuraavasti: LP:n rajoituehdot = LP0:n rajoituehdot + (x 3) LP:n rajoituehdot = LP0:n rajoituehdot + (x 4) LP:n ja LP:n käyvät joukot on esitetty kuvassa. LP:tä ja LP:ta tutkitaan erillisinä tehtävinä.
8 x 7 6 Käypiä kokonaislukupisteitä 5 4 3 Optimipiste ilman kokonaislukurajoitusta x =3.75, x =.5, z=3.75 0 3 4 5 6 x Kuva 3: Alkuperäisen ILP-tehtävän käypä joukko, sekä LP-relaksaation LP0 optimiratkaisu. x 6 5 LP x < 3 x > 4 4 3 LP 0 3 4 5 x Kuva 4: LP0:sta muodostetaan relaksaatiot LP ja LP lisäämällä rajoitukset x 3 ja x 4. Valitaan sattumanvaraisesti ensin tutkittavaksi LP. Tehtävä on max z = 5x + 4x s.t. x + x 5 0x + 6x 45 x 3 x,x 0
Tehtävän ratkaisuksi saadaan x = 3x =, z = 3, mikä täyttää myös kokonaislukurajoitukset. Nyt LP:n käypää joukkoa ei enää tarvitse tutkia, sillä sieltä ei voi löytyä tätä parempaa kokonaislukuratkaisua. Emme kuitenkaan voi vielä pitää löydettyä ratkaisua alkuperäisen ILP-tehtävän ratkaisuna, sillä LP:n käyvästä joukosta saattaa löytyä vielä parempi kokonaislukuratkaisu. Saatu ratkaisu on kuitenkin eräs alaraja (lower bound) ILP-tehtävän kohdefunktion optimiarvolle. Alarajaa päivitetään algoritmin edetessä sitä mukaa, kun parempia kokonaislukuratkaisuja löytyy. Nyt on tutkittava, löytyykö LP:n käyvästä joukosta parempaa kokonaislukuratkaisua. Havaitaan, että tehtävän LP0 optimiratkaisussa z=3.75, kohdefunktion kertoimet ovat kokonaislukuja. Näin ollen z=3 on suurin kohdefunktion arvo, mitä kokonaislukuratkaisulla voidaan saavuttaa. Voimme siis todeta, tutkimatta tehtävää LP, että piste x = 3, x =, z = 3 on alkuperäisen ILP-tahtävän ratkaisu. Jos olisimme alkaneet tutkia LP:ta ennen LP:tä, ja jakaneet LP:ta aliongelmiin kunnes löytyy kokonaislukuratkaisu ja vastaava alaraja, olisi algoritmi edennyt kuvassa 3 esitetyn puun mukaan. B & B-algoritmin vaiheet: Maksimointitehtävä, alaraja alussa. (minimoinnissa alaraja korvataan ylärajalla, yläraja alussa ) Askel : Muodostetaan ILP-tehtävästä LP-tehtävä poistamalla kokonaislukurajoitukset. Siirrytään askeleeseen. Askel : Ratkaistaan tutkittava LP-tehtävä. Mikäli ratkaisu on kokonaislukuvektori, on kaksi vaihtoehtoa. Jos ratkaisu on parempi kuin voimassa oleva alaraja, korvataan alaraja tällä kohdefunktion arvolla.. Jos ratkaisu on huonompi kuin voimassa oleva alaraja, säilytetään vanha alaraja. Jos kaikki alitehtävät on tutkittu, on voimassa olevaa alarajaa vastaava piste ILP-tehtävän optimi ja algoritmi päättyy. Jos alitehtäviä on vielä tutkimatta, valitaan niistä yksi tutkittavaksi ja siirrytään askeleen alkuun. Mikäli löydetty ratkaisu ei toteuta kokonaislukurajoituksia, on myös kaksi 3
LP 0 x =3.75, x =.5, z=3.75 x <3 x >4 7 LP x = 3, x =, z = 3 Alaraja (optimi) 4 x <0 LP x = 4, x =0.83, z=3.33 x > 3 LP 3 x =4.5, x =0, z=.5 LP 4 Ei käypää ratkaisua 6 x <4 x >5 5 LP 5 x = 4, x = 0, z = 0 Alaraja LP 6 Ei käypää ratkaisua Kuva 5: Algoritmin muodostama puu, kun tarkastellaan ensin aliongelmaa LP. Numerot laatikoiden yllä kertovat tehtävien ratkaisujärjestyksen. vaihtoehtoa. Jos ratkaisu on parempi kuin voimassa oleva alaraja, siirrytään askeleeseen 3.. Jos ratkaisu on huonompi kuin voimassa oleva alaraja, valitaan uusi tutkimaton alitehtävä ja siirrytään askeleen alkuun. Jos kaikki alitehtävät on tutkittu, on voimassa olevaa alarajaa vastaava piste ILPtehtävän optimi ja algoritmi päättyy. Askel 3: Valitaan yksi muuttuja x i, jonka arvo tutkittavan LP-tehtävän optimissa ei ole kokonaisluku. Muodostetaan LP-tehtävästä kaksi alitehtävää lisäämällä tätä muuttujaa koskevat rajoitukset x i a ja x i a +, 4
missä a Z ja muuttujan x i arvolle LP-tehtävän optimissa x i pätee a < x i < a +. Valitaan alitehtävistä toinen tutkittavaksi ja siirrytään askeleeseen. 5