Sukurti programą, kuri sudaro vidurinių mokyklų tvarkaraštį profiliuotoms klasėms, mokiniams bei mokytojams.
Eilę metų asmenys atsakingi už
tvarkaraščių sudarymą mokyklose sprendė pakankamai sunkų ir opų klausimą kaip
sudaryti tvarkaraštį tokį jog tenkintų kuo didesnį skaičių mokinių ir būtų
patogus mokytojams. Paprastai tai buvo daroma rankiniu būdu nes programinės
įrangos tam tikslui išspręsti nebuvo. Sudaryti tvarkaraštį visiems mokiniams,
kurių vidutiniškai apie 60-70 tenka 11 ir tiek pat 12 klasėms, ir kurie renkasi
dalykus iš vidutiniškai 50-60 pasirenkamų dalykų, tokiu būdu tai tampa labai
sunkiu ir sudėtingu uždaviniu. Kiekvienas mokinys gali pasirinkti jam
patinkantį ir įdomų dalyką iš sąrašo kurį jam pateikia mokyklos administracija.
Tai reiškia ne ką kitą, o tai jog tvarkaraštis turi būti sudarytas praktiškai
individuliai kiekvienam mokiniui. Žinoma stengiamasi sudaryti tvarkaraštį tokį,
jog jis turėtų kuo mažiau "langų" ir būtų priimtinas tiek mokiniams,
tiek mokytojams. Vienas iš svarbiausių ir būtinas kriterijus, kuris turi būti
išpildytas - fiziniai apribojimai. Tai reiškia, jog tvarkaraštyje negalimos
tokios situacijos kai mokinys, mokytojas dalyvauja dviejose pamokose tuo pačių
metu.
Kaip palengvinimas, 2000 metų viduryje šiai problemai
spręsti buvo nupirkta amerikiečių padaryta programa "Mimosa". Ji
skirta būtent mokyklos tvarkaraščių sudarymui. Tačiau tai komercinis produktas
kainuojantis ne mažą kiekį pinigų ir papildomo apmokymo dirbti su šiuo paketu,
kas taip pat neapsieina be išlaidų. Darbas su šio paketu pakankamai aiškus,
tačiau reikia pažymėti kad nelabai efektyvus. Vienas iš pagrindinių minusų tai,
jog pradinis tvarkaraščio sudėjimas nėra gerai išdirbtas ir nepakankamas.
Pradiniu metu "Mimosa" sudeda vidutiniškai apie 40-50% visų dalykų, o
likusius tenka koreguoti ranka, kas tikrai nepateisina programos. Na o
pagrindinis šio paketo trūkumas pasireiškia tada, kada paleidžiamas procesas -
tvarkaraščio optimizavimas, tada vartotojui programos darbas nelabai aiškius ir
susidaro įspūdis, jog programa "pakimba". Taip pat neaišku kada
programa baigs darbą. Taigi vienoje iš pagrindiniu vietų kurioje programa
tūrėtų dirbti be priekaištų, jinai nuvilia.
Dėl šių priežasčių ir buvo kuriama
nauja tvarkaraščių sudarymo programą skirta Lietuvos mokykloms su profiliuotom
klasėm. Ši programa atlieka pradinį profiliuotų klasių tvarkaraščio sudarymą.
Po to atliekamas šio tvarkaraščio optimizavimas kas įgalina iki minimumo
sumažinti "langų" skaičių tiek mokiniams tiek mokytojams.
Programa sukurta naudojant Java kalbą. Galimi pasirinkimai matomi priklausomai nuo mygtuku būsenos (pilkas neaktyvus).
Veiksmai:
1. Duomenų failo ".txt" formate persiuntimas į serverį. Šis persiuntimas realizuotas CGI
interfeiso pagalba. Failo pasirinkimas atliekamas paspaudus mygtuką "Browse" ir nurodžius
norima failą. Tada turi būti paspaustas mygtukas "O.K." ir failas nusiunčiamas i serverį.
2. Duomenų nuskaitymas iš atsiųsto failo. Atlikti šį veiksmą galima tada kai failas
persiųstas paspaudus mygtuką "Read data". Tada iš serveryje esančio vartotojo duomenų
failo programa ji nuskaito. Tuomet aktyviais tampa pasirinkimai "Restrictions"(apribojimai) ir
"Penalty points"(baudos taškai).
3. "Restrictions" (apribojimai) - ši skiltis įgalina vartotoja pasirinkti norimus apribojimus
į kuriuos atsižvelgs programa darydama tvarkaraštį. Galimi tokie apribojimai kaip:
* "Two continuous lessons" - dvi besitęsiančios pamokos. Tai reiškia, jog pradiniame
tvarkaraštyje vartotojo pažymėtos pamokos bus sudėtos dvi iš eilės, vieną kartą savaitėje.
* "Teachers" - pasirinkimas kuriame nurodomi mokytojai ir savaitės dienos kada jie turi
išeigines.
* "Number of lessons" - pasirenkamas maksimalus pamoku skaičius per diena.
4. "Penalty points" (baudos taskai) - šiame lange vartotojas turi galimybe nurodyti baudos
taškus intervale nuo 0 iki 10 pateiktiems punktams. Tai yra pagal prioritetą vartotojas
skiria daugiau baudos tašku pavyzdžiui mokiniu langams negu mokytoju langams ir t.t...
Pagal nutylėjimą siūlomi baudos taškai lygus 3. Sudarius tvarkaraštį ir ji optimizuojant
vartotojas gali matyti kiek baudos tašku "surinko" vienas ar kitas tvarkaraščio variantas.
5. "Starting schedule" (pradinis tvarkaraštis) - sudedamas pradinis tvarkaraštis ir išvedamas į
lauką "First version".
6. Atlikus 5 punktą aktyviu tampa "Optimization" mygtukas, kurį paspaudus atsiranda langas
su dviem pasirinkimais: "Number of iterations" (iteracijų skaičius optimizavimo metu) ir
"Probability" - tikimybe su kuria tam tikras dalykas bus keičiamas vietomis. Juos pasirinkus
arba palikus siūlomus vykdomas "Start" mygtukas - optimizavimo pradžia.
7. Optimizavimui pabaigus darbą turėtų būti vykdomas "Last version" pasirinkimas ir galima
bus pamatyti bei išsisaugoti rezultatą.
8. "Help" - pateikti pagrindiniai reikalavimai duomenų failui.
9. "About" - programos darbo aprašymas.
Algoritmų aprašymas:
Pradinio tvarkaraščio sudėjimo aprašymas
Nuskaitomas vartotojo duomenų failas į masyvą. Atsižvelgiant į nustatytus apribojimus, jei
nustatytos tam tikros besitęsiančios pamokos jos sudedamos į tvarkarašti pirmos. Jos dedamos
pirma, antra į pirmadienį, o likusios išmetamos į kitas dienas. Toliau likusių pamokų sudėjimas
vykdomas sekančiai: pasirenkama diena ir pamoka tikrinama ar pamoka gali vykti (įvertinami
fiziniai apribojimai) sudedamos visos pamokos kurios gali vykti kartu. Taip pat atliekamas
patikrinamas ar mokytojas tą dieną neturi išeiginės (jei nustatyta apribojimuose). Viena pamoka vyksta vieną kartą per dieną, jei kitaip nenurodyta apribojimuose. Reikia pastebėti jog formuojant pradinį tvarkaraštį nėra kreipiamas dėmesys i mokinių ar mokytojų langų skaičių o stengiamasi sutalpinti visus dalykus į bendrą tvarkaraštį. Pradiniu metu tai bandoma sutalpinti i nurodyta maksimalų pamokų skaičių nurodytą apribojimų punkte "Number of lessons" (pagal nutylėjimą 9 pamokos per dieną), jei tai padaryti nepavyksta tada atliekamas masyvo išmaišymas (eilučių sukeitimas vietomis) ir vėl formuojamas tvarkaraštis. Maksimaliai išmaišymas vykdomas 100 kartų tačiau nutraukiamas jei visos pamokos tilpo. Jei atlikus išmaišymą 100 kartų visos pamokos netilpo jos dedamos prie nurodyto maksimalaus pamokų skaičiaus pridėjus 1. Tokiu atveju už vieną pamoką pridedamas maksimalus baudos taškų kiekis 10. Sudarius pradinį tvarkaraštį jis pertvarkomas, t.y. į pirmas pamokas keliamos tos pamokos, kurias lanko daugiausiai mokinių, tam kad sumažinti langų skaičių pradiniame tvarkaraštyje. Paskui atliekamas optimizavimas.
Tvarkaraščio
optimizavimo aprašymas.
Optimizavimas orientuotas į mokinių langų mažinimą. Optimizavimo algoritmas:
1. Iteracijos numeris nustatomas į 1.
2. Keliaujama per mokinių sąrašą.
3. Parenkamas atsitiktinis skaičius x.
4. Jei x didesnis už mūsų pasiriktą tikimybę (probability), tai atlikinėjami pakeitimai mokinio
tvarkaraštyje, jei x mažesnis už tikimybę, einama prie kito mokinio.
5. Ieškomi parikto mokinio langai. Kai langas surastas, ieškomos kiekvienos dienos pirmos ir
paskutinės pamokos, kurios gali būti įterptos vietoje lango. Jei tos pačios dienos tinka
ir pirma, ir paskutinė, atsitiktinio skaičiaus pagalba parenkama viena iš jų.
6. Vietoje lango įterpiama rasta pamoka, o vietoje rastos pamokos padaroma laisva vieta.
7. Kai peržiūrimi visi mokinio langai keliaujama į 3 punktą.
8. Kai peržiūrimi visi mokiniai, padidinamas iteracijos numeris ir einama į 2 punktą.
9. Kai atliktos visos iteracijos, pateikiamas geriausias tvarkaraščio variantas.
Baudos
taškų skaičiavimas.
Baudos taškai apskaičiuojami įvertinant tokius 5 faktorius: langus tarp pamokų vaikams, langus tarp pamokų mokytojams, apribojimų dėl dviejų besitęsiančių pamokų neįgyvendinimą, apribojimų dėl mokytojų laisvų dienų neįgyvendinimą ir per dieną vykstančių pamokų skaičiaus padidinimas.
Geriausio
varianto išrinkimas.
Įvykdžius visus punktus, geriausias variantas, laikomas tas, kuris turi mažiausią skaičių bendrai apskaičiuotų baudos taškų, o ne tas, kuris atitinka visus apribojimus. Tai daroma todėl, kad
pavyzdžiui kokio nors apribojimo neįvykdymas gali labai ženkliai sumažinti mokinių langų skaičių.
Tvarkaraščių pavyzdžiai:



