Kuljetustehtävä Materiaalia kuljetetaan m:stä lähtöpaikasta n:ään tarvepaikkaan Kuljetuskustannukset lähtöpaikasta i tarvepaikkaan j ovat c ij Lähtöpaikan i kapasiteetti on a i (oletetaan, että a i > 0 kaikilla i) Tarvepaikan j tarve on b j (oletetaan, että b j > 0 kaikilla j) Oletetaan, että tehtävä on tasapainossa, ts. m i=1 a i = n j=1 b j Tavoite: Järjestä kuljetukset siten, että kuljetuskustannukset minimoituvat 1
x ij = lähtöpaikasta i tarvepaikkaan j kuljetettava määrä min kun m n i=1 j=1 n j=1 m i=1 x ij 0 c ij x ij x ij = a i x ij = b j i = 1,..., m j = 1,..., n i = 1,..., m, j = 1,..., n 2
Koska m i=1 a i = n j=1 b j, niin mallissa on yksi ylimääräinen rajoite, joka voidaan jättää pois = Perusratkaisussa on m + n 1 perusmuuttujaa 3
Kuljetustaulukko x 11 x 12... x 1n a 1 x 21 x 22... x 2n a 2.... x m1 x m2... x mn a m b 1 b 2... b n 4
Perusratkaisussa on m + n 1 perusmuuttujaa =... = Kuljetustaulukossa on perusratkaisu, jos siinä on olemassa rivi tai sarake, jolla on vain yksi perusmuuttuja, ja jos sama pätee taulukolle, josta kyseinen rivi tai sarake on poistettu 5
Esimerkki (perusmuuttujat, 4 + 6 1 = 9 kpl, merkitty tähdellä): 7 17 5 24 15 10 9 3 8 8 53 Sarakkeessa 2 yksi perusmuuttuja = Poistetaan sarake 2 = Rivillä 3 yksi perusmuuttuja = Poistetaan rivi 3 = jne. 6
Perusmuuttujien arvot voidaan laskea poistamalla rivejä ja sarakkeita edellä esitetyllä tavalla, esimerkiksi: Sarake 2 = 7 17 10 5 24 15 10 9 3 8 8 53 (Seuraavaksi rivi 3) 7
Rivi 3 = 7 17 10 5 5 24 15 10 9 3 8 8 53 (Seuraavaksi sarake 4) 8
Sarake 4 = 7 17 10 5 5 3 24 15 10 9 3 8 8 53 (Seuraavaksi sarake 3) 9
Sarake 3 = 14 7 17 10 5 5 3 24 15 10 9 3 8 8 53 (Seuraavaksi rivi 1) 10
Rivi 1 = 14 7 7 17 10 5 5 3 24 15 10 9 3 8 8 53 (Seuraavaksi sarake 6) 11
Sarake 6 = 14 7 7 17 10 5 5 3 15 24 15 10 9 3 8 8 53 (Seuraavaksi rivi 4) 12
Rivi 4 = 14 7 7 17 10 5 5 6 3 15 24 15 10 9 3 8 8 53 (Seuraavaksi sarake 1) 13
Sarake 1 = 14 7 7 9 17 10 5 5 6 3 15 24 15 10 9 3 8 8 53 (Seuraavaksi rivi 2) 14
Rivi 2 = 14 7 7 9 8 17 10 5 5 6 3 15 24 15 10 9 3 8 8 53 Saatiin perusratkaisu, joka ei kuitenkaan ole sallittu 15
Kuljetustaulukon silmukat Kuljetustaulukon alkioiden joukko muodostaa silmukan, jos se ei ole tyhjä siinä on kaksi tai nolla alkiota jokaiselta riviltä ja sarakkeelta millään tämän joukon aidolla osajoukolla ei ole näitä ominaisuuksia Alkioiden joukko muodostaa silmukan Alkiot ovat lineaarisesti riippuvia Alkioiden joukko ei muodosta silmukkaa Alkiot ovat lineaarisesti riippumattomia 16
Olkoon B kuljetustehtävän perusratkaisun perusmuuttujien joukko = Joukon B alkiot ovat lineaarisesti riippumattomia Lisätään joukkoon B yksi uusi alkio x ij = Joukon B {x ij } alkiot ovat lineaarisesti riippuvia = Joukko B {x ij } sisältää silmukan ja x ij kuuluu siihen 17
Liitetään silmukan alkioihin vuorotellen luvut +1 ja 1, alkaen +1:stä Esimerkki: x 11 x 16 x 26 x 21 x 11 + 1 1 + 1 1 + 1 18
Kuljetustehtävän alkuratkaisu Sallitun perusratkaisun muodostaminen: Aluksi perusjoukko on tyhjä. Aseta a i = a i kaikilla i = 1,..., m ja b j = b j kaikilla j = 1,..., n. 1. Valitse tämänhetkisestä kuljetustaulukosta uusi perusjoukon alkio x rs. (Jatkuu) 19
(Jatkoa) 2. Aseta x rs = min{a r, b s}. Muuta a r = a r x rs ja b s = b s x rs. Jos perusjoukossa on m + n 1 alkiota, lopeta. Muuten jatka kohdasta 3. 3. Jos a r = 0 ja b s > 0, poista rivi r kuljetustaulukosta. Jos b s = 0 ja a r > 0, poista sarake s kuljetustaulukosta. Jos a r = b s = 0 ja tämänhetkisessä kuljetustaulukossa on vain yksi rivi, poista sarake s kuljetustaulukosta. Jos a r = b s = 0 ja tämänhetkisessä kuljetustaulukossa on enemmän kuin yksi rivi, poista rivi r kuljetustaulukosta. Jatka kohdasta 1. 20
Esimerkki: 6 25 20 13 4 16 10 9 7 18 64 x 43 = min{13,10} = 10 a 4 = 13 10 = 3 b 3 = 10 10 = 0 21
= Poistetaan sarake 3 : 6 25 20 10 3 4 16 0 9 7 18 54 x 25 = min{25,7} = 7 a 2 = 25 7 = 18 b 5 = 7 7 = 0 22
= Poistetaan sarake 5 : 6 7 18 20 10 3 4 16 0 9 0 18 47 x 44 = min{3,9} = 3 a 4 = 3 3 = 0 b 4 = 9 3 = 6 23
= Poistetaan rivi 4 : 6 7 18 20 10 3 0 4 16 0 6 0 18 44 x 32 = min{20,16} = 16 a 3 = 20 16 = 4 b 2 = 16 16 = 0 24
= Poistetaan sarake 2 : 6 7 18 16 4 10 3 0 4 0 0 6 0 18 28 x 31 = min{4,4} = 4 a 3 = 4 4 = 0 b 1 = 4 4 = 0 25
= Poistetaan rivi 3 : 6 7 18 4 16 0 10 3 0 0 0 0 6 0 18 24 x 21 = min{18,0} = 0 a 2 = 18 0 = 18 b 1 = 0 0 = 0 26
= Poistetaan sarake 1 : 6 0 7 18 4 16 0 10 3 0 0 0 0 6 0 18 24 x 26 = min{18,18} = 18 a 2 = 18 18 = 0 b 6 = 18 18 = 0 27
= Poistetaan rivi 2 : 6 0 7 18 0 4 16 0 10 3 0 0 0 0 6 0 0 6 x 14 = min{6,6} = 6 a 1 = 6 6 = 0 b 2 = 6 6 = 0 28
= Poistetaan sarake 4 : 6 0 0 7 18 0 4 16 0 10 3 0 0 0 0 0 0 0 0 x 16 = min{0,0} = 0 a 1 = 0 0 = 0 b 6 = 0 0 = 0 29
= Lopetetaan : 6 0 0 0 7 18 0 4 16 0 10 3 0 0 0 0 0 0 0 0 30
Saatiin sallittu perusratkaisu: 6 0 6 0 7 18 25 4 16 20 10 3 13 4 16 10 9 7 18 64 31
Uuden perusjoukon alkion valinta Esimerkiksi: Valitaan se x rs, jolle on voimassa c rs = min{c ij i ja j ovat tämänhetkisessä kuljetustaulukossa} Vogelin approksimaatiomenetelmä: Lasketaan jokaiselle jäljellä olevalle riville ja sarakkeelle säästö = kahden pienimmän c ij :n erotus kyseisellä rivillä tai sarakkeella Valitaan se x rs, joka antaa suurimman säästön 32
Kuljetustehtävän ratkaisualgoritmi Muodostetaan alkuratkaisu (= sallittu perusratkaisu) Iteroidaan kunnes optimi löytyy: Lasketaan suhteelliset hintakertoimet c ij ei-perusmuuttujille kuljetustaulukon silmukoiden tai duaalimuuttujien avulla Jos kaikki c ij 0, optimi on löytynyt = lopetetaan Valitaan x pq siten, että c pq < 0 Lisätään x pq perusjoukkoon ja selvitetään sen arvo kuljetustaulukon silmukoiden avulla Määrätään perusjoukon muuttujien arvot ja poistetaan sieltä sellainen, jonka arvo on 0 33
Kuljetustaulukko, johon on lisätty hintakertoimet, suhteelliset hintakertoimet ja duaalimuuttujat: c 11 c 12... c 1n u 1 x 11 c 11 x 12 c 12 x 1n c 1n a 1 c 21 c 22... c 2n u 2 x 21 c 21 x 22 c 22 x 2n c 2n a 2.... c m1 c m2... c mn u m x m1 c m1 x m2 c m2 x mn c mn a m v 1 v 2... v n b 1 b 2 b n 34
Esimerkki:..... 10 4 12 6 1 12 0 8 6.... 0 3 2 6 2 7 3 18 1 25..... 4 2 16 4 2 10 2 1 20..... 10 2 10 5 3 5 7 5 13...... 4 16 10 9 7 18 64 35
Suhteelliset hintakertoimet silmukoiden avulla Esimerkin perusjoukko on B = {x 14, x 16, x 21, x 25, x 26, x 31, x 32, x 43, x 44 } Jos perusjoukkoon lisätään x 11, muodostuu sinne silmukka x 11 x 16 x 26 x 21 x 11 Liitetään silmukan alkioihin luvut +1, 1, +1, 1 ja +1 36
Jos x 11 kasvaa yhdellä = x 16 täytyy pienetä yhdellä, jotta rivin 1 rajoite pysyy voimassa = x 26 täytyy kasvaa yhdellä, jotta sarakeen 6 rajoite pysyy voimassa = x 21 täytyy pienetä yhdellä, jotta rivin 2 rajoite pysyy voimassa Kokonaisvaikutus objektifunktion arvoon on c 11 c 16 + c 26 c 21 = 10 8 + ( 1) ( 3) = 4 = Suhteellinen hintakerroin c 11 = 4 Vastaavasti kaikille ei-perusmuuttujille 37
Suhteelliset hintakertoimet duaalimuuttujien avulla Olkoon u i kapasiteettirajoitetta n j=1 x ij = a i vastaava duaalimuuttuja Olkoon v j tarverajoitetta m i=1 x ij = b j vastaava duaalimuuttuja Kuljetustehtävän duaalitehtävä: max m i=1 a i u i + n j=1 b j v j kun u i + v j c ij i = 1,..., m, j = 1,..., n u i, v j R i = 1,..., m, j = 1,..., n 38
Duaaliteoria = Komplementaarisuusehdot = u i + v j = c ij x ij B Kuljetustehtävässä yksi ylimääräinen rajoite = Yksi duaalimuuttujan arvo vapaa = Muut duaalimuuttujat voidaan ratkaista Duaaliteoria = Primaalin suhteelliset hintakertoimet ovat samat kuin duaalin ylijäämämuuttujien arvot optimissa = c ij = c ij (u i + v j ) x ij / B 39
Esimerkissä yhtälöt u i + v j = c ij, x ij B, ovat: u 1 + v 4 = 1 u 3 + v 1 = 2 u 1 + v 6 = 8 u 3 + v 2 = 4 u 2 + v 1 = 3 u 4 + v 3 = 5 u 2 + v 5 = 3 u 4 + v 4 = 5 u 2 + v 6 = 1 = u 1 = 8 v 2 = 0 u 2 = 1 v 3 = 3 u 3 = 4 v 4 = 7 u 4 = 2 v 5 = 4 v 1 = 2 v 6 = 0 40
= 4 4 1 0 8 10 4 12 6 1 12 0 8 6 3 4 10 1 0 3 2 6 2 7 3 18 1 25 5 13 6 3 4 4 2 16 4 2 10 2 1 20 10 4 1 3 2 10 2 10 5 3 5 7 5 13 2 0 3 7 4 0 4 16 10 9 7 18 64 Ei optimaalinen, koska jotkut c ij < 0 41
Uuden perusjoukon alkion valinta Valitaan x pq siten, että c pq < 0 Jos useampi c ij < 0, valitaan niistä (esimerkiksi) pienin 42
Uuden perusjoukon alkion arvo silmukoiden avulla Lisätään x pq perusjoukkoon ja selvitetään muodostunut silmukka Jos x pq kasvaa arvosta 0 arvoon θ = Silmukassa toisena olevan x ij :n arvo täytyy pienetä arvoon x ij θ = Silmukassa kolmantena olevan x ij :n arvo täytyy kasvaa arvoon x ij + θ = jne. 43
Liitetään silmukan alkioihin luvut +1, 1, +1, 1,... On oltava x ij 0 kaikilla i ja j = θ θ = min{x ij silmukan alkioon x ij liittyy 1} 44
Perusjoukon alkioiden uudet arvot Muutetaan silmukan alkioiden arvoja seuraavasti: x ij = x ij + θ jos alkioon x ij liittyy +1 x ij = x ij θ jos alkioon x ij liittyy 1 Ainakin yhden muuttujan arvoksi tulee 0 ja yksi sellainen poistetaan perusjoukosta 45
Esimerkki jatkuu: 4 4 1 0 8 10 4 12 6 1 12 0 8 6 3 4 10 1 0 3 2 6 2 7 3 18 1 25 5 13 6 3 4 4 2 16 4 2 10 2 1 20 10 4 1 3 2 10 2 10 5 3 5 7 5 13 2 0 3 7 4 0 4 16 10 9 7 18 64 Pienin c ij on c 35 = 6 46
Uusi perusmuuttuja x 35 Muodostuu silmukka x 35 x 31 x 21 x 25 x 35 θ = min{x 31, x 25 } = min{4,7} = 4 x 35 = x 35 + θ = 0 + 4 = 4 x 31 = x 31 θ = 4 4 = 0 x 21 = x 21 + θ = 0 + 4 = 4 x 25 = x 25 θ = 7 4 = 3 Muuttuja x 31 poistuu perusjoukosta = Uusi iteraatio: Lasketaan uudet c ij :t 47
=... = 4 10 1 0 8 10 4 12 6 1 12 0 8 6 3 4 10 1 4 3 2 6 2 3 3 18 1 25 6 1 19 3 2 2 16 4 2 10 4 2 1 20 10 10 1 3 2 10 2 10 5 3 5 7 5 13 2 6 3 7 4 0 4 16 10 9 7 18 64 Ei optimaalinen, koska jotkut c ij < 0 48
=... = 14 1 10 10 2 10 0 4 12 6 1 12 8 6 3 6 0 1 4 3 2 6 2 3 3 18 1 25 6 9 9 3 2 2 16 4 2 10 4 2 1 20 20 0 11 13 8 10 2 10 5 3 5 7 5 13 2 6 13 3 4 0 4 16 10 9 7 18 64 Ei optimaalinen, koska jotkut c ij < 0 49
=... = 14 10 9 10 10 2 10 6 4 12 1 12 8 6 3 3 9 1 4 3 2 6 2 3 3 18 1 25 6 18 3 2 2 10 4 6 2 10 4 2 1 20 11 9 2 4 1 10 2 4 5 9 5 7 5 13 2 6 4 6 4 0 4 16 10 9 7 18 64 Ei optimaalinen, koska jotkut c ij < 0 50
=... = 14 10 0 10 10 2 10 6 4 12 1 12 8 6 3 3 0 1 4 3 2 6 2 3 3 18 1 25 6 9 3 2 2 6 4 10 2 10 4 2 1 20 20 9 11 13 8 10 4 2 5 9 5 7 5 13 2 6 4 3 4 0 4 16 10 9 7 18 64 Ei optimaalinen, koska jotkut c ij < 0 51
=... = 11 10 0 10 7 1 10 6 4 12 1 12 8 6 6 3 3 1 4 3 3 2 6 2 3 18 1 25 3 9 0 1 2 3 4 10 2 10 7 2 1 20 17 9 11 10 5 10 4 2 5 9 5 7 5 13 2 3 1 0 1 0 4 16 10 9 7 18 64 Optimaalinen, koska kaikki c ij 0 52
Ratkaisu: x 12 = 6, x 21 = 4, x 22 = 3, x 26 = 18, x 32 = 3, x 33 = 10, x 35 = 7, x 42 = 4, x 44 = 9 ja muut = 0 53
Kuljetustehtävä ei tasapainossa Edellä oletettiin, että tehtävä on tasapainossa, ts. m i=1 a i = n j=1 b j Jos m i=1 a i > n j=1 b j, lisätään keinotekoinen tarvepaikka n + 1 ja asetetaan b n+1 = m i=1 a i n j=1 = Saadaan tehtävä, joka on tasapainossa b j ja c i,n+1 = 0 i = 1,..., m Jos m i=1 a i < n j=1 b j, lisätään vastaavasti keinotekoinen lähtöpaikka m + 1. 54
Kohdistustehtävä Olkoon n eri henkilöä ja n eri työtä Jokainen henkilö suorittaa yhden työn, ja jokaisen työn suorittaa yksi henkilö Kun henkilö i suorittaa työn j, siitä aiheutuu kustannus c ij Tavoite: Kohdista henkilöt töihin siten, että kokonaiskustannukset minimoituvat 55
x ij = 1, jos henkilö i suorittaa työn j 0, muuten min kun n n i=1 j=1 n j=1 n i=1 c ij x ij x ij = 1 x ij = 1 x ij = 0 tai 1 i = 1,..., n j = 1,..., n i = 1,..., n, j = 1,..., n 56
Kohdistustehtävä = Kuljetustehtävä, jossa lähtöpaikkoja on yhtä monta kuin tarvepaikkoja, ja kaikki kapasiteetit ja tarpeet ovat 1 Perusmuuttujia on 2n 1 kpl, joista n kpl on arvoltaan 1 57
Kohdistustaulukko c 11 c 12... c 1n c 21 c 22... c 2n... c n1 c n2... c nn Oletetaan, että kaikki c ij 0 58
Jos kohdistustaulukon rivin i jokaisesta luvusta vähennetään luku r i, ja sarakkeen j jokaisesta luvusta vähennetään luku s j, niin objektifunktion uusi arvo on n n i=1 j=1 (c ij r i s j )x ij = = n n i=1 j=1 n n i=1 j=1 c ij x ij c ij x ij n n r i i=1 j=1 n n r i s j i=1 j=1 x ij n n s j x ij j=1 i=1 = Objektifunktion arvo muuttuu vakion verran = Ratkaisu pysyy samana 59
Unkarilainen menetelmä 1. Etsi jokaiselta riviltä i sen pienin alkio r i ja vähennä se kaikista kyseisen rivin alkioista. 2. Etsi jokaiselta sarakkeelta j sen pienin alkio s j ja vähennä se kaikista kyseisen sarakkeen alkioista. 3. Etsi pienin mahdollinen määrä k vaaka- ja pystysuoria viivoja, jotka peittävät taulukon kaikki nollat. 4. Jos k = n, niin lopeta. Muuten valitse pienin viivoilla peittämätön alkio, vähennä sen arvo kaikista peittämättömistä alkioista, ja lisää sen arvo jokaiseen alkion, joka on peitetty kahdella viivalla. Jatka kohdasta 3. 60
Kun algoritmi on pysähtynyt, optimiratkaisu määrätään nolla-alkioiden avulla: Jokaiselta riviltä ja jokaiselta sarakkeelta valitaan täsmälleen yksi nolla-alkio Valittuja nolla-alkioita vastaavilla x ij on ratkaisussa arvo yksi ja muilla x ij arvo nolla 61
Esimerkki: 8 9 7 8 6 8 7 8 5 4 6 5 3 4 5 6 62
8 9 7 8 1 2 0 1 6 8 7 8 0 2 1 2 5 4 6 5 1 0 2 1 3 4 5 6 0 1 2 3 1 2 0 0 1 2 0 0 0 2 1 1 0 2 1 1 1 0 2 0 1 0 2 0 0 1 2 2 0 1 2 2 63
1 2 0 0 0 2 1 1 1 0 2 0 0 1 2 2 2 2 0 0 0 1 0 0 2 0 2 0 0 0 1 1 2 2 0 0 0 1 0 0 2 0 2 0 0 0 1 1 64
Ratkaisu (esimerkiksi): x 13 = x 21 = x 34 = x 42 = 1 ja muut = 0 65
Edellä olettiin, että kaikki c ij 0 Jos jokin c ij < 0, lisätään rivien ja sarakkeiden alkioihin sopivia lukuja, kunnes kaikki c ij 0 66