Mat Lineaarinen ohjelmointi

Samankaltaiset tiedostot
Mat Lineaarinen ohjelmointi

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

Mat Lineaarinen ohjelmointi

Algoritmit 1. Luento 9 Ti Timo Männikkö

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

Algoritmit 1. Luento 8 Ke Timo Männikkö

13 Lyhimmät painotetut polut

T : Max-flow / min-cut -ongelmat

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

Mat Lineaarinen ohjelmointi

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

Harjoitus 3 ( )

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

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

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Kombinatorinen optimointi

Harjoitus 3 ( )

Suomen rautatieverkoston robustisuus

PARITUS KAKSIJAKOISESSA

Johdatus verkkoteoriaan 4. luento

Algoritmit 2. Luento 12 To Timo Männikkö

Harjoitus 1 ( )

Lyhin kahden solmun välinen polku

Optimoinnin sovellukset

Algoritmit 1. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 12 Ke Timo Männikkö

Malliratkaisut Demot

Harjoitus 1 ( )

Mat Lineaarinen ohjelmointi

Algoritmit 1. Luento 7 Ti Timo Männikkö

Kuljetustehtävä. Materiaalia kuljetetaan m:stä lähtöpaikasta n:ään tarvepaikkaan. Kuljetuskustannukset lähtöpaikasta i tarvepaikkaan j ovat c ij

Johdatus verkkoteoriaan luento Netspace

v 8 v 9 v 5 C v 3 v 4

Johdatus graafiteoriaan

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Mat Lineaarinen ohjelmointi

Ovatko seuraavat väittämät oikein vai väärin? Perustele vastauksesi.

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

10. Painotetut graafit

Algoritmit 2. Luento 13 Ti Timo Männikkö

Kustannustehokkaat riskienhallintatoimenpiteet kuljetusverkostossa (Valmiin työn esittely)

Algoritmit 2. Luento 11 Ti Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö

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

Johdatus graafiteoriaan

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

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Malliratkaisut Demot

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

Datatähti 2019 loppu

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

Lineaarinen optimointitehtävä

Algoritmit 2. Luento 4 To Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Etsintä verkosta (Searching from the Web) T Datasta tietoon Heikki Mannila, Jouni Seppänen

Luku 8. Aluekyselyt. 8.1 Summataulukko

Tarkennamme geneeristä painamiskorotusalgoritmia

FORD KA KA_202054_V5_2013_Cover.indd /06/ :59

Algoritmit 1. Luento 14 Ke Timo Männikkö

Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I.

isomeerejä yhteensä yhdeksän kappaletta.

Mat Lineaarinen ohjelmointi

.. X JOHDATUS TEKOÄLYYN TEEMU ROOS

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)

4.5 Kaksivaiheinen menetelmä simplex algoritmin alustukseen

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

Malliratkaisut Demot

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit

Turingin koneen laajennuksia

Energiatehokkaista reititysmenetelmistä

Lineaarinen optimointi. Harjoitus 6-7, Olkoon A R m n, x, c R ja b R m. Osoita, että LP-tehtävän. c T x = min!

Totaalisesti unimodulaariset matriisit voidaan osoittaa olevan rakennettavissa oleellisesti verkkomalleihin liittyvistä matriiseista

Harjoitus 6 ( )

Kognitiivinen mallintaminen 1

Konsensusongelma hajautetuissa järjestelmissä. Niko Välimäki Hajautetut algoritmit -seminaari

4. Luennon sisältö. Lineaarisen optimointitehtävän ratkaiseminen Simplex-menetelmä

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.

Algoritmit 2. Luento 10 To Timo Männikkö

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Reiluus. Maxmin-reiluus. Tärkeä näkökohta best effort -tyyppisissä palveluissa. Reiluuden maxmin-määritelmä

Ellipsoidimenetelmä. Samuli Leppänen Kokonaislukuoptimointi. S ysteemianalyysin Laboratorio

Oikeasta tosi-epätosi -väittämästä saa pisteen, ja hyvästä perustelusta toisen.

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Algoritmi on periaatteellisella tasolla seuraava:

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

4. Kokonaislukutehtävän ja LP:n yhteyksiä

Graateorian maksimivirtausalgoritmi

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

