Matemaattinen optimointi II

Koko: px
Aloita esitys sivulta:

Download "Matemaattinen optimointi II"

Transkriptio

1 Matemaattinen optimointi II Marko M. Mäkelä Turun yliopisto Matematiikan ja tilastotieteen laitos Kevät 21

2 Sisältö Esipuhe 1 1 Lyhimmät tiet ja diskreetti dynaaminen optimointi Lyhimmän tien ongelmia Lyhimmät tiet dynaamisella optimoinnilla Lyhimmät tiet jostakin solmusta kaikkiin muihin Lyhimmät tiet kaikkien solmuparien välillä Etäisyydet solmusta muihin ei-negatiivisten painojen tapauksessa Lyhimmät tiet solmusta muihin syklittömässä verkossa Projektin valvonta ja pisimmät tiet Diskreetti dynaaminen optimointi Virtaukset verkossa Minimikustannusvirtausongelma Kulkusuunnat ketjuissa Perusalgoritmi minimikustannusvirtausongelman ratkaisemiseksi Minimikustannusvirtausongelman ratkaisujen jaollisuus Kuljetus- ja järjestelyongelmat Muita yhden tuotteen virtausongelmia Simplex-algoritmi verkoille Monen tuotteen virtaukset sekä lisääntyvät ja vähenevät virtaukset Diskreetit optimointimallit 68.1 Kokkareiset lineaariset optimointitehtävät Selkäreppu- ja budjetointimallit Pakkaus-, peitto- ja ositusmallit Järjestely- ja paritusongelmat Kauppamatkustaja- ja reititysongelmat Sijoittelu ja verkon suunnittelu Töidenjärjestelyongelmat Paloittain lineaarinen approksimointi Diskreetit optimointimenetelmät Täydellinen luettelointi Relaksaatiomenetelmä Tiukat relaksaatiot Branch and Bound Branch and bound -algoritmin tehostamistapoja Parantava hakuheuristiikka

3 4.7 Tabuhaku, simuloitu jäähdytys ja geneettiset algoritmit Konstruktiiviset heuristiikat Kirjallisuutta 148 2

4 Esipuhe Matemaattinen optimointi II on suoraa jatkoa kurssille Matemaattinen optimointi I, jossa käsiteltiin lähinnä jatkuvaa lineaarista optimointia. Tällä kurssilla keskitytään puolestaan diskreettiin lineaariseen optimointiin, jolla on vahvat yhteydet graafi- ja verkostoteoriaan. Luentomoniste perustuu emeritusprofessori Timo Leipälän vuonna 28 kirjoittamaan erinomaiseen monisteeseen [1]. Kyseisen monisteen pääasiallisena lähteenä on käytetty kirjan [2] lukuja Erityiskiitos Outi Wilpulle tekstin huolellisesta ladonnasta ja kuvien tuottamisesta. Turussa keväällä 212 Marko M. Mäkelä 1

5 1 Lyhimmät tiet ja diskreetti dynaaminen optimointi 1.1 Lyhimmän tien ongelmia Esimerkki 1.1. Tarkastellaan Littlevillen keskustaa, jossa on yksi- ja kaksisuuntaisia katuja ja kunkin risteyksen välille on estimoitu sen ajamiseen kuluva aika sekunteina. Liikennesuunnittelussa voidaan selvittää kyselytutkimuksilla automatkojen aloittamis- ja lopettamiskohdat, mutta autoilija ei voi ilmoittaa valitsemaansa reittiä ennen kuin tietää minkälaisia tulevat liikennejärjestelyt (etuajo-oikeudet, yksisuuntaisuudet jne.) ovat. Liikennesuunnittelijoiden on kuitenkin arvioitava eri päätösvaihtoehtoja varten kullakin kadunpätkällä kulkevien autojen määrää. Yksi arviointitapa on olettaa, että kaikki autoilijat toimivat rationaalisesti ja valitsevat aina lyhimmän reitin. Silloin analyysissa täytyy määrätä lyhin tie jokaisesta reitin aloituskohdasta jokaiseen reitin lopetuskohtaan Kuva 1: Littlevillen keskusta Katuverkostoa ja monia muitakin asioita voidaan abstrahoida esittämällä se graafina (Q, E), missä Q = q 1, q 2,... on solmujen ja E = e 1, e 2,... niitä yhdistävien kaarten e k = (q i, q j ) joukko. Kaari voi olla suuntaamaton tai suunnattu. Jälkimmäisessä tapauksessa sitä pitkin voi liikkua vain suuntaan q i q j ja silloin puhutaan usein nuolista. Tällöin q i on nuolen alkusolmu (tail) ja q j loppusolmu (head). Katuverkostossa solmut esittävät risteyksiä, jotka on selvyyden vuoksi numeroitu. Yksisuuntaista katua esittää suunnattu nuoli ja kaksisuuntaista suuntaamaton kaari. Koska kaaren merkintä ei ole yksikäsitteinen, voidaan sopia, että järjestysnumeroltaan pienempi solmu on ensimmäisenä. Mikäli nuolilla/kaarilla (i, j) on reaalilukupainot c ij niin kuin kuvassa 2, voidaan formuloida ja ratkaista erilaisia kvantitatiivisia optimointiongelmia ja puhutaan graafin asemasta verkosta. Tässä paino voi esittää kustannusta, 2

6 matkaa, aikaa jne. Esitellään seuraavat verkkoihin liittyvät käsitteet: Verkko on suunnattu, jos kaikki sen kaaret ovat suunnattuja nuolia. Verkko on suuntaamaton, jos kaikki sen kaaret ovat suuntaamattomia. Polku tai tie solmujen i ja j välillä on katkeamaton kaari- tai nuolijono (i, k 1 ), (k 1, k 2 ),...,(k p 1, k p ), (k p, j), joka yhdistää verkon solmut i ja j. Tässä nuolet on kuljettava oikeassa järjestyksessä eikä missään solmussa käydä kahdesti. Verkko on yhtenäinen, jos jokaisen solmuparin välillä on polku. Polun pituus on polkuun kuuluvien nuolien (kaarien) painojen summa. Syklistä puhutaan, jos polun alku- ja loppupiste ovat samoja ja p 1. Sykli on negatiivinen, jos sen pituus on negatiivinen. Silmukka on nuoli (i, i) solmusta i itseensä. Puu on yhtenäinen suuntaamaton verkko, jossa ei ole syklejä. Verkkojen avulla voidaan havainnollisesti esittää monenlaisia tärkeitä käytännön ongelmia. Lisäksi verkko-ongelmiksi pystytään hyvin usein pukemaan myös tehtäviä, joiden verkkorakenne ei ole sillä tavalla ilmeinen kuin edellisessä esimerkissä. Oleellista on se, että yllä olevan määritelmän mukaiset abstraktit käsitteet pystytään muodostamaan. Lyhimmän tien ongelmassa etsitään pituudeltaan lyhintä polkua kahden annetun solmun välillä ts. yritetään minimoida polun kaarten/nuolten painojen summaa Kuva 2: Littlevillen keskustan katuverkosto

7 Kuvan 2 verkossa saadaan esimerkiksi polut ja solmujen ja 8 välille. Sen sijaan ja eivät ole polkuja. Koska painona on nyt ajoaika, yritetään lyhimmän tien ongelmassa määrätä nopein reitti solmusta i solmuun j. Edellä olevien reittien ajoajat ovat nyt = 17 ja = 79 sekuntia. Esimerkkiongelmassa on sekä kaaria että nuolia, kaikki painot ovat ei-negatiivisia ja tavoitteena on ratkaista kaikkien solmuparien väliset lyhimmät reitit. Muitakin versioita lyhimmän tien ongelmasta tunnetaan ja niille on kehitelty erilaisia algoritmeja. Esimerkki 1.2. Ft. Worthissa sijaitseva kuljetusyritys jakelee tavaraa kuorma-autoissa kuvassa näkyviin kaupunkeihin. Kaupunkien etäisyydet on merkitty painoiksi. Jakelussa ei pysähdytä mihinkään välillä olevaan paikkaan vaan viedään koko lasti yhteen paikkaan. Kuljettajille maksetaan palkkaa lyhimmän etäisyyden mukaan, joten täytyy saada selville lyhimmät etäisyydet Ft. Worthista muihin kaupunkeihin. Muut lähtösolmut eivät nyt kiinnosta eikä tarvitse tietää optimaalisia reittejäkään, ainoastaan niiden pituudet ovat kiinnostavia. Verkko on nyt suuntaamaton. 1 Amarillo Lubbock 2 Ft. Worth Abilene Austin 4 San Angelo 8 El Paso Houston San Antonio 21 1 Corpus Christi 1 9 Kuva : Kuljetusyrityksen jakelukaupungit Esimerkki 1.. Sirkuksen kesäkiertue on päättynyt Lincolniin ja sen olisi palattava talvilepoon Tallahasseen lähelle. Kuvan 4 verkkoon on merkitty paluureitin varrella mahdollisesti olevia kaupunkeja ja niiden väliset siirtymiskustannukset tuhansina dollareina. Kussakin kaupungissa on mahdollista järjestää esityksiä ja niistä saatavat arvioidut tuotot tuhansina dollareina on merkitty kaupunkia esittävän solmun kohdalle. Pyritään siihen, että matkakustannukset olisivat mahdollisimman pienet, jolloin esimerkki poikkeaa aikaisemmista siinä, että nyt jokaisella solmulla on lukuarvona siitä saatava tuotto. Tässä 4

8 Lincoln, Wichita, Little Rock, Davenport 1, Springfield 1,. Chattanooga, Jackson 1, Montgomery 1, Tallahassee, 9 Kuva 4: Sirkuskiertueen reittimahdollisuudet tapauksessa saadaan suuntaamaton verkko, mutta jotta voidaan mallintaa solmuissa saatavat tuotot, täytyy aluksi muuntaa se suunnatuksi korvaamalla jokainen kaari kahdella suunnatulla nuolella. Koska kussakin solmussa voidaan käydä vain kerran, ei molempia Kuva : Sirkusesimerkin suunnattu verkko solmujen i ja j välisiä nuolia voida reitissä käyttää. Nyt solmujen tuotot voidaan mallin-

