Darbo tikslas.

 

            Sukurti programą, kuri sudaro vidurinių mokyklų tvarkaraštį profiliuotoms klasėms, mokiniams bei mokytojams.

 

Užduoties analizė.

 

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.
     

Realizacija.

 

              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:

 

 

 

 

 

 

Išvados

 

            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.