Ei-yhteydettömät kielet [Sipser luku 2.3]

Maksimit ja minimit 1/5 Sisältö ESITIEDOT: reaalifunktiot, derivaatta

Eräs keskeinen algoritmien suunnittelutekniikka on. Palauta ongelma johonkin tunnettuun verkko-ongelmaan.

Malliratkaisut Demot

Department of Mathematics, Hypermedia Laboratory Tampere University of Technology. Roolit Verkostoissa: HITS. Idea.

Lineaariavaruudet. Span. Sisätulo. Normi. Matriisinormit. Matriisinormit. aiheita. Aiheet. Reaalinen lineaariavaruus. Span. Sisätulo.

Informaation arvo. Ohjelmistotekniikan laitos OHJ-2550 Tekoäly, kevät

Transkriptio:

Mat-.40 Lineaarinen ohjelmointi 5..007 Luento 9 Verkkotehtävän erikoistapauksia (kirja 7., 7.5, 7.9, 7.0) Lineaarinen ohjelmointi - Syksy 007 /

Luentorunko (/) Verkkotehtävän ominaisuuksia Kuljetustehtävä Töiden järjestely Lyhyimmän polun tehtävä Bellman-Ford Dijkstra Lineaarinen ohjelmointi - Syksy 007 /

Luentorunko (/) Maksimivirtaustehtävä Ford-Fulkerson Minimivirityspuu Yhteenveto Lineaarinen ohjelmointi - Syksy 007 /

Verkkotehtävän ominaisuuksia (/) a) Jokainen verkkotehtävä voidaan muuttaa tehtäväksi, jossa yksi lähde ja yksi nielu b 4 b 4 s b t 5 b 5 + b b b + b 4 5 b + u = b, l = si i it b i b) Jokainen verkkotehtävä voidaan muuttaa lähteettömäksi ja nieluttomaksi (kiertokulku) b s u ts = b, c ts = M t b Lineaarinen ohjelmointi - Syksy 007 / 4

Verkkotehtävän ominaisuuksia (/) c) Mahdollinen solmun kapasiteettirajoite voidaan eliminoida d) Kaarien kapasiteettien alarajat voidaan yleistää nolliksi (viime kerran kotitehtävä) b i bi i i g i u ' = ii g i i Lineaarinen ohjelmointi - Syksy 007 / 5

