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 syklittömässä verkossa) on myös mahdollinen a vaihtoehdoista myös tehokkain. Vertailun vuoksi alla on listattu niiden taulukoiden koot oiden laskemisen kunkin luentomonisteen algoritmin suoritus vaatii..8 (Bellman Ford) Yksi kokoa oleva taulukko a edeltäätaulukko.. (Floyd Warshall) kappaletta kokoa olevia taulukoita a edeltäätaulukot.. (Dikstra) Yksi kokoa oleva taulukko a edeltäätaulukko.. (Lyhimmät tiet syklittömässä verkossa) Yksi kokoa oleva taulukko sisältäen edeltäätaulukon. Algoritmi. määritellään kaavoilla v[s] v[p] = min i d[p] l. Algoritmia käyttäen saadaan: v[i] v[] = {v[i]+c ip (i,p) E} = v[l]+c ip v[] = d[] = v[] = min {,+} = d[] = v[] = min {,+,+} = d[] = v[] = min {9,+,+,+} = 9 d[] = v[] = min {,+9,+,+,9+} = d[] = tai d[] = Ossi Opiskelian kannattaa ostaa uusi tulostin kolmannen tai nelännen opiskeluvuoden alussa. d[i]
Tehtävä Aamupalan valmistus on esitetty graafina kuvassa. 9 8 Kuva : Tehtävän graafi Aikaisimmat aloitushetket selvitetään kaavoilla v[] = v[p] max i p {v[i]+a i (i,p) E} = v[l]+a l d[p] l. Muodostetaan taulukko, ossa numerointi on o kunnossa. Töitä ei tarvitse uudelleennumeroida, koska tehtävänannossa kunkin työn edeltäällä on aina pienempi ärestysnumero. p 8 9 v[p] 8 d[p] Esimerkiksi osatöiden a 9 aikaisimmat aloitushetket on laskettu seuraavasti: v[] = max {+,+} = v[9] = max {+,+,+,+} = 8. Myöhäisimmät aloitushetket saadaan kaavoilla T = l[n+] T Nyt voidaan kiroittaa taulukko l[k] min k+ n+ {l[] a k (k,) E}.
k 9 8 l[k] 9 8 r[k] 9 8 9 9 9, Taulukossa esimerkiksi osatöiden, a myöhäisimmät aloitushetket on laskettu seuraavasti: l[] = min {9,8 } = l[] = min {, } = l[] = min {,, } =. Kriittisellä polulla tarkoitetaan koko proektin pisintä tietä. Tämän tehtävän kriittinen polku on d[9] =, d[] =, d[] = eli 9, a sen kesto on 8 min. Aloitushetkien pelivarat lasketaan kaavalla ota käyttäen saadaan s[k] = l[k] v[k], k 9 8 s[k] Laskettassa erilaisia pelivaroa osatyölle saadaan: maksimaallinen pelivara turvallinen pelivara vapaa pelivara s m [] = min {l[] (,) E} v[] a = min {8,9} = s t [] = min {l[] (,) E} l[] a = min {8,9} = s f [] = min {v[] (,) E} v[] a = min {,} = riippumaton pelivara s r [] = max{,min {v[] (,) E} l[] a } = max {,min {,} } =.
Tehtävä Tarkastellaan luentomonisteen proektinvalvontaesimerkkiä.. 8 9 Kuva : Tehtävän. suunnattu verkko Kyseisen tehtävän suunnattu verkko on esitetty kuvassa a proektin töiden i kestot a i a työvoimatarpeet h i ovat i 8 a i h i Työntekiöitä on koko aan käytössä henkeä. Muodostetaan osatöiden aikataulut nelällä eri tavalla. a) Valitaan mahdollisista osatöistä se, oka on kestoltaan lyhin. Tällöin saadaan taulukko tapaus aika mahdolliset työt valitaan resurssea alku loppuu, loppuu loppuu 8,,,,, ++ = loppuu + = loppuu + = loppuu 8 loppuu 8 8 8 loppuu 9 9 missä = osatyöt, otka ovat edeltäien puolesta mahdollisia. Sarakkeessa aika alimpana oleva on proektin kesto. Resurssitarpeet on myös esitetty kuvassa.
Resurssitarve 8 8 t Kuva : Resurssitarpeet kohdissa a) a b) b) Valitaan mahdollisista osatöistä se, oka on resurssivaatimuksiltaan pienin. Nyt saadaan taulukko tapaus aika mahdolliset työt valitaan resurssea alku loppuu, loppuu loppuu 8,,,,, ++ = loppuu + = loppuu + = loppuu 8 loppuu 8 8 8 loppuu 9 9 Proektin kesto on tässäkin tapauksessa a taulukko on sama kuin kohdassa a). Näin ollen kuva esittää myös tämän kohdan resurssitarpeita. c) Valitaan mahdollisista osatöistä se, onka myöhäisin aloitushetki on mahdollisimman pian. Osatöiden myöhäisimmät aloitushetket nähdään seuraavasta taulukosta: 8 9 l[] 9 v[] 9 Tämän perusteella saadaan taulukko
tapaus aika mahdolliset työt valitaan resurssea alku loppuu, loppuu,,,, ++ = a loppuvat 8, + = loppuu 9 + = loppuu loppuu 8 8 8 loppuu 9 9 Proektin kesto on tällä kertaa. Resurssitarpeet on esitetty myös kuvassa. Resurssitarve 8 t 8 9 Kuva : Resurssitarpeet kohdissa c) a d) d) Valitaan mahdollisista osatöistä se, onka maksimaalinen pelivara on pienin. Osatöiden maksimaaliset pelivarat lasketaan kaavalla ota käyttäen saadaan s m [i] = min {l[] (i,) E} v[i] a i, s m [] = = s m [] = min {,} = s m [] = min {,} = s m [] = min {,,,} = s m [] = 9 = 8 s m [] = = s m [] = = s m [] = 9 = s m [8] = 9 =.
Nyt saadaan sama ratkaisu kuin c)-kohdassa. Näin ollen kuva esittää myös tämän kohdan resurssitarpeita. Tehtävä Muotoillaan edellinen tehtävä lineaariseksi optimointitehtäväksi kuten luentomonisteen sivuilla on esitetty. Proektin kesto on korkeintaan n T = a i = +++++++ =, i= a meillä on käytettävissä yksi resurssi, oka on työvoiman määrä. Tehtävässä n = 8, K =, resurssitarve työlle i on koko aan b ik = h i, missä i =,...,8 a resurssia on käytettävissä välillä [t,t) määrä R kt =, missä t =,...,. Tarkastellaan resurssea erikseen kullakin aikavälillä [t, t), missä t =,...,. Valitaan päätösmuuttuiksi, kun työ i alkaa hetkellä t, missä t =,,..., a i x it =, muuten. Saadaan optimointitehtävä min s.t. tx 9t 8 i= a a i h i t l=max {,t a i } tx t Kiroitetaan raoitteet vielä auki. a i x il, t =,..., tx it a i, (i,) E x it =, i =,,...,9 x i {,}, i =,...,9, t =,..., x it {,}, i =,9, t =, sillä a = a 9 = (Ensimmäisiä raoitteita on yhteensä kpl) x +x +x +x +x +x +x +x 8 (t = ) (x +x )+(x +x )+ +(x 8 +x 8 ) (t = ) (x +x +x )+(x +x )+ +(x 8 +x 8 +x 8 ) (t = ). (x,8 +x,9 +x, )+ +(x 8, +x 8, +x 8, +x 8,8 +x 8,9 +x 8, ) (t = )
(Seuraavia raoitteita on kpl) tx t tx t tx t tx t tx t tx t. tx 9t tx 8t (Viimeisiä raoitteesta tulee auki kiroitettuna kpl raoitteita) x t = x t =. x 9t = (Binäärisiä päätösmuuttuia on kpl) x it {,}, i =,...,9, t =,..., sekä x, {,} a x 9, {,} Lineaarisessa optimointitehtävässä on päätösmuuttuia (n+)t+ = + = a raoitteita ++ =. Tehtävä Laaditaan proektin osatöiden aikaisimmista aloitushetkistä, edeltäistä a myöhäisimmistä aloitushetkistä seuraava taulukko: 8
aikaisimmat edeltäät myöhäisimmät v[s] = l[s] = min {, } = v[a] = d[a] = S l[a] = min {, } = v[b] = d[b] = S l[b] = min {,, } = v[c] = max {+,+} = d[c] = A l[c] = = v[d] = max {+,+} = d[d] = A l[d] = min {, } = v[e] = + = d[e] = B l[e] = min {, } = v[f] = max {+,+} = d[f] = D l[f] = = v[g] = max {+,+} = d[g] = F l[g] = = v[h] = max {+,+} = d[h] = D l[h] = = v[i] = max {+,+} = d[i] = G l[i] = = v[l] = + = d[l] = I l[l] = Proektin kesto on. Kriittinen polku on d[l] = I,d[I] = G,d[G] = F,d[F] = D,d[D] = A,d[A] = S eli S A D F G I L. A C G S D F I L B E H Kuva : Tehtävän graafi Tarkastellaan sitten oidenkin osatöiden kestoen muutosten aiheuttamia vaikutuksia. a) Oletetaan, että työ E kestääkin päivää. Silloin aloitushetken pelivara s[e] = l[e] v[e] = =. Jos siis osatyön E kesto kasvaa päivällä, niin saadaan vaihtoehtoinen kriittinen polku S B E F G I L. b) Oletetaan, että työ H kestääkin päivää. Nyt aloitushetken pelivara s[h] = l[h] v[h] = =. Näin ollen päivän lisäys ei vaikuta proektin kestoon eikä kriittiseen polkuun. c) Työt F a G ovat kriittisellä polulla. Oletetaan, että työt F a G valmistuvat päivän etuaassa. Silloin proektin kesto lyhenee päivää, sillä esim. töiden C a H pelivarat ovat s[c] = a s[h] = a näin ollen näiden solmuen kautta kulkevat polut ovat edelleen lyhyemmät kuin kriittinen polku. Kriittinen polku ei siis muutu. 9