9 taa jakamalla kukin solmu i kahdeksi solmuksi i 1 ja i 2. Solmuun i 1 pantaisiin tulemaan kaikki solmuun i tulevat nuolet ja solmusta i 2 lähtemään kaikki solmusta i lähtevät nuolet. Solmusta i 1 solmuun i 2 pantaisiin vielä kulkemaan nuoli, jonka painona olisi solmusta i saatavan tuoton vastaluku. Yksinkertaisempi tapa on kuitenkin vähentää kustakin solmusta i lähtevän nuolen painosta solmusta i saatava tuotto Kuva 6: Sirkusesimerkin suunnattu verkko Vaikka tässä vähennetäänkin tuotto kaikista solmusta i lähtevistä nuolista, on huomattava, että kussakin polussa voi esiintyä korkeintaan yksi näistä. Verkko on nyt suunnattu ja myös negatiiviset painot ovat mahdollisia. Tavoitteena on määrätä lyhin reitti aloitussolmusta s solmuun k. Olkoon nyt tehtävänä määrätä lyhin tie solmusta s solmuun k suunnatussa verkossa. Otetaan käyttöön päätösmuuttuja { 1, jos optimireitti kulkee nuolta (i, j) pitkin x ij =, muuten. Ongelmasta saadaan binäärinen optimointitehtävä min s. t. i, j, (i,j) E i, (i,l) E c ij x ij x il j, (l,j) E x ij {, 1}, (i, j) E, 1, kun l = k x lj = 1, kun l = s, muulloin 6

10 mutta voidaan osoittaa, että sen kanssa identtisen ratkaisun tuottaa helpommin ratkaistava lineaarinen tehtävä min s. t. i, j, (i,j) E i, (i,l) E c ij x ij x il j, (l,j) E x ij, (i, j) E. 1, kun l = k x lj = 1, kun l = s, muulloin Tämä johtuu siitä, että kerroinmatriisi on nyt erikoista muotoa ja Simplex-algoritmissa jaetaan vain ykkösellä. Siksi ratkaisun täytyy olla kokonaisluku, ja ainoat mahdollisuudet ovat x ij = tai x ij = 1, joten erityistä kokonaislukuvaatimusta ei tarvita. Kun lasketaan kaikki varsinaiset rajoitukset yhteen, saadaan identiteetti =, joten ainakin yksi rajoituksista on muista riippuva ja voidaan poistaa. Voidaan osoittaa, että tasan yhden rajoituksen poistaminen riittää. Tehtävän duaali on max v k v s s. t. v j v i c ij, (i, j) E ja sitä käytetään ratkaisualgoritmeissa tehokkaasti hyväksi. Koska rajoituksista yksi oli muista riippuva, on myös yksi duaalimuuttujista muista riippuva ja usein valitaankin v s = ja ratkaistaan muut. Suure v i esittää silloin lyhimmän tien pituutta solmusta s solmuun i. 1.2 Lyhimmät tiet dynaamisella optimoinnilla Dynaaminen optimointi on menettely, jossa yksittäinen ongelma, kuten lyhin tie kiinnitetystä lähtösolmusta kiinnitettyyn tulosolmuun, ratkaistaan osana laajempaa ongelmaa, jossa selvitetään lyhimmät tiet lähtösolmusta kaikkiin solmuihin. Ratkaisu tapahtuu rakentamalla lyhintä tietä vaiheittain. Jos tarvitaan lyhimmät tiet kaikkiin solmuihin, käytetään seuraavia merkintöjä: v[k]: lyhimmän tien pituus lähtösolmusta solmuun k. Jos tällaista polkua ei ole olemassa, merkitään v[k] =, x ij [k] = { 1, jos optimireitti solmuun k kulkee nuolta (kaarta) (i, j) pitkin, muuten. Mikäli halutaankin lyhimmät tiet kaikista solmuista kaikkiin solmuihin, niin 7

11 v[k, l]: lyhimmän tien pituus solmusta k solmuun l. Jos tällaista polkua ei ole olemassa, merkitään v[k, l] =, x ij [k, l] = { 1, jos optimireitti solmusta k solmuun l kulkee nuolta (i, j) pitkin, muuten. Esimerkin 1.2 kuorma-auto-ongelmassa kulkee lyhin tie Ft. Worthista Corpus Christiin Austinin ja San Antonion kautta. Jos nyt olisi lyhempi tie Ft. Worthista San Antonioon kuin äskeisen reitin käyttämä, niin jatkamalla siitä Corpus Christiin saataisiin optimaalista reittiä lyhyempi reitti. Optimireitin osat ovat siis varmasti optimaalisia, jos kaikki painot ovat ei-negatiivisia. Negatiiviset painot tuottavat vaikeuksia silloin, kun verkossa on sykli, jonka pituus on negatiivinen. v 1 v v v 4 17 Kuva 7: Verkko, jossa negatiivinen sykli Esimerkki 1.4. Kuvan 7 verkossa lyhin tie solmusta 1 solmuun on 1 2. Kuitenkaan 1 2 ei ole optimireitti solmusta 1 solmuun 2 vaan se on Kun tästä yritetään saada optimireittiä jatkamalla solmusta 2 solmuun, niin saadaan ja tullaan solmuun toisen kerran eli saadaan sykli. Kun tästä reitistä jätetään pois sykli, jää jäljelle reitti 1, mutta sen pituus on 1 eikä se ole optimaalinen. Ongelmana on negatiivinen sykli 2 4 2, jonka pituus on = 1. Huomautus 1.. Mikäli verkossa on negatiivisia syklejä, lyhimmän tien määrääminen vaikeutuu oleellisesti. Oletetaan toistaiseksi ettei negatiivisia syklejä ole. Määritelmä 1.6. Dynaamisen optimoinnin optimaalisuusperiaate: jos lyhin tie s k kulkee solmun i kautta, niin se osa siitä, joka kulkee solmusta s solmuun i, on lyhin tie s i. Nyt saadaan rekursiiviset funktionaaliyhtälöt v[s] = v[k] = min i {v[i] + c ik (i, k) E}, k s, 8

12 joiden avulla lyhimmät reitit solmusta s solmuun k konstruoidaan optimaalisista reiteistä solmun k edeltäjäsolmuihin. Jos yhtään nuolta (i, k) E ei ole olemassa, sovitaan, että v[k] =. Kuorma-autoesimerkissä 1.2 lyhin reitti San Antonioon (solmu j = 7) on v[7] = min{v[6] + c 67, v[8] + c 87, v[9] + c 97, v[1] + c 1,7 } = min{v[6] + 21, v[8] + 79, v[9] + 199, v[1] + 1}. Lause 1.7. Kun verkossa ei ole negatiivisia syklejä, niin arvot v[k] ovat lyhimpien reittien pituuksia solmusta s solmuun k silloin ja vain silloin kun ne toteuttavat yllä olevat funktionaaliyhtälöt. Todistus. Ensin osoitetaan, että v[k] on jonkin reitin pituus. Nyt ja tässä v[k] = min{v[i] + c ik (i, k) E} = v[k p ] + c kp k i v[k p ] = min i {v[i] + c ikp (i, k p ) E} = v[k p 1 ] + c kp 1 k p. Sijoitetaan viimeksi saatu tulos edelliseen, josta seuraa Näin jatkaen lopulta v[k] = v[k p 1 ] + c kp 1 k p + c kp k. v[k] = v[s] + c sk1 + c k1 k c kp 1 k p + c kp k = c sk1 + c k1 k c kp 1 k p + c kp k, joten v[k] on polun s k 1 k 2... k p k pituus. Tarkastellaan sitten jotakin toista reittiä s l 1 l 2... l q k, jolloin funktionaaliyhtälöistä seuraa, että v[l 1 ] v[s] + c sl1. v[l 2 ] v[l 1 ] + c l1 l 2 Laskemalla nämä yhteen saadaan v[l q ] v[l q 1 ] + c lq 1 l q v[k] v[l q ] + c lqk. v[k] v[s] + c sl1 + c l1 l c lq 1 l q + c lqk = c sl1 + c l1 l c lq 1 l q + c lqk, joten tämän reitin pituus ei voi olla pienempi kuin v[k]. Mikäli halutaan lyhimmät tiet kustakin solmusta kuhunkin solmuun, muuttuvat funktionaaliyhtälöt muotoon v[k, k] =, k v[k, l] = min{c kl, {v[k, i] + v[i, l] i k, l}}, k l. 9

13 1. Lyhimmät tiet jostakin solmusta kaikkiin muihin Ratkaistaessa edellisen kohdan funktionaaliyhtälöitä tulee ongelmia silloin, kun verkossa on syklejä. Esimerkiksi jos siinä on sykli 1 2 1, niin saadaan laskukaavat v[1] = min{v[] + c 1,...} v[2] = min{v[1] + c 12,...} v[] = min{v[2] + c 2,...}, joista ei suoraan saada mitään irti. Bellman-Ford -algoritmilla voidaan kuitenkin määrätä lyhimmät tiet, jos negatiivisia syklejä ei ole. Siinä iteroidaan arvoja v[k] ja merkitään vaiheessa t saatua arvoa suureella v t [k]. Kun muutoksia ei tapahdu, saadaan optimaaliset arvot. Algoritmi 1.8. Bellman-Ford: lyhimmät tiet solmusta kaikkiin muihin Askel. Kun lähtösolmu on s, alustetaan etäisyydet. { v, kun k = s [k], muutoin. ja kierroslaskuri t 1. Askel 1. Kullekin solmulle k Q, k s lasketaan v t [k] min i {v t 1 [i] + c ik (i, k) E} = v t 1 [l] + c lk. Mikäli v t [k] < v t 1 [k], niin asetetaan d[k] l. Askel 2. Lopetetaan, jos v t [k] = v t 1 [k] jokaiselle solmulle k tai mikäli t on verkon solmujen lukumäärä. Edellisessä tapauksessa ilmoittavat arvot v t [k] optimaalisten reittien pituudet solmuihin k ja jälkimmäisessä tapauksessa on verkossa negatiivinen sykli. Askel. Päivitetään kierroslaskuria t t + 1 ja palataan askeleeseen 1. Algoritmin tuottama d[k] ilmoittaa solmua k edeltävän solmun lyhimmällä tiellä solmusta s solmuun k. Esimerkki 1.9. Kun sovelletaan Bellman-Ford -algoritmia sirkusesimerkkiin 1., saadaan lyhimpien teiden pituudet 1

14 t v t [1] v t [2] v t [] v t [4] v t [] v t [6] v t [7] v t [8] v t [9] sekä solmujen optimaaliset edeltäjät t d[1] d[2] d[] d[4] d[] d[6] d[7] d[8] d[9] Kuvassa 8 on esitetty saadut optimireitit Kuva 8: Sirkusesimerkin optimireitit Jos se olisi ratkaistu luvussa 1.1 esitettynä lineaarisena optimointitehtävänä, olisi saatu optimireitti x 1 = x = x 7 = x 78 = x 89 = 1 sekä lisäksi degeneroituneet kantamuuttujat x 12 = x 24 = x 6 =. 11

15 Kun Bellman-Ford -algoritmista on suoritettu t vaihetta, saadaan lyhimpien teiden pituudet korrektisti niihin solmuihin, joihin pääsemiseksi tarvitaan korkeintaan t kaarta. Koska n solmuisessa verkossa olevassa polussa voi olla korkeintaan n 1 kaarta, voitaisiin lopettaa n 1 vaiheen jälkeen, jos negatiivisia syklejä ei ole. Mikäli verkossa on negatiivinen sykli, muuttuvat algoritmin antamat etäisyydet vielä vaiheessa n. Esimerkki 1.1. Sovellettaessa kuvan 7 negatiivisen syklin sisältäneeseen esimerkkiverkkoon Bellman-Ford -algoritmia, saadaan t v t [1] v t [2] v t [] v t [4] t d[1] d[2] d[] d[4] Algoritmi jää pyörimään negatiivisessa syklissä pienentäen siihen kuuluvien solmujen etäisyyksiä rajattomasti. Negatiivinen sykli saadaan konstruoitua vaiheessa n saaduista edeltäjäsolmuista, kun valitaan jokin siinä etäisyyttään muuttanut solmu ja selvitetään sen edeltäjä, edeltäjän edeltäjä jne. Esimerkissä solmujen 2 ja etäisyydet muuttuivat vaiheessa 4. Nyt d[2] = 4, d[4] = ja d[] = 2, joten negatiivinen sykli on Lyhimmät tiet kaikkien solmuparien välillä Kun halutaan esimerkin 1.1 tapaan lyhimmät tiet jokaisesta solmusta jokaiseen solmuun, voidaan käyttää Floyd-Warshall -algoritmia, jossa konstruoidaan optimireittejä kasvattaen välisolmujen määrää joka vaiheessa. Numeroidaan solmut perättäisillä kokonaisluvuilla alkaen numerosta 1 ja merkitään v t [k, l]: lyhimmän tien pituus solmusta k solmuun l, kun välisolmuina ovat solmut 1,..., t. d[k, l]: solmun l edeltäjäsolmu nykyisellä reitillä solmusta k solmuun l. Tällöin on luonteva valita v [k, l] = c kl. 12

16 Algoritmi Floyd-Warshall: etäisyydet kaikkien solmuparien välillä Askel. Numeroidaan solmut ykkösestä alkaen ja asetetaan kaikille kaarille (k, l) E v [k, l] c kl d[k, l] k. Mikäli kaarta (k, l) ei ole verkossa v [k, l] {, jos k = l, muulloin. Asetetaan vielä kierroslukuindeksiksi t 1. Askel 1. Kaikille solmuille k, l t päivitetään v t [k, l] min{v t 1 [k, l], v t 1 [k, t] + v t 1 [t, l]}. Mikäli v t [k, l] < v t 1 [k, l], niin asetetaan d[k, l] d[t, l]. Askel 2. Lopetetaan, jos t on verkon solmujen määrä tai v t [k, k] < jossakin solmussa k. Edellisessä tapauksessa ilmoittavat viimeksi saadut suureet v t [k, l] lyhimmät etäisyydet ja jälkimmäisessä tapauksessa on verkossa solmun k kautta kulkeva negatiivinen sykli. Askel. Kasvatetaan kierroslaskuria t t + 1 ja palataan askeleeseen 1. Kun algoritmista on suoritettu t kierrosta, on saatu lyhimmät etäisyydet, joissa välisolmuina ovat solmut 1,..., t. Optimireitit saadaan taas takaperoisessa järjestyksessä käyttäen talletettuja edeltäjäsolmuja d[k, l]. Esimerkki Sovellettaessa Floyd-Warshall algoritmia esimerkin 1.1 ratkaisuun saadaan alkuarvot solmujen 1

17 etäisyyksille v [k, l] l = 1 l = 2 l = l = 4 l = l = 6 l = 7 l = 8 l = 9 l = 1 k = 1 12 k = k = 1 k = 4 8 k = 2 18 k = k = k = k = k = edeltäjille d[k, l] l = 1 l = 2 l = l = 4 l = l = 6 l = 7 l = 8 l = 9 l = 1 k = k = k = k = k = k = k = k = k = k = sekä vaiheen t = 1 jälkeen reittien pituudet v 1 [k, l] l = 1 l = 2 l = l = 4 l = l = 6 l = 7 l = 8 l = 9 l = 1 k = 1 12 k = k = 1 k = 4 8 k = k = k = k = k = k =

18 ja viimeisen solmun edeltäjät d[k, l] l = 1 l = 2 l = l = 4 l = l = 6 l = 7 l = 8 l = 9 l = 1 k = k = k = k = k = k = k = k = k = k = Vaiheen t = 9 jälkeen ovat viimein etäisyydet v 9 [k, l] l = 1 l = 2 l = l = 4 l = l = 6 l = 7 l = 8 l = 9 l = 1 k = k = k = k = 4 8 k = k = k = k = k = k = ja edeltäjät d[k, l] l = 1 l = 2 l = l = 4 l = l = 6 l = 7 l = 8 l = 9 l = 1 k = k = k = k = k = k = k = k = k = k =

19 Viimeisessä vaiheessa t = 1 saadaan optimireitin pituudet v 1 [k, l] l = 1 l = 2 l = l = 4 l = l = 6 l = 7 l = 8 l = 9 l = 1 k = k = k = k = k = k = k = k = k = k = ja optimaaliset edeltäjäsolmut d[k, l] l = 1 l = 2 l = l = 4 l = l = 6 l = 7 l = 8 l = 9 l = 1 k = k = k = k = k = k = k = k = k = k = Solmujen ja 8 välisen optimireitin pituus on 79 ja se itse reitti on 4 1 8, sillä d[, 8] = 1, d[, 1] = 4, d[, 4] =. Esimerkki 1.1. Kun sovelletaan Floyd-Warshall algoritmia negatiivisen syklin sisältävään esimerkkiin 1.4, niin kahdessa ensimmäisessä vaiheessa t = ja t = 1 v t [k, l] l = 1 l = 2 l = l = 4 k = k = 2 k = 12 k =

20 d[k, l] l = 1 l = 2 l = l = 4 k = k = k = k = ja sen jälkeen saadaan v 2 [k, l] l = 1 l = 2 l = l = 4 k = 1 2 k = 2 k = 12 k = d[k, l] l = 1 l = 2 l = l = 4 k = k = k = k = sekä v [k, l] l = 1 l = 2 l = l = 4 k = k = 2 1 k = 12 k = d[k, l] l = 1 l = 2 l = l = 4 k = k = k = k = Nyt v [4, 4] min{, v 2 [4, ] + v 2 [, 4]} = min{, } = 1, joten verkossa on negatiivinen sykli. Se on 4 2 4, sillä d[4, 4] =, d[4, ] = 2, d[4, 2] = Etäisyydet solmusta muihin ei-negatiivisten painojen tapauksessa Kun oletetaan, että kaikki painot ovat ei-negatiivisia, voidaan tehostaa selvästi aikaisempia algoritmeja ja saadaan Dijkstran algoritmi 17

21 Algoritmi Dijkstra: etäisyys solmusta muihin kun painot ei-negatiivisia Askel. Kun alkusolmuna on s, asetetaan { v[i], jos i = s, muulloin. Merkitään kaikkien solmujen etäisyydet väliaikaisiksi ja kiinnitetään seuraavaksi solmun p s etäisyys. Askel 1. Merkitään solmu p kiinnitetyksi ja jokaiselle siitä kiinnittämättömään solmuun i lähtevälle kaarelle (p, i) päivitetään etäisyydet v[i] min{v[i], v[p] + c pi }. Jos v[i] arvo muuttui, asetetaan d[i] p. Askel 2. Jos väliaikaisia solmuja ei enää ole, lopetetaan. Arvot v[i] ilmoittavat lyhimmät etäisyydet solmuun i. Askel. Kiinnitetään seuraavaksi solmu p, jonka väliaikainen etäisyys on pienin ts. v[p] = min{v[i] i väliaikainen} ja palataan askeleeseen 1. Dijkstran algoritmissa käsitellään kukin solmu vain kerran eikä kiinnitetyn solmun etäisyyttä alkusolmusta enää muuteta. Jokaisen iteraatiokierroksen jälkeen Dijkstran algoritmin tuottamat v[i] arvot ilmoittavat kiinnitettyjä solmuja käyttävien reittien lyhimmät etäisyydet solmuun i. Solmujen kiinnitysjärjestys on järkevä, sillä jos solmuun p johtaa useampia polkuja, täytyy pelkästään kiinnitetyistä solmuista koostuvan olla niistä lyhin. Muut polut sisältävät ensin solmusta s kiinnitettyjä solmuja ja ensimmäisenä kiinnittämättömänä solmuna i, josta kiinnittämättömiä solmuja solmuun p. Polun alkuosan pituudelle v[i] on solmun p valinnan nojalla voimassa v[i] v[p] ja nuolten pituuksien ei-negatiivisuudesta seuraa, että loppuosan pituus on ei-negatiivinen. Esimerkki 1.1. Kun ratkaistaan Dijkstran algoritmilla esimerkkiä 1.2, saadaan p v[1] v[2] v[] v[4] v[] v[6] v[7] v[8] v[9] v[1]

22 ja p d[1] d[2] d[] d[4] d[] d[6] d[7] d[8] d[9] d[1] Viimeinen rivi etäisyystaulukosta esittää optimaalisia etäisyyksiä solmuihin ja reitit saadaan taas viimeisestä edeltäjärivistä. Esimerkiksi lyhimmän tien pituus solmusta s = solmuun i = 1 on 427 ja se on 8 7 1, sillä d[1] = 7, d[7] = 8, d[8] =. 1.6 Lyhimmät tiet solmusta muihin syklittömässä verkossa Jos oletetaan, ettei verkossa ole syklejä, voidaan edellen tehostaa lyhimpien teiden määräämistä. Suuntaamattomassa verkossa ei päästä syklittömyyteen, joten oletaan nyt, että verkko on suunnattu. Pienestä verkosta voidaan helposti tarkastaa milloin se on syklitön, mutta suunnattu verkko on yleisesti syklitön, mikäli sen solmut voidaan numeroida niin, että jokaiselle nuolelle (i, j) on voimassa i < j. Tällainen numerointi saadaan aikaan verkon solmujen syvyyshaulla, jossa numeroidaan vähenevään numerojärjestykseen yksi kerrallaan sellaisia solmuja, joista lähtevät nuolet johtavat jo käsiteltyihin solmuihin tai niitä ei ole ollenkaan. a b c d e Kuva 9: Esimerkin 1.16 verkko Esimerkki Tarkastellaan kuvan 9 verkkoa, joka käsittää viisi solmua. Lähdetään nyt liikkeelle solmusta a. Sen seuraaja on solmu b, josta ei lähde yhtään solmua. Sen vuoksi solmu b voidaan numeroida solmuksi. Peruutetaan takaisin solmuun a, jolla 19

23 on toinen seuraaja d. Sen seuraajista solmu b on numeroitu joten mennään solmuun e, jonka ainoa seuraaja b on jo numeroitu. Solmu e numeroidaan solmuksi 4 ja peruutetaan solmuun d, jonka kaikki seuraajat on numeroitu. Sen järjestysnumeroksi asetetaan ja peruutetaan lähtösolmuun a sekä annetaan sille numero 2. Seuraavaksi täytyy valita jokin vielä numeroimaton solmu, josta menettelyä jatketaan. Ainoa mahdollisuus on nyt solmu c, jonka järjestysnumeroksi tulee 1. Kun syklejä ei nyt ole, voidaan solmujen etäisyydet määrätä järjestyksessä solmusta 1 alkaen ja ne saadaan kerralla kuntoon, koska solmuun funktionaaliyhtälön mukaisesti tulevat nuolet tulevat jo käsitellyistä solmuista. Algoritmi Lyhimmät tiet syklittömässä verkossa Askel. Numeroidaan verkon solmut niin, että jokaiselle nuolelle (i, j) E on voimassa i < j. Asetetaan vielä v[s]. Askel 1. Lopetetaan, kun kaikki etäisyydet v[k] on määrätty. Muuten asetetaan indeksin p arvoksi pienin käsittelemättömän solmun numero. Askel 2. Jos solmuun p ei tule nuolia, asetetaan v[p]. Muuten lasketaan v[p] min{v[i] + c ip (i, p) E} = v[l] + c lp i ja asetetaan d[p] l. Palataan askeleeseen Kuva 1: Esimerkin 1.18 syklitön verkko Esimerkki Sovelletaan algoritmia 1.17 kuvan 1 syklittömään verkkoon ja saadaan tulokseksi p v[p] d[p]

24 1.7 Projektin valvonta ja pisimmät tiet Suurten projektien kokonaishallinta on hankalaa, ja sitä varten ne kannattaa jakaa osaprojekteiksi eli töiksi, joista tiedetään niitä välittömästi edeltävät työt ja pystytään arvioimaan kestot. Ennen kuin työ voidaan aloittaa, täytyy kaikkien sen edeltäjätöiden olla valmiiksi suoritettuja. Ensisijainen kiinnostuksen kohde on koko projektin minimaalinen kesto sekä kunkin osatyön aikaisimmat ja myöhäisimmät mahdolliset aloitusajat, kun projekti toteutetaan mahdollisimman nopeasti. Samaten olisi kiinnostava saada informaatiota siitä, miten osaprojektien mahdolliset myöhästymiset vaikuttavat koko projektin kestoon. Oletetaan yksinkertaisuuden vuoksi, että projektin suoritus aloitetaan hetkellä t =. Esimerkki Omakotitalon rakentamisessa ovat osatöitä seuraavan taulukon mukaiset työt. k työ kesto edeltäjät 1 perustukset 1-2 kunnallistekniikka - valutyöt 4 1,2 4 runkotyöt katto sähkötyöt lämmitys ja ilmastointi 1 2, 4 8 seinät 18 4, 6, 7 9 sisäpuolen viimeistely 2, 8 Näistä tiedoista täytyisi päätellä milloin aliurakoitsijoita ja mitäkin tavaraa kannattaa hankkia paikalle. Nyt ei ole valmiina mitään verkkoa, vaan sellainen täytyy muodostaa edeltäjätiedoista. Yksi tapa on esittää kutakin osatyötä suunnattuna nuolena, jonka paino on työn kesto. Solmut esittävät silloin töiden alkamis- ja loppumistapahtumia ja nuolien järjestyksellä voidaan hoitaa edeltäjärelaatiot kuntoon. Tässä tarvitaan kuitenkin usein aputöitä, joiden kestot ovat nollia. Yllä olevasta taulukosta huomataan, että työn 7 edeltäjänä työ 2 on turha, koska työn 7 edeltäjä on 4, työn 4 edeltäjä työ ja työn edeltäjä työ 2. Samoin on työn 8 edeltäjänä työ 4 turha. Kun nämä jätetään pois saadaan kuvan 11 syklitön projektiverkko, joka on muodostettu niin, ettei minkään solmuparin välillä ole rinnakkaisia nuolia. Aputyöt on merkitty katkoviivoin. 21

25 Kuva 11: Esimerkin 1.19 projektiverkko Paljon helpompaa on muodostaa verkko, jossa on alkusolmu, loppusolmu ja yksi solmu kullekin työlle. Jos työ i edeltää työtä j pistetään verkkoon kulkemaan suunnattu nuoli (i, j) ja asetetaan sen painoksi työn i kesto. Alkusolmusta s pistetään painoltaan nollan suuruinen nuoli jokaiseen solmuun, jolla ei ole edeltäjiä. Jos solmu i ei ole minkään työn edeltäjä, pistetään siitä nuoli loppusolmuun ja sen painoksi taas työn i paino. Tässä ei haittaa, vaikka edeltäjätöiden joukko ei olisikaan minimaalinen. Esimerkin 1.19 rakennusprojektista saadaan esimerkiksi kuvan 12 suunnatun verkon, joka taas on syklitön. Työn k aikaisin aloitushetki on nyt pisimmän tien pituus solmusta s solmuun k. Koko projektin kesto on pisimmän tien pituus alkusolmusta s loppusolmuun. Tätä polkua kutsutaan kriittiseksi poluksi, koska sillä olevien töiden viivästyminen viivästyttää koko projektia Kuva 12: Projektiverkko ilman rinnakkaisia nuolia Työt kannattaa numeroida ykkösestä lähtien niin, että edeltäjätyöllä on aina seuraajaa pienempi järjestysnumero. Oletetaan, että töitä on kaikkiaan n, jolloin verkon alkusolmu on ja loppusolmu n + 1. Kun merkitään solmua i vastaavan työn kestoa eli nuolen (i, j) painoa a i ja otetaan käyttöön päätösmuuttujat { 1, jos kriittinen polku kulkee nuolta (i, j) pitkin x ij =, muuten, 22

26 niin saadaan lineaarinen optimointitehtävä max a i x ij s. t. Sen duaalisessa tehtävässä (i,j) E x ik i j x ij, (i, j) E. min v n+1 v 1, kun k = n + 1 x kj = 1, kun k =, muulloin s. t. v j v i a i, (i, j) E voidaan taas valita yksi duaalimuuttuja mielivaltaisesti, jolloin kannattaa ottaa v =. Tällöin v i on pisin etäisyys alkusolmusta solmuun i. Saadaan algoritmi Algoritmi 1.2. Projektin töiden aikaisimmat aloitushetket Askel. Numeroidaan projektiverkon solmut kokonaisluvuin, 1,..., n + 1 niin, että verkon jokaiselle nuolelle (i, j) on i < j. Annetaan vielä aloitushetkelle arvo v[] ja p 1. Askel 1. Lopetetaan, kun p > n + 1. Askel 2. Määrätään työn p aikaisin aloitushetki v[p] max i p 1 {v[i] + a i (i, p) E} = v[l] + a l ja edeltäjä d[p] l. Kasvatetaan indeksiä p p + 1 ja palataan askeleeseen 1. Esimerkki Rakennusesimerkissä 1.19 on 9 työtä ja niiden numerointi on jo valmiiksi kunnossa. Saadaan sillä v[] ja. p v[p] d[p] v[1] max{v[] + a } = + =, d[1] v[2] max{v[] + a } = + =, d[2] v[] max{v[1] + a 1, v[2] + a 2 } = max{ + 1, + } = 1, d[] 1 Siitä seuraa projektin kesto 7 sekä kriittinen polku , sillä d[1] = 9, d[9] = 8, d[8] = 7, d[7] = 4, d[4] =, d[] = 1, d[1] =. 2

27 Olkoon nyt projektin valmistumisella määräaika T, johon mennessä sen tulisi olla valmiina ja haluttaisiin tietää osaprojektin k viimeinen mahdollinen aloitusaika l[k], jotta tässä aikataulussa pysyttäisiin. Se saadaan laskemalla pisin tie solmusta k loppusolmuun n + 1 ja vähentämällä saatu arvo ajasta T eli l[n + 1] T l[k] min {l[j] a k (k, j) E}, k = n, n 1,...,. k+1 j n+1 Tässä täytyy määräajan olla vähintään projektin kesto eli T v[n + 1]. Jos määräaikaa T ei ole eksplisiittisesti annettu, käytetään sen arvona projektin kestoa v[n + 1]. Esimerkki Jos esimerkissä 1.19 T = 8 ja solmun k seuraaja on r[k], niin ja taulukon muodossa. l[1] 8 l[9] min{8 2} = 6, r[9] 1 l[8] min{6 18} = 42, r[8] 9 k l[k] r[k] Erotusta s[k] = l[k] v[k], joka ilmoittaa työn k viimeisen ja aikaisimman aloitushetken erotuksen, kutsutaan pelivaraksi. Sen verran voidaan lykätä työn k aloitusta aikaisimmasta mahdollisesta ilman, että projekti myöhästyy määräajastaan T. Esimerkki 1.2. Rakennusesimerkissä 1.19 pelivarat ovat k s[k] Pelivarat voidaan myös laskea jokaiselle osatyölle, mutta niitä saadaan erilaisia riippuen siitä, kumpaa tapahtumishetkeä työn päätesolmuille käytetään. Määritellään osatyön i maksimaallinen pelivara s m [i] = min j {l[j] (i, j) E} v[i] a i turvallinen pelivara s t [i] = min j {l[j] (i, j) E} l[i] a i vapaa pelivara s f [i] = min j {v[j] (i, j) E} v[i] a i riippumaton pelivara s r [i] = max{, min j {v[j] (i, j) E} l[i] a i }. 24

28 Maksimaalinen pelivara saadaan, kun työ loppuu mahdollisimman myöhään ja alkaa mahdollisimman aikaisin. Riippumaton pelivara taas on aika, jonka osatyön suoritus voi viivästyä hidastamatta koko projektia, vaikka sen edeltäjät kestäisivät mahdollisimman kauan ja seuraajat alkaisivat mahdollisimman aikaisin. Aikataulun laatiminen ja resurssien tasaaminen. Nyt voidaan laatia aikataulu, jossa on kunkin työn ajoitus. Voidaan esimerkiksi pyrkiä ajoitukseen, jossa henkilöresurssien tarve pysyy mahdollisimman tasaisena koko ajan Kuva 1: Rakennusesimerkin suunnattu verkko Esimerkki Kuvan 1 projektin töiden i kestot a i ja työvoimatarpeet h i ovat i a i h i Projektin kriittinen polku on ja kesto v[9] = 19. Oletetaan nyt, että T = 19 eli kriittisellä polulla olevilla töillä ei ole pelivaraa. Jos aloitetaan jokaisen työn suoritus mahdollisimman aikaisin, on aikavälillä [, ) käynnissä työ 1, välillä [, ) työt ja 2, välillä [, 6) työ, välillä [6, 8) työt, 4, 6, 7, välillä [8, 9) työt, 4, 6, välillä [9, 11) työt, 4 välillä [11, 1) työ sekä välillä [1, 19) työ 8. Resurssitarpeet ovat näinä aikoina, 1, 7, 1, 9, 7, 2 ja 6 henkeä. Resurssitarve t Kuva 14: Resurssitarpeet, kun jokainen työ aloitetaan mahdollisimman aikaisin 2

29 Jos jokainen työ tehdään niin myöhään kuin mahdollista, on aikavälillä [, ) käynnissä työ 1, välillä [, 4) työ, välillä [4, 6) työt ja 2, välillä [6, 1) työ, välillä [1, 1) työt, 6, välillä [1, 14) työ 8, välillä [14, 17) työt 8, 4 sekä välillä [17, 19) työt 8, 4, 7. Resurssitarpeet ovat näinä aikoina, 7, 1, 2, 4, 6, 11 ja 12 henkeä. Resurssitarve t Kuva 1: Resurssitarpeet, kun jokainen työ tehdään niin myöhään kuin mahdollista Jälkimmäinen on epätasaisempi, mutta edellistäkin voidaan parantaa siirtämällä työ 6 mahdollisimman myöhään ja työ 7 heti työn 4 jälkeen. Silloin saadaan suunnitelma, jossa tarvitaan koko ajan vähintään henkeä. Resurssitarve 2 6 alku t Kuva 16: Resurssitarpeet, kun joka hetkellä tarvitaan vähintään henkeä Jos resursseja ei ole niin paljoa, että niitä riittäisi saadun ratkaisun toteuttamiseen, täytyy joidenkin töiden alkua viivyttää, vaikka tämä johtaisikin koko projektin viivästymiseen. Oletetaan, että töiden kestot ovat kokonaislukuja a i N. Silloin koko projektin kesto on korkeintaan n a i = T i=1 ja tarkastellaan resursseja erikseen kullakin aikavälillä [t 1, t), t = 1,..., T. Oletetaan, että resurssia k on välillä [t 1, t) käytettävissä määrä R kt ja että työn i tekemisessä sitä 26

30 tarvitaan koko ajan määrä b ik. Kun valitaan päätösmuuttujiksi { 1, kun työ i alkaa hetkellä t, t =, 1,..., T a i x it =, muuten, saadaan optimointitehtävä min s. t. T t= n i=1 T a j t= tx n+1,t b ik t 1 l=max{,t a i } tx jt T a i t= x il R kt, k = 1,..., K, t = 1,..., T tx it a i, T a i x it = 1, i =, 1,..., n + 1 t= (i, j) E x it {, 1}, i =, 1,..., n + 1, t =, 1,..., T 1 x it {, 1}, jos a i =, jossa on valitettavan paljon muuttujia ja rajoituksia ja jonka tarkka ratkaisu on siksi erittäin hankala. Voidaan kuitenkin saada likimääräisiä ratkaisuja seuraavasti. Aina kun jokin työ loppuu, vapautuu resursseja ja meille syntyy päätöksentekotilanne, jossa on valittava jokin tai joitakin töitä tilalle. Mahdollisista töistä, joiden kaikki edeltäjät on suoritettu, valitaan nyt suoritettava työ (i, j) jonkin yksinkertaisen kriteerin mukaan. Tällaisia ovat esimerkiksi valitaan kestoltaan lyhin työ valitaan resurssivaatimuksiltaan pienin työ valitaan työ, jonka myöhäisin aloitushetki on mahdollisimman pieni valitaan työ, jonka pelivara on pienin. Näistä kaksi ensimmäistä eivät vaadi minkäänlaisia etukäteislaskelmia työn kriittisestä polusta yms. mutta ne eivät yleensä tuota kovin hyvää tulosta. Kahden jälkimmäisen kriteerin vaatimat laskelmat voidaan tehdä ennalta tai dynaamisesti ennen jokaista päätöksentekotilannetta verkon suorittamattomalta osalta. Yleisesti pisimmän tien ongelma saadaan muunnetuksi lyhimmän tien ongelmasta muuttamalla minimointioperaatio maksimoinniksi. Ongelmia tuottavat negatiiviset syklit muuntuvat tällöin positiivisiksi sykleiksi ja tällaisia on kaikissa tämän luentomonisteen syklejä käsittävissä esimerkeissä. Onneksi projektiverkot ovat aina syklittömiä ja pisimmän tien määräämiset sujuvat ongelmitta. 27

31 1.8 Diskreetti dynaaminen optimointi Diskreetit dynaamiset optimointitehtävät voidaan käsittää yleistyksiksi lyhimmän tai pisimmän tien ongelmista ja ne voidaan usein saattaa siihen muotoon konstruoimalla sopiva suunnattu verkko. Dynaamisen optimoinnin perusidea on se, että ongelma jaetaan pienemmiksi osaongelmiksi (vaiheiksi), jotka voidaan ratkaista helpommin kuin alkuperäinen tehtävä. Saadaan siis jono toisistaan riippuvia osatehtävien ratkaisuja (päätöksiä), joista sitten muodostetaan alkuperäisen tehtävän ratkaisu. Laskutoimituksia syntyy paljon ja niiden suorittamiseen ja välitulosten tallentamiseen tarvitaan yleensä tietokonetta. Jo pienissäkin tehtävissä saattaa tarvittava muistitila paisua kovin suureksi, mikä on menetelmän ilmeinen heikkous. Dynaamisessa optimoinnissa ei ole mitään lineaarisen optimoinnin tapaista yleistä matemaattista formulointia. Se on sen sijaan yleisluontoinen lähestymistapa erilaisten tehtävien ratkaisemiseksi ja sen peruskäsitteet ilmenevät eri sovellutuksissa eri tavoin. Siksi dynaaminen optimointi esitetään seuraavassa pääasiassa esimerkkien avulla. Lyhimmän (ja pisimmän) tien määrääminen syklittömässä verkossa luvuissa 1.6 ja 1.7 on itse asiassa dynaamista optimointia. Tehtäville, joita voidaan ratkaista dynaamisella optimoinnilla, on yleensä ominaista seuraavat: 1. Tehtävä voidaan jakaa vaiheisiin, joista kuhunkin liittyy päätös. Lyhimmän tien ongelmassa vaiheena on tutkittava solmu, jonka kaikkien edeltäjien lähtösolmusta määrätyt lyhimmät tiet on jo selvitetty. 2. Jokaisessa vaiheessa on joukko tiloja. Tilojen on kussakin vaiheessa annettava riittävä informaatio päätöksen tekemiseen, eikä tiloista tarvitse tietää miten niihin on jouduttu. Lyhimmän tien ongelmassa mahdollisia tiloja ovat tutkittavaa solmua verkossa välittömästi edeltävät solmut. Nyt kiinnostuksen kohteena ei ole miten näihin solmuihin päästään optimaalisesti lähtösolmusta.. Kunkin vaiheen päätös kuvaa sitä, mihin seuraavan vaiheen tilaan joudutaan kustakin nykyisen vaiheen tilasta. Lyhimmän tien tapauksessa päätös ilmoittaa sen, mistä solmusta on optimaalista tulla tutkittavaan solmuun. 4. Kun nykyinen tila tunnetaan, eivät mitkään jäljellä olevat päätökset voi riippua aikaisemmista tiloista tai päätöksistä. Tämä on dynaamisen optimoinnin optimaalisuusperiaate. Lyhimmän tien ongelmassa se tarkoittaa sitä, että jos lyhin tie s t kulkee solmun i kautta, niin se osa siitä, joka kulkee kaupungista i t on samalla lyhin tie välillä i t.. Täytyy pystyä muodostamaan rekursiorelaatio, jolla kytketään perättäisten vaihei- 28

32 den kohdefunktiot toisiinsa. Lyhimmän tien ongelmassa tämä relaatio oli v[j] = min{c ij + v[i]}. i Käytännön ongelmissa esiintyy usein jonkin summan maksimointitehtäviä. Silloin pyritään muodostamaan vaiheessa n muotoa f n (x n ) = max y n {g n (x n, y n ) + f n 1 (h(x n, y n ))}, n = 1,..., N oleva dynaamisen optimoinnin rekursioyhtälö, jolla muodostetaan vaiheen n päätös. Tässä y n on päätösmuuttuja, x n tilamuuttuja ja f n (x n ) kohdefunktion arvo tilassa x n, kun vaiheeseen n asti on edetty optimaalisesti. Aaltosuluissa olevan summan ensimmäinen termi on vaiheen n ja jälkimmäinen termi vaiheiden 1,..., n 1 osuus kohdefunktiossa. Vaiheessa n tarvitaan aina edellisen vaiheen rekursiofunktio f n 1 ( ). Optimipäätökset y n määrätään päinvastaisessa järjestyksessä y N,..., y 1 ja niiden esille saamiseksi täytyy lisäksi tallettaa kaikkien vaiheiden päätösfunktiot y n( ), n = 1,..., N, jotka saadaan rekursioyhtälön ratkaisun yhteydessä. Jos vaiheet on muodostettu jakamalla suunnittelukausi osiin, niin voidaan edetä joko ajan mukaan, jolloin puhutaan etenevästä dynaamisesta optimoinnista tai sitä vastaan, jolloin on kyseessä takeneva dynaaminen optimointi. Jälkimmäinen on usein kätevämpi, koska dynaamisessa optimoinnissa meidän täytyy tietää viimeisen vaiheen N tilan x N arvo, joka tällöin on (toivottavasti) tunnettu lähtötilanne. Edellisen tilan x n 1, toimintapäätöksen y n ja nykyisen tilan x n välillä vallitsee relaatio (tilayhtälö) x n 1 = h(x n, y n ), joka täytyy aina pystyä eksplisiittisesti muodostamaan. Rekursiokaava voidaan tulkita seuraavasti: jos systeemin nykyinen tila tunnetaan, optimaaliset toimintapäätökset jäljellä olevissa vaiheissa eivät riipu nykyistä vaihetta aikaisemmista päätöksistä. Tieto siitä, missä tilassa systeemi tällä hetkellä on, sisältää kaiken sen tiedon systeemin aikaisemmasta käyttäytymisestä, joka tarvitaan optimipolitiikan määräämiseksi tästä eteenpäin. Tämä on dynaamisen optimoinnin optimaalisuusperiaate. Esimerkki 1.2. Tarkastellaan optimointitehtävää max s. t. N g i (y i ) i=1 N y i b i=1 y i, i = 1,..., N jossa on yksi rajoitus. Käsitellään ongelmaa yksi muuttuja kerrallaan ja niiden järjestys voi olla mielivaltainen. Yksinkertaisuuden vuoksi valitaan normaali numerojärjestys, joka samalla määrää vaihejaon. Vaiheessa i on siis käsitelty muuttujat y 1,..., y i 1. Päätösmuuttujaksi vaiheessa i valitaan y i ja tilamuuttujaksi x i resurssista b yhteensä tähän 29

33 mennessä käytetty määrä. Näillä valinnoilla on f i (x i ) = max {g 1(y 1 ) g i (y i )}. y y i x i, y 1,...,y i Huomioimalla, että x i = x i 1 + y i, saadaan rekursioyhtälöksi 1-dimensioiset ongelmat f i (x i ) = max y i x i {g i (y i ) + f i 1 (x i y i )}, x i b, i = 1,..., N. Jotta tämä olisi mielekäs arvolla i = 1, sovitaan, että f ( ). Kohdefunktion optimiarvo on f N (b) ja itse optimipäätökset y i. ovat y N = y N(b) y N 1 = y N 1(b y N) y 1 = y 1(b y N... y 2). Dynaamisella optimoinnilla on nyt palautettu N-dimensioinen optimointitehtävä N yksidimensioisen optimointitehtävän jonoksi. Kukin funktio f i täytyy kyllä ratkaista koko välillä [, b], sillä nyt ei etukäteen tiedä kuinka paljon resurssista b kannattaa uhrata muuttujille y 1,..., y i. Seuraavassa oletaan yleensä, että sekä päätös että tilamuuttujat saavat arvoja diskreetistä joukosta, koska muuten joudutaan vaikeuksiin numeerisessa ratkaisussa. Esimerkki Tarkastellaan diskreettiä investointiongelmaa, jossa yhtiöllä on käytettävissä C yksikköä rahaa olemassa olevien N tehtaansa laajentamiseen. Tehtaalla i on m i kappaletta vaihtoehtoisia laajennussuunnitelmia j, jotka vaativat c ij yksikköä pääomaa, ja joista saatava hyöty on r ij, i = 1,..., N, j = 1,..., m i. Oletetaan, että kunkin tehtaan suunnitelma 1 on sellainen, ettei laajenneta ollenkaan, jolloin c i1 = r i1 =. Tehtävänä on nyt määrätä rahoitettavat laajennukset niin, että saatava kokonaishyöty on mahdollisimman suuri, kun kunkin tehtaan laajennuksista toteutetaan korkeintaan yksi. Tehtävä voitaisiin ratkaista käymällä läpi kaikki erilaiset laajennuskombinaatiot, joita on m 1 m 2... m N kappaletta ja valitsemalla pääomarajoituksen toteuttavista kombinaatioista se, joka antaa suurimman kokonaishyödyn. Käsitellään tehtaat yksi kerrallaan ja tilamuuttujana x n olkoon vaiheessa n jakamatta oleva rahamäärä. Silloin saadaan rekursiivinen relaatio f n (x n ) = max j=1,...,m n, c nj x n {r nj + f n 1 (x n c nj )}, x n =, 1,..., C, n = 1,...N. Tässä on taas oletettu, että f ( ). Optimipäätökset talletetaan ja niistä saadaan. j N = j N(C) j N 1 = j N 1(C c Nj N ) j 1 = j 1(C c Nj N... c 2j 2 )

34 Sovelluksena tarkastellaan tilannetta, jossa N =, m 1 =, m 2 = 4, m = 2, C = 1 j c 1j r 1j c 2j r 2j c j r j Vaiheessa 1 on mukana ainoastaan tehdas 1 ja joudutaan laskemaan funktiot f 1 (x 1 ) ja j1(x 1 ) arvoilla x 1 =, 1,..., 1. Laskelmat voidaan suorittaa taulukon muodossa, jolloin saadaan tulokseksi x 1 r 1j f 1 (x 1 ) j1(x 1 ) j = 1 j = 2 j = Vaiheessa 2 ovat mukana tehtaat 1 ja 2 ja tässä tarvitaan vaiheen 1 funktiota f 1 (x 1 ). Nyt on siis x 2 r 2j + f 1 (x 2 c 2j ) f 2 (x 2 ) j2(x 2 ) j = 1 j = 2 j = j = ,

35 Tässä on resurssilla 9 kaksi yhtä hyvää päätösvaihtoehtoa, jotka molemmat on otettu mukaan. Näin saadaan kaikki mahdolliset optimiratkaisut, mutta jos tyydytään yhteen, riittää tallettaa yksi päätös. Samoin kuin edellä saadaan edelleen vaiheen taulukko x r j + f 2 (x c j ) f (x ) j(x ) j = 1 j = ,2 Taulukon viimeiseltä riviltä saadaan kohdefunktion optimiarvoksi 17 ja vaiheen optimaaliseksi päätökseksi joko j = 1 tai j = 2. Jos valitaan suunnitelma j = 1, niin taulukoista 2 ja 1 seuraa, että j2 = 4 ja j1 = 2. Jos taas on j = 2, niin saadaan joko j2 = 2 ja j1 = tai j2 = ja j1 = 2. Tehtävällä on siis vaihtoehtoista optimiratkaisua. Niistä j1 = 2, j2 = ja j = 2 on siinä mielessa paras, että se kuluttaa vain 9 yksikköä rahaa. Se, että yhtä hyvä tulos voidaan saavuttaa tuhlaamatta koko käytettävissä olevaa rahamäärää näkyy taulukon toiseksi viimeiseltä riviltä. Varsinaisen tehtävän ratkaisemiseksi riittäisi laskea taulukosta vain viimeinen rivi, mutta muut rivit antavat hyödyllistä herkkyysanalyysin kaltaista tietoa siitä, miten ratkaisu muuttuu kun resursseja vähennetään. Kun lasketaan taulukko täydellisenä, saadaan siis ratkaistuksi tehtävä kaikille arvoille C =, 1,..., 1. Esimerkki Tarkastellaan esimerkin 1.26 yleistyksenä resurssinjakamisongelmaa max s. t. N R i (y i ) i=1 N H i (y i ) M i=1 y i N, i = 1,..., N yhden rajoituksen tapauksessa. Tässä oletetaan, että jokainen H i (y i ) on ei-vähenevä funktio ja H i () =, i = 1,..., N. Kuten edellä, saadaan muotoa f i (x i ) = max y i N, H i (y i ) x i {R i (y i ) + f i 1 (x i H i (y i ))}, i = 1, 2,..., N 2

36 oleva rekursioyhtälö, jonka ratkaisu taas on yn = yn(m) yn 1 = yn 1(M H N (yn)). y1 = y1(m H N (yn)... H 2 (y2)). Esimerkki (Dynaaminen varastomalli) Kauppias varastoi erästä tuotetta myyntiä varten, kun seuraavien N kauden kysynnät d i, i = 1,..., N oletetaan tunnetuiksi. Varastossa on pidettävä tuotteita niin paljon, että kysyntä jokaisena kautena voidaan täyttää. Kauppias voi tilata jokaisen kauden alussa varastoon lisää tuotteita ja oletetaan, että tilattavat määrät z i toimitetaan välittömästi tilauksen jälkeen. Jokaisesta tilauksesta aiheutuu kautena i tilausmäärästä riippumaton kiinteä kustannus K i ja lisäksi määrä z i maksaa hinnan c i (z i ). Siis määrän z i tilauksesta kautena i aiheutuu kokonaiskustannus {, jos z i = C i (z i ) = K i + c i (z i ), jos z i >. Varastointikustannukset kautena i ovat suoraan verrannolliset varaston kokoon kauden lopussa ja kustannus on h i rahaa tuoteyksikköä kohti. Olkoon x i varaston koko kauden i alussa. Silloin x i+1 = x i + z i d i, i = 1,..., N ja kauden i varastointikustannukset ovat h i x i+1. Tehtävänä on määrätä optimaaliset tilausmäärät z i, i = 1,..., N niin, että kokonaiskustannukset ovat mahdollisimman pienet. Oletetaan, että tunnetaan kauden 1 alussa varastossa oleva määrä x 1 ja viimeisen kauden lopussa varastossa tarvittava tavaramäärä x N+1. Dynaamista optimointia varten määritellään systeemin vaiheet, tilat ja päätökset. Nyt on mahdollista valita sekä etenevä, että takeneva dynaaminen optimointi, koska varastosta tunnetaan sekä alku- että lopputilanne. Valitaan etenevä dynaaminen optimointi, jolloin vaiheessa i ollaan käsitelty kaudet 1,..., i. Systeemin tila vaiheessa i olkoon varaston määrä x i+1 kauden i lopussa. Päätös vaiheessa i on luonnollisesti ostettava tavaramäärä z i. Muissa paitsi viimeisessä vaiheessa on voimassa epäyhtälö x i+1 d i d N + x N+1, i = 1,..., N 1. Yläraja on saatu siitä, että mitään ei tämän jälkeen tarvitse enää ostaa. Olkoon f i (x i+1 ) kausien 1,..., i pienin mahdollinen kokonaiskustannus, kun kauden i lopussa varaston määrä on x i+1. Kun tunnetaan vaiheen 1 tila x 2, täytyy kauden 1 tilauksen olla z 1 = x 2 + d 1 x 1 ja saadaan ilman optimointia kauden kustannuksiksi f 1 (x 2 ) = C 1 (x 2 + d 1 x 1 ) + h 1 x 2,

37 jossa tilan täytyy olla välillä x 2 d d N +x N+1. Yleisessä vaiheessa i = 2,,..., N on nyt oltava f i (x i+1 ) = min {C i (z i ) + h i x i+1 + f i 1 (x i+1 + d i z i )}. z i d i +x i+1 Vaiheissa i = 2,..., N 1 on tilan oltava välillä x i+1 d i d N + x N+1 ja vaiheessa N riittää tutkia kiinnitetty arvo x N+1. Optimaaliset päätökset ovat. z N = z N(x N+1 ) z N 1 = z N 1(x N+1 + d N z N) z 1 = z 1(x n+1 + d N d 2 z N... z 2). Tarkastellaan numeerista esimerkkiä, jossa N =, x 1 = 1, x 4 = ja tavaran hinta { 1z i, z i c i (z i ) = + 2(z i ), z i 4 riippuu tilausmäärästä z i, mutta ei kaudesta. Kaudesta i riippuvat parametrit ovat i d i K i h i Vaiheessa 1 on nyt tutkittava väli x 2 d 2 + d + x 4 = 6, jolla x 2 f 1 (x 2 ) z 1(x 2 ) Vaiheessa 2 käydään läpi arvot x d + x 4 = 4, josta saadaan x C 2 (z 2 ) + h 2 x + f 1 (x + d 2 z 2 ) f 2 (x ) z 2(x ) z 2 = z 2 = 1 z 2 = 2 z 2 = z 2 = 4 z 2 = z 2 =

38 Vaiheessa riittää tutkia arvo x 4 =, joten x 4 C (z ) + h x 4 + f 2 (x 4 + d z ) f (x 4 ) z (x 4 ) z = z = 1 z = 2 z = z = Minimikustannus on siis 99 ja optimipäätös vaiheessa on z =, jolloin tila x = 1 kauden alussa. Tällöin kauden 2 optimitilaus on z 2 = ja kauden 2 alussa tila x 2 =. Siitä saadaan viimein z 1 = 2. Esimerkki Mikäli edellisessä esimerkissä sallitaan vain päätökset, joilla hankitaan tavaraa seuraaviksi kokonaisiksi kausiksi, saadaan Wagner-Whitin eräkokomalli. Jos päätöksentekotilanne on kauden i alussa, ei varastossa voi olla mitään ja tavaraa hankitaan määrä d i kaudeksi i, määrä d i + d i+1 kausiksi i ja i + 1,..., tai määrä d i + d i d N koko loppuajaksi. Silloin saadaan funktionaaliyhtälö jossa v[1] = v[j] = min 1 i j {v[i] + c ij}, j = 2,..., N, c ij =K i + (d i + d i d j 1 )c i + (d i d j 1 )h i + (d i d j 1 )h i d j 1 h j 2. Tässä ei tarvita kohdefunktion indeksiä ja ongelma voidaankin esittää verkkona, jossa solmut ovat vaiheita ja niistä lähtevät nuolet vaiheessa tehtäviä päätösvaihtoehtoja. Itse ongelmana on lyhimmän tien määräminen verkossa. Jos nyt käytetään datoja i d i K i c i h i niin saadaan kuvan 17 syklitön verkko, jossa lyhin tie on 1 7. Aluksi kannattaa siis tilata tavaraa määrä 7 kausiksi 1 4 ja kauden alussa määrä 2 loppuajaksi.

39 Kuva 17: Esimerkin 1.29 syklitön verkko, jossa lyhin tie on tummennettu Esimerkki 1.. (Laitteiston ylläpito) Tarkastellaan ylläpito-ongelmaa N vuoden aikana. Uusi laite maksaa C rahaa ja sen myyntiarvo on t vuotta vanhana g(t). Lisäksi tiedetään, että t vuotta vanha laite tuottaa vuodessa määrän h(t). Laitteiston mahdollinen uusimispäätös tehdään aina vuoden alussa. Miten määrätään eniten voittoa tuottava vaihtopolitiikka, kun nykyinen laitteisto on a vuotta vanha? Valitaan tilamuuttujaksi laitteiston ikä ja käytetään takenevaa dynaamista optimointia. Vuoden N alussa on viimeinen vaihtomahdollisuus ja vuoden N optimaalinen tuotto on f N (t) = max{h() + g(t) C, h(t)}, t = 1,..., a + N 1. Maksimoinnin ensimmäinen vaihtoehto merkitsee tässä ja myöhemminkin vaihtoa ja toinen sitä, ettei vaihdeta. Vuosien N 1 ja N optimaaliseksi yhteistuotoksi saadaan samoin f N 1 (t) = max{h() + g(t) C + f N (1), h(t) + f N (t + 1)}, t = 1,..., a + N 2 ja yleisesti f k (t) = max{h() + g(t) C + f k+1 (1), h(t) + f k+1 (t + 1)}, t = 1,..., a + k 1, k = N, N 1,..., 1. Tarkastellaan sovellutuksena tapausta jossa N =, C = 1, a = 2, g(t) = max{, t}, h(t) = max{, 9 t 2 }. Silloin kolmannen vuoden päätöksiksi saadaan t vaihto ei vaihtoa f (t) päätös ei vaihtoa ei vaihtoa ei vaihtoa ei vaihtoa 6

40 Toisen vuoden tilanne taas on Lopulta ensimmäisenä vuotena t vaihto ei vaihtoa f 2 (t) päätös ei vaihtoa vaihto vaihto t vaihto ei vaihtoa f 1 (t) päätös vaihto Optimituotto on siis 1 ja se saavutetaan vaihtamalla laite uuteen heti vuoden 1 alussa. Vuoden 2 alussa se on siis vuoden ikäinen eikä sitä kannata vaihtaa. Vuoden alussa se on jo kaksi vuotta vanha, mutta sitä ei edelleenkään kannata vaihtaa. Edellä olevissa esimerkeissä on tarkasteltu pelkästään tilanteita, joissa kohdefunktio on additiivinen, mutta näin ei suinkaan tarvitse dynaamisessa optimoinnissa olla. Rekursioyhtälöitä on helppo kirjoitella muissakin tapauksissa, vaikka niiden ratkaiseminen voikin olla työlästä. Esimerkki 1.1. Räjähdysainetta voidaan varastoida N eri paikassa. Oletetaan, että onnettomuustodennäköisyys on erittäin pieni ja se on riippumaton sekä varastopaikasta että varaston koosta. Räjähdyksen sattuessa aiheutuvat tuhot sen sijaan riippuvat sekä varastopaikasta että varaston koosta. Varaston i räjähtäessä tapahtuva tuho olkoon g i (y i ), missä y i on varastoitu määrä. Tehtävänä on nyt jakaa määrä C räjähteitä varastoihin 1,..., N niin, että onnettomuuden sattuessa suurin mahdollinen tuho olisi mahdollisimman pieni. Ongelma on siis min max{g 1 (y 1 ), g 2 (y 2 ),..., g N (y N )} N s. t. y i = C i=1 y 1,..., y N. Dynaamisella optimoinnilla saadaan rekursioyhtälöt f 1 (x 1 ) = g 1 (x 1 ), f k (x k ) = x 1 C min {max[g k (y k ), f k 1 (x k y k )]}, k = 2,..., N, x k C. y k x k Jos lukujen y k ei tarvitse olla kokonaislukuja, ei muodostuvan yksidimensioisen minimax -ongelman ratkaisu ole aivan helppo, mutta voidaan käyttää esim. graafista ratkaisua. Itse 7

41 päätökset saadaan jälleen käänteisessä järjestyksessä yn = yn(c) yn 1 = yn 1(C yn). y1 = y1(c yn... y2) Huomautus 1.2. Tähän asti käsitellyissä esimerkeissä systeemin tiloja on ollut vain yksi. Niiden lukumäärä voi kuitenkin olla tätä suurempi, jopa ääretön. Tilaa kuvaavien muuttujien luvun kasvaessa, kasvaa myös tehtävän ratkaisemisessa tarvittava laskutyö ja erityisesti muistitilan tarve. Esimerkki 1.. Tarkastellaan diskreettiä resurssienjako-ongelmaa max s. t. N R j (y j ) j=1 N H j (y j ) U j=1 N K j (y j ) V j=1 y j =, 1,...; j = 1,..., N kahden rajoituksen tapauksessa. Yleensä oletetaan, että jokainen H j (y j ) ja K j (y j ) on eivähenevä funktio ja H j () = K j () =, j = 1,..., N. Nyt tarvitaan kaksi tilaa, jotka esittävät resurssien käytettävissä olevia määriä ja aiemmissa rekursioyhtälöissä voidaankin tila ajatella vektoriksi. Esimerkin tapauksessa saadaan eksplisiittisesti f n (u n, v n ) = n = 1,..., N. max y n N, H n(y n) u n, K n(y n) v n {R n (y n ) + f n 1 (u n H n (y n ), v n K n (y n ))}, Tässä oletetaan taas, että f (, ) ja jokaisen funktion f n (u n, v n ), n = 1,..., N 1 arvot on selvitettävä alueessa u n U, v n V. Viimeiselle rekursiofunktiolle riittää taas kohdefunktion optimiarvo f N (U, V ) ja optimipäätökset ovat. y N = y N(U, V ) y N 1 = y N 1(U H N (y N), V K N (y N)) y 1 = y 1(U H N (y N)... H 2 (y 2), V K N (y N) K 2 (y 2)). Tarkastellaan sovellusta N =, U = V = 4, 8

42 y i R 1 (y i ) H 1 (y i ) K 1 (y i ) R 2 (y i ) H 2 (y i ) K 2 (y i ) R (y i ) H (y i ) K (y i ) jossa oletetaan, että y i, i = 1, 2,. Kirjoittamalla funktion f n (u, v) arvo vasempaan ylänurkkaan ja funktion yn(u, v) arvo oikeaan alanurkkaan, saadaan rekursiofunktioiden arvoiksi vaiheessa n = 1 u v

43 sekä vaiheissa n = 2 u v ja n = u v Itse laskuja ei nyt enää saada mahtumaan taulukkoihin. Optimiratkaisuksi saadaan y = y (4, 4) = 1, y 2 = y 2(, 2) =, y 1 = y 1(, ) = ja kohdefunktion maksimiarvo on 27. 4

44 Tarkastellaan seuraavaksi edellisen toiseksi parasta ratkaisua. Optimiratkaisu ei aina ole toteuttamiskelpoinen, mutta dynaamisella optimoinnilla voidaan selvittää muitakin päätösvaihtoehtoja. Tarkastellaan tehtävää f n (x n ) = min y n P n {g n (x n, y n ) + f n 1 (h(x n, y n ))}, n = 1,..., N. Oletetaan, että optimi on yksikäsitteinen ja päätösavaruus diskreetti sekä merkitään symbolilla min (2) toiseksi pienimmän arvon tuottavaa operaatiota sekä symbolilla f (2) n (x n ) kohdefunktion toiseksi pienintä arvoa. Toiseksi parhaan ratkaisun esillekaivamiseksi on optimaalisuusperiaatetta muutettava muotoon: kun nykyinen tila tunnetaan, on edellä olevissa vaiheissa käytettävä joko parasta tai toiseksi parasta vaihtoehtoa. Edellisessä tapauksessa päätöksentekotilanteessa kokonaiskustannus on ja jälkimmäisessä tapauksessa Siksi täytyy olla voimassa rekursiorelaatio g n (x n, y n ) + f n 1 (h(x n, y n )) g n (x n, y n ) + f (2) n 1(h(x n, y n )). f n (2) (x n ) = min{ min (2) [g n (x n, y n ) + f n 1 (h(x n, y n ))], min [g n (x n, y n ) + f (2) n 1 (h(x n, y n ))]}. y n P n y n P n Tässä on tietenkin f ( ) ja f (2) ja nyt tarvitaan sekä paras että toiseksi paras ratkaisu edellisissä vaiheissa. 41

45 2 Virtaukset verkossa Lyhimmän/pisimmän tien ongelma on erikoistapaus verkostovirtauksesta, joka taas on lineaarisen optimoinnin erikoistapaus. 2.1 Minimikustannusvirtausongelma Kun puhutaan virtauksesta, on syytä olettaa, että verkko on suunnattu ja että virtaus kulkee aina nuolen suuntaan. Tarkastellaan minimikustannusvirtausongelmaa min c ij x ij s. t. jossa päätösmuuttujat ovat (i,j) E x kj x ik = b k, k Q j,(k,j) E i,(i,k) E x ij u ij, (i, j) E, x ij : nuolta (i, j) pitkin tapahtuvan virtauksen määrä ja parametrit c ij : virtauksen yksikkökustannus nuolella (i, j) u ij : virtauksen yläraja nuolella (i, j) b k : kuljetettavan tavaran nettotarjonta solmussa k. Jos b k >, on solmussa k tavaraa ja sitä kutsutaan lähteeksi. Jos taas b k <, täytyy solmuun k siirtää tavaraa tarpeen b k verran ja solmua kutsutaan nieluksi. Tapauksessa b k = solmua k kutsutaan kauttakulkusolmuksi. Selvästikään minimikustannusvirtausongelmalla ei voi olla ratkaisua, jos tavaran kokonaistarjonta on erisuuri kuin kokonaiskysyntä eli b k. Jos kokonaistarjonta on suurempi eli b k >, voidaan muodostaa ylimääräinen virtuaalinielu n + 1 ja asettaa sen kysynnäksi b n+1 = b k (nettotarjonnaksi b n+1 = b k ) ja siirtokustannuksiksi c i,n+1 =. Tällöin ylimääräinen tarjonta osoitetaan nieluun n+1, kysyntä sekä tarjonta ovat tasapainossa eivätkä kustannukset muutu. Jos kysyntä on suurempi kuin tarjonta eli b k <, muodostetaan analogisesti ylimääräinen lähde n + 1, jonka tarjonta on b n+1 = b k ja siirtokustannukset c n+1,i =. Tällöin jää osa kysynnästä tyydyttämättä. Esimerkki 2.1. Firma valmistaa uuneja Wisconsinissa ja Alabamassa ja valmiit uunit siirretään sieltä junalla Memphisissä ja Pittsburghissa sijaitseviin jakelukeskuksiin. Niistä kuljetetaan tilaukset autoilla Fresnossa, Peoriassa ja Newarkissa oleville asiakkaille. Lisäksi voidaan pieniä määriä uuneja siirtää jakelukeskuksesta toiseen ilman kustannuksia. Nyt 42

46 olisi suunniteltava seuraavan kuukauden kuljetukset, kun jakelukeskuksissa ei ole tavaraa ja kummastakin tehtaasta voidaan toimittaa 1 uunia. Kysynnät Fresnossa, Peoriassa ja Newarkissa ovat 4, ja 61 kappaletta. Tehtaat ovat nyt lähteitä, kysyntäpisteet nieluja ja jakelukeskukset kauttakulkupisteitä. Koska tarjonta 2 on suurempi kuin kysyntä 16, muodostetaan apusolmu 8, jonka kysynnäksi asetetaan 2 16 = 44 eli tarjonnaksi 44. Kun merkitään kunkin nuolen kohdalle parilla (c, u) yksikkökustannusta ja maksimivirtausta, saadaan kuvan 18 verkko 1 Wisconsin 1 7, Memphis 2, Fresno 4,, , 8,, 2, 2 6, 17, 8, 29, Peoria 6 1 7, 2 Alabama 4, Pittsburgh Newark 7 61 Kuva 18: Uuniesimerkin verkko ja optimointitehtävä min 7x 1 + 8x x 2 + 7x x + 6x x x 4 + 8x 46 + x 47 s. t. x 1 + x 14 + x 18 = 1 x 2 + x 24 + x 28 = 1 x 4 + x + x 6 + x 7 x 1 x 2 x 4 = x 4 + x 4 + x 46 + x 47 x 14 x 24 x 4 = x x 4 = 4 x 6 x 46 = x 7 x 47 = 61 x 18 x 28 = 44 x 4 2, x 4 2 x ij, (i, j) E. 4

47 Minimikustannusongelma voidaan esittää myös matriisimuodossa min c T x s. t. Ax = b x u, jossa kerroinmatriisi A on niin sanottu insidenssimatriisi. Siitä selviää verkon rakenne, sillä jokaista solmua vastaa matriisin rivi ja jokaista nuolta matriisin sarake. Ainoat nollasta poikkeavat alkiot kussakin sarakkeessa ovat +1 nuolen lähtösolmua vastaavalla rivillä ja 1 nuolen loppusolmua vastaavalla rivillä. Esimerkkitehtävässä on A solmu (1, ) (1, 4) (1, 8) (2, ) (2, 4) (2, 8) (, 4) (, ) (, 6) (, 7) (4, ) (4, ) (4, 6) (4, 7) Kulkusuunnat ketjuissa Lineaarisessa optimoinnissa konstruoitiin parantavia hakusuuntia, joilla kohdefunktion arvo parani pysyen kuitenkin sallittuna. Nyt saadaan yksinkertaisempi versio. Määritellään ketju kahta verkon solmua yhdistäväksi poluksi, jossa voidaan myös kulkea nuolen suuntaa vastaan. Lenkki taas on ketju, jonka alku- ja loppupisteet yhtyvät. Esimerkissä 2.1 ketju (1, ), (, 6), (4, 6), (2, 4) yhdistää solmut 1 ja 2. Se voidaan myös esittää yksikäsitteisenä solmujonona Kumpaakin ketjuista (1, ), (, 4), (4, 7) ja (1, ), (4, ), (4, 7) taas esittää solmujono Edellinen näistä on myös polku. Lenkki ei ole sykli. Kun lisätään yhdellä yksiköllä tavaran virtausta lenkillä, niin virtaus lisääntyy niillä nuolilla, jotka kulkevat samaan suuntaan kuin lenkki ja vähenee vastakkaiseen suuntaan kulkevilla nuolilla. Siis suunnalle x +1, jos nuoli (i, j) kulkee lenkin suuntaan x ij = 1, jos nuoli (i, j) kulkee lenkin suuntaa vastaan, jos nuoli (i, j) ei kuulu lenkkiin. On siis oleellista kumpaan suuntaan lenkkiä kierretään. Kun suoritetaan parantavaa hakua, täytyy tasapainoehdon Ax = b toteutua. Aiemmasta tiedetään, että tällöin täytyy 44

48 1 1 i j k i j k i j k i j k 1 1 Kuva 19: Lenkin mahdolliset kulkusuunnat olla voimassa A x =. Kun lisätään virtausta lenkillä, jossa sen jokaista solmua j koskettaa kaksi nuolta, esiintyy näin ollen kuvan 19 neljä vaihtoehtoa. Niissä nuolten yläpuolella on x arvot ja alapuolella matriisin A kertoimet. Nettomuutokset ovat a ij x ij + a jk x jk = ( 1)(+1) + (+1)(+1) = a ij x ij + a jk x jk = ( 1)(+1) + ( 1)( 1) = a ij x ij + a jk x jk = (+1)( 1) + (+1)(+1) = a ij x ij + a jk x jk = (+1)( 1) + ( 1)( 1) =. Kun muutetaan virtausta lenkissä, on yhtälö A x = voimassa ja samalla myös tasapainoyhtälö Ax = b. Luentomonisteen Matemaattinen optimointi 1 luvun. mukaisesti täytyy lisäksi huolehtia siitä, että virtausten ei-negatiivisuus ja kapasiteettirajoitukset pysyvät voimassa. Suunta x pisteestä x on siis sallittu silloin ja vain silloin, kun x ij > kaikilla lenkin suuntaa vastaan kulkevilla nuolilla ja x ij < u ij kaikilla lenkin suuntaisilla nuolilla. Esimerkkissä 2.1 on eräs sallittu ratkaisu x 4

49 Kuva 2: Uuniesimerkin eräs sallittu ratkaisu Silloin lenkin (2, ), (, 4), (2, 4) suunta ei ole sallittu, koska vastakkaiseen suuntaan kulkevalla nuolella (2, 4) ei ole positiivista virtausta. Sen sijaan lenkki muodostaa sallitun suunnan. Luentomonisteen Matemaattinen optimointi 1 luvun. nojalla tiedetään, että minimointitehtävän suunta x on parantava, jos c = c T x <. Suurin osa kertoimista on nyt nollia ja sisätulon arvo saadaan laskemalla ketjun suuntaisten nuolien kustannusten summa ja vähentämällä siitä ketjun suuntaa vastaan kulkevien kustannusten summa. Lenkille saadaan c = 7 + (17 + 4) = 9 <, joten suunta on paitsi sallittu myos parantava. Samoin kuin Simplex-algoritmissa pyritään ottamaan mahdollisimman pitkä askel löydettyyn suuntaan, jolloin askelpituus on λ = min{λ +, λ }, missä λ + = min{, min{u ij x ij (i, j) on lenkin suuntainen nuoli}} λ = min{, min{x ij (i, j) on lenkkiä vastaan kulkeva nuoli}} Jos λ ei ole rajoitettu, ei ole optimointitehtäväkään. Esimerkissä λ + = min{, } = ja λ = min{61, 1} = 61. Siis λ = 61 on suurin arvo, jolla ratkaisu pysyy sallittuna lenkin suunnassa. Jossain vaiheessa syntyy tilanne, jolloin ei löydy enää parantavaa lenkkiä ja herää kysymys siitä, täytyykö siirtyä lenkkiä monimutkaisempiin struktuureihin. Voidaan kuitenkin osoittaa, että minimikustannusvirtausongelman ratkaisu on optimaalinen silloin 46

50 ja vain silloin, kun ei löydy yhtään sallittua parantavaa lenkkiä. Sivuutetaan todistus, mutta se nojautuu siihen, että jokainen ehdon A x = toteuttava suunta x voidaan hajoittaa useampien lenkkien suuntien painotetuksi summaksi. Jos lisäksi x on sallittu ja parantava, niin ainakin yksi lenkeistä on myos sallittu ja parantava. Esimerkissä kuvan 21 suunta on selvästi sallittu ja parantava pisteessä x. Kohdefunktio muuttuu määrän -1.9 jokaista lisättyä virtausyksikköä kohti. Tämä monimutkainen suunta voidaan hajottaa kuvan 22 tavalla lenkkien 4 7, ja painotetuksi summaksi. Saatujen lenkkien redusoidut kustannukset ovat c = 12., c =., c = 9, Kuva 21: Sallittu ja parantava suunta joten näin monimutkaista suuntaa ei tarvita, koska ensimmäinen ja kolmas lenkki ovat parantavia ja sallittuja. 47

51 Kuva 22: Sallitun suunnan hajottaminen 48

52 2. Perusalgoritmi minimikustannusvirtausongelman ratkaisemiseksi Ratkaisualgoritmin ensimmäisessä versiossa jää vielä avoimeksi miten tutkitaan formaalisesti onko olemassa sallittuja parantavia lenkkejä ja miten niitä muodostetaan. Algoritmi 2.2. Lenkkihaku perusalgoritmi Askel. Muodostetaan mielivaltainen sallittu aloitusvirtaus x ja asetetaan kierroslukuindikaattori t. Askel 1. Jos nykyisellä ratkaisulla x t ei ole sallittua parantavaa lenkkiä x, lopetetaan, sillä x t on optimaalinen. Askel 2. Valitaan sallittu parantava lenkki x pisteessä x t. Askel. Lasketaan pisin mahdollinen askelpituus λ { min{, min{u ij x t ij suuntaan(i, j)}} λ min min{, min{x t ij vasten suuntaa(i, j)}} } suunnassa x. Jos λ =, lopetetaan, sillä tehtävällä ei ole äärellistä ratkaisua. Askel 4. Päivitetään virtaukset kaavasta x t+1 x t + λ x lisäämällä virtausta määrällä λ lenkin suuntaisilla nuolilla ja vähentämällä määrällä λ lenkin vastaisilla nuolilla. Kasvatetaan kierroslaskuria t t + 1 ja palataan askeleeseen 1. Esimerkkitehtävässä lähdetään liikkeelle edellisessä kohdassa esitetystä aloitusratkaisusta x, jonka kustannus on 24, ja otetaan ensimmäiseksi parantavaksi lenkiksi myöskin edellisessä kohdassa esiintynyt Askelpituus oli silloin λ = 61 ja saadaan parannettu virtaus x 1, jonka kustannus on 27. Seuraavaksi valitaan lenkki , jolle c = 2, λ = 6 ja saadaan x 2, jonka kustannus on 29. Käytetyt lenkit on saatu kokeilemalla, eivätkä ne suinkaan ole ainoita mahdollisia. Pisteessä x ei enää löydy yhtään lenkkiä, joka olisi sekä sallittu että parantava ja x on siis optimiratkaisu. Algoritmin etenemistä on mukava havainnollistaa kuvina. 49

53 t Virtaus x (t) Lenkin suunta x Askel c = 9, 1 λ + = +, λ = 61, λ = 61 6 f = c = 2, λ + = +, λ = 6, λ = 6 f = c =, λ + = 2, λ =, λ = 2 f = f =

54 4 Lähtökanta voidaan määrätä soveltamalla luentomonisteen Matemaattinen optimointi I luvun.6 kaksivaiheista menetelmää tai iso-m -menetelmää. Siellä esiintyneet ylimääräiset apumuuttujat ovat nyt virtauksia nuolilla. Muodostetaan uusi kauttakulkuapusolmu ja sieltä uudet apunuolet jokaiseen nieluun ja samoin apunuolet jokaisesta lähteestä apusolmuun. Lähteistä alkaviin apunuoliin merkitään lähtövirtaukseksi lähteen kapasiteetti b i (> ) ja nieluihin meneviin apunuoliin lähtövirtaukseksi nielun tarve b j (> ). Iso-M -menetelmässä asetetaan apunuolten kustannukseksi suuri positiivinen luku M. Kaksivaihemenetelmässä taas apunuolten kustannukseksi merkitään 1 ja varsinaisten nuolten kustannukseksi. Esimerkkiongelmassa aputehtävän sallittu lähtövirtaus on kuvan 2 mukainen Kuva 2: Uuniesimerkin aputehtävän sallittu lähtövirtaus Algoritmi 2.2 on minimikustannusvirtausongelman ratkaisemisessa selvästi tehokkaampi kuin Simplex-menetelmä. Siinä ei tarvita parannetun Simplex-menetelmän tarvitsemia matriisinkääntöjä, vaan tullaan toimeen yhteen- ja vähennyslaskuilla, kun lenkkiä käydään läpi 2 kertaa. Ensimmäisellä kerralla määrätään askelpituus λ ja toisella suoritetaan virtausten modifiointi. Myöhemmin tarkastellaan vielä sallittujen ja parantavien lenkkien määräämistä. 2.4 Minimikustannusvirtausongelman ratkaisujen jaollisuus Oletetaan, että kaikki minimikustannusvirtausongelman rajoituksissa esiintyvät parametrit u ij, b k ovat kokonaislukuja. Kun silloin suoritetaan algoritmia 2.2 käyttäen kumpaa tahansa lähtökannan hakumenetelmää, niin lähtöratkaisun määrävässä aputehtävässä kaikki aloitusvirtaukset x ij ovat arvoina ja parametrit ±b k kokonaislukuja kun algoritmissa nykyisen ratkaisun x t komponentit ovat kokonaislukuja, on askelpituus λ jokin luvuista x t ij tai u ij x t ij ja siis kokonaisluku 1

55 algoritmissa pidetään virtaus nuolella ennallaan tai muunnetaan sitä joko lisäämällä entiseen virtaukseen kokonaisluku λ tai vähentämällä entisestä virtauksesta kokonaisluku λ. Minimikustannusvirtausongelman ratkaisualgoritmin 2.2 tuottamat virtaukset ovat siis varsin lievin oletuksin kokonaislukuja. Tietenkin saattaa olla olemassa myös eikokonaisluvuista koostuvia optimiratkaisuja, mutta oleellista on se, että on varmasti ainakin yksi kokonaislukukomponenttinen ratkaisu. Koska kokonaislukuoptimointitehtävät ovat yleensä vaikeita ratkaista, auttaa paljon, jos pystytään formuloimaan vaikeasti ratkeavia kokonaislukuoptimointitehtäviä verkko-ongelmiksi. Asiaa voidaan myös tarkastella algebrallisesti. Lineaarisen optimointitehtävän rajoitusmatriisi A on täysin unimodulaarinen, jos sen neliönmuotoisten alimatriisien determinantit saavat vain arvoja +1,, 1. Voidaan osoittaa, että insidenssimatriisi on täysin unimodulaarinen. Tällöin Simplex-menetelmän jakolaskujen ainoat mahdolliset nimittäjät ovat ±1, joten aitoja jakolaskuja ei esiinny. Mikäli rajoitusvektorin b komponentit ovat kokonaislukuja, ovat algoritmin tuottamat ratkaisut kokonaislukuja. 2. Kuljetus- ja järjestelyongelmat Klassinen kuljetusongelma on minimikustannusvirtauksen erikoistapaus, jossa ei ole kauttakulkusolmuja eikä virtausten ylärajoja. Lisäksi lähteisiin ei tule nuolia eikä nieluista lähde nuolia. Tavara virtaa siis suoraan lähteistä nieluihin. Kun merkitään parametreja s i : lähteen i tarjonta, i = 1,..., m d j : nielun j tarve, j = 1,..., n c ij : yhden tavarayksikön kuljetuskustannus lähteestä i nieluun j ja päätösmuuttujia x ij : lähteestä i nieluun j kuljetettava tavaramäärä, niin saadaan minimikustannusvirtausongelma min s. t. c ij x ij i j x ij = s i, j i = 1,..., m x ij = d j, j = 1,..., n i x ij, i, j. 2

56 Tavallisesti kerrotaan kysyntärajoitukset -1:llä jolloin saadaan miellyttävämpi muoto min s. t. c ij x ij i j x ij = s i, j x ij = d j, i i = 1,..., m j = 1,..., n x ij, i, j. Kuljetusongelma esitetään usein taulukkona, jossa riveinä ovat lähteet ja sarakkeina nielut. Kunkin taulukon alkion (i, j) vasempaan ylänurkkaan merkitään kustannus c ij ja alareunaan virtaus x ij nielu 1 nielu 2 nielu lähde 1 c 11 c 12 c 1 s 1 x 11 x 12 x 1 lähde 2 c 21 c 22 c 2 s 2 x 21 x 22 x 2 d 1 d 2 d Nollan suuruinen virtaus on tapana merkitä vain jos x ij on kantamuuttuja. Taulukon ulkopuolelle kirjataan lähteiden tarjonnat s i ja nielujen tarpeet d j. Taulukkoesitys määrittelee kuljetusongelman täysin ja sitä voidaan käyttää tehtävän algebrallisen esityksen asemasta. Esimerkki 2.. Veneveistämöllä on valmiina varastossa 1 venettä ja siltä on tilattu seuraaviksi kausiksi 4, 6, 7 ja 2 venettä. Kunkin kauden aikana pystytään tuottamaan 4 venettä normaalina työaikana 4 rahan kappalehintaan ja ylityönä rajoittamaton määrä veneitä 4 rahan kappalehintaan. Tehtävänä on suunnitella kokonaiskustannukset minimoiva tuotantopolitiikka, kun yhden veneen varastointi maksaa 2 rahaa kaudessa. Kun yritetään muotoilla tehtävää kuljetusongelmaksi, voidaan virtaus x ij tulkita kauden i aikana kauden j(> i) kysyntää varten tuotettujen veneiden määräksi. Nieluja ovat silloin kausien tarpeet ja lähteitä alkuvarasto, kunkin kauden normaalituotannot ja kunkin kauden ylityötuotannot. Nielujen tarpeet ovat selviä ja samaten alkuvaraston ja normaalituotannon kapasiteetit. Kokonaiskysyntä on 2 venettä, josta 19 venettä täytyy valmistaa suunnitteluperiodin aikana. Jos kaikki tehdään samana kautena, täytyy ylityönä tehdä 1 venettä ja se voidaan asettaa ylityökapasiteetiksi kunakin kautena. Lähteiden yhteiskapasiteetti on nyt 1 + 4(4 + 1) = 77 ja se on suurempi kuin kokonaiskysyntä,

57 joten täytyy muodostaa ylimääräinen nielu, jonka tarve on 77 2 = 7. Saadaan lopulta kuljetusongelma, joka on esitetty kuvassa 24. Siinä luvun M on oltava niin suuri, ettei pystytä tekemään mitään jälkikäteen. Kuljetusongelmataulukkoon on merkitty myös tehtävän optimiratkaisu ylim. tarjonta var nt yt nt 2 yt 2 nt yt nt 4 M M M M M M 4 47 M M M 4 2 yt 4 M M M kysyntä Kuva 24: Esimerkin 2. kuljetusongelma 4

58 Järjestelyongelmassa yritetään löytää kahdesta eri joukosta optimaaliset parit. Esimerkkejä ovat tietokoneistettu aviopuolison haku, töiden jakaminen työntekijöiden kesken jne. Päätösmuuttujat ovat { 1, jos i ja j muodostavat parin x ij =, muuten ja parametrit c ij : parin (i, j) yhteensopivuus. Silloin voidaan hakea keskimäärin parasta ratkaisua max s. t. c ij x ij i j x ij = 1, j x ij = 1, i i = 1,..., m j = 1,..., n x ij {, 1}, i, j, jolloin kyseessä on tavallinen (lineaarinen) järjestelyongelma. Jos siinä korvataan rajoitukset x ij {, 1} ei-negatiivisuusehdoilla x ij, saadaan minimikustannusvirtausongelman erikoistapaus, jossa rajoitusten oikean puolen parametrit ovat ykkösinä kokonaislukuja. Silloin täytyy ratkaisukomponenttien x ij myös olla kokonaislukuja, mutta ykköstä suurempaa lukua ei kuitenkaan voi esiintyä. Siis lineaarinen optimointitehtävä tuottaa järjestelyongelman ratkaisun. Vaihtoehtoisesti voidaan tutkia huonoimmin toisilleen sopivan parin optimointia max s. t. min {c ij} x ij > x ij = 1, i = 1,..., m j x ij = 1, i x ij {, 1}, i, j. j = 1,..., n Jos paritettavien kohteiden määrä on erisuuri, muodostetaan tarvittava määrä ylimääräisiä ja merkitään niiden yhteensopivuuudet nolliksi.

59 Esimerkki 2.4. Mallinnetaan tietokoneavusteisessa tuotannossa työaseman valintaa vaiheittain järjestelyongelmalla. Tarkastellaan kahdeksaa työtä, jotka joko odottavat seuraavaa työvaihetta tai niiden edellinen työvaihe valmistuu minuutin kuluessa. Niiden seuraavia vaiheita voidaan tehdä 1 eri työasemassa. Kriteerinä c ij käytetään aikaa, joka saadaan laskemalla yhteen työn siirtoaika asemalle, odotusaika työaseman vapautumiselle ja työn varsinainen käsittelyaika asemalla. Saadaan taulukko, työasema työ työ työ työ työ työ työ työ jossa viiva kuvaa sitä, ettei työn suoritus ole mahdollista asemalla. Koska tehtävä ei ole tasapainossa, täytyy lisätä keinotekoiset työt 9 ja 1 sekä merkitä nolliksi kustannukset c ij, i = 9, 1; j = 1,..., 1. 6

60 Optimointitehtäväksi tulee min 8x x 1 + x x x x 2 + 2x + 1x + 6x 6 + 8x x 4 + 1x x x x,1 + 14x x 67 + x x x x 7,1 + x x 8 + 2x 88 s. t. x 11 + x 1 + x 19 = 1 x 22 + x 24 + x 2 = 1 x + x + x 6 + x 8 = 1 x 4 + x 46 = 1 x 4 + x 7 + x,1 = 1 x 61 + x 67 + x 69 = 1 x 72 + x 78 + x 7,1 = 1 x 82 + x 8 + x 88 = 1 x 91 + x 92 + x 9 + x 94 + x 9 + x 96 + x 97 + x 98 + x 99 + x 9,1 = 1 x 1,1 + x 1,2 + x 1, + x 1,4 + x 1, + x 1,6 + x 1,7 + x 1,8 + x 1,9 + x 1,1 = 1 x 11 + x 61 + x 91 + x 1,1 = 1 x 22 + x 72 + x 82 + x 92 + x 1,2 = 1 x 1 + x + x 8 + x 9 + x 1, = 1 x 24 + x 4 + x 94 + x 1,4 = 1 x 2 + x + x 4 + x 9 + x 1, = 1 x 6 + x 46 + x 96 + x 1,6 = 1 x 7 + x 67 + x 97 + x 1,7 = 1 x 8 + x 78 + x 88 + x 98 + x 1,8 = 1 x 19 + x 69 + x 99 + x 1,9 = 1 x,1 + x 7,1 + x 9,1 + x 1,1 = 1 x ij {, 1}, i = 1,..., 1; j = 1,..., 1. Minimikustannusvirtausongelmaksi järjestelyongelma saadaan merkitsemällä jommat kummat paritettavista kohteista lähteiksi tarjontana +1 ja toiset nieluiksi tarjontana 1. Kustannukset ovat lukujen c ij vastalukuja. Tehokkaampi ratkaisumenetelmä olisi käyttää juuri järjestelyongelmille kehitettyä unkarilaista algoritmia. 2.6 Muita yhden tuotteen virtausongelmia Lyhimmän tien ongelman formulointi virtausongelmana. Luvuissa esitettiin tehokkaat menetelmät lyhimmän tien ongelman ratkaisemiseksi. Voidaan kuitenkin käyttää virtausalgoritmeja, kunhan vain asetetaan lähtösolmuun s tarjonta 1 ja päätesolmuun 7

61 t tarve 1 ja pidetään muita solmuja kauttakulkusolmuina. Tämä perustuu virtausongelmien ratkaisujen kokonaislukuominaisuuteen ja ratkaisuna on se reitti, jolla virtaus x ij = 1. Maksimivirtausongelmassa yritetään muodostaa suurinta mahdollista virtausta lähtösolmusta s loppusolmuun t, kun nuolilla on maksimikapasiteetit ja oletetaan, että virtaukset säilyvät. Tällä tarkoitetaan sitä, että kuhunkin solmuun tuleva virtaus on yhtä suuri kuin siitä lähtevä virtaus. paloportaat tunneli ovi paloportaat ovi areena ovi paloportaat ovi paloportaat Kuva 2: Urheiluhallin poistumistiet Esimerkki 2.. Tarkastellaan kuvan 2 mukaisen urheiluhallin evakuointikapasiteetin selvittelyä. Oletetaan, että hallin ovista pääsee kulkemaan 6 ihmistä minuutissa. Käytävällä taas pääsee ihmistä liikkumaan kumpaankin suuntaan. Paloportaita myöten pääsee kulkemaan 4 henkeä minuutissa ja parkkipaikalle johtavaa tunnelia pitkin 8 henkeä minuutissa. Ongelma saadaan kuvan 26 verkoksi, jossa kapasiteetit on merkitty nuolille ja hallista pois päässeet ihmiset on kerätty solmuun 1. Tarkoituksena on määrätä maksimaalinen virtaus solmusta 1 solmun 1 noudattaen nuolten kapasiteettirajoituksia. Maksimaaliseksi poistumisnopeudeksi saadaan 21 henkeä minuutissa virtausten ollessa eri nuolilla kuten kuvassa 27. 8

62 Kuva 26: Esimerkin 2. verkko Kuva 27: Esimerkin 2. ratkaisu 9

63 Maksimivirtausongelma saadaan muokattua minimikustannusvirtausongelmaksi lisäämällä keinotekoinen nuoli päätesolmusta lähtösolmuun, ja sen kapasiteetiksi ja kustannukseksi -1. Kaikkien muiden nuolten kustannus on nollan suuruinen. Missään solmussa ei ole tavaran ylijäämää eikä tarvetta. Suora ratkaisumenetelmä maksimivirtausongelmalle on ns. Ford-Fulkersonin algoritmi. Ajasta riippuvat virtaukset. Riippuvuus ajasta voidaan mallintaa muodostamalla jokaisesta staattisesta solmusta uusi solmu jokaista tarkasteltavaa ajanhetkeä kohti. Nuolilla esitetään joko virtauksia tiettyinä ajanhetkinä tai virtauksia ajanhetkestä toiseen samassa paikassa. Esimerkki 2.6. Lannoitetehdas tuottaa tavaraa neljässä tehtaassa ja toimittaa tuotteensa 2 aluevaraston kautta jakelupisteeseen. Kysyntä on keskittynyt kevätkaudelle, ja sitä varten täytyy lannoitteita tuottaa etukäteen varastoon. Jaetaan vuosi neljään kauteen, jolloin ongelmana on se kuinka paljon tuotetaan lannoitteita kunakin kautena, miten niitä varastoidaan ja miten niitä kuljetetaan asiakkaille. Varastointi tietenkin maksaa eikä varastointitilaa ole rajattomasti käytettävissä. Saadaan kuvan 28 kaltaisen verkon. D1,1 C1,1 P1,1 C1,2 D1,2 P1,2 C1, D1, P1, C1,4 D1,4 P1,4 lähde P4,1 D2,1 P4,2 C,1 D2,2 P4, C,2 D2, P4,4 C, D2,4 C,4 Kuva 28: Esimerkin 2.6 verkko Siinä solmut (P i, k) esittävät tehdasta i kautena k. Niihin johtavien nuolten kapasi- 6

64 teetit ovat tuotantokapasiteetteja ja kustannukset tuotantokustannuksia. Kunakin kautena k solmut (P i, k) yhdistetään aluevarastoja j esittäviin solmuihin (D j, k). Nämä taas kytketään jakelupisteisiin (C l, k). Kustannuksina ovat kuljetuskustannukset, jotka voivat vaihdella eri kausina. Riippuvuus ajasta saadaan varastoimalla tavaraa aluevarastoissa. Kustannuksena on yhden yksikön varastointikustannus kaudessa ja kapasiteettina varastojen kapasiteetit. 2.7 Simplex-algoritmi verkoille Graafi on puu, jos se on yhtenäinen eikä sisällä syklejä. Puu on virittävä (spanning), jos se kulkee jokaisen solmun kautta. Puun jokaista solmuparia yhdistää aina yksikäsitteinen ketju, joten virittävän puun tapauksessa graafin jokaista solmuparia yhdistää aina puun yksikäsitteinen ketju. Kun lisätään virittävään puuhun nuoli, saadaan yksikäsitteinen lenkki. Nyt voidaan osoittaa, että minimikustannusvirtausongelman insidenssimatriisin sarakkeet muodostavat kannan silloin ja vain silloin, kun sarakkeita vastaavat nuolet muodostavat tutkittavan verkon virittävän puun. Verkkomallissa virtaukset saavat kantaan kuulumattomilla nuolilla arvon tai u ij. Kantaan kuuluvilla nuolilla ne määräytyvät yksikäsitteisesti siitä, että virtaus on tasapainossa. Ottamalla uusi nuoli (i, j) kantaan, saadaan yksikäsitteinen lenkki ja Simplexsuunnaksi valitaan sen suunta, mikäli virtaus oli alarajalla eli x ij =. Tapauksessa x ij = u ij valitaan taas Simplex-suunnaksi suuntaa vastakkainen suunta. Saadaan Algoritmi 2.7. Simplex-algoritmi verkoille Askel. Muodostetaan mielivaltainen sallittu aloitusvirtaus x, määrätään sitä vastaava virittävä puu ja asetetaan kierroslukuindikaattori t. Askel 1. Jokaiselle kantaan kuulumattomalle nuolelle tutkitaan saadaanko parantava Simplex-suunta yksikäsitteisestä lenkistä, joka muodostuu lisäämällä se virittävään puuhun. Askel 2. Jos mikään Simplex-suunta ei ole parantava, lopetetaan ja virtaus x t on optimaalinen. Muuten valitaan jokin parantava suunta x, jonka kantaan kuulumaton nuoli on (p, q). Askel. Lasketaan pisin mahdollinen askelpituus λ { min{, min{u ij x t ij suuntaan(i, j)}} λ min min{, min{x t ij vasten suuntaa(i, j)}} } suunnassa x. Mikäli λ =, lopetetaan sillä tehtävällä ei ole äärellistä ratkaisua. 61

65 Askel 4. Päivitetään virtaukset kaavasta x t+1 x t + λ x lisäämällä virtausta syklissä määrällä λ syklin suuntaisilla nuolilla ja vähentämällä määrällä λ syklin vastaisilla nuolilla. Askel. Jos jokin muu nuoli kuin (p, q) tuotti askelpituuden λ minimiarvon askeleessa, korvataan se kannan muodostavassa virittävässä puussa nuolella (p, q). Kasvatetaan kierroslaskuria t t + 1 ja palataan askeleeseen 1. Olkoon suuntaamattomassa verkossa n solmua ja solmuparin (i, j) välisen kaaren pituus c ij. Tehtävänä on yhdistää kaikki verkon solmut keskenään niin, että kaarien kokonaispituus minimoituu. Toisin sanoen haetaan sellaista n 1 kaaren alijoukkoa, jotka tekevät verkosta yhtenäisen, ja joiden yhteispituus on minimaalinen. Tällöin tulokseen ei voida saada yhtään silmukkaa, koska kaikki solmut ovat jo yhteydessä keskenään, vaikka silmukka katkaistaisiinkin ottamalla jokin kaari pois. Esimerkki tapauksesta, jossa minimaalisen virittävän puun konstruointia tarvitaan, on tietoliikenneverkon suunnittelu yhdistämään joukkoa solmuja. Tässä tapauksessa c ij on kustannus, joka syntyy välin (i, j) kaapeloimisesta. Esitetään kaksikin ratkaisumenetelmää, jotka molemmat ovat ns. ahneita (greedy) algoritmeja. Algoritmi 1 (Prim). Valitaan ensin mielivaltainen lähtösolmu ja joka vaiheessa lisätään muodostettavaan puuhun yksi solmu, kunnes kaikki n solmua ovat mukana. Uusi solmu valitaan aina niin, että se on mahdollisimman lähellä jotakin jo puuhun valittua solmua. Primin algoritmissa meillä on koko ajan yhtenäinen puu, jota kasvatetaan joka vaiheessa. Näin ei ole seuraavassa algoritmissa. Algoritmi 2 (Kruskal). Muodostetaan puuta kaari kerrallaan. Joka vaiheessa valitaan mahdollisimman lyhyt kaari, joka ei muodosta sykliä puuhun jo valittujen kaarten kanssa. 62

66 Kuva 29: Esimerkin 2.8 verkko Esimerkki 2.8. Tarkastellaan kuvan 29 verkkoa. Algoritmin 1 mukaan lähdettäessä liikkeelle solmusta 1 saadaan virittävään puuhun tässä järjestyksessä kaaret (1, 2), (2, 6), (6, ), (6, 4) ja (, ). Algoritmin 2 mukaan saadaan tässä järjestyksessä kaaret (1, 2), (, 6), (4, 6), (2, 6), (1, 4) joka ei kelpaa ja lopulta (, ). 2.8 Monen tuotteen virtaukset sekä lisääntyvät ja vähenevät virtaukset Tarkastellaan muutamia yleistyksiä aikaisempaan ja aloitetaan sallimalla useamman tuotteen virtaus (multicommodity flow) lautta Kuva : Lahden rannan keskukset, kuvassa liikekeskuksia ovat solmut 2 ja 6, teollisuuskeskuksia solmut ja 7 sekä asuinalueita solmut 1, 4 ja 6

67 Esimerkki 2.9. Tarkastellaan liikennettä lahden rannalla olevissa keskuksissa. Joka aamu kolmen asuinalueen asukkaat matkustavat alueen kahteen liike- ja kahteen teollisuuskeskukseen. Kuvassa on esitetty keskusten väliset etäisyydet ja taulukossa alku- matkoja sol- sol- sol- sol- sol- sol- solsolmu yhteensä muun 1 muun 2 muun muun 4 muun muun 6 muun puolestaan matkojen lukumäärät. Esimerkiksi alueelta 1 töihin alueelle 7 menevien henkilöiden täytyy ajaa koko matka keskusten 2-6 läpi ja yhteensä tällaisista matkoista aiheutuu joka aamu 992 kilometrin ajot. Yhdeksi keinoksi saastumisen vähentämiseksi on ajateltu lauttaa keskusten 2 ja 6 välille. Halutaan tietää, minkä verran kokonaisajokilometrit vähenisivät, jos pystyttäisiin kuljettamaan 2 autoa kumpaankin suuntaan lautalla. Jos ajatellaan kaikki matkat samanlaisiksi, saadaan tavallinen yhden tuotteen virtausongelma, mutta sen ratkaisuna tyydytetään esimerkiksi 12 matkan tarve solmusta 4 solmuun 7 enimmäkseen lähimmästä asuinaluesolmusta ja matkat solmusta solmuihin 2 ja solmusta 1, mutta tässä ei ole mitään järkeä. Sen sijaan täytyy pitää erillään virtaukset jokaisesta kolmesta lähteestä. Virtauksia ei voida myöskään ratkaista erillisinä, koska yhteisenä kapasiteettirajoituksena on lautan kantokyky. Kun valitaan päätösmuuttujiksi x kij : solmusta k lähtevien autojen määrä nuolella (i, j), 64

68 saadaan tulokseksi optimointitehtävä min.x x x 12 + x 12 + x 14 + x x x x x x x x x x 42 + x 42 + x 44 + x x x x x x x x 12 +.x 21 + x 2 + x 2 + x 4 + x 4 + 2x 4 + 2x 4 + 4x 6 + 4x x x 76 s. t. x 112 x 121 = 28 x x 12 + x 126 x 112 x 12 x 162 = 9 x 12 + x 14 x 12 x 14 = 7 x 14 + x 14 x 14 x 14 = 4 x 14 + x 16 x 14 x 16 = 1 x x 16 + x 167 x 126 x 16 x 176 = 6 x 176 x 167 = x 412 x 421 = 1 x x 42 + x 426 x 412 x 42 x 462 = 2 x 42 + x 44 x 42 x 44 = 11 x 44 + x 44 x 44 x 44 = 6 x 44 + x 46 x 44 x 46 = 1 x x 46 + x 467 x 426 x 46 x 476 = 14 x 476 x 467 = 12 x 12 x 21 = 11 x 21 + x 2 + x 26 x 12 x 2 x 62 = 4 x 2 + x 4 x 2 x 4 = 22 x 4 + x 4 x 4 x 4 = 2 x 4 + x 6 x 4 x 6 = 122 x 62 + x 6 + x 67 x 26 x 6 x 76 = x 76 x 67 = 244 x x x 26 2 x x x 62 2 x kij, k, i, j. Sen optimiratkaisussa saadaan ajokilometrejä pienennettyä 29.7% aina 2877 kilometriin. Tällöin lautalle saadaan suunnassa 2-6 matkustajamäärät x 126 = 116 ja x 426 = 84 sekä suunnassa 6-2 matkustajamäärä x 62 = 2. 6

69 Huomautus 2.1. Voidaan osoittaa, että monen tavaran virtauksessa ei ole voimassa ratkaisun kokonaislukuominaisuus. Virtaus, jossa tavaran määrä muuttuu virtauksen aikana. Aina ei tavaran määrä pysy vakiona verkossa. Esimerkiksi sähköverkostossa syntyy jännitehäviöitä ja vesijohtoverkostossa vuotoja. Investoidut rahat taas toivon mukaan lisääntyvät ajan mukana. Tarkastellaan tapausta, jossa a ij ilmoittaa kertoimen, jolla solmuun i tullut virtaus muuttuu saavuttuaan solmuun j. Jos a ij > 1, on kyseessä virtauksen kasvu, jos a ij < 1 on kyseessä virtauksen väheneminen ja jos a ij = 1 on kyseessä tavallinen virtaus r Kuva 1: Esimerkin 2.11 verkko Esimerkki Yrityksen on suunniteltava kassavirtaansa seuraavien neljän kuukauden ajaksi, kun tiedetään, että sillä on alkujaan 2AC normaalina talletuksena ja 1AC käteistalletuksena. Lisäksi tiedetään, että kuukauden päästä täytyy maksaa AC ja neljän kuukauden päästä AC sekä yritykseen tulee rahaa AC kahden kuukauden päästä ja 1AC kolmen kuukauden päästä. Käteistalletuksista maksetaan kuukaudessa. prosentin ja normaalitalletuksista.9 prosentin korko. Lisäksi voidaan lainata kuukaudeksi korkeintaan 1AC yhden prosentin korolla, eli jokaisesta seuraavan kuukauden käteiseurosta jää nyt käytettäväksi 1/ AC. Mikäli halutaan vaihtaa rahoja tililtä toiselle, täytyy siitä maksaa.2% toimitusmaksu. Merkitään solmuilla 1- käteisen rahan määriä kuukausina -4 ja solmuilla 6-1 talletusten määrää kuukausina -4. Kun käytetään yksikkönä 1AC, saadaan kuvan 1 verkko, johon ei ole merkitty nuolilla (2, 1), (, 2), (4, ) ja (, 4) olevia kapasiteettirajoituksia. Tavoitteena on maksimoida kuukauden 4 lopussa saatava käteinen rahamäärä, 66

70 jolloin saadaan ongelma max r s. t. x 12 + x x x 61 = 1 x 21 + x 2 + x 27 1.x x 2.998x 72 = x 2 + x 4 + x 8 1.x 2.991x 4.998x 8 = x 4 + x 4 + x 49 1.x 4.991x 4.998x 94 = 1 x 4 + r 1.x 4.998x 1, = x 61 + x x 16 = 2 x 72 + x x x 67 = x 8 + x x 8 1.9x 78 = x 94 + x 9,1.998x x 89 = x 1, 1.9x 9,1 = x 21 1 x 2 1 x 4 1 x 4 1 x ij, i, j, jossa päätösmuuttujana x ij on solmusta i solmuun j lähtevä rahamäärä. Taaskaan ei ratkaisun komponenttien tarvitse olla kokonaislukuja, vaikka kaikki parametrit olisivatkin. Yleisesti saadaan ongelma max s. t. c ij x ij (i,j) x kj a ik x ik = b k, k Q (k,j) E (i,k) E x ij u ij. 67

71 Diskreetit optimointimallit Useimmat lukujen 1 ja 2 verkostomalliongelmista ratkeavat helposti, vaikka rajoitettaisiin päätösmuuttujat diskreeteiksi. Onneksi tällaisia tehtäviä esiintyy myös käytännössä. Valitettavasti kuitenkin suurin osa kokonaislukuoptimointitehtävistä on paljon haastavampia. Tässä luvussa tarkastellaan tällaisia tehtäviä ennen kuin ruvetaan tutkimaan niiden ratkaisemista luvussa 4..1 Kokkareiset lineaariset optimointitehtävät Muuten lineaarisissa optimointitehtävissä on usein joko-tai -rajoituksia, joiden ei kaikkien tarvitse olla samaan aikaan voimassa tai sitten kohdefunktiossa on kiinteitä aloituskustannuksia. Tällaisia tehtäviä voidaan paremman puutteessa kutsua kokkareisiksi (lumpy). Päätöksentekijällä voi joskus olla valittavana kaikki tai ei mitään, toisin sanoen x j = tai x j = u j. Tällaiset joko-tai -ehdot voidaan hoitaa ottamalla käyttöön binäärinen muuttuja y j, joka toteuttaa ehdot x j = u j y j, y j = 1. Muuttuja y j voidaan tulkita valituksi osuudeksi vakiosta u j. Esimerkki.1. (Ruotsalainen teräs) Tarkastellaan luentomonisteen Matemaattinen optimointi 1 luvun 4.2 esimerkkiä, jossa on käytettävä romulaadut 1 ja 2 kokonaan, jos niitä yleensä käytetään. Silloin otetaan siis käyttöön päätösmuuttujat { 1, mikäli romua j käytetään y j =, muuten ja saadaan entisen lineaarisen optimointitehtävän asemasta sekalukuoptimointitehtävä min 16 7y y 2 + 8x + 9x x + 6x 6 + x 7 s. t. 7y 1 + 2y 2 + x + x 4 + x + x 6 + x 7 = 1.8 7y y 2 +.8x +.4x y y 2 +.8x +.4x y y x.18 7y y x.12 7y y x y y x y x y x 7 1 x,..., x 7 y 1, y 2 = 1, 68

72 jonka optimiratkaisu on y1 = 1, y2 =, x = kg, x 4 = 16.6 kg, x = 16. kg, x 6 = 1. kg, x 7 = 11. kg. Uusista lisärajoituksista johtuen kokonaiskustannus kasvaa 99.7 kruunusta kruunuun. Toinen kokkareilmiö muuten lineaarisessa tehtävässä on kohdefunktiossa esiintyvä kiinteä aloituskustannus (fixed charge, setup). Silloin päätösmuuttujan arvosta x aiheutuu kustannus { f + cx, x > θ(x) =, x =. Kiinteä aloituskustannus f täytyy siis maksaa aina kun päätösmuuttujan x arvo on positiivinen. Sen lisäksi täytyy maksaa varsinainen määrästä riippuva lineaarinen kustannus cx. Tavallisesti kiinteä kustannus f on positiivinen ja tällöin voidaan mallintaa tilannetta seuraavasti. Otetaan käyttöön uudet päätösmuuttujat y j, jotka määritellään seuraavasti { 1, kun x j > y j =, x j =. Kohdefunktiossa on binäärimuuttujan y j kerroin reaalimuuttujan x j kiinteä kustannus f j ja muuttujan x j kerroin sen vaihtuva kustannus c j. Jotta saataisiin muuttujien y j ja x j arvot kytkettyä toisiinsa yllä olevan määritelmän osoittamalla tavalla, tarvitaan vielä lisärajoitukset x j u j y j. Tällä huolehditaan siitä, ettei x j voi olla positiivinen, kun y j =. Parametri u j on määrättävä niin suureksi, ettei x j voi ylittää sitä. Esimerkki.2. (Ruotsalainen teräs) Oletetaan nyt, että alkuperäisessä luentomonisteen Matemaattinen optimointi 1 luvun 4.2 esimerkissä aiheutuu kunkin romulaadun j käytöstä aina kruunun kiinteä kustannus, joka johtuu uunin syöttömekanismien asettelusta. Valitaan siis uudet päätösmuuttujat { 1, jos romua j käytetään y j =, muuten. Tehtävässä on jo annettu ylärajat 7 ja 2 muuttujille x 1 ja x 2. Ensimmäisestä rajoituksesta nähdään helposti, että arvo 1 on yläraja muuttujille x ja x 4. 69

73 Saadaan siis tehtävä min 16x 1 + 1x 2 + 8x + 9x x + 6x 6 + x 7 + y 1 + y 2 + y + y 4 s. t. x 1 + x 2 + x + x 4 + x + x 6 + x 7 = 1.8x 1 +.7x 2 +.8x +.4x x 1 +.7x 2 +.8x +.4x x 1 +.2x x.18x 1 +.2x x.12x x x x x x x x x x 7 1 x 1 7y 1 x 2 2y 2 x 1y x 4 1y 4 x 1,..., x 7 y 1,..., y 4 = 1 ja sille ratkaisu x 1 = 7 kg, x 2 = kg, x = kg, x 4 = 16.6 kg, x = 16. kg, x 6 = 1. kg, x 7 = 11. kg, y1 = 1, y2 =, y = 1, y4 = 1. Kokonaiskustannus huononee kruunuun alkuperäisestä 99.7 kruunusta..2 Selkäreppu- ja budjetointimallit Edellisissä ongelmissa käsiteltiin sekalukuoptimointitehtäviä, joissa oli myös reaaliarvoisia päätösmuuttujia. Nyt tarkastellaan selkäreppu- (knapsack) ja pääomabudjetointimalleja, joissa täytyy valita optimaalinen joukko kohteita, ominaisuuksia, projekteja tai investointeja niin, ettei resurssirajoituksia ylitetä. Mitään osittaisia ratkaisuja ei kelpuuteta. Selkäreppuongelmaksi sanotaan aitoa lineaarista kokonaislukuoptimointitehtävää, jossa on vain yksi rajoitus. Useimmissa sovelluksissa päätösmuuttujat ovat binäärisiä ja nimitys tulee siitä, että retkeilijän täytyy valita reppuun pakattavaksi mahdollisimman arvokkaat tavarat, kun joko repun paino tai sen tilavuus muodostaa rajoituksen. Esimerkki.. (Formula 1 -auton parannus) Formula 1 -tallilla on 6 mahdollista tapaa parantaa tämän vuoden automallinsa nopeutta. Näiden ominaisuuksiksi on arvioitu seuraavat 7

74 ominaisuus j kustannus (1AC) nopeuden lisäys (km/h) ja pyritään saavuttamaan maksimaalinen nopeuden parannus käytettävissä olevan AC budjetin avulla. Valitsemalla päätösmuuttujiksi { x j = 1, jos ominaisuus j lisätään autoon, muuten saadaan tehtävästä selkäreppuongelma max 8x 1 + x 2 + 1x + 7x 4 + 1x + 12x 6 s. t. 1.2x x x x x + 1.6x 6 x 1,..., x 6 = 1. Tehtävän optimaalisessa ratkaisussa kannattaa valita ominaisuudet 1, 4 ja joilla saadaan yhteensä 2 km/h parannus. Jos tämä ei riitä, talli voi päättää, että nopeuden on parannuttava ainakin km/h kustannuksista välittämättä. Silloin saadaan vaihtoehtoinen selkäreppuongelma min 1.2x x x x x + 1.6x 6 s. t. 8x 1 + x 2 + 1x + 7x 4 + 1x + 12x 6 x 1,..., x 6 = 1, jossa minimoidaan kustannuksia. Nyt valitaan ominaisuudet 1, ja kustannusten ollessa 4AC. Saavutettu nopeuden parannus on km/h. Pääoman budjetointi. Mikäli rajoituksia on useampia tai budjetti ulottuu useammalle kuin yhdelle suunnittelukaudelle, ei yksinkertainen selkäreppumalli riitä. Pääomabudjetoinnissa eli moniulotteisissa selkäreppumalleissa valitaan suurimman hyödyn tuottava projekti, investointi tms. joukko, joka pysyy annettujen budjetti- tai muiden resurssirajoitusten puitteissa. Budjettiehtojen lisäksi voi esiintyä toisensa poissulkevuusehtoja, jolloin molempia kyseisistä investoinneista ei voi tehdä. Kun päätösmuuttujat valitaan kuten edellä, niin esimerkiksi investointien k ja l poissulkevuus voidaan hoitaa ehdolla x k + x l 1. Usein esiintyy myös edeltäjärelaatioita. Investoinnin k edellytyksenä voi olla, että myös investointi l tehdään, ja tämä vaatimus hoituu rajoituksella x k x l. Esimerkki.4. (NASAn pääomabudjetointi) Yhdysvaltojen avaruushallinnon (NASA) täytyy toimia budjettinsa puitteissa ja jakaa rahaa ehdotetuille, toistensa kanssa kilpaileville projekteille. Vuosille on ehdotettu 14 projektia, joiden kustannukset eri vuosina on esitetty oheisessa taulukossa. 71

75 j projekti ei edellyttää arvo yhdessä projektin 1 communications satellite orbital microwave io lander uranus orbiter uranus orbiter mercury probe saturn probe infrered imaging ground-based SETI large orbital structures color imaging medical technology polar orbital platform geosynchronous SETI budjetti Kun valitaan päätösmuuttujiksi { x i = 1, jos projekti i valitaan, muuten 72

76 niin saadaan ongelmaksi max 2x 1 + x 2 + 2x + x 4 + 7x + 2x 6 + x 7 + 1x 8 + 2x 9 + 1x x x 12 + x x 14 s. t. 6x 1 + 2x 2 + x + x 7 + 4x 9 + x 12 1 x 2 + x + x + 8x 7 + x 9 + 8x 1 + 7x 12 + x 1 + 4x x + x 6 + 4x 1 + 2x x 1 + x x 6 + x 8 + 7x 11 + x 1 + x x 4 + 4x 6 + x 1 + x x 4 + x 1 x 8 + x 11 1 x 9 + x 14 1 x 11 x 2 x 4 x x x x 6 x x 7 x x i = 1, i = 1, 2,..., 14. Viisi ensimmäistä rajoitusta ovat budjettirajoituksia, kolme seuraavaa poissulkevuusrajoituksia ja viisi viimeistä rajoitusta edeltäjärajoituksia.. Pakkaus-, peitto- ja ositusmallit Tarkasteltavissa malleissa tutkitaan jäsenyyttä määritellyissä alijoukoissa. Oletetaan taas, että päätösmuuttujat saavat arvon yksi, kun kohde on ratkaisussa ja arvon nolla muulloin. Peitto-ongelmissa (set covering) on rajoituksia x j 1 j J ts. vaaditaan, että ainakin yksi joukon J alkio kuuluu ratkaisuun. Pakkausongelmissa (set packing) rajoitukset ovat muotoa x j 1 j J ja ositusongelmissa (set partitioning) x j = 1. j J 7

77 Kuva 2: Ensiapuklinikoiden mahdolliset sijaintipaikat Esimerkki.. Tarkastellaan ensiapuklinikoiden sijoittelua kuvan 2 esittämään kaupunkiin (Austin, Texas). Se on jaettu 2 alueeseen, joita on palveltava riittävän hyvin, kun mahdolliset asemien 1 sijaintipaikkaa on merkitty ympyröillä. Kultakin alueelta on päästävä riittävän nopeasti ensiapuun ts. kunkin alueen on rajauduttava ainakin yhteen asemaan. Esimerkiksi sijaintipaikasta 2 kyetään palvelemaan alueita 1, 2, 6 ja 7. Valitsemalla päätösmuuttujiksi { 1, jos asema perustetaan paikkaan j x j =, muuten 74

78 ja minimoimalla tarvittavien asemien lukumäärä saadaan minimipeitto-ongelma min x 1 + x 2 + x + x 4 + x + x 6 + x 7 + x 8 + x 9 + x 1 s. t. x 2 1 x 4 + x 1 x 1 + x 2 1 x 4 + x + x 6 1 x 1 + x 1 x 4 + x + x 7 1 x 1 x 8 + x 9 1 x 1 x 6 + x 9 1 x 2 1 x + x 6 1 x 2 + x 4 1 x + x 7 + x 1 1 x + x 4 1 x 8 + x 9 1 x 8 1 x 9 + x 1 1 x 4 + x 6 1 x 1 1 x 1,...x 1 = 1, jonka yksi optimiratkaisu on sijoittaa asemat paikkoihin 2,, 4, 6, 8 ja 1. Oletetaan, että rahaa riittää kuitenkin vain neljään asemaan. Silloin niiden valinta voidaan tehdä, jos tiedetään kunkin alueen peittämisen tärkeys. Oletetaan, että taulukon luvut alue tärkeys alue tärkeys alue tärkeys alue tärkeys esittävät esimerkiksi palvelujen kysyntöjä alueilla. Aiempien päätösmuuttujien lisäksi otetaan käyttöön uudet päätösmuuttujat { y i = 1, jos aluetta i ei peitetä ratkaisussa, muulloin. 7

79 Silloin saadaan modifioitu malli min.2y y y + 9.y y +.7y y y y y 1 +.4y y y y y y y 17 +.y y y 2 s. t. x 2 + y 1 1 x 4 + x + y 11 1 x 1 + x 2 + y 2 1 x 4 + x + x 6 + y 12 1 x 1 + x + y 1 x 4 + x + x 7 + y 1 1 x + y 4 1 x 8 + x 9 + y 14 1 x + y 1 x 6 + x 9 + y 1 1 x 2 + y 6 1 x + x 6 + y 16 1 x 2 + x 4 + y 7 1 x + x 7 + x 1 + y 17 1 x + x 4 + y 8 1 x 8 + x 9 + y 18 1 x 8 + y 9 1 x 9 + x 1 + y 19 1 x 4 + x 6 + y 1 1 x 1 + y 2 1 x 1 + x 2 + x + x 4 + x + x 6 + x 7 + x 8 + x 9 + x 1 4 x 1,...x 1 = 1, y 1,..., y 2 = 1. Viimeinen rajoitus ei ole peittorajoitustyyppiä ja sillä taataan, ettei neljää asemaa enempää rakenneta. Tehtävän optimiratkaisu on rakentaa asemat, 4, ja 9, jolloin alueet 1, 2, 6, 9 ja 2 jäävät peittämättä. Kohdefunktion optimiarvo on silloin 2.8. Sarakegenerointimallit. Sarakegeneroinnissa tarkastellaan suuria kombinatorisia ongelmia joihin sovelletaan kaksivaiheista strategiaa. Ensin muodostetaan sarakkeet, ts. muodostetaan ongelman pieniä ratkaisumoduleita. Toisessa vaiheessa näitä optimaalisesti yhdistämällä muodostetaan tehtävän ratkaisu ositus-, peitto- tai pakkausmallina. Mia Chi Chr Dal Kuva : Lennot Miamin, Chicagon, Charlotten ja Dallasin välillä 76

80 Esimerkki.6. Tarkastellaan henkilökunnan sijoittelua lentoyhtiön aikataulunmukaisille lennoille. Henkilökunnan kiinnitykseksi sanotaan sen seuraavien 2- päivän aikana tekemien lentojen jonoa, jonka täytyy alkaa henkilökunnan kotikaupungista ja päättyä sinne. Ongelma on erittäin hankala ja hyvä ratkaisu tuottaa suuria säästöjä. Oheinen kuva esittää yksinkertaista tapausta, jossa on esitetty 12 lentoa 4 paikkakunnan (Miami, Chicago, Charlotte ja Dallas) välillä. Kuvassa aika-akseli kulkee vasemmalta oikealle. Yksi mahdollinen kiinnitys on seuraava: lento 11 lähtee Miamista ja saapuu Chicagoon, josta henkilökunta voi jatkaa lennolla 2 Dallasiin ja edelleen lennolla 46 Charlotteen sekä viimein lennolla 8 takaisin Miamiin. Seuraavassa taulukossa on esitetty kaikki ja 4 lennon muodostamat kiinnitykset. j lentojärjestys kustannus j lentojärjestys kustannus Kustannuksissa on huomioitu yöpymiskustannukset vieraalla paikkakunnalla, ja palkkaakin on maksettava, vaikkei töitä olisikaan. Kiinnitysten muodostaminen on varsin työlästä, ja siinä täytyy huomioida työaikalait ja ammattiyhdistyksien kanssa tehdyt sopimukset. Yritetään nyt miehittää kukin lento tarkalleen kerran minimikustannuksin ja valitaan siksi päätösmuuttujiksi { x j = 1, jos kiinnitys j valitaan, muuten. 77

81 Saadaan ongelma min 29x x x + x x + 1x 6 + 2x 7 + 2x x 9 + 2x x x x x 1 s. t. x 1 + x 2 + x + x 4 = 1 x 6 + x 7 + x 8 + x 9 + x 1 + x 1 + x 1 = 1 x 1 + x 2 + x + x 6 = 1 x + x 4 + x 7 + x 8 + x 11 + x 12 = 1 x 12 + x 1 + x 14 + x 1 = 1 x 9 + x 1 = 1 x + x 7 + x 9 + x 11 = 1 x 1 + x 4 + x 8 + x 1 + x 1 = 1 x + x 12 + x 14 = 1 x 11 + x 12 = 1 x 1 + x + x 1 + x 14 = 1 x 2 + x + x 6 + x 7 + x 9 + x 1 = 1 x 1,..., x 1 = 1, jonka optimiratkaisu on x 1 = x 9 = x 12 = 1 kustannusten ollessa Järjestely- ja paritusongelmat Järjestelyongelmassa (bipartite matching) muodostetaan pareja kahteen eri luokkaan kuuluvista kohteista, esimerkiksi työt - koneet, miehet - naiset, myyjät - asiakkaat, ja nämä voidaan ratkaista virtausongelmina verkossa. Käsitellään tässä asiaa hieman yleisemmin. Valitaan tavanomaiset päätösmuuttujat { 1, jos ensimmäisen lajin kohde i yhdistetään toisen lajin kohteen j kanssa x ij =, muuten. Silloin järjestelyrajoituksien x ij = 1, j x ij = 1, i x ij = 1, i = 1,..., m j = 1,..., n i, j mukaan kukin kohde kummassakin luokassa paritetaan tarkalleen kerran. Luvussa 2. tarkasteltiin jo perustapausta. 78

82 Kvadraattinen järjestelyongelma. Paritusongelmissa joudutaan usein mallintamaan tilanteita, jossa päätösmuuttujan vaikutus kohdefunktioon ei olekaan riippumaton muiden päätösmuuttujien arvoista, eli muuttujien additiivisuusoletus ei olekaan voimassa. Tavallisin tapaus on kvadraattinen järjestelyongelma, jossa kohdefunktio on opt c ijkl x ij x kl. i j k>i l j Tässä kustannus c ijkl toteutuu vain kun sekä x ij kanssa ja k puolestaan l:n kanssa. = 1 että x kl = 1 ts. i paritetaan j:n Esimerkki.7. Tarkastellaan liikkeiden sijoittelua ostoskeskukseen. Käytettävissä on neljä liikehuoneistoa, joiden etäisyydet toisistaan ovat metreinä j/l Näihin täytyy sijoittaa liikkeet 1 (vaatekauppa), 2 (tietokonekauppa), (lelukauppa) ja 4 (kirjakauppa). Oletetaan tunnetuksi niiden asiakkaiden määrät viikossa (yksikkönä tuhat henkeä), i/k jotka käyvät samalla kertaa sekä kaupassa i että kaupassa k. Nyt pyritään valitsemaan sellainen liikkeiden sijoittelu, jolla minimoidaan asiakkaiden kokema epämukavuus. Yksi käytetty kriteeri on kokonaisvirtaus ts. asiakkaiden yhteensä kulkema matka. Jos esimerkiksi kauppa 1 sijoitetaan paikkaan 1 ja kauppa 4 paikkaan 2, niin niiden yhteisten 7 asiakkaan täytyy kunkin kävellä 8 metriä eli yhteensä 6 metriä. Tätä ei voida laskea, ellei tiedetä kummankin liikkeen sijaintia. Kun valitaan päätösmuuttujiksi { x ij = 1, jos kauppa i sijoitetaan paikkaan j, muuten, 79

83 saadaan kvadraattinen järjestelyongelma min (8x 11 x x 11 x x 11 x x 12 x x 12 x 2 + 1x 12 x x 1 x x 1 x x 1 x x 14 x x 14 x x 14 x 2 ) + 2(8x 11 x 2 + 1x 11 x + 17x 11 x 4 + 8x 12 x 1 + 1x 12 x + 1x 12 x 4 + 1x 1 x 1 + 1x 1 x x 1 x x 14 x 1 + 1x 14 x x 14 x ) + 7(8x 11 x x 11 x x 11 x x 12 x x 12 x 4 + 1x 12 x x 1 x x 1 x x 1 x x 14 x x 14 x x 14 x 4 ) + (8x 21 x 2 + 1x 21 x + 17x 21 x 4 + 8x 22 x 1 + 1x 22 x + 1x 22 x 4 + 1x 2 x 1 + 1x 2 x x 2 x x 24 x 1 + 1x 24 x x 24 x ) + 8(8x 21 x x 21 x x 21 x x 22 x x 22 x 4 + 1x 22 x x 2 x x 2 x x 2 x x 24 x x 24 x x 24 x 4 ) + (8x 1 x x 1 x x 1 x x 2 x x 2 x 4 + 1x 2 x x x x x x x x 4 x x 4 x x 4 x 4 ) s. t. x 11 + x 12 + x 1 + x 14 = 1 x 21 + x 22 + x 2 + x 24 = 1 x 1 + x 2 + x + x 4 = 1 x 41 + x 42 + x 4 + x 44 = 1 x 11 + x 21 + x 1 + x 41 = 1 x 12 + x 22 + x 2 + x 42 = 1 x 1 + x 2 + x + x 4 = 1 x 14 + x 24 + x 4 + x 44 = 1 x ij = 1, i = 1,..., 4, j = 1,..., 4. Ratkaisu on sellainen, että kauppa 1 sijoitetaan paikkaan 1, kauppa 2 paikkaan 4, kauppa paikkaan ja kauppa 4 paikkaan 2 kohdefunktion arvon ollessa 26. Yleistetty järjestelyongelma. Yleistetään tavallista järjestelyongelmaa antamalla jompaan kumpaan luokkaan kuuluvien kohteiden saada useampia kuin yksi pari toisesta luokasta. Saadaan ongelma opt s. t. c ij x ij i j x ij = 1, j s ij x ij b j, i x ij = 1, i, j, i = 1,..., m j = 1,..., n 8

84 jossa b j : suureen j kapasiteetti s ij : j:n resurssinkulutus, kun i ja j muodostavat parin c ij : kustannus tai hyöty, kun i ja j muodostavat parin. Esimerkki.8. Kanadan rannikkovartiosto ylläpitää majakoita ja merimerkkejä ja sen on määrättävä alustensa sijoittelu. Rannikko on jaettu useaan alueeseen ja eri alukset poikkeavat varustukseltaan ja kustannuksiltaan paljon toisistaan. Tarkastellaan pientä esimerkkiä, jossa aluksen 1 (Estevan), 2 (Mackenzie) ja (Skidegate) on hoidettava 6 aluetta. Kukin alus on käytettävissä viikon ajan vuodessa ja oheisessa taulukossa laiva alue 1 alue 2 alue alue 4 alue alue 6 1 kustannus aika kustannus aika kustannus aika on esitetty kunkin aluksen vuodessa tarvitsema viikkomäärä eri alueiden hoitoon sekä tämän vaatima kustannus tuhansina Kanadan dollareina. Käytettäessä päätösmuuttujia { x ij = 1, jos alue i annetaan laivalle j, muuten saadaan yleistetty järjestelyongelma min 1x x x 1 + x x x 2 + 1x 1 + 2x x + x x x 4 + 4x 1 + x 2 + 4x + 2x x 62 + x 6 s. t. x 11 + x 12 + x 1 = 1 x 21 + x 22 + x 2 = 1 x 1 + x 2 + x = 1 x 41 + x 42 + x 4 = 1 x 1 + x 2 + x = 1 x 61 + x 62 + x 6 = 1 x 11 + x x x x 1 + 9x 61 1x x x 2 + 1x x x 62 7x 1 + 1x 2 + 1x + 1x 4 + 8x + 12x 6 x ij = 1, i = 1,..., 6; j = 1,...,, 81

85 jonka ratkaisu on antaa alueet 1, 4 ja 6 alukselle 1, alueet 2 ja alukselle 2 sekä alueen alukselle. Kokonaiskustannukset ovat 48$. Paritusmallit. Järjestelyongelmissa on tähän asti sovitettu yhteen kahden eri joukon alkioita. Oletetaan nyt, ettei tällaista sovitettavien alkioiden kahtiajakoa tehdä, vaan kaikki joukon alkiot käyvät kaikkien joukon muiden alkioiden pariksi. Kun käytetään päätösmuuttujia { 1, jos joukon alkioista i ja j muodostetaan pari, i < j x ij =, muuten ja joukossa on 2n alkiota, niin saadaan yhteensovitusongelma (matching) min s. t. 2n 1 i=1 2n j=i+1 i 1 x ki + k=1 c ij x ij 2n j=i+1 x ij = 1, i = 1,..., 2n x ij = 1, i = 1,..., 2n 1; j = i + 1,..., 2n. Esimerkki.9. Tehdas tuottaa kaiuttimia ja on saanut valmiiksi 2n tuotetta. Vaikka pyritäänkin tasaiseen laatuun, on tuotteissa pieniä eroja ja pyritään valitsemaan kaiutinparit, jotka sopivat mahdollisimman hyvin toisilleen. Sitä varten on mitattu kullekin kaiutinparille i < j särö c ij. Edellisessä mallissa minimoidaan silloin yhteenlaskettua säröä ja rajoituksilla varmistetaan se, että kullekin kaiuttimelle tulee tarkalleen yksi pari. Toinen mahdollinen optimointikriteeri olisi tietenkin parien maksimisärön minimointi. Järjestelyongelmien ratkaisun kompleksisuudet riippuvat suuresti käytetystä mallista. Lineaariset järjestelyongelmat ratkeavat helposti virtausongelmina ja niitä varten on kehitetty vieläkin tehokkaampia erikoisalgoritmeja. Kvadraattinen järjestelyongelma taas on erittäin vaikea ratkaista tarkasti, ja tavallisesti joudutaan turvautumaan lukujen 4.6 ja 4.7 likimääräisiin menetelmiin. Kohtuullisen kokoiset yleistetyt järjestelyongelmat voidaan ratkaista tarkasti lukujen menetelmillä, mutta niiden ratkaiseminen on huomattavasti työläämpää kuin tavallisten järjestelyongelmien. Yhteensovitusongelmat ovat vaikeampia ratkaista kuin järjestelyongelmat, mutta kohtalaisen suuretkin ongelmat ratkeavat tehtävää varten kehitetyillä erikoisalgoritmeilla.. Kauppamatkustaja- ja reititysongelmat Tavallisimpia diskreettejä optimointiongelmia ovat töiden, asiakkaiden jne. järjestäminen optimaaliseksi jonoksi tai reitiksi. Joskus riittää yksi reitti, mutta normaalisti tarvitaan useita. 82

86 Kauppamatkustajaongelma. Yksinkertaisin ja kuuluisin reititysongelma on kauppamatkustajaongelma (traveling salesman problem). Siinä kauppamatkustajan on määrättävä pituudeltaan lyhin reitti, jossa hän käy tarkalleen kerran kussakin n kaupungista ja palataan takaisin lähtöpisteeseen Kuva 4: Piirilevyn reiät Esimerkki.1. Tarkastellaan piirilevyyn tarvittavien reikien optimaalista porausta. Käytännön ongelmissa saattaa olla kyse usean sadan reiän porauksesta ja reikien kootkin voivat vaihdella. Oheisessa kuvan 4 pienessä esimerkissä on porattava 1 samanpaksuista reikää. Tällöin saadaan porauspisteiden euklidisiksi etäisyyksiksi d ij ( -metriikka olisi itse asiassa parempi) i/j Reikien optimaalisen porausjärjestyksen määrääminen on nyt 1 kaupungin symmetrinen kauppamatkustajaongelma. Erilaisia reittejä on tehtävässä 9!/2 = kappaletta. Eräs näistä on kuvan esittämä reitti , jonka pituus on 92.8, mutta optimireitti on 11 yksikköä lyhyempi. 8

87 Kuva : Reitti Epäsymmetrisessä kauppamatkustaongelmassa eivät kaikki etäisyydet toteuta symmetrisyysehtoa d ij = d ji. Tarkastellaan aluksi symmetristä kauppamatkustajongelmaa. Silloin on monta mahdollisuutta formuloida ongelma matemaattiseksi malliksi, mutta tavallisimmin käytetään päätösmuuttujia { 1, jos reitti yhdistää kaupungit i ja j, i < j x ij =, muuten. Symmetrisyydestä johtuen riittää määrätä tapaukset i < j. Jos reitti kulkee välillä i j, niin se kulkee myös välillä j i. Reitin pituus on nyt ja ehto n 1 n i=1 j=i+1 d ij x ij i 1 n x ki + x ij = 2, k=1 j=i+1 i = 2,..., n takaa sen, että kuhunkin kaupunkiin i tullaan kerran ja sieltä lähdetään kerran. Tämä ei kuitenkaan valitettavasti riitä, sillä sen toteuttavassa ratkaisussa voi olla useampia erillisiä, vähintään kaupungin muodostamia alisyklejä, esimerkiksi piirilevyesimerkissä.1 saadaan kuvan 6 kaltainen tilanne. 84

88 Kuva 6: Piirilevyn alisyklejä Tarvitaan siis lisäehtoja alisyklien eliminointiin. Merkitään sitä varten S: joukon {1,..., n} alijoukko, jossa on vähintään ja enintään n alkiota. Silloin jokaisen kauppamatkustajareitin täytyy kulkea joukon S ja muiden kaupunkien joukon välin vähintään kahdesti eli x ij + x ij 2. i S i/ S j S j / S Tällainen rajoitus täytyy muodostaa jokaista joukkoa S kohti, jossa on ainakin alkiota ja korkeintaan n alkiota ja näitä on ( ) ( ) n n ( ) n n kappaletta. Kymmenen kaupungin tapauksessa rajoituksia on peräti 912 kappaletta. Formuloinniksi saadaan siis min s. t. d ij x ij i j>i x ki + x ij = 2, k<i j>i x ij + i S j / S, j>i x ij = 1, j > i. i/ S, j>i j S i = 1,..., n x ij 2, S n Epäsymmetrisessä tapauksessa täytyy erotella toisistaan tapaukset, jossa kuljetaan väli eri suuntiin, sillä etäisyydetkin voivat olla erilaiset. Päätösmuuttujiksi valitaan siksi { 1, jos reitti kulkee kaupungista i kaupunkiin j, i j x ij =, muulloin. 8

89 Jokaiseen kaupunkiin tullaan kerran ja sieltä lähdetään kerran, joten saadaan järjestelyongelman rajoitukset. Lisäksi alisyklit voivat nyt koostua kahdesta kaupungista. Saadaan formulointi min s. t. d ij x ij i j i x ij = 1, j x ij = 1, i i = 1,..., n j = 1,..., n x ij 1, 2 S n 2 i S j / S x ij {, 1}, i = 1,..., n, j = 1,..., n. Edellisillä tavoilla tarvitaan hirmuinen määrä rajoituksia estämään alisyklit. Sen takia erityisesti lukujen 4.6 ja 4.7 likimääräisissä ratkaisumenetelmissä on edullista muuntaa kohdefunktio epälineaariseksi. Jos valitaan päätösmuuttujiksi { 1, jos k:nneksi käyty kaupunki on i y ki =, muuten, niin saadaan kauppamatkustajaongelma tehtyä kvadraattiseksi järjestelyongelmaksi min s. t. n i=1 n d ij j=1 k=1 n y ki = 1, i=1 n y ki = 1, k=1 n y ki y k+1,j k = 1,..., n i = 1,..., n y ki {, 1}, k = 1,..., n; i = 1,.., n. Tässä usein ymmärretään, että y n+1,j merkitsee arvoa y 1j. Usean reitin muodostaminen. Jakeluongelmissa täytyy usein muodostaa useampia kuin yksi reitti. Tarkastellaan kuorma-autojen reititystä, jossa ensin täytyy määrätä kunkin jakeluauton käyntikohteet sekä sitten vielä niiden järjestys. Asiakkaita voi olla 1 kappaletta, mutta seuraava esimerkki on paljon pienempi. Esimerkki.11. Tarkastellaan sellaista jakeluautojen reititystä, jossa ajettu kokonaiskilometrimäärä on mahdollisimman pieni. Tutkitaan 2 asiakkaan palvelua yhdestä varastopisteestä. Tiedetään kunkin asiakkaan i tarve kuorma-autolastin murto-osina f i. Jos oletetaan, että asiakkaiden tarpeet ovat 86

90 asiakas f i asiakas f i asiakas f i asiakas f i ja että jakelupisteiden sijainteja kuvassa 7 esittävät ympyrät ja origossa sijaitsevaa varastoa neliö (merkitään pisteeksi ), niin voidaan muodostaa erilaisia jakelureittejä. Esimerkiksi ensimmäiselle autolle voidaan antaa asiakkaat 1, 2 ja, jotka tarvitsevat yhteensä.97 autolastillista tavaraa Kuva 7: Jakelupisteiden sijainnit Tällaisia ongelmia on vaikea formuloida matemaattisesti, mutta päätösmuuttujiksi voidaan valita { 1, jos asiakas i annetaan autolle j z ij =, muuten 87

91 ja 2 asiakkaan allokointi 7 reitille voidaan esittää tehtävän min s. t. 7 θ j (z) j=1 7 z ij = 1, i = 1,..., 2 j=1 2 i=1 f i z ij 1, j = 1,..., 7 z ij {, 1}, i = 1,..., 2, j = 1,..., 7 ratkaisuna. Tässä θ j (z) esittää autolle j tulevan reitin minimipituutta. Sen arvolle ei valitettavasti ole olemassa eksplisiittistä kaavaa, vaan se on määrättävä ratkaisemalla kyseinen kauppamatkustajaongelma. Kohdefunktio on siis varsin kaukana lineaarisesta. Tarkkaa ratkaisua on jokseenkin mahdotonta saada selville, mutta ongelman likimääräistä ratkaisemista tutkitaan luvussa Sijoittelu ja verkon suunnittelu Sijoittelumallit. Tarkastellaan luvussa.1 esitettyä kiinteiden aloituskustannusten soveltamista toimipisteen (tehdas, myymälä jne) sijoitteluun (facility location, plant location, warehouse location). Valitaan siis annetusta listasta ne paikat, joihin toimipiste kannattaa perustaa, jotta kustannukset minimoituisivat. Kustannuksia ovat kiinteät perustuskustannukset ja vaihtuvat kustannukset, joilla hoidetaan asiakkaiden palvelu Kuva 8: Käsittelypisteiden mahdolliset sijainnit 88

92 Esimerkki.12. Tutkitaan Tmark-nimisen firmaan puhelimitse saapuvien tilausten käsittelypisteiden sijoittelua. Puhelun hinta riippuu soittopaikan j ja käsittelypisteen i sijainnista. Pyritään minimoimaan yhteenlasketut soittokustannukset ja käsittelypisteiden kiinteät kustannukset, kun kysessä on kuvan 8 mukaiset 14 aluetta sekä 8 mahdollista käsittelypistettä ja tiedetään soittokustannukset r ji sekä päivittäiset soittomäärät d j alue k1 k2 k k4 k k6 k7 k8 määrä alueista j. Lisäksi käsittelypisteiden kiinteiden kustannusten f i arvellaan olevan erilaisista kiinteistö- ja työvoimakustannuksista johtuen 24, 7, 6, 16,, 46, 9 ja 2 dollaria päivässä. Jokainen käsittelypiste pystyy hoitelemaan 1 ja välillä olevan puhelumäärän päivässä. Otetaan käyttöön päätösmuuttujat { y i = 1, jos käsittelypiste i otetaan käyttöön, muuten x ij :pisteen i käsittelemä osuus alueen j asiakkaista. 89

93 Silloin saadaan optimointitehtävä min s. t r ij d j x ij + f i y i i=1 j=1 i=1 8 x ij = 1, j = 1,..., 14 i=1 14 1y i d j x ij y i, i = 1,..., 8 j=1 x ij, i = 1,..., 8; j = 1,..., 14 y i = 1, i = 1,..., 8. Optimiratkaisu on perustaa keskukset 4 ja 8 kustannusten ollessa 11$ päivässä. Alueet 1, 2, 4,, 6 ja 7 palvellaan keskuksessa 4 ja loput keskuksessa 8. Jos haluttaisiin, että vain yksi piste käsittelee kunkin alueen tilauksia, täytyy myös vaatia että muuttujien x ij arvot ovat binäärisiä. Verkon suunnittelu. Sijoittelumalleissa tarkasteltiin mitkä verkon solmut kannattaa avata. Verkon suunnittelussa puolestaan päätetään mitkä nuolet kannattaa avata. Luvussa 2.1 esitettyyn tavalliseen minimikustannusvirtausmalliin lisätään vain binääriset päätösmuuttujat y ij, joiden avulla hoidetaan kiinteät kustannukset t ij nuolen (i, j) käyttöönotosta. Saadaan siis verkon suunnitteluongelma (fixed charge network flow) min c ij x ij + f ij y ij s. t. (i,j) E (i,j) E x kj x ik = b k, k Q (k,j) E (i,k) E x ij u ij y ij, (i, j) E y ij = 1, (i, j) E, jossa ylärajat u ij täytyy taas määrätä riittävän suuriksi. Esimerkki.1. Tarkastellaan viemäriverkoston suunnittelua. Kun kaupunki kasvaa, täytyy rakentaa uusia viemäreitä ja jäteveden puhdistuslaitoksia. Kumpiinkin kustannuksiin voidaan ottaa kiinteä osa ja muuttuva osa. Viemäröinnissä muuttuvat kustannukset aiheutuvat suurempikokoisista putkista, joita tarvitaan kapasiteetin kasvaessa. Oletetaan seuraavassa, että kaupunkiin rakennetaan oheisen kuvan 9 solmujen 1 7 esittämät uudet lähiöt, joiden suunniteltu asukasluku tuhansina on esitetty solmun vieressä. 9

94 Kuva 9: Viemäriverkostoesimerkin verkko Solmuihin, 7 ja 8 voidaan rakentaa puhdistuslaitokset, joista jätevesi syötetään sillä kohdalla olemassa olevaan viemäriverkkoon. Koska jäteveden määrä on verrannollinen väestömäärään, voidaan väkimäärää pitää solmusta lähtevänä jätevesimääränä. Viemärien rakennuskustannukset ovat oheisen taulukon mukaiset käytettäessä yksikkönä tuhatta dollaria. nuoli kiinteä kustannus muuttuva kustannus (1,2) (1,) (2,) 2 22 (2,4) 7 8 (,4) 61 4 (4,) (4,8) 78 6 (,6) (,7) 8 1 (6,7) 6 (6,8) 6 94 (7,4) Kaikilla muilla nuolilla jätevesi virtaa painovoiman avulla, mutta välillä (4, ) täytyy käyttää pumppausta. Puhdistuslaitosten kustannukset ovat 91

95 solmu kiinteä kustannus muuttuva kustannus ja ne tulevat solmuille. Ottamalla käyttöön ylimääräinen solmu 9, ja sinne nuolet solmuista, 7 ja 8, voidaan siirtää nämä kustannukset nuolille ja verkko on silloin kuvan 4 verkko Kuva 4: Verkko, kun on otettu käyttöön ylimääräinen solmu Tässä keinotekoiset nuolet on piirretty katkoviivoilla. Sovelluksessa ei ole annettu nuolten kapasiteetteja, mutta ne saadaan helposti arvioitua. Esimerkiksi välillä 2 voi virrata korkeintaan solmusta 1 tuleva 27 yksikköä ja solmusta 2 tuleva yksikköä eli yhteensä yksikköä jätevettä. Kun merkitään x ij :virtaus nuolella (i, j) { 1, jos nuoli (i, j) otetaan käyttöön y ij =, muuten, 92

96 saadaan ongelma min 21x 12 + x x 2 + 8x x 4 + 1x x 4 + 6x x 6 + 1x 7 + 6x x x x x y 12 + y 1 + 2y 2 + 7y y 4 + 8y y y y 6 + 8y 7 + y y y y y 89 s. t. x 12 + x 1 = 27 x 2 + x 24 x 12 = x 4 + x 9 x 1 x 2 x 4 = 14 x 4 + x 48 x 24 x 4 x 74 = 6 x 6 + x 7 = 21 x 67 + x 68 x 6 = 8 x 74 + x 79 x 7 x 67 = 1 x 89 x 48 x 68 = x 9 x 79 x 89 = 122 x 12 27y 12 x 67 29y 67 x 24 y 24 x 79 42y 79 x 4 18y 4 x 2 y 2 x 7 21y 7 x 9 122y 9 x 74 42y 74 x 6 21y 6 x 1 27y 1 x 68 29y 68 x 4 44y 4 x y 89 x y 48 y ij = 1, (i, j). Optimaalinen viemäriverkosto koostuu nuolista (1, ), (2, ), (4, ), (, 7) ja (6, 7) sekä puhdistusasemista ja 7 kokonaiskustannusten ollessa 1 71 $..7 Töidenjärjestelyongelmat Aikaisemmin on luentomonisteen Matemaattinen optimointi 1 luvuissa 2.,.4, sekä tämän luentomonisteen luvuissa 1.7 ja. tarkasteltu resurssien dynaamista allokointia ajan funktiona (scheduling). Nyt tarkastellaan töidenjärjestelyä (processor scheduling), jossa järjestetään n työtä kulkemaan annettujen m prosessointipisteen (koneen) kautta. Tarkastellaan aluksi yhden koneen (m = 1) tapausta ja oletetaan, että vain yhtä työtä tehdään kerrallaan ja ettei aloitettua työtä voida keskeyttää. Kyseessä on siis optimaalisen suoritusjärjestyksen määrääminen n! eri mahdollisuudesta. Merkitään 9

97 p j : työn j arvioitu käsittelyaika r j : työn j vapautumisaika (release time), jolloin sen suoritus voi (on voinut) alkaa laskettuna nykyhetkestä d j : työn j määräaika (due date), jolloin sen tulee olla valmiina laskettuna nykyhetkestä. Päätösmuuttujiksi voidaan valita x j : työn j aloitushetki, jolloin sen suoritus alkaa, laskettuna nykyhetkestä. Selvästikin saadaan rajoitukset x j max{, r j }, j = 1,..., n. Sen lisäksi on huolehdittava, ettei minkään kahden työn suoritus mene päällekkäin. Jos työ j suoritetaan ennen työtä k, on oltava x j + p j x k ja jos työ k suoritetaan ennen työtä j on oltava x k + p k x j. Tarkalleen toisen näistä ehdoista on oltava voimassa ja se voidaan hoitaa ottamalla käyttöön binääriset muuttujat { 1, jos työ j tehdään ennen työtä k y jk =, jos työ k tehdään ennen työtä j. Silloin saadaan rajoitukset x j + p j x k + M(1 y jk ), j < k x k + p k x j + My jk, j < k, joiden on kummankin oltava voimassa ja joissa M on riittävän suuri luku. Määräajoista saataisiin tietenkin rajoitukset x j + p j d j, mutta niitä käytetään tavallisesti optimointikriteerien muodostamiseen. Voihan hyvin käydä niin, ettei kaikkia töitä ehditä suorittamaan määräaikaan mennessä. Tavallisimpia kriteerejä ovat 94

98 myöhäisin valmistumisaika max j {x j + p j } j (x j + p j ) 1 keskimääräinen valmistumisaika n pisin käsittelyaika (flow time) max j {x j + p j r j } j (x j + p j r j ) 1 keskimääräinen käsittelyaika n suurin viive (lateness) max j {x j + p j d j } j (x j + p j d j ) 1 keskimääräinen viive n suurin myöhästyminen (tardiness) max j {max{, x j + p j d j }} keskimääräinen myöhästyminen 1 n j (max{, x j + p j d j }) Jos jokin määräaika on ehdoton, voidaan se tietenkin pistää rajoitukseksi ja silloin puhutaan takarajasta (deadline). Kun täytyy valmistaa vain tietty kiinteä määrä tavaraa, voi valmistumisaika olla hyvä suorituskyvyn mittari. Jos taas on kyse jatkuvasta prosessista, käsittelyaika saattaa olla parempi. Silloinhan minimoidaan käsiteltävänä olevien töiden kestoa, jolloin varastotilan tarve minimoituu. Viipeessä huomioidaan sekä ennen että jälkeen määräajan valmistuneet työt, mutta myöhästymisessä vain sen jälkeen valmistuneet työt. Näitä kriteerejä voidaan käyttää kun määräajat ovat ehdottoman tärkeitä. Edellä olevat epälineaariset kohdefunktiot, joissa minimoidaan maksimia, voidaan palauttaa lineaarisiksi luentomonisteen Matemaattinen optimointi 1 luvun 4.6 keinoin. Myöhästymisessä on sitä ennen otettava käyttöön ei-negatiiviset muuttujat t j, jotka toteuttavat ehdon t j x j + p j d j. Esimerkki.14. (Yhden koneen töidenjärjestely) Hieman ennen lukukauden alkua yliopiston professorit toimittavat kopiokeskukselle luentomonisteensa, ja ilmoittavat siitä tarvittavan kappalemäärän sekä määräajan, jolloin kaiken tulee olla valmiina. Kopiokeskuksen on organisoitava työnsä optimaalisesti, kun käytettävissä on yksi kopiokone. Kun käytetään taulukon datoja, työ p j r j d j niin huomataan, että työt 4 ja ovat valmiiksi myöhässä. Mikäli valitaan optimointikri- 9

99 teeriksi keskimääräinen valmistumisaika, saadaan tehtävä min 1 6 [(x ) + (x 2 + 8) + (x + ) + (x 4 + 1) + (x + 4) + (x )] s. t. x x 2 + M(1 y 12 ) x x 1 + My 12 x x + M(1 y 1 ) x + x 1 + My 1 x x 4 + M(1 y 14 ) x x 1 + My 14 x x + M(1 y 1 ) x + 4 x 1 + My 1 x x 6 + M(1 y 16 ) x x 1 + My 16 x x + M(1 y 2 ) x + x 2 + My 2 x x 4 + M(1 y 24 ) x x 2 + My 24 x x + M(1 y 2 ) x + 4 x 2 + My 2 x x 6 + M(1 y 26 ) x x 2 + My 26 x + x 4 + M(1 y 4 ) x x + My 4 x + x + M(1 y ) x + 4 x + My x + x 6 + M(1 y 6 ) x x + My 6 x x + M(1 y 4 ) x + 4 x 4 + My 4 x x 6 + M(1 y 46 ) x x 4 + My 46 x + 4 x 6 + M(1 y 6 ) x x + My 6 x 1 2, x 2 1, x 12, x 4 1, x, x 6 2 x i, i = 1,..., 6, y ij {, 1} ja sen ratkaisuksi järjestys , jonka aloitusajat ovat x 1 = 2, x 2 = 7, x =, x 4 = 1, x =, x 6 = 7 keskimääräisen valmistumisajan ollessa Minimoitaessa suurinta viivettä min max{(x ), (x ), (x + 72), (x ), (x ), (x )}, voidaan kohdefunktio linearisoida muotoon min f s. t. f x f x f x 69 f x f x + 1 f x 6 42 ja tähän on lisättävä kaikki edellisen tehtävän rajoitukset. Ratkaisuksi saadaan työjärjestys , jossa aloitusajat ovat x 1 = 22, x 2 = 14, x = 2, x 4 =, x = 1 96

100 ja x 6 = 4 suurimman viipeen 24 sattuessa työlle 1. Keskimääräinen valmistusaika on nyt kasvanut arvoon Voidaan osoittaa, että kriteerit keskimääräinen valmistumisaika, keskimääräinen käsittelyaika ja keskimääräinen viive ovat ekvivalentteja, ts. niitä käytettäessä saadaan identtiset työjärjestykset. Esimerkiksi 1 n n (x j + p j r j ) = 1 n j=1 n (x j + p j ) 1 n j=1 n r j, joten keskimääräinen valmistumisaika ja keskimääräinen käsittelyaika eroavat vain vakiolla toisistaan. Edelleen työjärjestys, joka minimoi suurimman viiveen minimoi myös suurimman myöhästymisen. Jos nimittäin ainakin yksi työ on myöhässä kaikissa ratkaisuissa, kriteerit yhtyvät. Jos on olemassa työjärjestyksiä, joissa mikään työ ei ole myöhässä, niin ne kaikki ovat optimaalisia suurimman myöhästymisen suhteen. Näiden joukossa on se, jolla saatiin minimaalinen suurin viive. Job shop ja flow shop ongelmat. Job shop -ongelmassa n työtä täytyy järjestää optimaalisesti m koneelle, kun kullakin työllä on annettu järjestys, jossa sen on käytävä koneet läpi. Flow shop -ongelmassa taas järjestys, jossa koneet käydään läpi, on sama kaikille töille. Edelleenkin yhdellä koneella voidaan tehdä vain yhtä työtä samanaikaisesti eikä aloitettua työtä saa keskeyttää. Mikäli koneita on vähintään 4, kannattaa ratkaisemista yrittää luvun 4 heuristisin menetelmin. Optimointikriteerinä voidaan käyttää mitä tahansa edellä mainituista ja päätösmuuttujiksi täytyy valita aloitushetket kullakin koneella x jk : työn j aloitushetki koneella k. Se, että työn j täytyy käydä koneella k ennen kuin koneella l voidaan hoitaa edeltäjärajoituksella (precedence constraint) x jk + p jk x jl. Lisäksi täytyy huolehtia siitä, ettei millään koneella tehdä yhtäaikaa kahta työtä. Sitä varten tarvitaan päätösmuuttujat { 1, jos työ j tehdään ennen työtä l koneella k y jlk =, muuten. Konfliktirajoitukset, joilla estetään tämä päällekkäisyys, voidaan kirjoittaa muotoon x jk + p jk x lk + M(1 y jlk ) x lk + p lk x jk + My jlk kaikille töille j ja l, jotka molemmat vaativat prosessointia koneella k. Tässä taas M on jokin riittävän iso vakio. 97 j=1

101 Esimerkki.1. Työpisteinä ovat 1: taonta, 2: koneistus, : hiominen, 4: kiillotus, : poraus, 6: sähköisyyden poisto ja 7: lämpökäsittely. Järjesteltäviä töitä ovat 1: valumuotti, 2: kampiakseli ja : polttoainesuutin. Työasemien järjestykset ja työn j käsittelyajat p jk minuuteissa koneilla k ovat 1. valumuotti työasema 1 työasema 2 työasema työasema 4 työasema kampiakseli työasema 7 työasema 1 työasema 2 työasema polttoainesuutin työasema 2 työasema työasema työasema 6 työasema Optimointikriteerinä voidaan käyttää mitä tahansa edellä mainituista, mutta oletetaan, että halutaan minimoida myöhäisin valmistumisaika, ts. halutaan, että työt saadaan mahdollisimman pian valmiiksi. Päätösmuuttujiksi täytyy valita aloitushetket kullakin koneella x jk : työn j aloitushetki koneella k, jolloin linearisoimaton kohdefunktio on min max{x , x 2 + 6, x 4 + 2}. Työlle 1 saadaan oikea koneiden järjestys, kun x 11 + x 12 x x 1 x x 14 x x

102 Kaiken kaikkiaan syntyy optimointitehtävä min f s. t. f x , f x 2 + 6, f x x 11 + x 12 x x 1 x x 14 x x 16 x 27 + x 21 x x 22 x x 2 x 2 + x x + 9 x x + 2 x 6 x x 4 x 11 + x 21 + M(1 y 121 ) x x 11 + My 121 x x 22 + M(1 y 122 ) x x 12 + My 122 x x 2 + M(1 y 12 ) x 2 + x 12 + My 12 x x 2 + M(1 y 22 ) x 2 + x 22 + My 22 x x 2 + M(1 y 12 ) x x 1 + My 12 x x + M(1 y 1 ) x + 9 x 1 + My 1 x x + M(1 y 2 ) x + 9 x 2 + My 2 x x 4 + M(1 y 14 ) x x 14 + My 14 x x 6 + M(1 y 16 ) x x 16 + My 16 x jk, j, k y jlk = 1, j, l, k, jonka eräs ratkaisu on x 11 = 2, x 12 =, x 1 = 1, x 14 = 42, x 16 = 87, x 27 =, x 21 =, x 22 = 6, x 2 = 67, x 2 =, x =, x = 14, x = 16, x 4 = 17. Tällöin viimeisenkin työn valmistuminen kestää 88 minuuttia. 99

103 4 Diskreetit optimointimenetelmät Kokonaislukuoptimointitehtävät ovat tavallisimpia diskreettejä optimointitehtäviä. Niiden ratkaisemisessa ilmenee joukko ongelmia, joita ei aiemmin ole ollut. Puhtaassa kokonaislukuoptimointitehtävässä sallittuja pisteitä on vain äärellinen määrä, jos sallittujen pisteiden joukko on rajoitettu toisin kuin tavallisessa lineaarisessa optimointitehtävässä. Siksi on luonnollista kuvitella, että kokonaislukuoptimointi olisi helpompaa. Näin ei valitettavasti ole asian laita. Esimerkki 4.1. Tarkastellaan hyvin yksinkertaista esimerkkiä max 21x x 2 s. t. 7x 1 + 4x 2 1 x 1, x 2 N. Sillä on kuusi sallittua pistettä (, ), (, 1), (, 2), (, ), (1, ) ja (1, 1), joista (, ) on optimaalinen. Ensimmäisenä ratkaisukeinona tulee mieleen ratkaista se ilman kokonaislukurajoituksia, ja pyöristää sitten tulos lähimmäksi kokonaislukuvektoriksi. Jos näin menetellään, saadaan Simplex-menetelmän mukaiseksi ratkaisuksi (1/7, ), jota lähin sallittu piste on (1, ). Tämä on kuitenkin varsin kaukana todellisesta optimista. Vielä vakavampi vaikeus, joka esiintyy kokonaislukuoptimointitehtävissä on se, että ei ole olemassa mitään helppoa tapaa määrätä, onko annettu sallittu piste optimiratkaisu. Tämä on tärkeä ero kokonaislukuoptimoinnin ja tavallisen lineaarisen optimoinnin välillä. Esimerkiksi yritetään tutkia, onko (1, 1) yllä olevan tehtävän optimi. Sen testaamiseksi tutkitaan, onko se lokaali optimi, toisin sanoen tutkitaan, pieneneekö kohdefunktion arvo viereisissä sallituissa kokonaislukupisteissä (1 ± d, 1 ± e), missä d, e = 1,, 1. Havaitaan, että pari (1, 1) on parempi kuin mikään viereinen kokonaislukupiste olematta kuitenkaan optimi. Näin ollen sallittu piste voi olla lokaali optimi olematta globaali optimi. Tavallisessa lineaarisessa optimoinnissahan riittää lokaali optimaalisuus takaamaan globaalin optimin. Koska kokonaislukuoptimoinnissa on kyse diskreeteistä askeleista sallitusta pisteestä toiseen, ei herkkyysanalyysi siinä onnistu kuten lineaarisessa optimoinnissa. Duaaliongelma pystytään muodostamaan, mutta primääritehtävän ja duaalitehtävän kohdefunktioiden optimiarvot eivät yleensä ole yhtä suuria. Niiden erotusta kutsutaan duaalisuusaukoksi (duality gap). Kokonaislukuoptimointitehtävän ratkaisu on aina työläs. Siksi ongelman formuloinnissa ja ratkaisussa kannattaa kiinnittää huomiota seuraaviin asioihin. 1. Pidetään kokonaislukumuuttujien määrä mahdollisimman pienenä. Yksi tapa tämän toteuttamiseen on poistaa kokonaislukurajoitus muuttujilta, joiden arvo on vähintään 2. 1

104 2. Yritetään määrätä kokonaislukumuuttujille tiukat ala- ja ylärajat.. Toisin kuin lineaarisessa optimoinnissa pienentävät uudet rajoitukset yleensä ratkaisuaikaa. 4. Huomattaviin säästöihin päästään, jos tyydytään likimääräiseen ratkaisuun. Esimerkiksi voidaan olla tyytyväisiä, jos päästään % päähän jatkuvan mallin tuottamasta optimista. Kokonaislukuoptimointitehtävän ratkaisussa käytetään yleensä yhdistettynä kolmea strategiaa: osiinjakoa, relaksaatiota ja luotausta. Merkitään tehtävän P sallittujen pisteiden joukkoa suureella M(P ). Tehtävän P jako osiin tapahtuu seuraavasti. P jakautuu alitehtäviin P 1,..., P q, jos 1. jokainen P :n sallittu piste on tarkalleen yhden alitehtävän sallittu piste, 2. jokaisen alitehtävän kukin sallittu piste on P :n sallittu piste. Esimerkki 4.2. max 28x x 2 s. t. 14x 1 + 6x 2 2 x 1 N, x 2 N voidaan jakaa kahdeksi alitehtäväksi max 28x x 2 s. t. 14x 1 + 6x 2 2 x 2 2 x 1 N, x 2 N max 28x x 2 s. t. 14x 1 + 6x 2 2 x 2 x 1 N, x 2 N, koska x 2 / (2, ). Relaksoinnissa lievennetään rajoituksia. Tavallisimmin unohdetaan pois kokonaislukurajoitukset, mutta muitakin mahdollisuuksia on. Luotauksessa päädytään tilanteeseen, jossa jokin tehtävä ei enää ole kiinnostava. Tehtävä P on luodattu, jos 1. sillä ei ole sallittua ratkaisua 2. sillä ei ole ratkaisua, jonka kohdefunktion arvo olisi parempi kuin annettu luku z. se itse osoittautuu optimaaliseksi. 11

105 4.1 Täydellinen luettelointi Jos diskreeteissä optimointitehtävissä on vain äärellinen määrä päätösmuuttujien arvoyhdistelmiä, syntyy helposti mielikuva, että voidaan tutkia ne kaikki ja valita niistä paras. Tällaista menettelyä sanotaan täydelliseksi luetteloinniksi ja se toimii hyvin, kun päätösmuuttujien määrä on pieni. Esimerkki 4.. Tarkastellaan esimerkissä.1 ollutta teräksenvalmistusongelmaa min 16 7y y 2 + 8x + 9x x + 6x 6 + x 7 s. t. 7y 1 + 2y 2 + x + x 4 + x + x 6 + x 7 = 1.8 7y y 2 +.8x +.4x y y 2 +.8x +.4x y y x.18 7y y x.12 7y y x y y x y x y x 7 1 x,..., x 7 y 1, y 2 = 1. Tehtävässä on kaksi binäärimuuttujaa y 1 ja y 2, joista kumpikin voi saada arvot ja 1. Yhteensä vaihtoehtoja on 2 2 = 4 kappaletta ja jatkuvien muuttujien x j optimiarvot voidaan helposti ratkaista lineaarisella optimoinnilla jokaisessa tapauksessa. Silloin saadaan y 1 y 2 x x 4 x x 6 x 7 kohdefunktio ja optimiratkaisu löytyy riviltä. Jos binäärimuuttujia y j olisi k kappaletta, täytyisi tutkia 2 k vaihtoehtoa. Jokainen uusi muuttuja kaksinkertaistaa vaihtoehtojen määrän ja tutkittavien tapausten määrä räjähtää. Jos k = 1, niin tapauksia on Jos sekunnissa pystyttäisiin tietokoneella ratkaisemaan 1 12 tapausta, niin koko ongelman ratkaisu veisi sekuntia eli vuotta. Täydellinen luettelointi on siis mahdollista vain silloin, kun päätösvaihtoehtoja on vähän ja syntyneet ongelmat pystytään ratkaisemaan tehokkaasti. 12

106 4.2 Relaksaatiomenetelmä Relaksoinnissa pyritään ratkaisemaan helpompia ongelmia, joissa on kasvatettu sallittujen pisteiden joukkoa lieventämällä rajoituksia tai poistamalla osa niistä kokonaan. Tehtävä P on tehtävän P relaksaatio, jos kohdefunktiot ovat identtiset ja jokainen tehtävän P sallittu piste on myös relaksoidun tehtävän P sallittu piste. Mikäli tehtävällä P ei ole sallittuja pisteitä, ei niitä voi olla alkuperäisellä tehtävälläkään. Relaksoidun tehtävän ratkaisu tuottaa maksimointitapauksessa (minimointitapauksessa) ylärajan (alarajan) alkuperäisen tehtävän kohdefunktion optimiarvolle. Jos relaksoidun tehtävän optimiratkaisu x on sallittu alkuperäisessä tehtävässä, niin se on myös alkuperäisen tehtävän optimi. Jos näin ei ole, voidaan relaksoitu ratkaisu usein pyöristää alkuperäisen tehtävän hyväksi ratkaisuksi x. Esimerkki 4.4. Urheiluseuran kannattajat myyvät markkinoilla seuran logolla varustettuja t-paitoja ja collegepaitoja, joista saadaan 2 ja dollarin tuotot kappaleelta. Kokemuksen mukaan kaikki tuotteet saadaan myytyä. Paidat saadaan lahjoituksina, mutta painatukset suorittavien koneiden vuokrat ovat ja 72. Käytettävissä on neliöjalkaa trikoota, jota yhteen t-paitaan tarvitaan 1. neliöjalkaa ja yhteen collegepaitaan 4 neliöjalkaa. Tuoton maksimoimiseksi valitaan päätösmuuttujat x 1 : valmistettavien t-paitojen lukumäärä x 2 : valmistettavien collegepaitojen lukumäärä { 1, jos t-paitoja valmistetaan y 1 =, muuten { 1, jos collegepaitoja valmistetaan y 2 =, muuten, jolloin ongelmaksi tulee max 2x 1 + x 2 y 1 72y 2 s. t. 1.x 1 + 4x 2 x 1 2y 1 x 2 7y 2 x 1, x 2 y 1 {, 1}, y 2 {, 1}. Ratkaisuksi saadaan x 1 = 2, x 2 =, y1 = 1 ja y2 =, josta saadaan optimituotto 4$. Erilaisia relaksaatiomahdollisuuksia ovat esimerkiksi 1

107 1. kaksinkertaistetaan kapasiteetti, jolloin relaksoidut rajoitukset ovat 1.x 1 + 4x 2 6 x 1 4y 1 x 2 1y 2 x 1, x 2 y 1 {, 1}, y 2 {, 1}. Ratkaisu on nyt x 1 = 4, x 2 =, ỹ 1 = 1, ỹ 2 =, tuotto 74$. 2. pudotetaan pois ensimmäinen rajoitus, jolloin relaksoidut rajoitukset ovat x 1 2y 1 x 2 7y 2 x 1, x 2 y 1 {, 1}, y 2 {, 1}. Ratkaisu on nyt x 1 = 2, x 2 = 7, ỹ 1 = 1, ỹ 2 = 1, tuotto 498$.. pudotetaan pois kokonaislukurajoitukset, jolloin relaksoidut rajoitukset ovat 1.x 1 + 4x 2 x 1 2y 1 x 2 7y 2 x 1, x 2 y 1 1, y 2 1. Ratkaisu on nyt x 1 = 2, x 2 =, ỹ 1 = 1, ỹ 2 =, tuotto 4$. Tapa 1 ei ole hyvä, sillä se ei helpota ratkaisua millään tavoin. Tavalla 2 ollaan jätetty pois muuttujia toisiinsa sitova rajoitus ja voidaan ratkaista tehtävä kummankin paitalaadun suhteen erikseen. Se tietenkin helpottaa ratkaisua, mutta ei muuten ole oikein järkevä. Kolmas relaksaatiotyyppi on hyödyllisin ja sitä käytetään monissa kokonaislukuoptimointialgoritmeissa. Lineaariset kokonaislukuoptimointitehtävät muuntuvat näin helposti ratkeaviksi lineaarisiksi optimointitehtäviksi. Esimerkkitapauksessa saatu piste on alkuperäisen relaksoimattoman tehtävän sallittu piste ja siis myös alkuperäisen tehtävän ratkaisu. Esimerkki 4.. Tarkastellaan esimerkkiä. (ensiapupoliklinikoiden sijoittelu) ja relaksoidaan binäärimuuttujat muotoon x j 1, j = 1,..., 1. Eräs ratkaisu on silloin x 1 = x 7 = x 2 = x = x 8 = x 1 = 1 x 4 = x = x 6 = x 9 =. 14

108 ja tämä tuottaa kohdefunktiolle arvon 6. Siis vähintään 6 ensiapupoliklinikkaa tarvitaan, sillä relaksaatio tuottaa alarajan alkuperäisen tehtävän kohdefunktiolle. Katsomalla peittorajoitusten muotoa, saadaan alkuperäisen tehtävän sallittu ratkaisu pyöristämällä eikokonaislukuarvot ylöspäin, josta saadaan likimääräinen ratkaisu x 1 = x 7 = x 2 = x = x 4 = x = x 6 = x 8 = x 9 = x 1 = 1. Siis enintään 8 ensiapupoliklinikkaa kymmenestä tarjolla olevasta tarvitaan. Joskus voidaan joutua pyöristämään alaspäin, mutta aina ei selvitä näin yksinkertaisesti. Esimerkiksi luvun. lentokoneiden miehitysongelmassa eivät näin yksinkertaiset pyöristyssäännöt tuota sallittua pistettä. 4. Tiukat relaksaatiot Relaksaatio on tiukka, jos siitä saatava ratkaisu approksimoi hyvin alkuperäistä tehtävää. Saman tehtävän eri formuloinnit saattavat tuottaa hyvin eri tasoisia relaksaatioita. Esimerkki 4.6. Tarkastellaan esimerkkiä 4.4. Jos siinä käytetään vakion M arvoina varmasti riittävän suuria lukuja 1, niin saadaan relaksoitu tehtävä max 2x 1 + x 2 y 1 72y 2 s. t. 1.x 1 + 4x 2 x 1 1y 1 x 2 1y 2 x 1, x 2 y 1 1, y 2 1, jonka ratkaisu on x 1 = 2, x 2 =, ỹ 1 =.2, ỹ 2 = ja optimituotto 989 $. Kohdefunktiolle saatu yläraja poikkeaa nyt varsin paljon optimiarvosta 4 $ eikä näytä mitenkään selvältä, että t-paitojen painatuslaitteisto kannattaa vuokrata ts ỹ 1 = 1. Diskreettejä ja jatkuvia muuttujia yhteen sitovissa rajoituksissa kannattaa siis käyttää mahdollisimman pieniä vakioita M. Edellisen lisäksi voidaan parantaa relaksaation tarkkuutta lisäämällä uusia rajoituksia (ns. leikkaustasoja), joilla leikataan pois osa relaksoidusta sallitusta alueesta, mutta ei kuitenkaan alkuperäisen tehtävän sallittujen pisteiden joukosta. 1

109 Esimerkki 4.7. Tutkitaan esimerkkiä.12 min s. t r ij d j x ij + f i y i i=1 j=1 i=1 8 x ij = 1, j = 1,..., 14 i=1 14 1y i d j x ij y i, i = 1,..., 8 j=1 x ij, i = 1,..., 8, j = 1,..., 14 y i = 1, i = 1,..., 8. Sen mukaan on siis oltava y i 14 j=1 d jx ij eli vaaditaan, että y i on vähintään yhtä suuri kuin käytetyn kapasiteetin suhde kokonaiskapasiteettiin. Välille [, 1] relaksoitu y i voi tällöin saada hyvin pieniä positiivisia arvoja ja se hankaloittaa ratkaisua. Käytetyillä datoilla relaksoitu ratkaisu ỹ 1 =.2, ỹ 2 =., ỹ =., ỹ 4 =.1 ỹ =.11, ỹ 6 =., ỹ 7 =., ỹ 8 =.6 tuottaa kohdefunktiolle arvon 86 $, joka ei 21% pienempänä ole mitenkään hyvä estimaatti optimiarvolle 11 $. Vaikka y i saisikin ei-kokonaislukuarvon, niin ehdoilla x ij y i, i = 1,..., 8, j = 1,..., 14 ei kuitenkaan suljeta pois yhtään alkuperäisen tehtävän sallittua ratkaisua. Näillä lisäehdoilla varustettuna relaksoidun tehtävän ratkaisuksi tulee dramaattisesti parempi tulos ỹ 1 =., ỹ 2 =., ỹ =., ỹ 4 =.7 ỹ =., ỹ 6 =., ỹ 7 =., ỹ 8 = 1., joka tuottaa kohdefunktiolle arvon 1$. Tämä on vain 1.2% todellista optimiarvoa pienempi ja ratkaisussa on lisäksi vain 1 ei-kokonaislukukomponentti entisen neljän asemasta. Tiukin relaksaatio saavutetaan usein Lagrangen relaksaatiolla, jossa siirretään hankalia rajoituksia kohdefunktioon sopivilla Lagrangen kertojilla v i kerrottuina. Tätä operaatiota voidaan kutsua dualisoimiseksi, sillä kyseessä on itse asiassa duaalisen tehtävän käyttö. 16

110 Yleisen epälineaarisen optimointitehtävän Lagrangen duaali on missä kohdefunktio on min f(x) s. t. g(x) h(x) = x X max θ(u, v) s. t. u, θ(u, v) = inf x X {f(x) + ut g(x) + v T h(x)}. Kaikille primääritehtävän sallituille arvoille x ja duaalitehtävän sallituille arvoille (u, v) on voimassa heikko duaalisuusrelaatio f(x) θ(u, v) sillä aina θ(u, v) = inf y X {f(y) + ut g(y) + v T h(y)} f(x) + u T g(x) + v T h(x) f(x). Tästä taas seuraa, että primääritehtävän kohdefunktion arvo on aina suurempi tai yhtä suuri kuin duaalitehtävän kohdefunktion arvo. Toisin kuin lineaarisessa optimoinnissa, ei nyt saada välttämättä aikaiseksi kohdefunktioiden arvojen yhtäsuuruutta. Tällöin näiden erotusta kutsutaan duaalisuusaukoksi (duality gap). Maksimointiongelman duaali on analogisesti max f(x) s. t. g(x) h(x) = x X min θ(u, v) s. t. u, missä θ(u, v) = sup x X {f(x)+u T g(x)+v T h(x)}. Heikko duaalisuuslause on nyt f(x) θ(u, v), missä x on sallittu primääritehtävässä sekä u ja v sallittuja duaalitehtävässä. 17

111 Esimerkki 4.8. Tarkastellaan esimerkin.8 yleistettyä järjestelyongelmaa min 1x x x 1 + x x x x 1 + 2x x + x x x x 1 + x 2 + 4x + 2x x 62 + x 6 s. t. x 11 + x 12 + x 1 = 1 x 21 + x 22 + x 2 = 1 x 1 + x 2 + x = 1 x 41 + x 42 + x 4 = 1 x 1 + x 2 + x = 1 x 61 + x 62 + x 6 = 1 x 11 + x x x x 1 + 9x 61 1x x x 2 + 1x x x 62 7x 1 + 1x 2 + 1x + 1x 4 + 8x + 12x 6 x ij = 1, i = 1,..., 6, j = 1,...,, jossa voidaan dualisoida ensimmäiset kuusi rajoitusta ja saadaan Lagrangen relaksaatio min 1x x x 1 + x x x x 1 + 2x x + x x x x 1 + x 2 + 4x + 2x x 62 + x v 1 (1 x 11 x 12 x 1 ) + v 2 (1 x 21 x 22 x 2 )+ + v (1 x 1 x 2 x ) + v 4 (1 x 41 x 42 x 4 )+ v (1 x 1 x 2 x ) + v 6 (1 x 61 x 62 x ) s. t. x 11 + x x x x 1 + 9x 61 1x x x 2 + 1x x x 62 7x 1 + 1x 2 + 1x + 1x 4 + 8x + 12x 6 x ij = 1, i = 1,..., 6, j = 1,..., v i R, i = 1,..., 6. Heikon duaalisuuslauseen mukaan on relaksaatiotehtävän kohdefunktion arvo kaikilla v j arvoilla pienempi tai yhtä suuri kuin alkuperäinen. Nyt voi siis olla x 11 + x 12 + x 1 1, mutta jos samanaikaisesti v 1, niin kohdefunktion arvo muuttuu. On huomattava, että relaksoidussa tehtävässä säilyvät kokonaislukuvaatimukset, mutta pyritään kuitenkin siihen, että relaksoimalla saatu tehtävä on oleellisesti helpommin ratkeava kuin alkuperäinen. Yllä esiintyy kukin muuttuja vain yhdessä relaksoidussa rajoituksessa, joten tehtävä jakautuu kolmeksi erilliseksi selkäreppuongelmaksi, yksi kunkin aluksen suhteen. Lagrangen relaksaation teho riippuu kertoimien v i numeroarvojen valinnasta. Jos ne ovat lähellä 18

112 duaalitehtävän optimiratkaisua, on relaksaatio tehokas, mutta muuten näin ei välttämättä ole. Jos nyt yllä valitaan v 1 =, v 2 = 2, v = 2, v 4 = 4, v = 4, v 6 =, niin relaksoidun tehtävän kohdefunktion optimiarvo on 47, mikä on huomattavasti lähempänä todellista arvoa 48 kuin kokonaislukuvaatimukset poisjättämällä saatu Branch and Bound Branch and bound -menetelmässä suoritetaan osittainen luettelointi tutkimalla tarkasti vain lupaavilta tuntuvia osia tehtävästä. Päätettäessä sitä, mitä osia voidaan hylätä tutkimatta, käytetään edellisessä kohdassa esitettyä relaksaatiota. Ratkaisussa edetään kiinnittämällä muuttujien arvoja yksi kerrallaan. Osittaisessa ratkaisussa on osa muuttujista kiinnitetty ja merkitään vielä kiinnittämättömiä arvoja suureella #. Osittaisen ratkaisun täydennys on tehtävän sallittu ratkaisu, jossa kiinnitetyillä muuttujilla on kiinteät arvonsa. Menetelmässä nimitys branch tulee siitä, että täydennettäessä ratkaisua kiinnittämällä jonkin muuttujan arvo joudutaan itse asiassa suorittamaan haarautuminen puussa. Lähtötilanteena on puun juuri x = (#, #,..., #), jossa minkään muuttujan arvo ei ole kiinnitetty. Tutkittaessa jotain puun aktiivista solmua täytyy selvittää mikä olisi sen paras mahdollinen täydennys. Jos se ei ole nykyistä parasta ratkaisua x (joka tuottaa kohdefunktiolle arvon v) parempi, voidaan todeta solmu käsitellyksi (luodatuksi) eli karsia käsittelystä kyseisen solmun kaikki täydennykset (alipuut). Silloin ollaan osittaisesti (implisiittisesti) luetteloitu ne. Jos aktiivista solmua ei voida karsia, täytyy suorittaa haarautuminen antamalla jollekin kiinnittämättömälle muuttujalle sen kaikki mahdolliset arvot, jolloin saadaan uusia aktiivisia solmuja tutkittavaksi. Menettely voidaan lopettaa, kun kaikki kiinnittämättömiä muuttujia sisältävät solmut on karsittu. Puussa voidaan edetä esimerkiksi syvyyshakuna, jolloin valitaan tutkittavaksi aktiiviseksi solmuksi syvimmällä puussa oleva, jossa on siis eniten kiinnitettyjä komponentteja. Nimitys bound tulee relaksaation käytöstä tutkittaessa solmun parasta täydennystä. Aina ratkaistaan relaksoitua ongelmaa, jossa osa muuttujista on kiinnitettyjä ja josta saadaan arvio kohdefunktiolle. Mikäli saatu yläraja maksimoinnissa (alaraja minimoinnissa) on pienempi (suurempi) kuin jo saavutettu kohdefunktion arvo, voidaan suorittaa karsinta. 19

113 Esimerkki 4.9. Seuraavien tuntien aikana tarvitaan 7 mw sähköä ja käytettävissä on 4 generaattoria, joiden ominaisuudet ovat generaattori käyttökustannus tuotettu teho 6 16 Kunkin generaattorin tulee seisoa tai olla 1% käytössä. Kun merkitään { x j = 1, jos generaattori j on toiminnassa, muutoin, niin saadaan tehtävä min 7x x 2 + x + 14x 4 s. t. x 1 + 6x 2 + x + 16x 4 7 x i {, 1}, i = 1,..., 4. Sen optimaalinen ratkaisu on käyttää generaattoreita 1 ja kustannusten ollessa 12. Suoritetaan syvyyshakua lähtien tilanteesta x = (#, #, #, #), jossa minkään muuttujan arvoa ei ole kiinnitetty. Paras tunnettu kohdefunktion arvo on silloin v =. Kun relaksoidaan kaikki päätösmuuttujat reaalisiksi, saadaan ratkaisu x = (,,,.44), joka tuottaa kohdefunktiolle arvon ṽ = Tämä on alaraja tehtävän ratkaisulle. Nyt täytyy suorittaa haarautuminen muuttujan x 4 suhteen kiinnittämällä sille vaihtoehtoiset arvot ja 1. Näin ei suljeta mitään sallittua vaihtoehtoa pois. Ratkaistaessa tehtävää 1, jossa x 1 = (#, #, #, 1), saadaan tulos x 1 = (,,, 1), ṽ = 14. Koska kaikki komponentit ovat sallittuja, on solmu 1 loppuunkäsitelty ja tehtävän parhaaksi ratkaisuksi saadaan v = 14. Sen jälkeen täytyy ruveta tutkimaan haaraa x 4 =. Kaiken kaikkiaan saadaan kuvan 41 puu. 11

114 v v 6.12 x,,,.44 x 4 1 x 4 v 14 x 1,,,1 Ratkaisemalla v x 2 1 v 9 x 2,.,1, x 2 v 1 x,1,.2, 6 v 9.67 x 6.67,,1, x 1 x x 1 1 x 1 v v x 4 x.,1,, v 11,1,1, x 7 1,,.8, 4 Rajalopetus Rajalopetus 7 1 Ei sallittu x 1 v 12 x x 8 1,,1, 8 9 Ratkaisemalla v 12 Ei sallittu Kuva 41: Esimerkin 4.9 puu Näin saadaan binäärisen lineaarisen optimointitehtävän branch and bound -algoritmi Algoritmi 4.1. Branch and bound -algoritmi Askel. (Alustus) Asetetaan t. Ainoa aktiivinen osittainen ratkaisu saadaan relaksoimalla kaikki kokonaislukurajoitukset reaalisiksi. Jos tunnetaan jokin alkuperäisen tehtävän sallittu ratkaisu x, lasketaan sen tuottama kohdefunktion arvo v. Jos sallittua ratkaisua ei tunneta, niin maksimointitehtävässä v ja minimointitehtävässä v. Askel 1. (Lopetus) Jos aktiivisia osittaisia ratkaisuja on jäljellä, valitaan yksi niistä pisteeksi x t ja jatketaan askeleesta 2. Muutoin lopetetaan. Jos tällöin on saatu ratkaisu x se on optimi, mutta jos sellaista ei ole, ei tehtävällä ole sallittua ratkaisua. Askel 2. (Relaksaatio) Ratkaistaan pistettä x t vastaava relaksoitu optimointitehtävä. Askel. (Ei-sallittavuuslopetus) Jos edellisen kohdan relaksoidulla tehtävällä ei ole sallittuja pisteitä, ei pisteellä x t voi olla sallittuja täydennyksiä. Ratkaisu x t on nyt loppuunkäsitelty (epäaktiivinen), asetetaan t t + 1 ja palataan askeleeseen

115 Askel 4. (Rajalopetus) Jos askeleen 2 relaksoidun tehtävän kohdefunktio ṽ toteuttaa maksimointitehtävässä (minimointitehtävässä) ehdon ṽ v (ṽ v), paraskaan ratkaisun x t täydennys ei voi parantaa kohdefunktion arvoa. Ratkaisu x t on jälleen loppuunkäsitelty (epäaktiivinen), asetetaan t t + 1 ja palataan askeleeseen 1. Askel. (Sallittavuuslopetus) Jos kohdan 2 relaksoidun tehtävän ratkaisu x t kohdefunktion arvona ṽ toteuttaa kaikki kokonaislukurajoitukset, se on osittaisen ratkaisun x t paras täydennys. Ratkaisu x t on jälleen loppuunkäsitelty (epäaktiivinen), asetetaan x x t, v ṽ, t t + 1 ja palataan askeleeseen 1. Askel 6. (Haarautuminen) Valitaan jokin kohdan 2 relaksoidun tehtävän ratkaisun eikokonaislukukomponentti x t p ja haaraudutaan tehtävästä x t kahteen suuntaan sen mukaan onko komponentin x p kiinnitetty arvo vai 1. Molemmat muodostetuista osittaisista ratkaisuista ovat aktiivisia, asetetaan t t + 1 ja palataan vaiheeseen 1. Haarautumismuuttujaksi x p valitaan usein lähinnä kokonaislukuarvoa oleva muuttuja ja ensiksi tutkittavaksi puun haaraksi lähempänä arvoa x t p oleva vaihtoehto. Jos niin menetellään, saadaan esimerkissä 4.9 solmujen tutkimusjärjestys, 2, 6, 7, 8 eikä solmuja 4 ja tarvitse ollenkaan tutkia. Algoritmi 4.1 voidaan helposti yleistää yleiseksi kokonaislukuoptimointialgoritmiksi. Silloin muuttujat voivat saada muitakin arvoja kuin ja 1, joten haarautuminen suoritetaan sen mukaan onko x p x t p vai x p x t p + 1. Tällöin ei siis kiinnitetä muuttujan x p arvoa, vaan lisätään kumpaankin haaraan uusi rajoitus. Näillä suljetaan kaikista muodostetuista alipuista pois x t. 4. Branch and bound -algoritmin tehostamistapoja Edellä esitetty algoritmi 4.1 ei ole täysin yksikäsitteinen ja sitä voidaan parantaa monin tavoin. Yksi niistä on relaksaatioratkaisujen x pyöristäminen sallituiksi x ennen haarautumista. Tällöin saadaan usein parempia alkuperäisen tehtävän sallituita ratkaisuja kuin tähänastinen paras ratkaisu x. Aina kun liikutaan päätöspuussa alaspäin, kiinnitetään päätösmuuttujan arvoja, joten relaksaatiolla saatava kohdefunktion raja paranee. Toisena tehostuksena voidaan sen vuoksi käyttää solmun isäsolmusta saatavaa rajaa. Aina kun saadaan uusi ratkaisu x, voidaan lopettaa kaikkien aktiivisten osittaisten ratkaisujen käsittely, joiden isäsolmun tuottama raja ṽ ei ole parempi kuin v. Esimerkki Ratkaistaan NASAn budjetointiongelmaa esimerkistä.4, jonka ratkaisupuu on kuvassa 42. Koska tehtävän rajoitukset ovat tyyppiä, kannattaa eikokonaislukujen pyöristykset tehdä alaspäin. Esimerkiksi solmussa saadaan relaksoidun 112

116 tehtävän ratkaisu x = (1,, 1,.6,.4, 1,,.4,,,,, 1, 1), ṽ = 787. Kun sen ei-kokonaislukukomponentit pyöristetään nolliksi, pysyy ratkaisu sallittuna ja saadaan kohdefunktion arvo 72, joka on parempi kuin tähänastinen paras arvo v = 69. Saadaan siis v 72 ja puun karsiminen tehostuu. Solmussa 1 ei tämä menettely auta. Solmussa 1 saadaan uusi tulos v = 76, joka on parempi kuin solmun 12 raja ṽ = 77. Solmun 12 avoinna oleva vasen poikasolmu (x = 1) ei siis voi tuottaa arvoa 77 parempaa tulosta, joten sitä ei tarvitse käsitellä ollenkaan. Kaikkiaan saadaan taulukko, jossa alleviivaus esittää kiinnitettyä muuttujan arvoa. t ṽ x v toiminta (1,,,,,,,1,,.87,,,1,1) 69 x (1,,,,,,, 1,,,,, 1, 1) haarautuminen x (1,,,,,,,1,,1,,,1,.7) 66 haarautuminen x (1,,,,,,,1,,1,,,1,1) - rajalopetus (1,,.78,.46,.7,.78,,1,.41,,,,1,.8) 1 haarautuminen x (1,,1,.6,.,1,,.,.2,,,,1,.7) 4 haarautuminen x (1,,1,.6,.4,1,,.4,,,,,1,1) 72 x (1,, 1,,, 1,,,,,,, 1, 1) haarautuminen x (1,.,1,1,,,,.,,,.,,1,1) 7 x (1,, 1, 1,,,,,,,,, 1, 1) haarautuminen x (.8,1,1,1,,.188,,,,,1,,1,.7) - rajalopetus (1,,,,,,,1,.6,1,,,1,) 66 haarautuminen x 9 9 ei-sallittu - - ei-sallittavuuslopetus (1,1,,,,,,,.,,1,,1,.) - rajalopetus (.,,1,.8,.2,1,,1,1,,,,1,) - rajalopetus (1,,1,,.4,1,,.4,.6,,,,,1,1) 72 haarautuminen x (1,.462,1,,,.846,.77,,,,.462,,1,1) - rajalopetus (1,,.6,.6,,.6,,1,,1,,,1,) - rajalopetus (1,,1,1,,,.91,1,,,,.182,1,1) 76 x (1,, 1, 1,,,, 1,,,,, 1, 1) (1,,1,1,,,,1,,,,.2,1,1) 76 haarautuminen x (1,,1,1,,,,1,,,,,1,1) - rajalopetus 18ei-sallittu - - ei-sallittavuuslopetus (.,,1,1,,1,,1,,,,1,,) - rajalopetus 11

117 Kun tarkastellaan yllä olevaa taulukkoa huomataan, että varsin hyvä kohdefunktion arvo v = 7 saavutettiin jo seitsemännessä vaiheessa kahdestakymmenestä. Jos lopetetaan siihen, tiedetään, että optimiarvo on vähintään 7. Pystytään myös arvioimaan kohdefunktion suurinta arvoa määrämällä avoinna olevista tehtävistä kohdefunktion suurimman (pienimmän) arvon maksimointitehtävissä (minimointitehtävissä). Tämä tapahtuu käyttämällä isäsolmuista saatuja rajan ṽ arvoja. Esimerkkitapauksessa jäävät avoimeksi solmujen 1,, 4, ja 6 lapsia käsittävät tehtävät. Näistä saadaan kohdefunktion arvolle yläraja max{798.7, , 791.2, 7878., 77.} = Siis optimiarvon täytyy olla välillä [7, 798.7]. Jos lopetetaan solmun 6 ratkaisuun, etäisyys optimista on korkeintaan =.8%

118 v 826.2, x 1.87, pyöristys 69, v 69 x 1 1 x 1 1 v 798.7, x 14.7, pyöristys 66 v , x.78, pyöristys 1 x 14 1 x 14 x 1 x 2 Rajalopetus v 4 8 v 78, x 9.6, pyöristys 66 x 9 1 x 9 x 9 1 x 9 4 v 791.2, x9.2, v pyöristys 4 Rajalopetus 9 Ei sallittu 14 Rajalopetus v Rajalopetus v 74 6 x 4 1 v 787, x 4.6, pyöristys 72, v 72 x 4 v 77., x 2., pyöristys 7, v 7 12 v 77, x.4, pyöristys 72 x 2 1 x 2 x 1 v 766.9, v x , pyör. 76, Rajalopetus v 76 x 7 1 x 7 x 1 v 72 Rajalopetus 18 Ei sallittu x v 766.6, x 12.2, pyöristys 76 x Rajalopetus v v 76 Rajalopetus Kuva 42: Esimerkin 4.11 puu Syvyyshaun asemasta on muitakin vaihtoehtoja aktiivisen tehtävän valinnassa algoritmin vaiheessa 1. Paras ensin versiossa valitaan lupaavin ratkaisu, jonka isäsolmusta saatu arvio ṽ on paras. Kolmas mahdollisuus olisi valita edellisten yhdistelmänä parhaiten peruuttava syvyyshaku. Siinä otetaan haarautumisen jälkeen aina syvimmällä oleva solmu, mutta solmun loppuunkäsittelyn jälkeen peruutetaan lupaavimpaan solmuun, jonka relaksaatioarvio ṽ on paras. Mikäli syntyy tasatilanteita, voidaan käyttää lisäsääntöä, jonka mukaan valitaan se, jossa viimeksi kiinnitetty muuttuja on lähimpänä relaksoidusta ongelmasta saatua arvoa. Esimerkki Seuraavissa kuvissa on 1 ensimmäistä vaihetta NASAn investointiongelmasta käyttäen em. kolmea tapaa ja tasatilanteissa lisäsääntöä. 11

119 v 826.2, x 1.87, pyöristys 69, v 69 x 1 1 x 1 1 v 798.7, x 14.7, pyöristys 66 8 v , x.78, pyöristys 1 x 14 1 x 14 x 1 x 2 Rajalopetus v 4 v 78, x 9.6, pyöristys 66 x 9 1 x 9 x 9 1 x 9 9 v 791.2, x 9.2, pyöristys 4 4 Ei sallittu x 1 v 714, x9.6, pyöristys 66 x 6 7 v 671 Ei sallittu Rajalopetus Kuva 4: Puu, kun käytetään syvyyshakua v 826.2, x 1.87, pyöristys 69, v 69 x 1 1 x 1 1 v 798.7, x 14.7, pyöristys 66 2 v , x.78, pyöristys 1 x 14 1 x 14 x 1 x 4 Rajalopetus v 4 v 78, x 9.6, pyöristys 66 x 9 1 x 9 x 9 1 x 9 v 791.2, x 9.2, pyöristys 4 6 x 9 1 v 71., x 9., pyöristys 8 x Rajalopetus x 4 1 v 787, x pyöristys , x 4 v 72 9 v 77, x.4, pyöristys 72 x 1 x Kuva 44: Puu, kun käytetään paras ensin -hakua 116

120 v 826.2, x 1.87, pyöristys 69, v 69 x 1 1 x 1 1 v 798.7, x 14.7, pyöristys 66 v , x.78, pyöristys 1 x 14 1 x 14 x 1 x v Rajalopetus v 78, x 9.6, pyöristys 66 x 9 1 x 9 x 9 1 x 9 9 Ei sallittu 4 v 791.2, x 9.2, pyöristys 4 x 2 1 x v 77., x2., pyöristys 7, v 7 x 2 v 787, x 4.6, pyöristys 72, v 72 x 4 7 v Rajalopetus Kuva 4: Puu, kun käytetään peruuttavaa syvyyshakua Kuten luvussa 4., voidaan algoritmia nytkin nopeuttaa, jos pystytään lisäämään uusia rajoituksia. Kutsutaan menettelyä branch and cut -algoritmiksi. Muodostetaan lisärajoituksia relaksoinnin suorituksen jälkeen ennen haarautumista. Jokaisen lisäehdon pitäisi pienentää relaksoidun tehtävän sallittua aluetta. Esimerkki 4.1. Luvun 4.4 esimerkissä saatiin ensimmäisessä vaiheessa x = (,,,.44), ṽ = Lisäehto saadaan siitä, että sallitussa ratkaisussa täytyy olla mukana vähintään yksi generaattori ts. x 1 + x 2 + x + x 4 1, ja tämä sulkee aiemman relaksoidun ratkaisun x pois. Tästä lisäehdosta saadaan x 1 = (,,.818,.182), ṽ = Kun kiinnitetään x = 1, saadaan x 2 = (,, 1,.12). Lisäehto seuraa siitä, että tehovaatimus saadaan aikaan joko generaattorilla 4 tai kahdella muulla generaattorilla. Siis on oltava x 1 + x 2 + x + 2x 4 2. Saadaan kuvan 46 puu ja yleisesti algoritmi

121 x,,,.48 v v 6.12 x 1 x 2 x x x 1 v,,.818, x 1 x 2 x 2 v,,1, x 1 x 2 x 2x 4 2 x 6 6 v 1,,,. 14 Rajalopetus v x,,1,. 12. x 4 1 x 4 v x 4,,1,1 19 Ratkaisemalla v 19 4 v x 1,,1, 12 Ratkaisemalla v 12 Kuva 46: Esimerkin 4.1 puu 118

122 Algoritmi Branch and cut Askel. (Alustus) Asetetaan t. Ainoa aktiivinen osittainen ratkaisu saadaan relaksoimalla kaikki kokonaislukurajoitukset reaalisiksi. Jos tunnetaan jokin alkuperäisen tehtävän sallittu ratkaisu x, lasketaan sen tuottama kohdefunktion arvo v. Jos sallittua ratkaisua ei tunneta, niin maksimointitehtävässä v ja minimointitehtävässä v. Askel 1. (Lopetus) Jos aktiivisia osittaisia ratkaisuja on jäljellä, valitaan yksi niistä pisteeksi x t ja jatketaan askeleesta 2. Muutoin lopetetaan. Jos tällöin on saatu ratkaisu x, se on optimi, mutta jos sellaista ei ole, ei tehtävällä ole sallittua ratkaisua. Askel 2. (Relaksaatio) Ratkaistaan pistettä x t vastaava relaksoitu optimointitehtävä. Askel. (Ei-sallittavuuslopetus) Jos edellisen kohdan relaksoidulla tehtävällä ei ole sallittuja pisteitä, ei pisteellä x t voi olla sallittuja täydennyksiä. Ratkaisu x t on nyt loppuunkäsitelty (epäaktiivinen), asetetaan t t+1 ja palataan vaiheeseen 1. Askel 4. (Rajalopetus) Jos askeleen 2 relaksoidun tehtävän kohdefunktio ṽ toteuttaa maksimointitehtävässä (minimointitehtävässä) ehdon ṽ v (ṽ v), paraskaan ratkaisun x t täydennys ei voi parantaa kohdefunktion arvoa. Ratkaisu x t on jälleen loppuunkäsitelty (epäaktiivinen), asetetaan t t + 1 ja palataan vaiheeseen 1. Askel. (Sallittavuuslopetus) Jos kohdan 2 relaksoidun tehtävän ratkaisu x t kohdefunktion arvona ṽ toteuttaa kaikki kokonaislukurajoitukset, se on osittaisen ratkaisun x t paras täydennys. Ratkaisu x t on jälleen loppuunkäsitelty (epäaktiivinen), asetetaan x x t, v ṽ, t t + 1 ja palataan askeleeseen 1. Askel 6. (Leikkausrajoitus) Yritetään muodostaa lisärajoitus, joka leikkaa pois relaksoidun ratkaisun x t, mutta ei yhtään alkuperäisen tehtävän ratkaisua. Jos tämä onnistuu, asetetaan t t + 1, lisätään saatu leikkausrajoitus alkuperäiseen tehtävään ja palataan askeleeseen 2. Askel 7. (Haarautuminen) Valitaan jokin askeleen 2 relaksoidun tehtävän ratkaisun ei kokonaislukukomplementti x t p ja haaraudutaan tehtävästä x t kahteen suuntaan sen mukaan onko komponentin x p kiinnitetty arvo vai 1. Molemmat muodostetuista osittaisista ratkaisuista ovat aktiivisia, asetetaan t t + 1 ja palataan askeleeseen

123 4.6 Parantava hakuheuristiikka Suuria kombinatorisia optimointitehtäviä on hankala ratkaista tarkasti, mutta parantava haku tuottaa usein hyviä tuloksia. Tarkoituksena on tehdä pieniä muutoksia nykyiseen ratkaisuun ja sitä varten täytyy määritellä nykyisen pisteen x t naapurusto (neighborhood) N(x t ). Tutkitaan löytyykö naapurustosta N(x t ) parempi ratkaisu kuin x t. Sovitaan, että naapurustoon kuuluvat kaikki pisteet x t + x, missä x M eli x on sallittu siirto. Koska kyseessä on likimääräinen optimointi eli heuristiikka, ei meillä ole takeita tulosten laadusta. Näin saadaan yksinkertainen algoritmi 4.1, joka on usein tuottanut hyviä tuloksia. Algoritmi 4.1. Diskreetti parantava haku Askel. (Alustus) Valitaan jokin sallittu aloituspiste x ja asetetaan iteraatioindeksiksi t. Askel 1. (Lokaali optimi) Mikäli mikään sallittu siirto x M ei paranna nykyistä ratkaisua x t, niin lopetetaan. Piste x t on lokaali optimi. Askel 2. (Siirto) Valitaan jokin parantava sallittu siirto x M siirroksi x t+1. Askel. (Askel) Päivitetaan piste x t+1 x t + x t+1. Askel 4. (Laskuri) Kasvatetaan t t + 1 ja palataan askeleeseen 1. Joukko M täytyy valita sen verran pieneksi, että se pystytään helposti käymaan läpi askeleessa 1. Mitä suurempi se on, sitä parempilaatuinen ratkaisu saadaan, mutta algoritmin suoritusaika luonnollisesti kasvaa. Algoritmin askeleessa 2 voidaan käyttää nopeimman laskeutumisen menetelmää, jossa valitaan x M niin, että kohdefunktio saa pienimmän arvonsa pisteessä x t + x. Toinen ja yleensä parempi tapa on hyväksyä ensimmäinen löydetty x t + x N(x t ), joka tuottaa kohdefunktiolle paremman arvon kuin x t. Silloin algoritmiin tulee enemmän vaiheita, mutta ne sujuvat nopeammin. Esimerkki Tarkastellaan esimerkin.1 piirilevyongelmaa, jossa { 1, jos k:nneksi porattu reikä on i y ki =, muuten. Tehtävän optimiratkaisu on y11 = y2 = y6 = y4,1 = y9 = y6 = y78 = y87 = y94 = y1,2 = 1 ja optimireitin pituus on Graafisesti reitti on kuvan 47 näköinen. Aloitetaan haku reitistä, jossa käydään läpi pisteet numerojärjestyksessä 1, 2,..., 1. Tällöin siis y 11 = y 22 =... = y 1,1 = 1 ja y = (1,,..., ;, 1,,..., ;... ;,...,, 1). Reitin pituus on d 12 + d 2 + d 4 + d 4 + d 6 + d 67 + d 78 + d 89 + d 9,1 + d 1,1 = =

124 Kuva 47: Piirilevyongelman optimiratkaisu Valitaan muutosjoukoksi M parittaiset vaihdot (k, l), jossa reitin pisteiden k ja l paikkaa vaihdetaan. Esimerkiksi reitin kolmas (k = ) piste olkoon 7 ja viides (l = ) piste olkoon 1. Silloin niiden järjestyksen vaihto saadaan aikaan muutoksilla y 7 = 1, y 1 = 1, y 1 = 1, y 7 = 1 muiden alkioiden pysyessä ennallaan. Tällöin reikä 1 porataan kolmantena ja reikä 7 viidentenä. Joukossa M on siis 1 9/2 = 4 mahdollista vaihdettavien suureiden k ja l kombinaatiota. Näiden vaikutukset kohdefunktioon on listattu oheisessa taulukossa. k/l Nopeimman laskeutumisen menetelmässä käytetään arvoilla k = 4 ja l = 6 saatavaa vaihtoa, jolloin aiheutuu säästö d 4 + d 4 + d 6 + d 67 = = 49., kun vapautetaan reiät 4 ja 6 nykyiseen järjestykseen sitovista nuolista. Toisaalta saadaan myös kustannus d 6 + d 6 + d 4 + d 47 = =

125 pistämällä tilalle uudet nuolet. Nettomuutos on = 7.1. Käytettäessä nopeimman laskeutumisen menetelmää, saadaan seuraava taulukko, i porausjärjestys pituus vaihto nollasta poikkeavat muutokset (4,6) y 44 = y 66 = 1, y 46 = y 64 = (1,2) y 11 = y 22 = 1, y 12 = y 21 = (8,1) y 88 = y 1,1 = 1, y 8,1 = y 1,8 = (7,1) y 77 = y 1,8 = 1, y 78 = y 1,7 = (8,9) y 8,1 = y 99 = 1, y 89 = y 9,1 = lokaali optimi jossa päädytään lokaaliin optimiarvoon Lähtöarvoa 16.7 on pienennetty 1%, mutta optimiarvosta 81.8 ollaan vielä kaukana. Kaiken kaikkiaan on jouduttu kokeilemaan 6 4=27 reittiä. Graafisesti tuloksia voi esittää kuvan 48 muodossa Kuva 48: Taulukon reittien havainnollistus 122

126 Mikäli hyväksytään jokainen parantava naapuri ja kokeillaan vaihdoksia järjestyksessä (1, 2), (1, ),..., (1, 1), (2, ),..., (9, 1), saadaan heti ensimmäinen kokeiltu pari (1, 2) parantavaksi, joten muita 44 naapuria ei tarvitse kokeilla, vaan voidaan suorittaa heti kyseinen vaihto ja jatkaa algoritmin askeleesta. Näin jatkettaessa saadaan edelleen vaihdot (1, ), (1, 6), (2, ), (, 4), (, 6), (4, ) ja (9, 1) sekä kohdefunktiolle lokaali optimiarvo 84.. Tämä vaatii yhteensä vain 172 reittikokeilua. Yllä vaihdetaan useimmiten lähellä toisiaan olevia pisteitä, joten voitaisiin myös kokeilla vaihtojärjestystä (1, 2), (2, ),..., (9, 1), (1, ),..., (1, 1). Tällöin saavutetaan lokaali optimi 84.7 vaihdoilla (1, 2), (, 6), (7, 8), (9, 1), (1, ), (8, 1), (1, ), (, 7) ja tässä tarvitaan 118 reittikokeilua. Edellä olevia hakuja voidaan tehostaa käyttämällä parittaisten vaihtojen sijasta kolmittaisia vaihtoja. Silloin n alkiosta voidaan valita kappaletta n(n 1)(n 2)/6 tavalla ja kustakin tällaisesta kombinaatiosta on tutkittava muut! 1 = permutaatiota. Tosin näistä saadaan jo parittaisilla vaihdoilla. Siis kunkin pisteen naapurustossa on n(n 1)(n 2)/6 n /6 alkiota, kun tämä määrä parittaisten vaihtojen tapauksessa oli n(n 1)/2 n 2 /2. Neljittäiset vaihdot on havaittu turhan aikaa vieviksi saavutettuihin etuihin nähden. Esimerkki Tarkastellussa 1 kaupungin ongelmassa on siis 4 naapurin asemasta tutkittava 6 naapuria ja tietenkin tällöin pitäisi päästä parempaan tulokseen. Nopeimman laskeutumisen tapauksessa vaihdoilla (6, 8, 1) (8, 1, 6), (1,, 7) (1, 7, ), (1, 2, ) (, 1, 2), (1, 8, 9) (1, 9, 8) saadaankin optimireitti, mutta kokeiluja tarvitaan peräti 6 = kappaletta. Mikäli hyvaksytään ensimmäinen parantava vaihto ja käytetään kokeilujärjestystä (1, 2, ), (1, 2, 4),..., (1, 2, 1), (1,, 4),..., (8, 9, 1), saadaan vaihdoilla (1, 2, ) (, 1, 2), (1, 2, 6) (6, 1, 2), (1, 2, ) (, 1, 2), (1, 2, ) (2, 1, ), (1, 2, 9) (9, 1, 2), (1, 2, 1) (1, 2, 1), (1,, 4) (1, 4, ), (1, 2, 9) (2, 9, 1), (1, 4, ) (1,, 4), (1,, 6) (1, 6, ) lokaali optimi 84.8 yrityksien määrän ollessa käytetyllä permutaatiojärjestyksellä 967 reittiä. Parittaiset ja kolmittaiset vaihdot sopivat mihin tahansa kombinatoriseen ongelmaan. Symmetrisessä kauppamatkustajaongelmassa, jossa etäisyydet toteuttavat kolmioepäyhtälön, käytetään kuitenkin usein tehtävän geometriaa tehokkaasti hyödyntävää k- optimaalista hakua. Siinä poistetaan reitistä kaikki mahdolliset k kaaren kombinaatiot ja yhdistellään jäljelle jääneet palat kaikilla mahdollisilla uusilla tavoilla reiteiksi, joiden pituudet tutkitaan. 12

127 Kun k = 2 eivät poistettavat kaaret saa olla vierekkäin ja joka kerralla saadaan yksi uusi vaihtoehtoinen reitti tutkittavaksi. Naapureita on siis n(n )/2 n 2 /2 kappaletta. Kun n = 1, on jokaisen reitin naapurien määrä kpl. 2-optimaalisuus poikkeaa parittaisesta vaihdosta siinä, että nyt muutetaan lähtöpermutaatiossa π 1 π 2...π n vaihdettujen alkioiden välissä mahdollisesti olevien alkioiden kulkusuunta. Siis vaihdon (π i, π j ) tulos on π 1...π i 1 π j π j 1...π i+1 π i π j+1...π n. Kun tässä annetaan indeksien käydä arvot 1 i < j n 1, saadaan 1 + n(n )/2 tapausta, joiden joukossa ovat kaikki tarvittavat ja vielä ylimääräisenä alkuperäisen reitin tuottava kombinaatio i = 1, j = n 1. Esimerkki Esimerkkitapauksessa saadaan nopeimman laskeutumisen tavalla vaihdoilla (1, 6), (, 6) ja (1, 8) lokaali optimi 84.8 ja tämä vaatii 144 kokeilua (14 jos ei tutkita tapausta i = 1, j = 9). Mikäli käytetään järjestystä (1, 2), (1, ),..., (1, 9), (2, ),..., (8, 9) ja valitaan aina ensimmäinen parantava vaihto, niin vaihdoilla (1, 2), (1, ), (1, 4), (1, 6), (1, 8) lokaali optimi 84. saadaan 4 kokeilulla ( jos ei tutkita tapausta i = 1, j = 9). Tapauksessa k = saadaan kokeiltavaksi 7 uutta reittivaihtotehtoa, kun poistettavat kaaret eivät ole vierekkäin, kuten kuvassa on esitetty. Tällaisia tapauksia on kaikkiaan (n 9n 2 + 2n)/6 kappaletta. Mikäli kaksi poistettavaa kaarta ovat vierekkäin ja kolmas näistä erillään (n(n 4) tapausta), saadaan vaihtoehtoa nykyiselle reitille 124

128 ja mikäli kaikki kolme poistettavaa kaarta ovat vierekkäin (n tapausta) täytyy tutkia yksi uusi reittivaihtoehto Uusia reittivaihtoehtoja täytyy siis -optimaalisuuden toteamiseksi tutkia yhdellä kierroksella (7n 4n n)/6 7n /6 kappaletta. Tapauksessa n = 1 tulee nyt 4 naapuria. Usein jätetäänkin osa -optimaalisen tapauksen naapureista tutkimatta, jolloin menetelmä nopeutuu. Lähdetään liikkeelle permutaatiosta π 1...π i...π j π j+1...π k...π n ja katkaistaan kaaret (π i 1, π i ), (π j, π j+1 ) ja (π k, π k+1 ), 1 i j k 1 n 2. Pidetään reitin osaa π k+1...π i 1 kiinteänä ja kuvan ensimmäistä tapausta lähtöreittinä. Yhdistettäessä saatuja kolmea reitinpätkää toisiinsa niin, että osien π i...π j ja π j+1...π k järjestys ja kulkusuunta vaihtelee saadaan seuraavat 7 kokeiltavaa vaihtoehtoreittiä π 1...π i 1 π j...π i π j+1...π k π k+1...π n π 1...π i 1 π j...π i π k...π j+1 π k+1...π n π 1...π i 1 π i...π j π k...π j+1 π k+1...π n π 1...π i 1 π j+1...π k π i...π j π k+1...π n π 1...π i 1 π k...π j+1 π i...π j π k+1...π n π 1...π i 1 π k...π j+1 π j...π i π k+1...π n π 1...π i 1 π j+1...π k π j...π i π k+1...π n, joista 1, ja 6 saadaan 2-optimaalisuudellakin. Tässä tehdään nyt jonkin verran turhaa työtä tutkimalla aina 7 vaihtoehtoreittiä, vaikka niitä todellisuudessa olisikin tai 1, mutta menetelmän ohjelmointi on yksinkertaisempaa. 12

129 Esimerkki Esimerkkitapauksessa saadaan 4 84 = 6 kokeilulla nopeimman laskeutumisen tapauksessa reitit (1, 2, 6) pituus 8. (,, 6) pituus 84.7 (2, 2, 8) pituus 81.8, jossa käytetty kolmikko on (i, j, k). Hyväksymällä ensimmäinen parantava reitti tulee tulokseksi 12 kokeilulla (1, 1, 2) pituus 14.8 kok. 2 (1, 1, ) pituus 1. kok. 1 (1, 1, 4) pituus 11.7 kok. 17 (1, 1, ) pituus 99.2 kok. 29 (1, 1, 2) pituus 94. kok. 2 (1, 1, ) pituus 8. kok. 8 (1, 1, 8) pituus 84.8 kok. 4 (1, 1, 6) pituus 84.7 kok. (1, 4, 7) pituus 8. kok. 164 (1, 1, 8) pituus 82. kok. 4 (1, 4, 6) pituus 81.8 kok. 16 tutkimusjärjestyksen ollessa (1, 1, 2),..., (1, 1, 9), (1, 2, ),..., (8, 8, 9). Jokaisella täydellä kierroksella tutkitaan siis 84 reittiä minimaalisen 4 asemasta. Kaksioptimaalisessa ratkaisussa voi yksi kaupunki olla reitillä väärässä paikassa. Melko hyvä ratkaisu saadaankin suorittamalla 2-optimaaliselle ratkaisulle kokeilu, parantaisiko sitä jonkin yksittäisen kaupungin sijoitus muuhun paikkaan reitillä. Aloitus useammasta pisteestä. Edellä olevilla tavoilla päästään lokaaliin optimipisteeseen, joka riippuu oleellisesti aloituspisteestä. Yksi ilmeinen tapa parempien ratkaisujen määräämiseen on aloittaa useammasta lähtöpisteestä x (multistart). Ne voidaan esimerkiksi valita satunnaisesti, sillä liian hyvät aloituspisteet johtavat usein nopeasti lokaaliin optimiin. Kauppamatkustajaongelman lähtöpermutaatio voidaan muodostaa esimerkiksi seuraavasti. 126

130 Algoritmi 4.2. Satunnainen permutaatio Askel. Asetetaan π i i, i = 1,..., n ja k n. Askel 1. Valitaan satunnainen joukon 1,..., k luku l ts. l k u + 1 missä u on välille (, 1) tasan jakautunut satunnaisluku. Askel 2. Vaihdetaan keskenään alkiot π l ja π k ts. a π l, π l π k, π k a. Askel. Jos k = 2, on saatu satunnainen permutaatio π 1,..., π n ja voidaan lopettaa. Muutoin asetetaan k k 1 ja palataan askeleeseen 1. Esimerkki Kahta muuta lähtöpistettä käyttäen saadaan piirilevyn porausongelmasta parittaisilla vaihdoilla käyttäen nopeinta laskeutumista seuraavat tulokset i porausjärjestys pituus vaihto nollasta poikkeavat muutokset (1,) y 11 = y 7 = 1, y 17 = y 1 = lokaali optimi Kuva 49: Reitit ja ja i porausjärjestys pituus vaihto nollasta poikkeavat muutokset (1,4) y 11 = y 49 = 1, y 19 = y 41 = (6,8) y 68 = y 87 = 1, y 67 = y 88 = (,6) y 2 = y 67 = 1, y 7 = y 62 = (,6) y = y 62 = 1, y 2 = y 6 = (4,) y 41 = y 2 = 1, y 42 = y 1 = lokaali optimi 127

131 Kuva : Esimerkin 4.21 taulukon reittien havainnollistus 128

132 4.7 Tabuhaku, simuloitu jäähdytys ja geneettiset algoritmit Edellisiä parantavia optimointihakumenetelmiä voidaan täydentää seuraavilla menetelmillä, joissa sallitaan tietyin ehdoin huonontavat askeleet. Tällöin on mahdollisuus päästä pois lokaalista optimista parempaan ja mahdollisesti jopa globaaliin optimiratkaisuun. On vain oltava tarkkana, ettei jouduta palaamaan takaisin lähtökohtaan ja tällä tavalla ikuiseen silmukkaan. Tabuhaussa estetään paluu takaisin jo tutkittuun pisteeseen julistamalla väliaikaisesti kielletyksi (tabuksi) jotkut askeleet, joilla palattaisiin jo tutkittuun pisteeseen. Tällöin pystytään estämään silmukat lyhyellä tähtäimellä, mutta pitkään optimoitaessa ne ovat tietenkin mahdollisia. Algoritmissa pidetään kiellettyjen siirtojen nk. tabulistaa, ja valitaan siihen kuulumattomia suuntia. Joka siirron jälkeen päivitetään listaa sellaiseksi, ettei edelliseen pisteeseen voida palata. Algoritmi Tabuhaku Askel. Valitaan jokin sallittu aloituspiste x ja iteraatioiden maksimimäärä t max. Asetetaan parhaaksi ratkaisuksi x x ja iteraatioindeksiksi t. Mitkään siirrot eivät ole tabuja. Askel 1. Mikäli mikään ei-tabu siirto x mahdollisten siirtojen joukossa M ei johda nykyisen pisteen x t sallittuun naapuriin tai sitten t = t max, niin lopetetaan. Tehtävän (likimääräinen) ratkaisu on x. Askel 2. Valitaan jokin ei-tabu sallittu siirto x M siirroksi x t+1. Askel. Päivitetään piste x t+1 x t + x t+1. Askel 4. Mikäli piste x t+1 tuottaa kohdefunktiolle paremman arvon kuin x, niin asetetaan x x t+1. Askel. Poistetaan tabulistasta siirrot, jotka ovat olleet siellä riittävän monen iteraation ajan. Lisätään joukko siirtoja, näiden joukossa kaikki ne, joilla päästäisiin suoraan pisteestä x t+1 takaisin pisteeseen x t. Askel 6. Lisätään t t + 1 ja palataan askeleeseen

133 Esimerkki 4.2. Tarkastellaan piirilevyn reikien optimaalista porausta. Silloin tabuhaulla tuloksena voisi esimerkiksi olla taulukko t porausjärjestys pituus paras vaihto parannus (4,6) (1,2) (8,1) (7,1) (6,1) (,1) (4,1) (1,) (8,9) (2,) (6,7) (,7) (4,7) (1,) (8,9) (2,) (1,2) (8,9) (2,9) (9,1) (6,7) (,7) (1,1) (7,8) (2,) (9,1) lopetus Tässä on pidetty vaihdon ensimmäistä pistettä tabuna 6 iteraation ajan ja tabut on alleviivattu. Tällä valinnalla estetään välitön paluu jo tutkittuun reittiin ja kuitenkin sallitaan kohtuullinen määrä mahdollisia vaihtoja. Suoritus on lopetettu iteraation kohdalla ja paras saatu ratkaisu vaiheessa 44 on tehtävän globaali optimi. 1

134 Simuloitu jäähdytys. Toinen algoritmi, jossa myös sallitaan huonontavat siirrot, on nk. simuloitu jäähdytys (simulated annealing). Nimitys tulee analogiasta metallien hitaaseen jäähdytykseen, jolla parannetaan niiden lujuusominaisuuksia. Nyt hyväksytään huonontavat siirrot todennäköisyydellä, joka pienenee algoritmin edetessä. Algoritmi Simuloitu jäähdytys Askel. Valitaan jokin sallittu piste x, iteraatioiden maksimimäärä t max sekä suhteellisen suuri aloituslämpötila q >. Asetetaan parhaaksi ratkaisuksi x x ja iteraatioindeksiksi t. Askel 1. Jos mikään siirto x mahdollisten siirtojen joukossa M ei johda nykyisen pisteen x t sallittuun naapuriin tai sitten t = t max, niin lopetetaan. Tehtävän (likimääräinen) ratkaisu on x. Askel 2. Valitaan satunnainen sallittu siirto x M ehdokkaaksi x t+1 ja lasketaan mahdollisesti negatiivinen kohdefunktion arvon parannus z siirryttäessä pisteestä x t pisteeseen x t + x t+1. Askel. Hyväksytään x t+1, jos z > tai todennäköisyydellä exp( z/q), jos z. Päivitetään uudeksi arvoksi x t+1 x t + x t+1. Jos ei hyväksytä pistettä x t+1, palataan kohtaan 2. Askel 4. Jos piste x t+1 tuottaa kohdefunktiolle paremman arvon kuin x, niin asetetaan x x t+1. Askel. Jos riittävä määrä iteraatioita on tehty edellisestä lämpötilan muutoksesta, pienennetään lämpötilan q arvoa arvoksi q α(q). Askel 6. Lisätään t t + 1 ja palataan askeleeseen 1. Mikäli q on suuri, hyväksytään melkein kaikki huonontavat ehdokkaat, mutta sen pienetessä hyväksymistodennäköisyys pienenee. Funktio α(q) on ns. jäähdytysfunktio. Eräs paljon käytetty funktio on α(q) = aq, a < 1. Arvot.8 a.99 ovat usein toimineet hyvin. Iteraatioiden lukumäärä kussakin lämpötilassa kannattaa valita verrannolliseksi ympäristön koon kanssa ja se voi olla erisuuri eri lämpötiloissa. Lopussa kun ollaan alhaisissa lämpötiloissa, on syytä varmistaa lokaali optimaalisuus paremmin ja käyttää suurehkoa iteraatiomäärää. Voidaan myös sopia, että kun tietty määrä siirtoja on tehty, niin vähennetään lämpöä. Tähän tarvitaan lämpötilan aletessa enemmän ja enemmän yrityksiä. Siksi on syytä asettaa myös maksimiarvo iteraatiomäärälle kussakin lämpötilassa. 11

135 Algoritmin implementoinnissa täytyy siis valita alkulämpötila, jäähdytysfunktio α(q) ja kussakin lämpötilassa käytettävä iteraatiomäärä. Sopivien arvojen löytäminen edellyttää näin ollen kokeilua. Naapurustorakenne olisi vielä valittava sellaiseksi, että muodostettava satunnainen sallittu naapuri pystytään muodostamaan tehokkaasti. Kohdefunktion arvo ei tällöin parane dramaattisesti yhdellä kertaa, mutta yksittäiset iteraatiokierrokset saadaan nopeasti. Olisi hyvä, jos kohdefunktion arvoa ei tarvitsisi laskea kokonaan uudestaan joka kerta, vaan pystyttäisiin aina modifioimaan sen vanhasta arvosta tekemällä siihen kyseisen siirron aiheuttamat muutokset. Esimerkki 4.2. Tarkastellaan edelleen piirilevyn porausta, jossa M on taaskin kaikkien yksittäisten vaihtojen joukko. Silloin iteraation suoritus voisi olla seuraavanlainen t porausjärjestys pituus paras q vaihto z (7,1) 2.1 hyv (1,9) -2.1 hyl. (1,4) -.1 hyv (7,1) 1. hyv (,6). hyv (9,1). hyv (9,1) -. hyv (2,7) hyl. (1,7).6 hyv (6,7) -6.6 hyl. (7,8) -1.7 hyv (2,) -9. hyl. (2,4) -.9 hyv (6,1) -1.4 hyl. (,6) -4. hyl. (2,) hyl. (9,1) -1. hyl. (9,1) -1. hyl. (8,9) -. hyv

136 t porausjärjestys pituus paras q vaihto z (,1) -16. hyl. (8,1) -1. hyl. (8,1) -1. hyl. (,6) -2.8 hyl. (2,9) -9.2 hyl. (2,9) -9.2 hyl. (4,9) -22. hyl. (,9) -2.2 hyl. (,7) -21. hyl. (1,) -.8 hyl. (2,8) -9.6 hyl. (9,1).7 hyv (,8) -2.6 hyl. (8,9) -9.8 hyl. (4,) -.7 hyl. (7,1) hyl. (7,1) hyl. (,1) -12. hyl. (1,7) -4. hyl. (4,1) -1. hyl. (2,1) hyl. (6,1) -7.8 hyl. (6,7) -18. hyl. (,) hyl. (9,1) -.7 hyv (9,1).7 hyv (7,8).2 hyv lopetus Tässä on aloitettu lämpötilasta q =. ja aina kymmenen iteraation jälkeen kerrottu se tekijällä.8, ts. iteraatioilla -9 on q =., iteraatioilla 1-19 on q =.8. = 4. jne. Ensimmäinen huonontava vaihto (1, 9) hyväksytään todennäköisyydellä exp( 2.1/).18, joten ei kannata ihmetellä sitä, että se hylättiin. Seuraavalla vaihtoyrityksellä (1, 4) tulos huononee vain vähän ja hyväksymistodennäköisyys on exp(.1/).8 joten se hyväksyttiin. Geneettiset algoritmit. Kolmas paljon käytetty lokaaleista optimeista pois pyrkivä menetelmäluokka tunnetaan nimellä geneettiset algoritmit, joissa pyritään löysästi jäljittelemään biologista periytymistä. Nyt yritetään saada aikaan älykästä ja oppivaa satunnaishakua ja pidetään yllä p yksilön suuruista ratkaisupopulaatiota, jonka kehitystä seurataan 1

137 useiden sukupolvien ajan. Osa populaation jäsenistä saattaa olla varsin heikkoja ratkaisuja, mutta niillä saattaa olla hyviä ominaisuuksia, jotka periytyvät tuleville sukupolville. Tässä käytetään risteytystä ja mutaatiota. Populaation jokaisen yksilön identifioi kromosomivektori, jonka alkioita kutsutaan geeneiksi. Risteytyksessä muodostetaan kahdesta populaation yksilöstä kaksi jälkeläistä. Tavallisin ja yksinkertaisin tapa on katkaista kromosomit kahtia samasta, satunnaisesti valitusta kohdasta ja yhdistellä näistä kaksi uutta yksilöä, esimerkiksi kromosomeista x 1 = (1,, 1, 1,, 1,, ) x 2 = (, 1, 1,, 1 1,,, 1) saadaan jälkeläiset x = (1,, 1, 1, 1,,, 1) x 4 = (, 1, 1,, 1, 1,, ). Tässä siis vektorissa x on alkuosa vektorista x 1 ja loppuosa vektorista x 2 ja vektorissa x 4 on alkuosa vektorista x 2 ja loppuosa vektorista x 1. Ei tietenkään ole mitään takeita, että näin parannetaan ratkaisua, mutta ainakin saadaan uusia ratkaisuja, jotka toivon mukaan säilyttävät vanhempien hyviä ominaisuuksia. Käytännössä menettely on usein toiminut hyvin. Tärkeätä on se, että populaation yksilöt ovat riittävän erilaisia, jotta kehitys ei pysähdy. Tätä diversiteettiä voidaan auttaa mutaatiolla jossa muutetaan satunnaisesti yksittäisen kromosomin geenejä. Menetelmässä on päätettävä miten valitaan risteytykset muodostavat kromosomiparit ja mitkä yksilöt säilytetään seuraavaan sukupolveen. Eliittistrategiassa valitaan seuraavaan sukupolveen edellisen sukupolven parhaat valioyksilöt, risteytyksillä saadut uudet sekä muutama mutaatiolla saatu kromosomi. Risteytykseen valitaan kromosomeja ns. kelpoisuusarvon (fitness) perusteella. Se voi olla kohdefunktion arvo skaalattuna niin että parempi arvo vastaa suurempaa kelpoisuusfunktion arvoa, mutta tämä johtaa tavallisesti liian homogeeniseen populaation. Parempana pidetään sellaista, jossa populaation kohdefunktioltaan paras kromosomi saa kelpoisuusarvon p, toiseksi paras arvon p 1,..., huonoin arvon 1. Risteytettävät kromosomit voidaan nyt valita esimerkiksi niin, että toinen valitaan satunnaisesti ja toinen kelpoisuusarvonsa mukaisella todennäköisyydellä. Algoritmi Geneettinen algoritmi Askel. Valitaan populaatiokoko p, sallittu alkupopulaatio x 1, x 2,..., x p, sukupolvien lukumäärä t max sekä populaation valioyksilöiden määrä p e, mutaatioyksilöiden määrä p i ja risteytyksillä saatavien yksilöiden määrä p c. Asetetaan sukupolviindeksiksi t. Määrätään populaation kunkin kromosomin kelpoisuusarvo. Askel 1. Jos t = t max, niin lopetetaan ja pidetään tehtävän (likimääräisenä) ratkaisuna viimeisen sukupolven parasta yksilöä. 14

138 Askel 2. Siirretään sukupolveen t + 1 nykyisen populaation p e parasta yksilöä kelpoisuusarvon suhteen. Askel. Muodostetaan satunnaiset p i kromosomia ja siirretään ne sukupolveen t + 1. Askel 4. Valitaan p c kappaletta sukupolven t yksilöitä, muodostetaan niistä p c /2 paria, suoritetaan niille risteytykset satunnaisista kohdista sekä siirretään ne sukupolveen t + 1. Askel. Määrätään sukupolven t + 1 kromosomien kelpoisuusarvot. Askel 6. Lisätään t t + 1 ja palataan askeleeseen 1. Kun binäärikoodatun kromosomin pituus on n, niin populaation kooksi on esitetty arvoja p [n, 2n]. Alkupopulaatio voidaan valita satunnaisesti tai sitten jollakin yksinkertaisella heuristiikalla. Esimerkki Aina ei edellä kuvailtu risteytys tuota sallittuja ratkaisuja tehtävään. Esimerkiksi 1 kaupungin kauppamatkustajaongelmassa sallittuja ratkaisuja ovat kaikki permutaatiot, kuten x 1 = (, 1, 2, 4, 7, 8, 9, 1, 6) x 2 = (7, 2,, 1, 6, 8, 4, 9, 1), mutta kun niitä risteytetään edellisen mukaisesti saadaan x = (, 1, 2, 4, 7, 8 8, 4, 9, 1) x 4 = (7, 2,, 1, 6,, 9, 1, 6). Kumpikaan näistä ei kuitenkaan ole permutaatio. Risteytystä voidaan modifioida niin, että x jälkiosaan otetaan syklisesti kiertäen ne x 2 alkiot, jotka eivät vielä ole mukana alkuosassa ts. x = (, 1, 2, 4, 7, 8 9, 1, 6, ). Vastaavasti saadaan x 4 = (, 6,, 1, 2, 7 8, 4, 9, 1). Myös mutaatioissa täytyy muistaa, että kromosomin tulee esittää sallittua kauppamatkustajareittiä. Voidaan esimerkiksi vaihtaa permutaation kahden alkion paikkaa keskenään. Toinen mahdollisuus on muodostaa kromosomeiksi vektoreita, joiden kaikki alkiot ovat välille [, 1) tasan jakautuneita satunnaislukuja. Kauppamatkustajan reitti (porausjärjestys) muodostetaan valitsemalla ensiksi pienin komponentti, seuraavaksi toiseksi pienin jne. Tällöin vektoria (.2,.6,.91,.44,.21,.68,.1,.7,.12,.9) vastaa reitti Nyt perusristeytykset ovat sallittuja ja mutaatiotkin helppoja suorittaa. 1

139 Esimerkki Suoritetaan piirilevyesimerkissä sukupolven ajan kestävä geneettinen optimointi, jossa populaation koko on 2 ja aloituspopulaatio satunnainen. Käytetään edellisen esimerkin jälkimmäistä kromosomin muodostustapaa ja muodostetaan uusi sukupolvi edellisen sukupolven kuudesta parhaasta yksilöstä, neljästä satunnaisesti mutatoidusta yksilöstä sekä kymmenestä yksilöstä risteyttämällä saatavista kymmenestä jälkeläisestä. Silloin joka sukupolvessa on erittäin huonoja yksilöitä ja ratkaisua sukupolvien funktiona esittää kuva 1. Siinä pystysuoran viivan alapää esittää populaation parasta yksilöä ja yläpää huonointa. Huomataan, että vaikka vaihtelu on suurta, konvergoi paras ratkaisu suhteellisen nopeasti optimiin. 16 in. 1 in. 14 in. 1 in. 12 in. 11 in. 1 in. 9 in. 8 in. t t 1 t 2 t Kuva 1: Geneettisen optimoinnin havainnollistus 16

140 4.8 Konstruktiiviset heuristiikat Edellisten lukujen heuristiikat paransivat entisiä ratkaisuja. Konstruktiivinen haku taas muodostaa sallitun ratkaisun. Tämä tapahtuu tavallisimmin kiinnittämällä päätösmuuttujien arvoja yksi kerrallaan vähän branch and bound -haun tyyliin. Kiinnitettävä muuttuja on valittava siten, että kaikki rajoitukset toteutuvat, kun niihin sijoitetaan tähän asti kiinnitetyt muuttujat. Samalla pyritään kuitenkin arvioimaan toistaiseksi kiinnittämättömiä muuttujia. Usein lopetetaan ensimmäiseen sallittuun pisteeseen. Algoritmi Konstruktiivinen perushaku Askel. Aloitetaan vektorista x = (#, #,..., #), jossa minkään komponentin arvo ei ole kiinnitetty ja iteraatioindeksistä t. Askel 1. Jos nykyisen ratkaisun x t kaikki komponentit on kiinnitetty, lopetetaan ja asetetaan x x t likimääräiseksi optimiksi. Askel 2. Valitaan osittaisen ratkaisun vapaa komponentti x p ja sille sellainen arvo, että todennäköisesti päädytään kohdefunktiolle hyvän arvon tuottavaan sallittuun ratkaisuun. Vektori x t+1 saadaan edellisen vaiheen vektorista x t asettamalla komponentin x p arvoksi edellä valittu luku. Askel. Lisätään t t + 1 ja palataan askeleeseen 1. Algoritmin askel 2 voidaan toteuttaa useilla eri tavoilla. Tavallisin on nk. ahne (greedy) haku. Siinä pyritään kiinnittämään seuraavaksi se muuttuja ja sille sellainen arvo, että tunnettaessa aiemmin kiinnitetyt arvot uudella valinnalla pienennetään sallittavuutta vähiten ja parannetaan kohdefunktiota eniten. Siis pyritään tekemään paras valinta, mutta sitä on vaikea saada globaalisti hyväksi. Usein käy niin, että jossain vaiheessa hyvältä tuntuva valinta johtaa sallitun ratkaisuavaruuden heikohkoon osaan, mutta muuten menetelmä vaatii tavallisesti kohtuuttomasti aikaa. 17

141 Esimerkki 4.. Tarkastellaan esimerkissä.4 esitettyä NASAn budjetointiongelmaa max 2x 1 + x 2 + 2x + x 4 + 7x + 2x 6 + x 7 + 1x 8 + 2x 9 + 1x x x 12 + x x 14 s. t. 6x 1 + 2x 2 + x + x 7 + 4x 9 + x 12 1 x 2 + x + x + 8x 7 + x 9 + 8x 1 + 7x 12 + x 1 + 4x x + x 6 + 4x 1 + 2x x 1 + x x 6 + x 8 + 7x 11 + x 1 + x x 4 + 4x 6 + x 1 + x x 4 + x 1 x 8 + x 11 1 x 9 + x 14 1 x 11 x 2 x 4 x x x x 6 x x 7 x x i = 1, i = 1, 2,..., 14. Tässä siis päätösmuuttuja x i = 1, jos projekti i toteutetaan. Nyt on luonnollista kiinnittää vapaille muuttujille arvoja 1 niin kauan kuin se rajoitusten puitteissa on mahdollista. Tuntuu järkevältä antaa arvo 1 muuttujille, joilla on suuret kertoimet kohdefunktiossa, mutta toisaalta yksi tällainen saattaa kuluttaa liikaa budjettiresursseja ( ensimmäistä rajoitusta) ja estää kaikkien muiden projektien toteuttamisen. Edeltäjärajoitukset ( viimeistä rajoitusta) ja toisensa poissulkevuusrajoitukset ( keskimmäistä) hankaloittavat tätä päättelyä. Voidaan käyttää esimerkiksi seuraavaa kriteeriä r j = c j + vapaa k, joka seuraa j:tä 8 i=1 a ij b i t c k2, jossa c j : projektin j tuottokerroin kohdefunktiossa a ij : projektin j kuluttama resurssimäärä rajoituksessa i b i t : vaiheen t kiinnityksen jälkeen jäljellä oleva määrä resurssia rajoituksessa i. 18

142 Valitaan siis osittaiseen ratkaisuun x t kaikista vapaista projekteista, joiden edeltäjät on kiinnitetty, se joka tuottaa suurimman r j arvon. Kiinnitetään sen arvoksi 1, jos se on sallittu kaikkien rajoitusten suhteen. Muuten kiinnitetään sen arvoksi. Osoittajassa pyritään arvon c j lisäksi huomioimaan se potentiaali, joka avautuu kun j:n seuraajat tulevat mahdollisiksi. Nimittäjässä pyritään suosimaan vähän resursseja kuluttavia rajoituksia. Suuri r j arvo merkitsee siis korkeaa tuottoa, pientä kulutusta tai molempia. Kun yhtään muuttujaa ei ole kiinnitetty ja käytetään yllä olevaa laskukaavaa, saadaan vaiheessa t = kaksi ensimmäistä testisuuretta r 1 = =. r 2 = = loppujen ollessa r = r 4 = r =.21 r 6 = 21.4 r 7 = 6.2 r 8 = 7.7 r 9 = 11.9 r 1 = 17. r 11 = 1.96 r 12 = 7.8 r 1 = 86. r 14 = 87.. Näistä r 1 on suurin ja koska projektilla 1 ei ole edeltäjiä ja x 1 = 1 toteuttaa kaikki rajoitukset, kiinnitetään projekti 1. Siis nyt on x 1 = (#, #, #, #, #, #, #, #, #, #, #, #, 1, #). Vaihe t = 1 sujuu analogisesti ja siinä b 1 = (1, 11, 1, 1, 1, 1, 1, 1), r 1 = (., 2.8, 122.9, 28.26, 1., 19., 6., 7.22, 17.84, 1.6, 1., 7.4,, 79.6). Valitaan j = 1 ja kiinnitetään x 1 = 1. Kun tullaan vaiheeseen t =, on x = (1, #, #, #, #, #, #, #, #, 1, #, #, 1, #). Silloin b = (4,, 6, 1, 1, 1, 1, 1) ja r = (, 8., 8.28, 28.26, 17., 18., 1.71, 7.22, 4.4,, 9.61, 2.2,,.99). Valitaan j = 9, mutta kiinnitetään x 9 =, koska muuten rikottaisiin rajoitusta 2. 19

143 Vaiheessa t = 9 on päästy tilanteeseen x 9 = (1, #,,,,, #, #,, 1, #, #, 1, ), b 9 = (4,, 6, 1, 1, 1, 1, 1), r 9 = (, 8.,,,,, 1.71, 7.22,,, 9.61, 2.2,, ). Nyt valitaan toiseksi suurimman arvon tuottava indeksi j = 2 ja kiinnitetään x 2 = 1, koska parhaalla projektilla 11 on kiinnittämätön edeltäjä 2. Seuraavassa vaiheessa t = 1 on x 1 = (1, 1,,,,, #, #,, 1, #, #, 1, ), b 1 = (2,, 6, 1, 1, 1, 1, 1), r 1 = (,,,,,,.,.1,,,.2,.,, ). Valitaan j = 11 ja kiinnitetään x 11 = 1. Lopulta vaiheessa 14 saadaan x 14 = (1, 1,,,,,,,, 1, 1,, 1, ), joten kaikki komponentit on kiinnitetty ja kohdefunktiolla on arvo 671. Suurissa, epälineaarisissa kokonaislukuoptimointitehtävissä, jotka täytyy ratkaista nopeasti, konstruktiivinen haku saattaa olla paras ratkaisumenetelmä. Mikäli hyvä relaksaatio tunnetaan, kannattaa käyttää branch and bound -menettelyä. Jos tehtävässä on selvä naapurustorakenne, parantavaa hakua voi käyttää. Mikäli kumpikaan edellisistä ei ole voimassa, on turvauduttava konstruktiiviseen hakuun. Esimerkki 4.1. Tarkastellaan esimerkin.11 jakeluautojen reititysongelmaa, jossa pyritään mahdollisimman pieneen kokonaiskilometrimäärään. Vaikka kohdefunktiota ei saada eksplisiittisesti muodostettua, voidaan ongelmaa silti ratkaista heuristisesti. Haetaan ensimmäiseen reittiin asiakkaaksi jakelupisteestä mahdollisimman kaukana oleva vapaa asiakas, esimerkin tapauksessa asiakas i = 9. Mikäli kapasiteettia riittää, pyritään lisäämään mahdollisimman lähellä tätä reittiä oleva asiakas. Läheisyydellä ymmärretään nyt etäisyyttä muodostuneen reitin painopisteestä. Mikäli ensimmäiseksi painopisteeksi sovitaan 8% jakelupisteestä poispäin olevaa arvoa, saadaan piste.8(1, 2) = (12, 16). Tätä lähinnä on piste i = 8 ja yhdessä nämä tarvitsevat f 9 +f 8 =.+.4 =.9 autolastillista. Koska tämä on sallittu, lisätään piste 8 reittiin. Symmetrisessä ongelmassa on yhdentekevää kierretäänkö pisteet järjestyksessä 9 8 vai 8 9. Seuraavaksi painopisteeksi tulisi.[(12, 16)+(11, 17)] = (11., 16.), mutta kuormaan ei mahdu enää mitään muuta jos oletetaan, ettei samaan paikkaan tuoda tavaraa useammalla kuin yhdellä autolla. Siis ensimmäinen reitti j = 1 on kasassa. Jäljellä olevista pisteistä kauimpana varastosta on i = 1, ja sen kanssa samaan reittiin valitaan ensin i = 7, sitten i = 11 ja viimein i = tässä järjestyksessä. Näiden pisteiden 14

144 tarpeet täyttävät yhdessä.98 autolastillista, joten lisää ei enää mahdu kuormaan. Kuljetusreitiksi saadaan tai päinvastaisessa järjestyksessä Kaikkiaan saadaan 7 reittiä, joiden siemenpisteinä ovat i = 9, 1, 1, 2, 19, 16 ja 18. Heuristisesta ratkaisusta saadaan kuva Kuva 2: Heuristinen ratkaisu Kauppamatkustajaongelma. Kauppamatkustajaongelmalle on kehitelty lukemattomia konstruktiivisia heuristiikkoja. Yksinkertaisin on lähimmän naapurin menetelmä, jossa valitaan ensin lähtökaupunki ja mennään aina lähimpään vielä käymättömistä kaupungeista. Lopuksi palataan viimeisestä kaupungista takaisin lähtöpisteeseen. Menetelmä toimii myös epäsymmetrisissä ongelmissa. Saadut ratkaisut ovat yleensä huonoja, koska optimointi suoritetaan liian lokaalisesti ja lopussa tyypillisesti joudutaan ottamaan turhan pitkiä loikkia. Mikäli tehtävä on symmetrinen ja etäisyyksien välillä on voimassa kolmioepäyhtälö, voi menetelmä huonoimmassa tapauksessa tuottaa ratkaisun, jonka reitin pituuden suhde optimaaliseen on (ln n)/. Esimerkki 4.2. Tarkastellaan edellä esitettyä piirilevyongelmaa. Kun lähdetään vuorotellen pisteistä 1-1 liikkeelle, saadaan reitin pituudet 9.9, 89.6, 9.6, 8.8, 91.2, 87.8, 8.8, 91.6, 98.4 ja Tasatilanteissa on valittu järjestysnumeroltaan pienempi piste. Paras reitti saadaan siis lähdettäessä liikkeelle pisteistä 4 ja 7 sekä huonoin reitti lähdettäessä pisteestä

145 Lisäysmenetelmissä pidetään koko ajan yllä suljettua reittiä, ja lisätään siihen yksi kaupunki kerrallaan, kunnes lopulta saadaan mukaan kaikki n kaupunkia. Lisättävä kaupunki k pistetään sellaiseen väliin i j, jossa se kasvattaa reitin pituutta mahdollisimman vähän ts. d ik + d kj d ij on mahdollisimman pieni. Mikäli tehtävä on symmetrinen ja kolmioepäyhtälö on voimassa, tuottaa menetelmä ratkaisun, jossa reitin pituuden suhde optimipituuteen on korkeintaan 2. Lisättävä kaupunki voidaan valita useilla tavoilla. Satunnaisen lisäyksen menetelmässä otetaan kaupungit mukaan reittiin satunnaisessa järjestyksessä. Piirilevyesimerkissä on saatu reitin pituudet 86.1, 82., 81.8, 86.1, 82., 82., 8, 86, 82. ja 86.6 suoritettaessa algoritmi kymmenen kertaa. Paras näistä on optimaalinen. Lähimmän lisäyksen menetelmässä valitaan ensin aloituskaupunki ja reittiin lisätään aina nykyistä reittiä lähinnä oleva kaupunki k. Etäisyydellä ymmärretään lyhintä etäisyyttä kaupungista k kaikkiin senhetkisen reitin kaupunkeihin. Piirilevyesimerkissä saadaan reitin pituudet 84., 84., 84., 84., 84., 81.8, 86.1, 84., 84. ja 84. lähdettäessä liikkeelle kaupungeista 1,...,1. Kaupungista 6 aloitettava reitti on optimaalinen ja huonoin on kaupungista 7 aloitettava reitti Kaukaisimman lisäyksen menetelmässä valitaan ensin aloituskaupunki ja reittiin lisätään aina nykyisestä reitistä kauimpana sijaitseva kaupunki k. Kaupungin ja reitin etäisyys ymmärretään tässä samoin kuin lähimmän lisäyksen menetelmässä. Piirilevyesimerkissä saadaan reitin pituudet 82., 81.8, 82., 84., 84.7, 82., 82., 82., 82. ja 82. lähdettäessä kaupungeista 1,..., 1. Kaupungista 2 aloitettaessa saadaan optimireitti ja huonoin on kaupungista aloitettava reitti Tutkitaan vielä voidaanko edellämainittuja neljää epäoptimaalista reittiä parantaa parittaisilla vaihdoilla, kolmittaisilla vaihdoilla, 2-optimaalisuudella, -optimaalisuudella suorittamalla niitä kaikkia 1 kierroksen verran. Lähimmän naapurin menetelmällä saadun huonoimman reitin pituus on 98.4 ja se paranee yhdeksällä parittaisella vaihdolla, parhaan tuloksen 86.9 tullessa vaihdolla (, 8). Kuusi 2-optimaalista kokeilua parantaa tulosta ja paras saadaan vaihtamalla reitin viides ja kahdeksas piste ja kääntämällä väliin jäävän pätkän järjestys, jolloin reitin pituus on Kolmittaisilla vaihdoilla löytyy kaksittaisilla vaihdoilla saatujen lisäksi 2 alkuperäistä parempaa reittiä. Niistä parhaan pituus on 84.7 ja se saadaan aikaan pistämällä reitin neljäs alkio viidenneksi, viides kahdeksanneksi ja kahdeksas neljänneksi. - optimaalisuudella löytyy 2-optimaalisuudella saatujen lisäksi 17 parempaa reittiä. Paras tuottaa arvon 9.1 ja tällöin permutaation kahdeksas ja yhdeksäs alkio siirretään kolmanneksi ja neljänneksi sekä alkioiden -7 järjestys käännetään ja siirretään ne permutaation alkioiksi -9. Paras lähimmän naapurin menetelmällä saatu tulos 8.8 paranee kaksittaisilla vaihdoilla ja 2-optimaalisuudella vain vaihtamalla alkiot 1 ja 2, jolloin reitin pituus on 82.. Kolmittaisilla vaihdoilla ei tulos tästä parane, mutta -optimaalisuudella saadaan sama tulos 82. ja lisäksi vielä optimiarvo 81.8 siirtämällä 1-2 alkiot alkioiksi 7-8 sekä kääntä- 142

146 mällä alkioiden -8 suoritusjärjestys ja siirtämällä ne alkioiksi 1-6. Huonoin lähimmän lisäyksen menetelmällä saatu tulos 86.1 pienenee parittaisilla vaihdoilla. 2-optimaalisuudella ja -optimaalisuudella arvoon 84.8 sekä kolmittaisilla vaihdoilla arvoon 84.. Huonoin kaukaisimman lisäyksen menetelmällä saatu tulos 84.7 ei parane parittaisilla vaihdoilla, 2-optimaalisuudella eikä kolmittaisilla vaihdoilla, mutta -optimaalisuudella saadaan hieman parempi arvo 8.. Epäsymmetrisille kauppamatkustajongelmille voidaan käyttää esimerkiksi Webbin algoritmia (1971). Kussakin vaiheessa jokainen kaupunki kuuluu johonkin 4 luokasta tapaus A B C D tuleva nuoli 1 1 lähtevä nuoli 1 1 sen mukaan onko kaupunkiin tuleva tai kaupungista lähtevä nuoli jo kiinnitetty. Kiinnitettyä arvoa merkitään ykkösellä ja kiinnittämätöntä nollalla. Luokka A ei enää kiinnosta, koska se on loppuunkäsitelty. Lasketaan menetys, joka aiheutuu siitä, ettei parasta vaihtoehtoa pystytä käyttämään. Luokan B kaupungeille j se on min k (2) d jk min k d jk, luokan C kaupungeille j min i (2) d ij min i d ij. Minimoinnissa otetaan mukaan vain sellaiset kaupungit i ja k, ettei synny alisyklejä. Tapaus D on hankala, mutta jos kaikki neljä minimiä saadaan eri pisteissä, on menetys kaupungille j max{min i (2) d ij min i d ij, min (2) d jk min d jk }. k k Valitaan kaupunki j, jossa menetys on suurin ja yhdistetään se kaupunkiin, josta suurin menetys saatiin sekä jatketaan kiinnittämällä aina yksi nuoli kerrallaan. Toisessa mahdollisessa algoritmissa valitaan ensin aloituskaupunki ja merkitään sitä ykkösellä. Muodostetaan aloitusreitiksi n 1. Lasketaan säästöt s ij = d i1 + d 1j d ij, i, j = 2,,..., n, jotka saadaan nuolen (i, j) ottamisesta mukaan reittiin. Lajitellaan säästöt suurimmasta pienimpään ja otetaan pareja (i, j) siinä järjestyksessä reittiin pitäen huolta siitä, että saadaan sallittu reitti. Heuristiikan suorituskyky. Todellista ratkaisua ei tiedetä, mutta heuristiikalla saadun tuloksen laatua olisi silti hyvä vähän tutkia. Tehtävää voidaan esimerkiksi ratkaista useita kertoja eri tavoilla ja arvioida statistisesti kohdefunktion optimiarvoa. Joskus voidaan myös johtaa rajoja kohdefunktion arvolle. 14

147 Esimerkki 4.. Kauppamatkustajaongelman reitin pituuden alaraja l 1 saadaan esimerkiksi ratkaisemalla vastaava järjestelyongelma, jossa c ii =. Jos tehtävä on symmetrinen, ovat yksinkertaisemmin määrättäviä alarajoja ja l 2 = n j=1 (d1 j + d 2 j) 2 l = c + max j=1,...,n {d2 j}. Näissä kaavoissa d i j on kaupungista j mitattu etäisyys sitä i:ksi lähimpään kaupunkiin ja c on kaupunkeja yhdistävän lyhimmän virittävän puun pituus. Esimerkkiongelmassa saadaan näistä tulokset l 1 = 6.8, l 2 = 62.4 ja l = Kaikki nämä ovat huonompia kuin luvun. vähemmän kuin kaarta käsittävät alisyklit kieltävän formuloinnin tuottama alaraja 7.6. Parempia rajoja saadaan tietenkin Lagrangen relaksaatiolla. Symmetrisen kauppamatkustajaongelman eräs alaraja saadaan laskemalla samoista datoista lasketun 1-puun kaarien yhteispituus. 1-puu muodostetaan määräämällä solmujen {2,,..., n} kautta kulkeva pienin virittävä puu ja lisäämällä siihen lyhin ja toiseksi lyhin solmusta 1 lähtevä kaari. Voidaan osoittaa, että 1-puun määrääminen on kauppamatkustajaongelman Lagrangen relaksaatio. Jos saadun 1-puun jokaisen solmun i aste a i (solmusta i lähtevien 1-puun kaarten määrä) on kaksi, muodostaa 1-puu kauppamatkustajaongelman optimiratkaisun. Mikäli kauppamatkustajaongelman etäisyydet d ij muutetaan arvoiksi d ij + v i + v j niin, että v i =, ei minkään sallitun kauppamatkustajareitin pituus muutu. Pyritään siksi ratkaisemaan parasta mahdollista kauppamatkustajaongelman alarajaa määräämällä Lagrangen kertoimet v i sellaisiksi, että muunnetuilla etäisyyksillä lasketun 1-puun pituus olisi mahdollisimman suuri. Lähdetään arvosta v = ja edetään parantavaan suuntaan v t = a t (2, 2,..., 2) soveltaen luentomonisteen Matemaattinen optimointi 1 luvun.2 mukaista jatkuvaa parantavaa hakua v t+1 = v t + λ v t, t =, 1,... 1-ulotteisessa avaruudessa. Käytetään askelpituutena aluksi arvoa λ = λ ja mikäli 1- puun pituus ei suurene, pienennetään λ kertomalla entinen arvo esimerkiksi tekijällä.8. Lopetetaan kun saadaan 1-puu, jonka jokaisen solmun aste on 2 tai λ < ϵ. Kun käytetään lähtöaskeleen pituutta λ =, saadaan tarkastellussa kauppamatkustajaesimerkissä kuvan mukaiset 1-puut. Viimeinen niistä tuottaa optimireitin. 144

148 1 1 Λ 1 Λ Λ 1 Λ Λ Λ Λ Λ Λ Λ.16 1 Λ Λ Λ Λ Kuva : Kauppamatkustaesimerkin 1-puut 14

149 Kirjallisuutta [1] Leipälä, Timo: Matemaattinen optimointi II. Luentomoniste, Turun yliopisto. [2] Rardin, Ronald L.: Optimization in operation research. Prentice Hall, New Jersey, 1998, luvut

Harjoitus 2 ( )

Harjoitus 2 ( ) Harjoitus 2 (27.3.214) Tehtävä 1 7 4 8 1 1 3 1 2 3 3 2 4 1 1 6 9 1 Kuva 1: Tehtävän 1 graafi. Aikaisimmat aloitushetket selvitetään kaavoilla v[] = v[p] d[p] l. max i p 1 {v[i] + a i (i, p) E} = v[l] +

Lisätiedot

Harjoitus 2 ( )

Harjoitus 2 ( ) Harjoitus 2 (24.3.2015) Tehtävä 1 Figure 1: Tehtävän 1 graafi. Aikaisimmat aloitushetket selvitetään kaavoilla v[0] = 0 v[p] max 0 i p 1 {v[i]+a i (i,p) E} = v[l]+a l d[p] l. Muodostetaan taulukko, jossa

Lisätiedot

Harjoitus 1 (17.3.2015)

Harjoitus 1 (17.3.2015) Harjoitus 1 (17.3.2015) Tehtävä 1 Piirretään tilanteesta verkko, jossa kaupungeille on annetttu seuraavat numerot: 1 = Turku 2 = Tampere 3 = Helsinki 4 = Kuopio 5 = Joensuu. a) Tehtävänä on ratkaista Bellman

Lisätiedot

Malliratkaisut Demot

Malliratkaisut Demot Malliratkaisut Demot.. Tehtävä Edellinen tehtävä voidaan ratkaista mm. Bellman-Fordin, Floyd-Warshallin tai Dikstran algoritmilla. Kyseessä on syklitön suunnattu verkko, oten algoritmi. (lyhimmät tiet

Lisätiedot

Harjoitus 1 (20.3.2014)

Harjoitus 1 (20.3.2014) Harjoitus 1 (20.3.2014) Tehtävä 1 Piirretään tilanteesta verkko, jossa kaupungeille on annetttu seuraavat numerot: 1 = Turku 2 = Tampere 3 = Hämeenlinna 4 = Imatra 5 = Jyväskylä. 5 2 149(5) 190(4) 113(1)

Lisätiedot

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria Graafit ja verkot Suuntamaton graafi: eli haaroja Joukko solmuja ja joukko järjestämättömiä solmupareja Suunnattu graafi: Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria Haaran päätesolmut:

Lisätiedot

Malliratkaisut Demot

Malliratkaisut Demot Malliratkaisut Demot 1 12.3.2018 Tehtävä 1 Piirretään tilanteesta verkko, jossa kaupungeille on annetttu seuraavat numerot: 1 297 4 2 4 163 3 454 6 179 2 136 2 169 2 390 4 3 436 7 5 Kuva 1: Tehtävän 1

Lisätiedot

Harjoitus 3 (31.3.2015)

Harjoitus 3 (31.3.2015) Harjoitus (..05) Tehtävä Olkoon kaaren paino c ij suurin sallittu korkeus tieosuudella (i,j). Etsitään reitti solmusta s solmuun t siten, että reitin suurin sallittu korkeus pienimmillään olisi mahdollisimman

Lisätiedot

Harjoitus 3 (3.4.2014)

Harjoitus 3 (3.4.2014) Harjoitus 3 (3..) Tehtävä Olkoon kaaren paino c ij suurin sallittu korkeus tieosuudella (i, j). Etsitään reitti solmusta s solmuun t siten, että reitin suurin sallittu korkeus pienimmillään olisi mahdollisimman

Lisätiedot

Malliratkaisut Demot

Malliratkaisut Demot Malliratkaisut Demot 3 7.3.07 Tehtävä Olkoon tilamuuttujat Tällöin saadaan rekursioyhtälö f n (x n ) = max yn {0,} ynwn xn f 0 ( ) = 0. x n = vaiheessa n jäljellä oleva paino, n =,...,N, esine n pakataan

Lisätiedot

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö Algoritmit 1 Luento 9 Ti 7.2.2017 Timo Männikkö Luento 9 Graafit ja verkot Kaaritaulukko, bittimatriisi, pituusmatriisi Verkon lyhimmät polut Floydin menetelmä Lähtevien ja tulevien kaarien listat Forward

Lisätiedot

Harjoitus 6 ( )

Harjoitus 6 ( ) Harjoitus 6 (30.4.2014) Tehtävä 1 Määritelmän (ks. luentomoniste s. 109) mukaan yleisen, muotoa min f(x) s.t. g(x) 0 h(x) = 0 x X (1) olevan optimointitehtävän Lagrangen duaali on max θ(u,v) s.t. u 0,

Lisätiedot

14. Luennon sisältö. Kuljetustehtävä. Verkkoteoria ja optimointi. esimerkki. verkkoteorian optimointitehtäviä verkon virittävä puu lyhimmät polut

14. Luennon sisältö. Kuljetustehtävä. Verkkoteoria ja optimointi. esimerkki. verkkoteorian optimointitehtäviä verkon virittävä puu lyhimmät polut JYVÄSKYLÄN YLIOPISTO 14. Luennon sisältö Kuljetustehtävä esimerkki Verkkoteoria ja optimointi verkkoteorian optimointitehtäviä verkon virittävä puu lyhimmät polut kevät 2012 TIEA382 Lineaarinen ja diskreetti

Lisätiedot

Harjoitus 6 ( )

Harjoitus 6 ( ) Harjoitus 6 (21.4.2015) Tehtävä 1 Määritelmän (ks. luentomoniste s. 109) mukaan yleisen, muotoa min f(x) s. t. g(x) 0 h(x) = 0 x X olevan optimointitehtävän Lagrangen duaali on missä max θ(u, v) s. t.

Lisätiedot

Malliratkaisut Demot

Malliratkaisut Demot Malliratkaisut Demot 4 3.4.017 Tehtävä 1 Tarkastellaan harjoituksen 1 nopeimman reitin ongelmaa ja etsitään sille lyhin virittävä puu käyttämällä kahta eri algoritmia. a) (Primin algoritmi) Lähtemällä

Lisätiedot

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö Algoritmit 1 Luento 8 Ke 1.2.2017 Timo Männikkö Luento 8 Järjestetty binääripuu Solmujen läpikäynti Binääripuun korkeus Binääripuun tasapainottaminen Graafit ja verkot Verkon lyhimmät polut Fordin ja Fulkersonin

Lisätiedot

Johdatus verkkoteoriaan 4. luento

Johdatus verkkoteoriaan 4. luento Johdatus verkkoteoriaan 4. luento 28.11.17 Viikolla 46 läpikäydyt käsitteet Viikolla 47 läpikäydyt käsitteet Verkko eli graafi, tasoverkko, solmut, välit, alueet, suunnatut verkot, isomorfiset verkot,

Lisätiedot

Malliratkaisut Demot

Malliratkaisut Demot Malliratkaisut Demot 6 24.4.2017 Tehtävä 1 Määritelmän (ks. luentomonisteen s. 107) mukaan yleisen muotoa min f(x) s.t. g(x) 0 h(x) = 0 x X (1) olevan optimointitehtävän Lagrangen duaali on min θ(u,v)

Lisätiedot

Malliratkaisut Demo 1

Malliratkaisut Demo 1 Malliratkaisut Demo 1 1. Merkitään x = kuinka monta viikkoa odotetaan ennen kuin perunat nostetaan. Nyt maksimoitavaksi kohdefunktioksi tulee f(x) = (60 5x)(300 + 50x). Funktio f on alaspäin aukeava paraaeli,

Lisätiedot

v 8 v 9 v 5 C v 3 v 4

v 8 v 9 v 5 C v 3 v 4 Verkot Verkko on (äärellinen) matemaattinen malli, joka koostuu pisteistä ja pisteitä toisiinsa yhdistävistä viivoista. Jokainen viiva yhdistää kaksi pistettä, jotka ovat viivan päätepisteitä. Esimerkiksi

Lisätiedot

Algoritmit 1. Luento 13 Ti 23.2.2016. Timo Männikkö

Algoritmit 1. Luento 13 Ti 23.2.2016. Timo Männikkö Algoritmit 1 Luento 13 Ti 23.2.2016 Timo Männikkö Luento 13 Suunnittelumenetelmät Taulukointi Kapsäkkiongelma Ahne menetelmä Verkon lyhimmät polut Dijkstran menetelmä Verkon lyhin virittävä puu Kruskalin

Lisätiedot

13 Lyhimmät painotetut polut

13 Lyhimmät painotetut polut TIE-20100 Tietorakenteet ja algoritmit 297 13 Lyhimmät painotetut polut BFS löytää lyhimmän polun lähtösolmusta graafin saavutettaviin solmuihin. Se ei kuitenkaan enää suoriudu tehtävästä, jos kaarien

Lisätiedot

Esimerkkejä kokonaislukuoptimointiongelmista

Esimerkkejä kokonaislukuoptimointiongelmista Esimerkkejä kokonaislukuoptimointiongelmista (eli mitä kaikkea kokonaisluvuilla voi mallintaa) 27. marraskuuta 2013 Pääoman budjetointiongelma Kulut Projekti Vuosi 1 Vuosi 2 Vuosi 3 Tuotto 1 5 1 8 20 2

Lisätiedot

Algoritmit 2. Luento 11 Ti Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö Algoritmit 2 Luento 11 Ti 24.4.2018 Timo Männikkö Luento 11 Rajoitehaku Kapsäkkiongelma Kauppamatkustajan ongelma Paikallinen etsintä Lyhin virittävä puu Vaihtoalgoritmit Algoritmit 2 Kevät 2018 Luento

Lisätiedot

Johdatus verkkoteoriaan luento Netspace

Johdatus verkkoteoriaan luento Netspace Johdatus verkkoteoriaan luento 20.3.18 Netspace Kurssin sijainti muussa suunnitellussa kokonaisuudessa Verkko eli graafi, tasoverkko, solmut, välit, alueet, suunnatut verkot, isomorfiset verkot, verkon

Lisätiedot

Malliratkaisut Demot

Malliratkaisut Demot Malliratkaisut Demot 1 23.1.2017 1. Päätösmuuttujiksi voidaan valita x 1 : tehtyjen peruspöytin lukumäärä x 2 : tehtyjen luxuspöytien lukumäärä. Optimointitehtäväksi tulee max 200x 1 + 350x 2 s. t. 5x

Lisätiedot

Kokonaislukuoptimointi

Kokonaislukuoptimointi Kokonaislukuoptimointi Optimointitehtävät, joissa muuttujat tai osa niistä voivat saada vain kokonaislukuarvoja Puhdas kokonaislukuoptimointitehtävä: Kaikki muuttujat kokonaislukuja Sekoitettu kokonaislukuoptimointitehtävä:

Lisätiedot

isomeerejä yhteensä yhdeksän kappaletta.

isomeerejä yhteensä yhdeksän kappaletta. Tehtävä 2 : 1 Esitetään aluksi eräitä havaintoja. Jokaisella n Z + symbolilla H (n) merkitään kaikkien niiden verkkojen joukkoa, jotka vastaavat jotakin tehtävänannon ehtojen mukaista alkaanin hiiliketjua

Lisätiedot

Optimoinnin sovellukset

Optimoinnin sovellukset Optimoinnin sovellukset Timo Ranta Tutkijatohtori TTY Porin laitos OPTIMI 4.12.2014 Mitä optimointi on? Parhaan ratkaisun systemaattinen etsintä kaikkien mahdollisten ratkaisujen joukosta Tieteellinen

Lisätiedot

Johdatus graafiteoriaan

Johdatus graafiteoriaan Johdatus graafiteoriaan Syksy 2017 Lauri Hella Tampereen yliopisto Luonnontieteiden tiedekunta 62 Luku 2 Yhtenäisyys 2.1 Polku 2.2 Lyhin painotettu polku 2.3 Yhtenäinen graafi 2.4 Komponentti 2.5 Aste

Lisätiedot

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö Algoritmit 1 Luento 13 Ma 26.2.2018 Timo Männikkö Luento 13 Suunnittelumenetelmät Taulukointi Kapsäkkiongelma Ahne menetelmä Verkon lyhimmät polut Dijkstran menetelmä Verkon lyhin virittävä puu Kruskalin

Lisätiedot

Kombinatorinen optimointi

Kombinatorinen optimointi Kombinatorinen optimointi Sallittujen pisteiden lukumäärä on äärellinen Periaatteessa ratkaisu löydetään käymällä läpi kaikki pisteet Käytännössä lukumäärä on niin suuri, että tämä on mahdotonta Usein

Lisätiedot

V. V. Vazirani: Approximation Algorithms, luvut 3-4 Matti Kääriäinen

V. V. Vazirani: Approximation Algorithms, luvut 3-4 Matti Kääriäinen V. V. Vazirani: Approximation Algorithms, luvut 3-4 Matti Kääriäinen Luento omatoimisen luennan tueksi algoritmiikan tutkimusseminaarissa 23.9.2002. 1 Sisältö Esitellään ongelmat Steiner-puu Kauppamatkustajan

Lisätiedot

1 + b t (i, j). Olkoon b t (i, j) todennäköisyys, että B t (i, j) = 1. Siis operaation access(j) odotusarvoinen kustannus ajanhetkellä t olisi.

1 + b t (i, j). Olkoon b t (i, j) todennäköisyys, että B t (i, j) = 1. Siis operaation access(j) odotusarvoinen kustannus ajanhetkellä t olisi. Algoritmien DP ja MF vertaileminen tapahtuu suoraviivaisesti kirjoittamalla kummankin leskimääräinen kustannus eksplisiittisesti todennäköisyyksien avulla. Lause T MF ave = 1 + 2 1 i

Lisätiedot

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä Luku 7 Verkkoalgoritmit Verkot soveltuvat monenlaisten ohjelmointiongelmien mallintamiseen. Tyypillinen esimerkki verkosta on tieverkosto, jonka rakenne muistuttaa luonnostaan verkkoa. Joskus taas verkko

Lisätiedot

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Esimerkki otteluvoiton todennäköisyys A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Yksittäisessä pelissä A voittaa todennäköisyydellä p ja B todennäköisyydellä q =

Lisätiedot

Induktiotodistus: Tapaus n = 0 selvä; ol. väite pätee kun n < m.

Induktiotodistus: Tapaus n = 0 selvä; ol. väite pätee kun n < m. Väite: T (n) (a + b)n 2 + a. Induktiotodistus: Tapaus n = 0 selvä; ol. väite pätee kun n < m. Huomaa että funktion x x 2 + (m 1 x) 2 kuvaaja on ylöspäin aukeava paraabeli, joten funktio saavuttaa suurimman

Lisätiedot

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko,

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko, Tehtävä 1 : 1 a) Olkoon G heikosti yhtenäinen suunnattu verkko, jossa on yhteensä n solmua. Määritelmän nojalla verkko G S on yhtenäinen, jolloin verkoksi T voidaan valita jokin verkon G S virittävä alipuu.

Lisätiedot

58131 Tietorakenteet (kevät 2009) Harjoitus 11, ratkaisuja (Topi Musto)

58131 Tietorakenteet (kevät 2009) Harjoitus 11, ratkaisuja (Topi Musto) 811 Tietorakenteet (kevät 9) Harjoitus 11, ratkaisuja (Topi Musto) 1. Bellmanin-Fordin algoritmin alustusvaiheen jälkeen aloitussolmussa on arvo ja muissa solmuissa on arvo ääretön. Kunkin solmun arvo

Lisätiedot

Lineaarisen kokonaislukuoptimointitehtävän ratkaiseminen

Lineaarisen kokonaislukuoptimointitehtävän ratkaiseminen Lineaarisen kokonaislukuoptimointitehtävän ratkaiseminen Jos sallittuja kokonaislukuratkaisuja ei ole kovin paljon, ne voidaan käydä kaikki läpi yksitellen Käytännössä tämä ei kuitenkaan ole yleensä mahdollista

Lisätiedot

j(j 1) = n(n2 1) 3 + (k + 1)k = (k + 1)(k2 k + 3k) 3 = (k + 1)(k2 + 2k + 1 1)

j(j 1) = n(n2 1) 3 + (k + 1)k = (k + 1)(k2 k + 3k) 3 = (k + 1)(k2 + 2k + 1 1) MS-A0401 Diskreetin matematiikan perusteet Tentti ja välikokeiden uusinta 10.11.015 Kirjoita jokaiseen koepaperiin nimesi, opiskelijanumerosi ym. tiedot! Laskimia tai taulukoita ei saa käyttää tässä kokeessa!

Lisätiedot

Algoritmit 2. Luento 12 Ke Timo Männikkö

Algoritmit 2. Luento 12 Ke Timo Männikkö Algoritmit 2 Luento 12 Ke 26.4.2017 Timo Männikkö Luento 12 Rajoitehaku Kauppamatkustajan ongelma Lyhin virittävä puu Paikallinen etsintä Vaihtoalgoritmit Geneettiset algoritmit Simuloitu jäähdytys Algoritmit

Lisätiedot

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö Algoritmit 2 Luento 13 Ti 30.4.2019 Timo Männikkö Luento 13 Simuloitu jäähdytys Merkkijonon sovitus Horspoolin algoritmi Ositus ja rekursio Rekursion toteutus Algoritmit 2 Kevät 2019 Luento 13 Ti 30.4.2019

Lisätiedot

Mat Lineaarinen ohjelmointi

Mat Lineaarinen ohjelmointi 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

Lisätiedot

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia 58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, 10..2014, vastauksia 1. [9 pistettä] (a) Todistetaan 2n 2 + n + 5 = O(n 2 ): Kun n 1 on 2n 2 + n + 5 2n 2 + n 2 +5n 2 = 8n 2. Eli

Lisätiedot

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö Algoritmit 1 Luento 10 Ke 14.2.2018 Timo Männikkö Luento 10 Algoritminen ongelmanratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Lisäyslajittelu Valintalajittelu Permutaatiot

Lisätiedot

3.3 Paraabeli toisen asteen polynomifunktion kuvaajana. Toisen asteen epäyhtälö

3.3 Paraabeli toisen asteen polynomifunktion kuvaajana. Toisen asteen epäyhtälö 3.3 Paraabeli toisen asteen polynomifunktion kuvaajana. Toisen asteen epäyhtälö Yhtälön (tai funktion) y = a + b + c, missä a 0, kuvaaja ei ole suora, mutta ei ole yhtälökään ensimmäistä astetta. Funktioiden

Lisätiedot

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti Luku 6 Dynaaminen ohjelmointi Dynaamisessa ohjelmoinnissa on ideana jakaa ongelman ratkaisu pienempiin osaongelmiin, jotka voidaan ratkaista toisistaan riippumattomasti. Jokaisen osaongelman ratkaisu tallennetaan

Lisätiedot

Demo 1: Branch & Bound

Demo 1: Branch & Bound MS-C05 Optimoinnin perusteet Malliratkaisut 7 Ehtamo Demo : Branch & Bound Ratkaise lineaarinen kokonaislukuoptimointitehtävä käyttämällä Branch & Boundalgoritmia. max x + x s.e. x + 4x 9 5x + x 9 x Z

Lisätiedot

Königsbergin sillat. Königsberg 1700-luvulla. Leonhard Euler ( )

Königsbergin sillat. Königsberg 1700-luvulla. Leonhard Euler ( ) Königsbergin sillat 1700-luvun Königsbergin (nykyisen Kaliningradin) läpi virtasi joki, jonka ylitti seitsemän siltaa. Sanotaan, että kaupungin asukkaat yrittivät löytää reittiä, joka lähtisi heidän kotoaan,

Lisätiedot

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmi on periaatteellisella tasolla seuraava: Algoritmi on periaatteellisella tasolla seuraava: Dijkstra(V, E, l, v 0 ): S := { v 0 } D[v 0 ] := 0 for v V S do D[v] := l(v 0, v) end for while S V do valitse v V S jolle D[v] on minimaalinen S := S

Lisätiedot

Demo 1: Simplex-menetelmä

Demo 1: Simplex-menetelmä 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

Lisätiedot

10. Painotetut graafit

10. Painotetut graafit 10. Painotetut graafit Esiintyy monesti sovelluksia, joita on kätevä esittää graafeina. Tällaisia ovat esim. tietoverkko tai maantieverkko. Näihin liittyy erinäisiä tekijöitä. Tietoverkkoja käytettäessä

Lisätiedot

Talousmatematiikan perusteet: Luento 12. Lineaarinen optimointitehtävä Graafinen ratkaisu Ratkaisu Excel Solverilla

Talousmatematiikan perusteet: Luento 12. Lineaarinen optimointitehtävä Graafinen ratkaisu Ratkaisu Excel Solverilla Talousmatematiikan perusteet: Luento 12 Lineaarinen optimointitehtävä Graafinen ratkaisu Ratkaisu Excel Solverilla Esimerkki Esim. Yritys tekee kahta elintarviketeollisuuden käyttämää puolivalmistetta,

Lisätiedot

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017

Lisätiedot

Datatähti 2019 loppu

Datatähti 2019 loppu Datatähti 2019 loppu task type time limit memory limit A Summa standard 1.00 s 512 MB B Bittijono standard 1.00 s 512 MB C Auringonlasku standard 1.00 s 512 MB D Binääripuu standard 1.00 s 512 MB E Funktio

Lisätiedot

Malliratkaisut Demot

Malliratkaisut Demot Malliratkaisut Demot 5 10.4.2017 Tehtävä 1 x 2 7 0,7 9,8 6 5 4 x 1 x 2 7 x 1 x 2 1 3 2 x 1 0 4,3 x 1 9 1 0,0 x 2 0 9,0 1 2 3 4 5 6 7 8 9 x 1 Kuva 1: Tehtävän 1 sallittu joukko S Optimointitehtävän sallittu

Lisätiedot

Numeeriset menetelmät TIEA381. Luento 12. Kirsi Valjus. Jyväskylän yliopisto. Luento 12 () Numeeriset menetelmät / 33

Numeeriset menetelmät TIEA381. Luento 12. Kirsi Valjus. Jyväskylän yliopisto. Luento 12 () Numeeriset menetelmät / 33 Numeeriset menetelmät TIEA381 Luento 12 Kirsi Valjus Jyväskylän yliopisto Luento 12 () Numeeriset menetelmät 25.4.2013 1 / 33 Luennon 2 sisältö Tavallisten differentiaaliyhtälöiden numeriikasta Rungen

Lisätiedot

Algoritmit 1. Luento 14 Ke 25.2.2015. Timo Männikkö

Algoritmit 1. Luento 14 Ke 25.2.2015. Timo Männikkö Algoritmit 1 Luento 14 Ke 25.2.2015 Timo Männikkö Luento 14 Heuristiset menetelmät Heuristiikkoja kapsäkkiongelmalle Kauppamatkustajan ongelma Lähimmän naapurin menetelmä Kertaus ja tenttivinkit Algoritmit

Lisätiedot

Luetteloivat ja heuristiset menetelmät. Mat , Sovelletun matematiikan tutkijaseminaari, kevät 2008, Janne Karimäki

Luetteloivat ja heuristiset menetelmät. Mat , Sovelletun matematiikan tutkijaseminaari, kevät 2008, Janne Karimäki Luetteloivat ja heuristiset menetelmät Mat-2.4191, Sovelletun matematiikan tutkijaseminaari, kevät 2008, Janne Karimäki Sisältö Branch and Bound sekä sen variaatiot (Branch and Cut, Lemken menetelmä) Optimointiin

Lisätiedot

Johdatus graafiteoriaan

Johdatus graafiteoriaan Johdatus graafiteoriaan Syksy 2017 Lauri Hella Tampereen yliopisto Luonnontieteiden tiedekunta 126 Luku 3 Puut 3.1 Puu 3.2 Virittävä puu 3.3 Virittävän puun konstruointi 3.4 Minimaalinen virittävä puu

Lisätiedot

Duaalisuus kokonaislukuoptimoinnissa. Mat , Sovelletun matematiikan tutkijaseminaari, kevät 2008, Janne Karimäki

Duaalisuus kokonaislukuoptimoinnissa. Mat , Sovelletun matematiikan tutkijaseminaari, kevät 2008, Janne Karimäki Duaalisuus kokonaislukuoptimoinnissa Mat-2.4191, Sovelletun matematiikan tutkijaseminaari, kevät 2008, Janne Karimäki Sisältö Duaalisuus binäärisissä optimointitehtävissä Lagrangen duaalisuus Lagrangen

Lisätiedot

Luento 1: Optimointimallin muodostaminen; optimointitehtävien luokittelu

Luento 1: Optimointimallin muodostaminen; optimointitehtävien luokittelu Luento 1: Optimointimallin muodostaminen; optimointitehtävien luokittelu Merkintöjä := vasen puoli määritellään oikean puolen lausekkeella s.e. ehdolla; siten että (engl. subject to, s.t.) on voimassa

Lisätiedot

Ratkaisu. Tulkitaan de Bruijnin jonon etsimiseksi aakkostossa S := {0, 1} sanapituudelle n = 4. Neljän pituisia sanoja on N = 2 n = 16 kpl.

Ratkaisu. Tulkitaan de Bruijnin jonon etsimiseksi aakkostossa S := {0, 1} sanapituudelle n = 4. Neljän pituisia sanoja on N = 2 n = 16 kpl. iskreetti matematiikka, syksy 00 arjoitus, ratkaisuista. seta 8 nollaa ja 8 ykköstä renkaaksi niin, että jokainen yhdistelmä 0000, 000,..., esiintyy täsmälleen kerran. Vihje: Tulkitse de ruijnin jonon

Lisätiedot

Vektorien pistetulo on aina reaaliluku. Esimerkiksi vektorien v = (3, 2, 0) ja w = (1, 2, 3) pistetulo on

Vektorien pistetulo on aina reaaliluku. Esimerkiksi vektorien v = (3, 2, 0) ja w = (1, 2, 3) pistetulo on 13 Pistetulo Avaruuksissa R 2 ja R 3 on totuttu puhumaan vektorien pituuksista ja vektoreiden välisistä kulmista. Kuten tavallista, näiden käsitteiden yleistäminen korkeampiulotteisiin avaruuksiin ei onnistu

Lisätiedot

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Esimerkkejä polynomisista ja ei-polynomisista ongelmista Esimerkkejä polynomisista ja ei-polynomisista ongelmista Ennen yleisempiä teoriatarkasteluja katsotaan joitain tyypillisiä esimerkkejä ongelmista ja niiden vaativuudesta kaikki nämä ongelmat ratkeavia

Lisätiedot

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut Tietorakenteet ja algoritmit (syksy 0) Toinen välikoe, malliratkaisut. (a) Alussa puu näyttää tältä: Lisätään 4: 4 Tasapaino rikkoutuu solmussa. Tehdään kaksoiskierto ensin oikealle solmusta ja sitten

Lisätiedot

1 Kertaus. Lineaarinen optimointitehtävä on muotoa:

1 Kertaus. Lineaarinen optimointitehtävä on muotoa: 1 Kertaus Lineaarinen optimointitehtävä on muotoa: min c 1 x 1 + c 2 x 2 + + c n x n kun a 11 x 1 + a 12 x 2 + + a 1n x n b 1 a 21 x 1 + a 22 x 2 + + a 2n x n b 2 (11) a m1 x 1 + a m2 x 2 + + a mn x n

Lisätiedot

Markov-ketjut pitkällä aikavälillä

Markov-ketjut pitkällä aikavälillä 2A Markov-ketjut pitkällä aikavälillä Tämän harjoituksen tavoitteena on oppia lukemaan siirtymämatriisista tai siirtymäkaaviosta, milloin Markov-ketju on yhtenäinen ja jaksoton; oppia tunnistamaan, milloin

Lisätiedot

Mat-2.148 Dynaaminen optimointi, mallivastaukset, kierros 5

Mat-2.148 Dynaaminen optimointi, mallivastaukset, kierros 5 Mat-2.148 Dynaaminen optimointi, mallivastaukset, kierros 5 1. Kotitehtävä. 2. Lasketaan aluksi korkoa korolle. Jos korkoprosentti on r, ja korko maksetaan n kertaa vuodessa t vuoden ajan, niin kokonaisvuosikorko

Lisätiedot

Harjoitus 5 ( )

Harjoitus 5 ( ) Harjoitus 5 (24.4.2014) Tehtävä 1 Kuva 1: Tehtävän 1 sallittu joukko S. Optimointitehtävän sallittu alue S on pisteiden (0, 0), (0, 7), (4, 3), (9, 8) ja (9, 0) määräämä viisikulmio. Kyseinen alue saadaan

Lisätiedot

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö Algoritmit 2 Luento 13 Ti 2.5.2017 Timo Männikkö Luento 13 Merkkijonon sovitus Horspoolin algoritmi Laskennallinen vaativuus Päätösongelmat Epädeterministinen algoritmi Vaativuusluokat NP-täydellisyys

Lisätiedot

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö Algoritmit 2 Luento 6 To 28.3.2019 Timo Männikkö Luento 6 B-puun operaatiot Nelipuu Trie-rakenteet Standarditrie Pakattu trie Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 2/30 B-puu 40 60 80 130 90 100

Lisätiedot

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5. 2. MS-A4/A6 Matriisilaskenta 2. Nuutti Hyvönen, c Riikka Kangaslampi Matematiikan ja systeemianalyysin laitos Aalto-yliopisto 5.9.25 Tarkastellaan esimerkkinä lineaarista yhtälöparia { 2x x 2 = x + x 2

Lisätiedot

Algoritmit 1. Luento 10 Ke 11.2.2015. Timo Männikkö

Algoritmit 1. Luento 10 Ke 11.2.2015. Timo Männikkö Algoritmit 1 Luento 10 Ke 11.2.2015 Timo Männikkö Luento 10 Algoritminen ongelman ratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Väliinsijoituslajittelu Valintalajittelu

Lisätiedot

2.1. Tehtävänä on osoittaa induktiolla, että kaikille n N pätee n = 1 n(n + 1). (1)

2.1. Tehtävänä on osoittaa induktiolla, että kaikille n N pätee n = 1 n(n + 1). (1) Approbatur 3, demo, ratkaisut Sovitaan, että 0 ei ole luonnollinen luku. Tällöin oletusta n 0 ei tarvitse toistaa alla olevissa ratkaisuissa. Se, pidetäänkö nollaa luonnollisena lukuna vai ei, vaihtelee

Lisätiedot

= 5! 2 2!3! = = 10. Edelleen tästä joukosta voidaan valita kolme särmää yhteensä = 10! 3 3!7! = = 120

= 5! 2 2!3! = = 10. Edelleen tästä joukosta voidaan valita kolme särmää yhteensä = 10! 3 3!7! = = 120 Tehtävä 1 : 1 Merkitään jatkossa kirjaimella H kaikkien solmujoukon V sellaisten verkkojen kokoelmaa, joissa on tasan kolme särmää. a) Jokainen verkko G H toteuttaa väitteen E(G) [V]. Toisaalta jokainen

Lisätiedot

verkkojen G ja H välinen isomorfismi. Nyt kuvaus f on bijektio, joka säilyttää kyseisissä verkoissa esiintyvät särmät, joten pari

verkkojen G ja H välinen isomorfismi. Nyt kuvaus f on bijektio, joka säilyttää kyseisissä verkoissa esiintyvät särmät, joten pari Tehtävä 9 : 1 Merkitään kirjaimella G tehtäväpaperin kuvan vasemmanpuoleista verkkoa sekä kirjaimella H tehtäväpaperin kuvan oikeanpuoleista verkkoa. Kuvan perusteella voidaan havaita, että verkko G on

Lisätiedot

x j x k Tällöin L j (x k ) = 0, kun k j, ja L j (x j ) = 1. Alkuperäiselle interpolaatio-ongelmalle saadaan nyt ratkaisu

x j x k Tällöin L j (x k ) = 0, kun k j, ja L j (x j ) = 1. Alkuperäiselle interpolaatio-ongelmalle saadaan nyt ratkaisu 2 Interpolointi Olkoon annettuna n+1 eri pistettä x 0, x 1, x n R ja n+1 lukua y 0, y 1,, y n Interpoloinnissa etsitään funktiota P, joka annetuissa pisteissä x 0,, x n saa annetut arvot y 0,, y n, (21)

Lisätiedot

Malliratkaisut Demot

Malliratkaisut Demot Malliratkaisut Demot 3.2.27 Tehtävä. Valmisohjelmistolla voidaan ratkaista tehtävä min c T x s. t. Ax b x, missä x, c ja b R n ja A R m n. Muunnetaan tehtävä max x + 2x 2 + 3x 3 + x s. t. x + 3x 2 + 2x

Lisätiedot

Kurssikoe on maanantaina 29.6. Muista ilmoittautua kokeeseen viimeistään 10 päivää ennen koetta! Ilmoittautumisohjeet löytyvät kurssin kotisivuilla.

Kurssikoe on maanantaina 29.6. Muista ilmoittautua kokeeseen viimeistään 10 päivää ennen koetta! Ilmoittautumisohjeet löytyvät kurssin kotisivuilla. HY / Avoin ylioisto Johdatus yliopistomatematiikkaan, kesä 201 Harjoitus 7 Ratkaisut palautettava viimeistään perjantaina 26.6.201 klo 16.00. Huom! Luennot ovat salissa CK112 maanantaista 1.6. lähtien.

Lisätiedot

Trimmitysongelman LP-relaksaation ratkaiseminen sarakkeita generoivalla algoritmilla ja brute-force-menetelmällä

Trimmitysongelman LP-relaksaation ratkaiseminen sarakkeita generoivalla algoritmilla ja brute-force-menetelmällä Trimmitysongelman LP-relaksaation ratkaiseminen sarakkeita generoivalla algoritmilla ja brute-force-menetelmällä Vesa Husgafvel 19.11.2012 Ohjaaja: DI Mirko Ruokokoski Valvoja: Prof. Harri Ehtamo Työn

Lisätiedot

Mat Lineaarinen ohjelmointi

Mat Lineaarinen ohjelmointi Mat-.4 Lineaarinen ohjelmointi 8..7 Luento 8 Verkkotehtävät, simlex ja duaalisuus (kirja 7.-7., 7.6) Lineaarinen ohjelmointi - Syksy 7 / Motivointi Käsitteitä Verkkotehtävä Verkkosimlex Duaalitehtävä Yhteenveto

Lisätiedot

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, , vastauksia

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, , vastauksia 58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, 652013, vastauksia 1 [6 pistettä] Vastaa jokaisesta alla olevasta väittämästä onko se tosi vai epätosi ja anna lyhyt perustelu Jokaisesta kohdasta

Lisätiedot

min x x2 2 x 1 + x 2 1 = 0 (1) 2x1 1, h = f = 4x 2 2x1 + v = 0 4x 2 + v = 0 min x x3 2 x1 = ± v/3 = ±a x 2 = ± v/3 = ±a, a > 0 0 6x 2

min x x2 2 x 1 + x 2 1 = 0 (1) 2x1 1, h = f = 4x 2 2x1 + v = 0 4x 2 + v = 0 min x x3 2 x1 = ± v/3 = ±a x 2 = ± v/3 = ±a, a > 0 0 6x 2 TEKNILLINEN KORKEAKOULU Systeemianalyysin laboratorio Mat-39 Optimointioppi Kimmo Berg 6 harjoitus - ratkaisut min x + x x + x = () x f = 4x, h = x 4x + v = { { x + v = 4x + v = x = v/ x = v/4 () v/ v/4

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT VERKOT ELI GRAAFIT Lähteet: Timo Harju, Opintomoniste Keijo Ruohonen, Graafiteoria (math.tut.fi/~ruohonen/gt.pdf) HISTORIAA Verkko- eli graafiteorian historia on saanut

Lisätiedot

Kuva Suomen päätieverkko 1 Moottoritiet on merkitty karttaan vihreällä, muut valtatiet punaisella ja kantatiet keltaisella värillä.

Kuva Suomen päätieverkko 1 Moottoritiet on merkitty karttaan vihreällä, muut valtatiet punaisella ja kantatiet keltaisella värillä. POHDIN projekti TIEVERKKO Tieverkon etäisyyksien minimointi ja esimerkiksi maakaapeleiden kokonaismäärän minimointi sekä ylipäätään äärellisen pistejoukon yhdistäminen reitityksillä toisiinsa niin, että

Lisätiedot

OPERAATIOANALYYSI ORMS.1020

OPERAATIOANALYYSI ORMS.1020 VAASAN YLIOPISTO Talousmatematiikka Prof. Ilkka Virtanen OPERAATIOANALYYSI ORMS.1020 Tentti 2.2.2008 1. Yrityksen tavoitteena on minimoida tuotannosta ja varastoinnista aiheutuvat kustannukset 4 viikon

Lisätiedot

j n j a b a c a d b c c d m j b a c a d a c b d c c j

j n j a b a c a d b c c d m j b a c a d a c b d c c j TEKNILLINEN KORKEAKOULU Tietoliikenne- ja tietoverkkotekniikan laitos S-38.115 Liikenneteorian perusteet, Kevät 2008 Demonstraatiot Luento 12 29.2.2008 D12/1 Tarkastellaan verkkoa, jossa on solmua ja linkkiä.

Lisätiedot

Määritelmä Olkoon T i L (V i, W i ), 1 i m. Yksikäsitteisen lineaarikuvauksen h L (V 1 V 2 V m, W 1 W 2 W m )

Määritelmä Olkoon T i L (V i, W i ), 1 i m. Yksikäsitteisen lineaarikuvauksen h L (V 1 V 2 V m, W 1 W 2 W m ) Määritelmä 519 Olkoon T i L V i, W i, 1 i m Yksikäsitteisen lineaarikuvauksen h L V 1 V 2 V m, W 1 W 2 W m h v 1 v 2 v m T 1 v 1 T 2 v 2 T m v m 514 sanotaan olevan kuvausten T 1,, T m indusoima ja sitä

Lisätiedot

Tentissä on viisi tehtävää, jotka arvosteellaan asteikolla 0-6. Tehtävien alakohdat ovat keskenään samanarvoisia ellei toisin mainita.

Tentissä on viisi tehtävää, jotka arvosteellaan asteikolla 0-6. Tehtävien alakohdat ovat keskenään samanarvoisia ellei toisin mainita. Tentissä on viisi tehtävää, jotka arvosteellaan asteikolla 0-6. Tehtävien alakohdat ovat keskenään samanarvoisia ellei toisin mainita. Tehtävä 1 Mitä seuraavat käsitteet tarkoittavat? Monitahokas (polyhedron).

Lisätiedot

Numeeriset menetelmät TIEA381. Luento 6. Kirsi Valjus. Jyväskylän yliopisto. Luento 6 () Numeeriset menetelmät / 33

Numeeriset menetelmät TIEA381. Luento 6. Kirsi Valjus. Jyväskylän yliopisto. Luento 6 () Numeeriset menetelmät / 33 Numeeriset menetelmät TIEA381 Luento 6 Kirsi Valjus Jyväskylän yliopisto Luento 6 () Numeeriset menetelmät 4.4.2013 1 / 33 Luennon 6 sisältö Interpolointi ja approksimointi Polynomi-interpolaatio: Vandermonden

Lisätiedot

= 3 = 1. Induktioaskel. Induktio-oletus: Tehtävän summakaava pätee jollakin luonnollisella luvulla n 1. Induktioväite: n+1

= 3 = 1. Induktioaskel. Induktio-oletus: Tehtävän summakaava pätee jollakin luonnollisella luvulla n 1. Induktioväite: n+1 Matematiikan ja tilastotieteen laitos Matematiikka tutuksi Harjoitus 4 Ratkaisuehdotuksia 4-810 1 Osoita induktiolla, että luku 15 jakaa luvun 4 n 1 aina, kun n Z + Todistus Tarkastellaan ensin väitettä

Lisätiedot

Malliratkaisut Demo 4

Malliratkaisut Demo 4 Malliratkaisut Demo 4 1. tehtävä a) f(x) = 2x + 21. Funktio on lineaarinen, joten se on unimodaalinen sekä maksimoinnin että imoinnin suhteen. Funktio on konveksi ja konkaavi. b) f(x) = x (pienin kokonaisluku

Lisätiedot