Kuljetustehtävä (/ Kuljetustehtävä: lähteistä i tarjonnat s i minimikustannuksella nieluihin j kysynnöin d j Erikoistapaus yleisestä tehtävästä kaikki solmut joko lähteitä tai nieluja: min s. e. m i= f n j= ij c ij ( i, j) A f f ij ij f ij = = 0, d s i j,, j=,..., n i=,..., m i, j Lineaarinen ohjelmointi - Syksy 007 / 6

Kuljetustehtävä (/) Kaikki verkkotehtävät voidaan muuttaa kuljetustehtävämuotoon Idea: Solmuilla kysyntää niistä lähtevän tavaran kuljetuksen hoitamiseen. Kaarilla tarjontaa kapasiteettinsa verran. Tavaran kotiin jättäminen ei maksa mitään, kuljetus toiseen solmuun kaarikustannuksen verran Kuljtetustehtävälle kehitettyjä algoritmeja voi siis hyödyntää yleisemmissä tehtävissä! Lineaarinen ohjelmointi - Syksy 007 / 7

Töiden järjestely (/) Työt ja tekijät halutaan yhdistää kustannusoptimaalisella tavalla Myös nimellä parinmuodostus (assignment problem) Erikoistapaus kuljetustehtävästä: nieluilla ja lähteillä yksikkötarjonnat/-kysynnät Leipuri Kitaristi Kampaaja 4 4 4 Häävalssin säestys Morsiamen kampaus Hääkakku Lineaarinen ohjelmointi - Syksy 007 / 8

Töiden järjestely (/) Ratkaisu esim. huutokauppa-algoritmilla Ei käsitellä; ideana huutokaupata työt tekijöille Kuljetustehtävästä töiden järjestelyksi jakamalla lähteet ja nielut yksiköiksi Huutokauppa-algoritmin voi yleistää kuljetustehtävälle ja sitä kautta yleiselle verkkotehtävälle! Huutokauppa-algoritmi onkin yleisin kuljetustehtävän ratkaisutapa Lineaarinen ohjelmointi - Syksy 007 / 9

Lyhyimmän polun tehtävä (/4) Etsitään lyhyintä mahdollista reittiä kahden solmun välillä (kaaren pituus = kaaren kustannus) Esim. datapakettien reititys: Tukiasema Internet Palvelin Analogia Kytkimet ja verkkolaitteet = solmut Tukiasema Palvelin Palvelin Datayhteydet Minimipolku = kaaret = nopein yhteys Tukiasema Palvelin Lineaarinen ohjelmointi - Syksy 007 / 0

Lyhyimmän polun tehtävä (/4) Toinen esim. projektin hallinta: Aloitus Projekti koostuu töistä, joista jotkin pitää olla suoritettu ennen kuin toiset voi aloittaa. Halutaan minimoida projektin kokonaiskestoa. Etsitään pisintä polkua eli -(lyhyintä polkua) Materiaalien tilaus Minimipolku ja projektit Pisin polku Pisimmän polun pituus Kaaret Pisimmän polun kaaret 4 5 Henkilöstön palkkaus Koulutus Materiaalien kuljetus Koulutus Rakentaminen4 = kriittinen polku = projektin kesto = tehtävät = kriittiset tehtävät Tällainen tehtävä laskareissa! Lineaarinen ohjelmointi - Syksy 007 /

Lyhyimmän polun tehtävä (/4) Useita nimikettä korjaavia (label correcting) ratkaisualgoritmeja Bellman-Ford (käsitellään) Lisäksi mm. D Esopo-Pape, Floyd, SLF, LLL, Kynnysalgoritmi... Vaihtoehtona Dijkstran algoritmi, joka on nimikkeen asettava menetelmä (label setting method). Lineaarinen ohjelmointi - Syksy 007 /

Lyhyimmän polun tehtävä (4/4) Kullekin solmulle i määritelty nimike (label) p i (skalaari tai ääretön) Tulkinta nimikkeelle p i : solmun i etäisyys lähtösolmusta jotakin löydettyä polkua pitkin (vrt. duaalimuuttuja!) Algoritmi etsii polkuja solmujen välillä ja päivittää nimikkeitä vastaavasti Lineaarinen ohjelmointi - Syksy 007 /

Lyhyimmän polun tehtävä: Optimaalisuusehdot Olkoon p, p,, p N solmujen nimikkeet, joille: p j p i + c ij, ( i, j) Α () ja olkoon P polku, joka alkaa solmusta i ja päättyy solmuun i k. Jos p j = p i + c ij, () kaikille P:n kaarille (i,j), P on lyhyin polku i :stä i k :hon. Ratkaisualgoritmit perustuvat näihin ehtoihin. Lineaarinen ohjelmointi - Syksy 007 / 4

Lyhyimmän polun tehtävä: Bellman-Ford (/). Alustus: p n =0, muille solmuille ääretön. Tutkittavien lista S={n}. Iteraatio: poista jokin solmu j S:stä. Tutki kaaret (i,j) ja aseta p i :=min{p i,c ij +p j }. Jos p i muuttuu, lisää solmu i S:ään.. Jos S on tyhjä, algoritmi terminoituu. Muuten, palaa askeleeseen. 4. Lyhyimmät polut saadaan tarkastelemalla mitä solmua tutkittaessa (poistettaessa) mikin solmu sai lopullisen nimikkeensä Lineaarinen ohjelmointi - Syksy 007 / 5

Lyhyimmän polun tehtävä Bellman-Ford (/) Bellman-Ford korjaa nimikkeitä aina lyhyemmän polun löytyessä Solmut saattavat siis tulla tutkittavien listaan useampaan kertaan Löytää lyhyimmät polut kaikista solmuista loppusolmuun Sallii negatiiviset kaaren pituudet hyödyllistä projektinhallintatehtävässä (laskarit!) Lineaarinen ohjelmointi - Syksy 007 / 6

7 Esimerkki: Iteraatiot ja 9 Alustus: p = {,,, 0}, S={4} 9 8 8 7 7 4 4 0 0 Poistetaan solmu 4 S:stä Kaari (,4): p := p 4 + c 4 =, solmu S:ään Kaari (,4): p := p 4 + c 4 = 7, solmu S:ään Nimikkeet: p = {, 7,, 0}, S={,} Poistetaan solmu S:stä Kaari (,): p := p + c = 9, solmu S:ään Lineaarinen ohjelmointi - Syksy 007 / 7

9 9 9 9 8 8 7 7 7 7 Esimerkki: Iteraatiot ja 4 4 4 0 0 Nimikkeet: p = {9, 7,, 0}, S={,} Poistetaan solmu S:stä Kaari (,): p + c = 0 > p Nimikkeet: p = {9, 7,, 0}, S={} Poistetaan solmu S:stä Ei tutkittavia kaaria! S tyhjä, eli algoritmi terminoituu Mitä solmua poistettaessa lopulliset nimikkeet saatiin? Lineaarinen ohjelmointi - Syksy 007 / 8

Lyhyimmän polun tehtävä: Dijkstra (/). Alustus: p =0, muille solmuille ääretön. Tutkittavien lista S={}.. Iteraatio: poista S:stä pienintä nimikettä vastaava solmu i. Tutki kaaret (i,j) ja aseta p j :=min{p j,c ij +p i }. Jos p j muuttuu, lisää j S:ään.. Jos S on tyhjä, algoritmi terminoituu. Muuten palaa askeleeseen. 4. Lyhyimmät polut löydetään tarkastelemalla mitä solmua tutkittaessa (poistettaessa) mikin solmu sai lopullisen nimikkeensä Lineaarinen ohjelmointi - Syksy 007 / 9

Lyhyimmän polun tehtävä: Dijkstra (/) Algoritmi asettaa solmuille lopulliset nimikkeet niiden poistuessa tutkittavien listalta S Tämän jälkeen solmu ei enää palaa S:ään Löytää lyhyimmät polut alkusolmusta kaikkiin muihin solmuihin Algoritmi kuitenkin vaatii, että kaarten kustannukset (pituudet) ei-negatiivisia Lineaarinen ohjelmointi - Syksy 007 / 0

Esimerkki:. iteraatiokierros S= {} Nimikkeet p = {0,,,, } p i min p = 0, poistettava solmu i = = j j S 0 0 4 0 5 Kaari (, ): p := p + c =. Solmu tutkittavien listaan Kaari (, ): p := p + c =. Solmu tutkittavien listaan Lineaarinen ohjelmointi - Syksy 007 /

= j j S. iteraatiokierros 0 0 4 5 0 S = {, } Nimikkeet p = {0,,,, } p i min p =, poistettava solmu i = Kaari (, ): p + c = = p Kaari (, 4): p 4 := p + c 4 = 4. Solmu 4 tutkittavien listaan Lineaarinen ohjelmointi - Syksy 007 /

. iteraatiokierros S = {, 4} Nimikkeet p = {0,,, 4, } p i = min p =, poistettava solmu i = j S j 0 0 4 5 0 4 Kaari (, ): p + c = > p Kaari (, 4): p + c 4 = < p 4, asetetaan p 4 := Kaari (, 5): p 5 := p + c 5 =. Solmu 5 tutkittavien listaan Lineaarinen ohjelmointi - Syksy 007 /

S = {4, 5} Nimikkeet p = {0,,,, } 4. iteraatiokierros p i = min p =, poistettava solmu i = 5 ei tutkittavia kaaria j S j 0 0 4 5 0 Lineaarinen ohjelmointi - Syksy 007 / 4

5. iteraatiokierros 0 0 4 5 0 Lopullisen nimikkeen S = {4} saanut solmu Nimikkeet p = {0,,,, } p i = min p j =, poistettava solmu i = 4 j S Kaari (4, 5): p 4 + c 45 = > p 5 S on nyt tyhjä, joten algoritmi päättyy 4 5 Mitä solmua tutkittiin? Lineaarinen ohjelmointi - Syksy 007 / 5

Maksimivirtaustehtävä (/) Verkko, jossa on yksi lähde ja yksi nielu kustannuksia ei huomioida Tehtävänä kuljettaa mahdollisimman paljon virtausta lähteestä nieluun kaarien kapasiteettien [0,u ij ] rajoissa (esim. logistiikka) Lineaarinen ohjelmointi - Syksy 007 / 6

Maksimivirtaustehtävä (/) Kunkin kaaren virtaus ja maksimikapasiteetti kertovat kuljetusverkon pullonkauloista ja turhista reiteistä 7/7 L /5 / A /0 Bo 0/0 4/6 Br 0/0 W Pa 4/4 0/0 Pr 8/8 Be 4/ Lineaarinen ohjelmointi - Syksy 007 / 7

Maksimivirtaustehtävä (/) Määritelmä 7.: Olk. f käypä virtaus verkossa. Polku lähteestä s nieluun t on täydentävä polku (augmenting path), jos f ij <u ij kaikilla polun eteenpäin suunnatuilla ja f ij >0 taaksepäin suunnatuilla kaarilla Ts. täydentävää polkua P pitkin on mahdollista työntää lisää virtausta, kuitenkin enintään δ ( P) = min{ min ( u ( i, j) F ij f ij ), min ( i, j) B f ij } Lineaarinen ohjelmointi - Syksy 007 / 8

Maksimivirtaustehtävä: Ford-Fulkerson Fulkerson (/4) Ford-Fulkerson algoritmi: ) Alussa käypä virtaus f ) Etsitään täydentävä polku ) Jos täyd. polkua ei löydy, maksimivirtaus on löydetty 4) Jos täyd. polku P löytyy: a) Jos δ (P) < työnnetään δ (P) yksikköä virtausta polkua pitkin ja palataan askeleeseen b) Jos δ (P) =, tehtävä on rajoittamaton Lineaarinen ohjelmointi - Syksy 007 / 9