Sudėjus kitą tvarkaraštį su tais pačiais duomenimis gaunami kiti rezultatai:



Sukurta programa pagerinanti ir palengvinanti profilinių klasių tvarkaraščio sudarymą.
Tvarkaraščio sudaryme vartotojas dalyvauja tik duomenų failo sudaryme, duomenų failo nusiuntime ( į serverį ) ir rezultatų gavime. Taigi sudaryta programa ne tik sudaro tvarkaraštį, į nurodytus apribojimus, bet ir atlieka daugelį optimizavimų veiksmų, kiekvienam variantui apskaičiuoja baudos taškus nurodytus vartotojo ir išveda geriausią pagal baudos taškus rezultatą.
Tai nereikalauja didelių vartotojo pastangų, mokėjimo dirbti kompiuteriu bei programa, lyginant darbą su programa Mimosa. Šį tvarkaraštį gali sudaryti netgi mokyklos sekretorė. O tvarkaraščio sudarymas, naudojantis Mimosa reikalauja, kad kūrimo procese dalyvautų asmuo ne tik gerai mokantis dirbti kompiuteriu, bet jis turi būti apmokytas dirbti ir pačia programa.
Siūlymas tolimesniam tobulinimui. Reikėtų padaryti šios programos, šiuo atveju Java applet kopiją, realizuotą Java application pagrindu, tam kad gavęs geriausią rezultatą vartotojas rankiniu būdu galėtų jį koreguoti.