Mokyklos pamokø tvarkaraðèio uþdavinys
Atliko: Dalia Buðniauskaitë-Èalkienë (C++)
Edita Butkutë (Duomenys ir modelis)
Sudaryti programà, kuri nuskaito ið duomenø failo jau sudarytà vidurinës mokyklos penktø - dvyliktø klasiø vienos savaitës pamokø tvarkarastá ir já optimizuoja.
Uþduoties analizë
Pagrindinis uþdavinio tikslas - optimizuoti tvarkaraðtá taip, kad mokytojai turëtø kuo maþiau langø. Pamokø tvarkaraðèio uþdavinys iðsiskiria tuo, kad jam egzistuoja apribojimai, t.y., pamokos tvarkaraðtyje iðdëstomos pagal tam tikras taisykles:
Pradiniai programos duomenys - jau sudarytas realus vidurinës mokyklos
tvarkaraðtis.
Tvarkaraðèio programa duomenis nuskaito ið dviejø
failø:
Teorinë dalis
Tvarkaraðèio uþdavinys yra priskiriamas NP-complete uþdaviniø klasei. Norint rasti tikslø sprendiná, naudojama formulë T=C*2^m. Taèiau galimø sprendimo variantø yra labai daug, todël naudojama heuristika - tam tikros taisyklës. Naudojant heuristikas perþiûrima tik tam tikra leistinø sprendiniø dalis. Ið jø iðrenkamas geriausias sprendinys. Pastarasis yra pateikiamas kaip optimaliausias sprendinys.
Tikslas, sprendþiant pamokø tvarkaraðèio uþdaviná, minimizuoti pamokø tvarkaraðèio ávertinimo funkcijà. Sprendþiant pamokø tvarkaraðèio optimizavimo uþdaviná, naudojome ðias heuristikas:
Turime dvi loterijas:
Algoritmas
Programa suranda tikimybes, pagal kurias turi bûti pasirenkamas metodas, kuris iðrenka vienà tvarkaraðèio variantà ið 10 galimø. Perstatymas atliekamas nuo pradinio tvarkaraðèio, kad bûtø sudarytos vienodos sàlygos pasirenkant sprendinius.
Uþdaviniui iðspræsti sukûrëme ðias duomenø struktûras:
Programa optimizuoja tvarkaraðtá pagal algoritmà:
2.3. Áverèio reikðmë f áraðoma á evaluations[i] masyvà.
Tvarkaraðtis perstatomas pagal algoritmà (funkcijoje permutate()):
Perstatant tvarkaraðtá pagal ðá algoritmà - gautas tvarkaraðtis yra neprieðtaringas, t.y., gali bûti paþeistos tik 4, 5 ir 6 tvarkaraðèio sudarymo taisyklës (þr. skyriø Uþduoties analizë).
Instrukcija vartotojui
Programos vykdomui reikalinga Unix aplinka ir xWindows. Programa vykdoma Unix komandinëje eilutëje surinkus 'test'. Tada atidaromas programos langas, kuris turi tokius meniu punktus: "Global", "Local", "Operations", "Quit", "Parameters", "Results", "Output", "Help". Per "Global" ir "Local" meniu punktus vartotojas pasirenka globalø ir lokalø funkcijos minimizavimo metodus. Meniu punkte "Parameters" vartotojas nurodo:
Meniu punktas "Output" suteikia vartotojui galimybæ parþiûrëti skaièiavimo rezultatus programos vykdymo metu. Per meniu punktà "Operations/Run" vartotojas vykdo uþdavinio optimizavimà. Per meniu punktà "Results" vartotojas gali pasiþiûrëti galutinius optimizavimo rezultatus. Programa baigiama, pasirinkus meniu punktà "Quit".
Rezultatai
Optimizuojant pasirinkome Bayes1 globaliná ir LBayes lokaliná metodus. Pradines tikimybes pasirinkti vienà ið trijø heuristikos taisykliø, nustatëme vienodas: 0.5, 0.5, 0.5. Vienu atveju buvo pasirinkta 50 iteracijø, kitu - 100. Pirmu atveju gauti tokie rezultatai:
Kai iteracijø skaièius 100, gauti tokie rezultatai:
Iðvados
Ið gautø rezultatø akivaizdu, kad tvarkaraðèio optimizavimui labiausiai tinka grynos heuristikos taisyklë ir visiðkai netinka Monte Carlo taisyklë. Be to, uþdavinio sprendimo eigoje pastebëjome, kad mokyklos pamokø tvarkaraðèio optimizavimas yra sunkiai pritaikomas praktikoje, nes sunku sugalvoti tvarkaraðèio perstatymo algoritmà. Pamokø tvarkaraðtis turi daug apribojimø. Daugumos ið jø negalima paþeisti, kitaip tvarkaraðtis tampa nebepritaikomas praktikoje. Galimas sprendimas - ávedamos baudos uþ apribojimø paþeidimà, bet tai negarantuoja, kad sudarytas tvarkaraðtis bus pritaikomas. Mes sugaiðome daug laiko perstatymo algoritmui sugalvoti. Ðis algoritmas nepaþeidþia pagrindiniø tvarkaraðèio sudarymo taisykliø, taèiau nei viena mokykla nenaudotø pagal já perstatyto tvarkaraðèio.