Maksimivirtaustehtävä: Ford-Fulkerson Fulkerson (/4) Miten täydentävä polku löydetään? Nimikkeet avuksi! Idea: Aloitetaan lähdesolmusta s tutkitaan lähteekö solmusta/tuleeko solmuun kaaria, joihin voi työntää lisää virtausta. Tutkitaan samaan tapaan tällaisten kaarten maalisolmut jne, kunnes joko moisia kaaria ei enää löydy tai ollaan päästy nielusolmuun t, jolloin vastaava polku on täydentävä. Lineaarinen ohjelmointi - Syksy 007 / 0

Maksimivirtaustehtävä: Ford-Fulkerson Fulkerson (/4) Nimikealgoritmi täydentävän polun etsintään:. Alustus: joukko I={s}. Iteraatio: I:ssä nimikkeelliset solmut, joista lähteviä kaaria ei vielä tutkittu. Jos t I tai jos I =, algoritmi terminoituu. Muuten valitaan solmu i I poistettavaksi I:stä. Tutkitaan kaaret (i,j) ja (j,i). Jos ( i, j) A, f ij < u ij, annetaan j:lle nimike (jos sillä ei vielä ole) ja lisätään se joukkoon I 4. Jos ( j, i) A, f > 0, tehdään kuten edellä. ji Lineaarinen ohjelmointi - Syksy 007 /

