8. Verkkomallit Totaalisesti unimodulaariset matriisit voidaan osoittaa olevan rakennettavissa oleellisesti verkkomalleihin liittyvistä matriiseista (P. D. Seymour, Journal of Combinatorial Theory (B), 8 (980),0-9). Verkkomalleilla on muutenkin laaja käyttö. Seuraavassa esitellään verkkoteorian peruskäsitteitä optimointisovellusten näkökulmasta. Graafi (graph) rakentuu solmuista (node, vertex) ja niitä yhdistävistä kaarista (arc, edge). Graafin rakenne voidaan antaa parilla (V,E), missä V on solmujen joukko ja E on järjestämättömien solmuparien avulla ilmaistujen kaarien joukko. Tässä V ja E oletetaan äärellisiksi. Esimerkki. Viiden solmun graafi (V,E), missä V = {,,,,} ja E = {(,),(,),(,),(,,),(,),(,),(,),(,)}. Merkintä (i,j) tarkoittaa, että solmuja i ja j yhdistää kaari. Polku solmusta i solmuun j on jono kaaria siten, että ensimmäinen alkaa solmusta i ja viimeinen päättyy solmuun j: (i,i ), (i,i ), (i,i ),,(i n-,i n ),(i n,j). Polku on silmukka, jos i = j. Edellisessä esimerkissä (,),(,), (,) muodostavat polun, joka on silmukka. Graafi on yhtenäinen, jos sen jokaisesta solmusta päästään polkua pitkin sen jokaiseen toiseen solmuun.
9 Yhtenäinen graafi on puu, jos siinä ei ole silmukoita. Graafin (V,E) aligraafi on graafi, joka sisältää osan V:n solmuista ja osan E:n kaarista. Graafin virittävä puu on sellainen aligraafi, joka sisältää graafin kaikki solmut ja on puu. Virittävä puu yhdistää siis kaikki graafin solmut, mutta ei yleensä sisällä alkuperäisen graafin kaikkia kaaria. Alla on edellisen esimerkin (eräs) virittävä puu: Jos kaariin on liitetty solmujen väliset etäisyydet, niin graafin minimaalinen virittävä puu on sellainen, jolla kaarien yhteenlaskettu etäisyys on minimissään. Esimerkki. Oheiseen graafiin on kaarien yhteyteen merkitty etäisyydet. Solmusta lähtemällä on muodostettu minimaalinen virittävä puu. Periaate on, että aina haetaan lyhin linkki jo muodostetun puun ja vielä ulkopuolella olevien solmujen välille. (Tämä on yksi niistä harvoista probleemoista, joissa ns. ahne algoritmi antaa aina optimin.)
0 8 7 0 8 0 9 7 9 7 7 9
Verkko (network) on tässä esityksessä suunnattu graafi eli digraafi, jolloin jokaiseen kaareen liittyy aina suunta. Sallimme myös, että samojen solmujen välillä on useita kaaria. Verkon rakenne voidaan nytkin määrittää parilla (V,E), missä V on solmujoukko, mutta E on nyt järjestettyjen solmuparien multijoukko. Multijoukko eroaa tavallisesta joukon käsitteestä siten, että alkio voi esiintyä siinä monta kertaa, alkion multiplisiteetin mukaisesti. Esimerkki. Viiden solmun verkko, jossa V={,,,,} ja E = {(,), (,), (,), (,),(,),(,),(,),(,)}. Tässä (i,j) tarkoittaa suunnattua kaarta solmusta i solmuun j. Kaari (,) esiintyy kahteen kertaan eli solmusta solmuun menee kaksi rinnakkaista kaarta, kaaren (,) multiplisiteetti on. Kaarella (i,j) on suunta i:stä j:hin eli (,) ja (,) ovat eri kaaria, vastakkaissuuntaisia. Verkon rakenne voidaan määrittää myös vierussolmumatriisilla A = (a ij ), missä a ij = solmusta i solmuun j menevien kaarien lukumäärä. Siis a ij = 0, jos kaarta ei ole, a ij =, jos kaaria on yksi, ja a ij = k, jos rinnakkaisia kaaria solmusta i solmuun j on k. Mikä on edellisen esimerkin vierussolmumatriisi? Verkkoon liitetään virtaus (flow), joka kulkee solmusta toiseen kaaria pitkin kaaren suuntaan. Virtausta voi syntyä solmussa, jolloin solmu on lähdesolmu tai sitä voi upota solmuun, jolloin solmu on kohdesolmu. Lähdesolmun j tarjonta (supply) on annetulla välillä [s j,s j ] joka voi olla yksi pistekin (s j =s j ) tai mitä hyvänsä ei-negatiivista: [0, ).
Samoin kohdesolmun j kysyntä (demand) on annetulla välillä [d j,d j ], joka sekin voi olla määrätty täsmälliseksi arvoksi (d j =d j ) tai olla määrittelemätön: [0, ). Jos solmu ei ole kumpaakaan edellä mainittua tyyppiä, sitä voidaan sanoa kauttakulkusolmuksi. (Solmu ei voi olla samanaikaisesti lähde- ja kohdesolmu, mutta voi olla samalla lähde- ja kauttakulkusolmu tai kohdeja kauttakulkusolmu.) 00 0 (0,00) (0,80) (0,0) A (0,0) (0,0) 7 (0,0) B 8 (0,0) Virtausta ei synny eikä häviä verkossa muuten kuin lähde- ja kohdesolmuissa, ja virtauksen säilymislaki vaatii kussakin solmussa, että tuleva virtaus = lähtevä virtaus (jolloin tulevaan virtaukseen luetaan mahdollinen lähdesolmun tuotto ja lähtevään virtaukseen mahdollinen kohdesolmun kulutus).
Kaaren (i,j) kannalta virtauksella voi olla ala - ja yläraja, joka ilmaistaan välinä [l ij,u ij ]. Tämä väli voi olla myös yksi piste, jolloin se pakottaa virtauksen kaarella luvuksi l ij = u ij tai virtaus voi olla vapaa: [0, ). Virtaus, joka toteuttaa virtauksen säilymislain ja kaarien rajoitukset, on käypä virtaus. Sen arvot x ij kullakin kaarella (i,j) kertovat virtausongelman käyvän ratkaisun. Kun kaariin (i,j) liitetään vielä virtauskustannus c ij, saadaan verkon minimikustannusvirtausmalli (Minimal Cost Network Flow Model), jossa haetaan virtausta, joka minimoi kokonaiskustannukset. Hyvin moni optimoinnin ja operaatiotutkimuksen ongelma voidaan pukea verkon minimikustannusvirtausmalliksi. Esimerkki. Klassinen kuljetusongelma (transportation problem) on virtausongelma luontevimmillaan. Kuljetuskustannukset minimoiva verkkomalli saadaan kun tehtaat otetaan lähdesolmuiksi ja asiakkaat kohdesolmuiksi. Esimerkki. Kohdistusongelma eli Assignment Problem On sijoitettava n työntekijää m:ään työhön (n m), siten että töihin käytetty kokonaiskustannus on mahdollisimman pieni. Kun työntekijän i tekee työn j, siitä aiheutuu kustannus c ij.. Kutakin työtä voi tehdä vain yksi työntekijä ja hän tekee saamansa työn loppuun. Kenellekään ei anneta useampaa kuin yksi työ. Kaikki työt on tehtävä. Verkkomallissa voidaan nyt virtaavaksi suureeksi valita vaikka työntekijät, jotka menevät ("virtaavat") siihen työhön, johon heidät valitaan.
Verkon rakenne ja siihen liittyvä virtaus voidaan kuvata algebrallisesti lineaarisina yhtälöinä ja epäyhtälöinä, jolloin virtauksiin liittyvät optimointitehtävät muotoutuvat matemaattisen optimoinnin malleiksi lineaarisin rajoitusehdoin. Erityisesti minimikustannusvirtausmalli on silloin lineaarisen optimoinnin tehtävä ja kokonaislukuoptimointiin kuuluva, jos virtauksen ainoa sallittu muoto on kokonaisluku. Verkon (V,E) algebrallisen mallin muuttujat ovat kaarien virtaukset x ij, (i,j) E sekä lähdesolmujen i tarjontamuuttujat s i ja kohdesolmujen j kysyntämuuttujat d j. Jokaista verkon solmua i V kohti saadaan virtauksen säilymislain johdosta säilymisyhtälö, jossa tuleva virtaus + solmussa syntyvä virtaus = lähtevä virtaus + solmussa kulutettava virtaus. Koska mikään solmu ei voi olla samalla lähde- ja kohdesolmu, on siis säilymisyhtälössä solmusta lähtevien ja sinne tulevien kaarien virtausmuuttujat ja mahdollisesti joko tarjontamuuttuja tai kysyntämuuttuja (mutta ei molempia).
Säilymisyhtälöiden tyypit ovat siis seuraavat: Lähdesolmun i yhtälö x x + s = 0 ji ij i ( ji, ) E ( i, j) E Kohdesolmun j yhtälö x x d = 0 ij ji j (, ij) E ( ji,) E Kauttakulkusolmun k yhtälö xik xkj = 0 (, ik) E ( k, j) E
Virtausmuuttujille x ij on lisäksi mahdolliset ala- ja ylärajat: Kaaren (i,j) virtauksen rajat l ij x ij u ij Lisäksi lähdesolmun i tarjonnalle on tarjontarajat ja kohdesolmulle j kysyntärajat: Lähdesolmun i tarjonnan rajat s i s i s i Kohdesolmun j kysynnän rajat d j d j d j Koska virtaus oletetaan aina ei-negatiiviseksi (virtauksen suuntaan), niin edellä olevat rajat ovat virheettömässä datassa ei-negatiivisia. Jos rajoja ei ole erikseen annettu, niiden oletusarvona on alaraja 0 ja yläraja. Edellä mainitut säilymisyhtälöt ja rajat toteuttavat virtaukset x ij, s i ja d j muodostavat verkon virtausongelman käyvän ratkaisun.
7 Optimivirtausmalliin liittyy vielä lineaarinen kohdefunktio. Kuhunkin kaareen (i,j) liittyy luku c ij, joka on luonteeltaan kustannus (minimointitehtävät) tai hyöty (maksimointitehtävät). Kohdefunktio f(x) = c ij x ij ( i, j) E Minimikustannusvirtausmallissa kohdefunktio ilmoittaa virtauskustannusten summan, jota minimoidaan. Muuttujavektori x sisältää kaikki virtaukset x ij yhdessä pystyvektorissa siten, että toinen indeksi kulkee nopeammin kuin ensimmäinen (sanakirjajärjestys x, x,, x, x, ). - (0,0) (0,0) - - (00,00) - - - (0,00) -8 - (0,0) Kun muuttujat ryhmitellään säilymisyhtälöissä siten, että samaan kaareen liittyvät muuttujat ovat samalla kohdalla, tulevat yhtälöryhmän kerroinmatriisissa sarakkeet (pystyrivit) kertomaan, mihin solmuun kaari on tulossa (+) ja mistä solmusta lähdössä (-). Koska jokaisella kaarella on täsmälleen yksi alku- ja loppusolmu, on siis jokaisella sarakkeella täsmälleen yksi ja -. Vaakarivit taas vastaavat solmuja, ja niillä voi olla pelkästään :siä, pelkästään (-):siä tai yleisimmin molempia vaihtelevin lukumäärin siitä riippuen, kuinka moni kaari solmuun tulee ja siitä lähtee.
8 Kyseisen yhtälöryhmän kerroinmatriisi on verkon solmu-kaari-matriisi eli (ns. täysi) insidenssimatriisi. Minimikustannusvirtausmalli on siis matriisimuodossa min f(x) = c T x Ax + s - d = 0 l x u s s s d d d Tässä A on verkon insidenssimatriisi (kokoa m n,kun verkossa on m solmua ja n kaarta), s on tarjontavektori, m -vektori, jossa on solmujen tuotannot, d on kysyntävektori, m -vektori, jossa on solmujen kysynnät, x on virtausvektori, n -vektori, jossa on kaarien virtaukset ja c on kustannusvektori, n -vektori, jossa on kaarien kustannukset. Kyseessä on siis lineaarisen optimoinnin probleema, muuttujina vektorit x, s ja d (joiden komponenteista osa voi olla vakioitakin).
9 Huomattakoon, että tässä mallissa s ja d eivät ole suoraan kaariin liittyviä virtauksia eikä niihin siitä syystä liity kustannuskertoimia. Jos niihin halutaan liittää kustannuksia, lisätään malliin niitä varten tarpeelliset solmut ja kaaret. Edellä määritelty insidenssimatriisi A on rakenteeltaan totaalisesti unimodulaarinen, joten mikäli kysyntä ja tarjonta ovat kokonaislukuja, niin optimivirtaus on automaattisesti kokonaislukuarvoista. Minimikustannusvirtausmalli sopii hyvin moneen tilanteeseen, varsinkin jos "virtaava" suure valitaan sopivasti. Esimerkki. Tieverkosta on haettava lyhin reitti kahden paikan välille. Miten mallintaisit probleemaa minimikustannusvirtauksella?
0. Yleistetyt verkot Edellä tarkastetut verkkomallit ovat olleet ns. puhtaita verkkomalleja, koska niissä virtaus ei ole kaaria pitkin kulkiessaan voinut kadota eikä lisääntyä. Virtausta on syntynyt vain lähdesolmuissa ja poistunut vain kohdesolmujen kautta. Usein on kuitenkin tarpeen mallintaa virtausta, joka kaarella lisääntyy (esimerkiksi rahavirta kasvaa korkoa) tai vähenee (kaari vuotaa). Tällaisia verkkoja sanotaan yleistetyiksi verkoiksi (generalized networks, network flows with gains and losses). Puhtailla verkkomalleilla oli se ratkaisemisen kannalta huomattava etu, että jos kaikki parametrit olivat verkossa kokonaislukuja, myös optimaaliseksi virtaukseksi löytyi automaattisesti aina kokonaislukuarvoinen virtaus. Yleistettyjen virtausten tapauksessa tämä etu menetetään, mikä on haitta silloin, kun virtauksen tulisi olla vain kokonaislukuarvoista (esimerkiksi binääristä). Toisaalta etuina yleistettyjen verkkojen käytössä ovat laajemmat mahdollisuudet mallintamisessa. Esimerkiksi virtaus voi muodollisesti muuttua paitsi määrältään myös laadultaan toiseksi, raaka-aineiden virtaus puolivalmisteiksi ja ne edelleen lopputuotteiksi jne..08 A 0 Z
Yleistetyn verkon kaaren, ns. yleistetyn kaaren, virtausta voidaan muuttaa muunnoskertoimella. Virtaus on solmusta i lähtiessään määrältään x ij ja muunnoskertoimella k ij kertomisen jälkeen se on solmuun j saapuessaan määrältään k ij x ij. Muunnoskerroin voi olla laadullinen, jolloin myös virtauksen laatu muuttuu. Muunnoskerrointa voidaan graafisessa esityksessä kuvata kaaren vieressä pienellä kolmiolla. Kaareen liittyvät virtauksen ala- ja ylärajat sekä kustannus liittyvät sopimuksen mukaan aina lähtevään virtaukseen eli kaaren alkupäähän. (0,) (0,) / (0,) / (0,) - (0,) (0,) -9 (0,7) -/ (0,0) Esimerkiksi jos solmuun A saapuu kolmelta eri taholta raakaainevirtaukset x i ja tuotteen valmistamiseen menee materiaalia i määrät m i kg tuoteyksikköä kohti (i=,,), niin tuotetta valmistuu k x +k x +k x yksikköä (k i =/m i ), joka virtaa solmusta A eteenpäin esimerkiksi varastoitavaksi. Jos kaaren muunnoskerroin ei muuta laatua, mutta on aidosti suurempi kuin yksi, kyseessä on virtauksen vahvistus (gain) ja jos aidosti pienempi kuin yksi, kaarella on virtauksen häviö (loss).
Yleistetyn verkon algebrallinen esitys on muuten samanlainen kuin tavallisen verkon, paitsi että säilymisyhtälöissä solmuun saapuvan virtauksen kerroin = kaaren muunnoskerroin. Siten siis solmussa j lähtevän virtauksen x jm kerroin = - jokaisella solmulla m, johon solmusta j on virtaus ja saapuvan virtauksen x ij kerroin = k ij jokaisella solmulla i, josta solmuun j tulee virtaus. Esimerkiksi seuraavan osaverkon algebrallinen esitys on solmun osalta x + x +x -x -x = 0. Algebrallinen esitys ei aseta mitään esteitä sille, että muunnoskerroin olisi negatiivinen. Jos solmuun j solmusta i tulevan virtauksen muunnoskerroin k<0, niin solmuun j ei itse asiassa tulekaan virtausta tätä kaarta pitkin, vaan siitä lähtee. Silloin kaaren (i,j) molemmissa päissä olevista solmuista lähtee virtausta kaarelle, jossa kyseinen virtaus sitten lopulta katoaa. Tämä on sallittua yleistetyssä verkossa. 00 00 ( 0, ) A - B A./ ( 0, ) X. B ( 0, )