400 likes | 519 Views
Optimointiopin seminaari 2009. Ajanvarausten aikataulutus. Arttu Klemettilä. Sisältö. Mitä on ajanvarausten aikataulutus? Määritelmiä ja käsitteitä Kolme eri tapausta : Suunnittelu ilman joutoaikaa Suunnittelu joutoajan kanssa Työvoimarajoitteilla. Aikataulujen skedulointi.
E N D
Optimointiopin seminaari 2009 Ajanvarausten aikataulutus Arttu Klemettilä
Sisältö • Mitä on ajanvarausten aikataulutus? • Määritelmiäjakäsitteitä • Kolmeeritapausta: • Suunnitteluilmanjoutoaikaa • Suunnittelujoutoajankanssa • Työvoimarajoitteilla
Aikataulujen skedulointi • Jouko töitä, joilla suoritusaika sekä aikaikkuna, jossa työ pitää suorittaa • Kysymys: Mitkä työt suoritetaan, mitkä ei? • Yleensä maksimoidaan tehtyjen töiden määrää, tai painotettua summaa • Painokertoimet kertovat työn arvon
Rajoitukset • Resursseja voi olla rajoitettu määrä: • Työvoima, työpisteet, työkalut • Aikaikkunat voivat olla joustavia tai ei: • Joutoaikaa vai ei? • Tässä keskitytään diskreettiaikaiseen tapaukseen
Tyypin 1 aikatauluongelmat • Työllä tietty määrä resurssivaatimuksia • Esim. henkilökunta, työkalut • Resurssit identtisiä • Jos resurssit eivät riitä yhtäaikaiseen suoritukseen, töitä ei voida suorittaa yhtäaikaa • Yleensä työvoimarajoitteelliset työt • Esimerkki: parturi, konepaja
Tyypin 2 aikataulutusongelmat • Kaikki resurssit uniikkeja • Resurssi kykenee vain yhteen työhön kerrallaan • Järjestä työt niin, että resurssit ovat käytettävissä • Esimerkejä: Kokousaikataulut, kokeiden järjestäminen
Esimerkki aikataulutusongelmasta • Autovuokraamo • Vuokrataan autoja • Suoritusaika = vuokra-aika • Autoja vain rajallinen määrä käytössä • Vuokraamolla voi olla eri mallin autoja
Joutoajattomuus • Töillä vapautusaika rj ja epäpäivä dj, sekä suoritusaika pj. • Tarkat aikaikkunat: pj = dj – rj (!) • m kpl koneita • Painokertoimet wij (työ j, koneessa i) • Esimerkiksi tuotteesta saatava tuotto • Voi riippua myös koneesta i. • Tavoitteena maksimoida painotettua summaa
Yleisen tapauksen ratkaisemisesta • Kokonaislukuoptimointia • NP-kova • Formulointi kuten aikaisemmin • Erikoistapauksilla yksinkertaisempaa?
Erikoistapauksia • Kaikki suoritusajat pj = 1 => Saadaan joka ajanhetkelle omat optimointitehtävät • Suhteellisen helppo
Toinen erikoistapaus • Suoritusajat vapaita • Identtiset painot (wij = 1) • Työt voidaan suorittaa millä tahansa koneella • Tavoitteena maksimoida suoritettujen töiden määrää • Heuristiikka
Suoritettujen töiden määrän maksimoiva heurestiikka • J = systeemiin laitettujen töiden joukko • N työtä • Järjestä työt vapautusajan mukaan: • r1 < r2 < r3 < ... < rn • Vaihe 1: • J = ф, j = 1
Suoritettujen töiden määrän maksimoiva heurestiikka • Vaihe 2: • Jos resurssi vapaa hetkellä rj, aseta j tälle resurssille ja lisää j joukkoon J. Mene vaiheeseen 4 • Jos ei, mene vaiheeseen 3 • Vaihe 3: • Valitse j* s.e. Cj* = max(k є J){rk + pk} • Jos Cj = rj+pj > Cj*, älä lisää työtä j. Siirry vaiheeseen 4. • Muuten poista työ j* ja lisää työ j aikatauluun ja joukkoon J. Mene vaiheeseen 4
Suoritettujen töiden määrän maksimoiva heurestiikka • Vaihe 4: • Jos j = n, eli kaikki työt käyty läpi, lopeta • Muuten, aseta j = j + 1 ja palaa vaiheeseen 2 • Eli valitaan työ, jos se mahtuu aikatauluun. Jos se ei mahdu, poistetaan “huonoin” työ ja korvataan uudella.
Joutoajalliset aikataulut • Kuten aikaisemmin, mutta nyt pj < dj - rj • Töillä aikaikkuna, jonka aikana se täytyy suorittaa • Nyt tutkitaan tapausta, jossa painot voivat olla erisuuria ja työt voidaan suorittaa vain tietyissä koneissa. • Maksimoidaan painotettua summaa
Merkintöjä • Koneet, jolla työ j voidaan suorittaa Mj • |Mj| on joukon Mj koneiden lukumäärä • Määritellään tärkeysfunktio Ij = f(wj/pj, |Mj|) • Kertoo kuinka tärkeä työ on suorittaa ensin • Mitä pienempi Ij, sitä tärkeämpi työ • Loogisesti pitäisi laskea |Mj|:n pienentyessä ja kasvaa wj/pj:n pienentyessä • Esimerkiksi f(wj/pj, |Mj|) = |Mj| / (wj/pj)
Painotetun summan maksimin löytäminen • Voitaisiin muotoilla kokonaislukutehtävänä • NP-kova • Heurestiikalla päästään kuitenkin lähelle
Painotetun summan maksimoiva heurestiikka • Valmistelut: • Laske kullekin työlle tärkeysindeksit Ij • Laske kullekin ajanhetkelle ja koneelle painokerroin νit, joka kertoo kuinka monta eri työtä kone i pystyisi suorittaamaan hetkellä t • Määritellään joustavuusfunktio g(νit+1+νit+2+ … + νit+pj) • Funktio g voidaan valita “vapaasti”, esim: • g(νit+1+νit+2+ … + νit+pj) = ∑k=1..pj (νit+k)/pj
Valmisteluja • Heuristiikka pyrkii antamaan työn koneelle, jolla on joustavuus minimoituu • Vaihe 1: • j = 1
Painotetun summan maksimoiva heuristiikka • Vaihe 2: • Ota työ j, ja valitse se resurssi ja aikaikkuna, jolla funktio g(νit+1+νit+2+ … + νit+pj) saa pienimmän arvonsa. • Jos j:tä ei voi määrätä millekään koneelle, jätä se pois • Vaihe 3: • Jos j = n, lopeta • Muuten aseta j = j+1
Esimerkkitilanne • 7 työtä, 3 konetta • Suoritusajat, vapautusajat, eräpäivät, käyvät koneet ja painot taulukossa
Esimerkkilasku • Määritellään tärkeysfunktio Ij = |Mj|/(wj/pj) • Saadaan tärkeydet: • Lasketaan ν-kertoimet: • Valitaan g-funktioksi ∑k=1..pj (νit+k)/pj
Esimerkkitapaus • Työllä 7 on pienin tärkeys Ij, joten aloitetaan siitä • Lasketaan käyville koneille (1 ja 2) joustavuudet käyville aloitushetkille (t = 5 ... 11) • Esim. g(i=1,t=5) = (6+6+6)/3 = 6 g(i=2,t=9) = (4+3+3)/3 = 1.333 • Pienin arvo saadaan koneella 2, hetkellä t =11 • Asetetaan aikatauluun tämä arvo.
Esimerkkitapaus • Seuraavaksi pienin Ij arvo on työllä 6. Vain työ 1 on käypä ja ajanhetket t = 4...14. • Pienin arvo löytyy hetkellä 14 • Valitaan kone 1 ajanhetkellä 14 • Jatketaan näin kunnes päästään loppuun • Muista jo asetetut työt etsiessäsi käypiä aikoja!
Esimerkin ratkaisu Ratkaisuksi saatiin
Esimerkin analysointi • Huomataan että työ 3 ei mahtunut lainkaan aikatauluun • Optimaalisessa aikataulussa kuitenkin kaikki mahtuvat • Vaihtamalla funktioita Ij = f(wj/pj,|Mj|) tai g(νit) saadaan erilaisia tuloksia • Esimerkiksi jos f = |Mj|2/(wj/pj), saadaan tässä tehtävässä kuitenkin optimi • Kts. kotitehtävä
Työvoimarajoitusten optimointi • Äärettömästi koneita rinnakkain • n työtä ja kaikki täytyy tehdä • Työt voidaan tehdä millä tahansa koneella, mutta jos se aloitetaan, se täytyy tehdä loppuun samalla koneella • Työ j vaatii työvoiman Wj. Kokonaistyövoima W • Jos Wk + Wj > W, töitä j ja k ei voida suorittaa yhtä aikaa
Esimerkki • Koeviikon järjestäminen: • Salissa W tuolia • Kurssilla j on Wj opiskelijaa, jotka kaikki osallistuvat kokeeseen • Miten järjestät kaikki n koetta niin, että käytetty aika on mahdollisimman pieni?
Työvoimarajoitusten optimointi • Erikoistapaus: • Kaikki suoritusajat samoja • Ei edeltävyysvaatimuksia • Työntekijät voivat suorittaa mitä tahansa työtä • Ongelma yksinkertaistuu lokerointiongelmaksi • Miten pakkaat n esinettä mahdollisimman pieneen määrään laatikoita?
Heuristiikka • Kokonaislukutehtävä NP-kova • Voidaan kuitenkin ratkaista First Fit (FF) -heuristiikalla. • Heuristiikalle saadaan virhearvio: • Cmax(FF) <= 17/10 Cmax(OPT) +2
FF-heuristiikka • Numeroidaan lokerot 1,2,3 ... • Lokerot esimerkiksi ajanhetkiä • Vaihe 1: • Aseta j = 1 • Vaihe 2: • Etsi ensimmäinen lokero, johon työ j mahtuu • Vaihe 3: • Jos j = n, lopeta, muuten j = j+1
Esimerkki FF-heuristiikasta • 18 työtä, joilla työvoimantarpeet Wj • Käytettävissä oleva työvoima W = 2100
FF:n tuottama ratkaisu • Kokonaissuoritusaika 10 • Lokerossa 1 työt 1-6 • Lokeroissa 2-4 työt 7-12 pareittain • Lokeroissa 5-6 työt 13-18 yksittäin
Todellinen optimi • Tehtävän oikea optimi saadaan esimerkiksi kokonaislukuoptimoinnilla • Kokonaissuoritusaika 6, joka lokerossa 1 työ kutakin tyyppiä. • Cmax(FF) <= 17/10 Cmax(OPT) + 2 ? • 10 <= 17/10*6 +2 = 12.2 => OK
FFD-heuristiikka • FF-heuristiikkaa voidaan parantaa järjestämällä työt laskevasti Wj:n mukaan. • First Fit Decreasing (FFD) heuristiikka • Parempi virhearvio: • Cmax(FFD) <= 11/9 Cmax(OPT) + 4
Kertaus • Ajanvarauksen skedulointi: • Työt suoritetaan tai ei, maksimoidaan määrä • Aikaikkunat • Joutoajaton skedulointi • Lisäysheurestiikka • Joutoajaton skedulointi • Painotetun summan maksimointiheuristiikka • Työvoiman optimointi
Kotitehtävä • Ratkaise joustavan aikataulutuksen ongelma uudestaan, mutta nyt käytä tärkeysfunktiota Ij = (|Mj|½) / (wj/pj). • Muuttuuko tulos? Onko edelleenkään optimi? Onko tulos parempi kuin alkuperäisellä tärkeysfunktiolla Ij = |Mj|/(wj/pj)? • Laskut ovat helppoja, mutta niitä on kohtuullisen paljon. Kannattaa käyttää Exceliä apuna