Maksimivirtaustehtävä: Ford-Fulkerson Fulkerson (4/4) Jos täydentäviä polkuja löytyy useita, valitaan niistä se, jossa vähiten kaaria Tällöin Ford-Fulkerson ratkaisee maksimivirtaustehtävän polynomiajassa Pienissä tehtävissä (käsin väännettävissä) kannattaa kuitenkin tyytyä ensin löydettyyn Lineaarinen ohjelmointi - Syksy 007 /

Esimerkki (/) Alkutilanne: s 5/6 / / / /4 / / /5 Täyd. polku P saadaan tutkimalla miltä solmulta t sai nimikkeensä, miltä tämä omansa jne. Täten P={s,,,t}. 4 / t Täydentävän polun haku:. I={s}. Tutkitaan solmu s. Nimikkeet solmuille ja. I={,}. Tutkitaan solmu. Nimike solmulle 4.. I={,4}. Tutkitaan solmu 4. Ei nimikkeitä. 4. I={}. Tutkitaan solmu. Nimike solmulle. 5. I={}. Tutkitaan solmu. Nimike solmulle t => täydentävä polku löydetty Lineaarinen ohjelmointi - Syksy 007 /

s 5/6 / / / /4 Esimerkki (/) / / /5 4 / t P:tä pitkin työnnettävä lisävirtaus: δ ( P) = min{ min ( u ( i, j) F ij ), min ( i, j) B = min{min{( ),(5 )},} = min{,} = f ij f ij } s 5/6 / 0/ / /4 / / 4/5 4 / Päivitetään verkko t Lineaarinen ohjelmointi - Syksy 007 / 4

Esimerkki (/) s 5/6 / / 0/ /4 / 4/5 / 4 / t Täydentävän polun haku:. I={s}. Tutkitaan solmu s. Nimike solmulle.. I={}. Tutkitaan solmu. Nimike solmulle 4. Pullonkaulat punaisella, turha reitti katkoviivalla. I={4}. Tutkitaan solmu 4. Ei nimikkeitä. 4. I tyhjä ei täydentävää polkua. Maksimivirtaus löydetty. Lineaarinen ohjelmointi - Syksy 007 / 5

Minimivirityspuu (/4) Puu: yhtenäinen verkko, joka ei sisällä syklejä Verkon virityspuu: puu, joka sisältää kaikki ko. verkon solmut Minimivirityspuutehtävä: etsitään verkolle sellainen virityspuu, että sen kaarien kustannusten summa on minimissä Lineaarinen ohjelmointi - Syksy 007 / 6

Minimivirityspuu (/4) Esim. Espooseen rakennettava mahdollisimman halvalla pyörätieverkosto siten, että kaikkiin oleellisiin paikkoihin päästään (ei välttämättä pyöräilijän kannalta kovinkaan järkevästi) Kirjasto Kauppa Ostari %&# @$!!! Teatteri Uimahalli Kiska Otaniemi Otaniemeläinen pyöräilijä halajaa ostarille Lineaarinen ohjelmointi - Syksy 007 / 7

Minimivirityspuu (/4) Ratkaisualgoritmi:. Olk. suuntaamaton verkko (N,A) jonka kaarille määrätty kustannukset. Alustus puulla (N,A ), jossa yksi solmu eikä yhtään kaarta (A tyhjä). Askeleella k<n puu (N k,a k ). Tutkitaan kaikki kaaret ( i, j) A joille i Nk, j Nk. Valitaan puuhun pienintä kustannusta vastaava kaari ja sen maalisolmu => (N k+,a k+ ).. Jatketaan kunnes k=n. Ts. kierroksen k puulle etsitään lyhyintä lisättävää oksaa, joka vie johonkin puuhun kuulumattomaan solmuun Lineaarinen ohjelmointi - Syksy 007 / 8

Kirjasto 7 Teatteri 5 6 Kauppa Ostari Minimivirityspuu (4/4) 4 Uimahalli Kiska Otaniemi. N ={}, A tyhjä. Tutkitaan :ä sivuavat kaaret, joista (,) lyhyin.. N ={,}, A ={(,)}. Tutkitaan solmuja ja sivuavat kaaret, joiden toinen pää ei N :ssa eli {(,4), (,),(,)}. Lyhyin kaari (,).. N ={,,}, A ={(,),(,)}. Tutkittavat kaaret {(,4),(,4),(,5),(,6)}. 4. N 4 ={,,,6}, A 4 ={A,(,6)}. Tutkittavat kaaret {(,4),(,4),(,5),(6,5),(6,7)}. 5. N 5 ={,,,5,6}, A 5 ={A 4,(6,5)}. Tutkittavat kaaret {(,4),(,4),(5,4),(5,7),(6,4),(6,7)}. 6. N 6 ={,,,4,5,6}, A 6 ={A 5,(5,4)}. Tutkittavat kaaret {(5,7),(6,7)}. Lineaarinen ohjelmointi - Syksy 007 / 9

Yhteenveto Verkkotehtävällä useita ekvivalentteja muotoja: Yleinen tehtävä Kuljetustehtävä Töiden järjestely Lyhyimmän polun tehtävän ratkaisualgoritmit perustuvat nimikkeisiin Bellman-Ford, Dijkstra Maksimivirtaustehtävän ratkaisualgoritmit etsivät täydentävää polkua Ford-Fulkerson Minimivirityspuu rakennetaan etsimällä aina lyhyintä oksaa senhetkiselle puulle Lineaarinen ohjelmointi - Syksy 007 / 40