Turinys
|
|
|
|
|
|
|
|
|
|
Sudaryti programa, kuri leistu generuoti vidurines mokyklos viduriniu ir aukstesniuju (penktu - dvyliktu) klasiu vienos savaites pamoku tvarkarasti ir optimizuotu ji taip, kad butu kuo maziau mokytoju langu.
Pagrindinis uzdavinio tikslas - praktikoje pritaikyti diskretinio optimizavimo uzdavini. Musu uzdavinys patenka i optimalaus planavimo uzdaviniu grupe, kuriai priklauso tokie uzdaviniai, kaip vagies, siuvyklos, mokyklos tvarkarascio ir kt. Sudarant mokyklos tvarkarasti, reikia nustatyta kiekvienai klasei atitinkamu dalyku skaiciu isdestyti visoje savaiteje taip, kad nebutu virsyti turimi mokyklos resursai: kabinetai, mokytojai ir t.t.
Mokyklos tvarkarascio uzdavinys issiskiria tokiais ypatumais:
Mokykloje yra sie riboti resursai:
Be to, dar yra apribojimu, kurie isryskeja tvarkarascio formavimo metu:
Pradiniai duomenys siai uzduociai yra:
Ivertinus visus siuos aspektus, galime apibrezti busimos programos matmenis:
Sio uzdavinio realizacija remsis ne tik auksciau paminetais praktiniais pastebejimais, taciau ir tam tikra teorine medziaga, kuri bus pateikta tolesniame skyriuje.
Matematiskai tvarkarascio uzdavinys yra formuluojamas taip:
X(j), j=1..N - mokiniu klases
Y(I), I=1..M - dalykai
t(i,j), pozymis, ar i-tasis dalykas destomas j-tajai klasei.
Akademine pamoku tvarka - nefiksuota.
Yra riboti resursai (laikas, kabinetai): r(i,j)=(r(i,j)^1, � , r(i,j)^k).
Resursai pasizymi tuo, kad Sr(i,j)<=r(i).
Optimalumo kriterijai - laiko nuostoliai.
Reikia sudaryti optimalu tvarkarasti, t.y. toki, kuriame butu minimalus
laiko nuostoliai.
Tvarkarascio uzdavinys yra priskiriamas NP-complete uzdaviniu klasei,
kuriu skaiciavimo apimtis yra isreiskiama formule: T=C*2^m, kur m-kintamuju
skaicius. Eksponentinis laikas T yra mokestis uz garantija.
Jei uzdavinys priklauso NP-complete klasei ir nepasizymi jokiomis ypatingomis
savybemis (kurios susiaurina leistinu sprendiniu aibe) bei norime tikrai
(!) optimalaus sprendinio, tuomet reikia pasirinkti PP - pilna perrinkima.
Realiai tai reiskia labai dideles skaiciavimo apimtis.
Galima taikyti algoritmus, kurie stengiasi is anksto nustatyti sritis,
kuriose nera leistinu sprendiniu ir tokiu budu greiciau gauna optimalu.Vienas
is tokiu yra B&B - saku ir ribu algoritma. Darbo eigoje jis atsiriboja
nuo neperspektyviu sprendiniu, taciau galima situacija, kai ir jis tures
perrinkti visus variantus.
Jei mes atsisakome garantijos, kad gausime optimalu sprendini, tai galime
pasinaudoti heuristiniais algoritmais, kurie perziuri tik tam tikra dali
leistinu sprendiniu ir is ju parenka geriausia ir ji pateikia kaip optimaliausia
gauta sprendini.
Yra du heuristikos budai:
Galima imti ne tiesine, o kitokia priklausomybe:
r0 = 1/N - Monte Carlo;
r1 = h(n)/ sum_j h(j) - tiesine;
r2 = h(n)^2/ sum_j h(j)^ - kvadratine;
r3 = 1, jei h(n)= max_j h(j) - "Gobsi".
Siuo atveju mes turime dvi loterijas: bilietine, kuri parodo, pagal
kuria taisykle rinksimes tolesni varianta ir kainine, kuri randa
tolesnio varianto numeri pagal bilietineje loterijoje nustatyta taisykle.
Visais atvejais iskyla klausimas - kas yra varianto "gerumas"?
Jis priklauso nuo konkrecios situacijos. Vagies uzdavinyje - tai maiso
kaina, mokyklos tvarkarascio - mokytoju langu skaicius ir pan.
Atsizvelgus i pastabas, isdestytas uzduoties analizeje ir teorineje dalyje, buvo sudarytas toks apibendrintas uzduoties sprendimo algoritmas:
Pradiniame etape skaitome duomenis is failu ir paruosiame leistinu pamoku masyvus KLL ir KL0, kurie parodo kokias pamokas gali tureti konkreciu metu konkreti klase.
Globalioje paieskoje:
Jei globalioje paieskoje buvo gautas leistinas sprendinys, tai tolesniame zingsnyje atliekama lokali paieska:
Fiksuojant geriausia sprendini palyginame jau turima geriausia sprendini su sprendiniu, kuris buvo gautas po lokalios paieskos ir atsimename geresni.
Vartotojui yra pateikiamas programinis paketas, skirtas ne tik stebeti
sudarytos programos darba, bet ir analizuoti jos veikima ir rezultatus
esant ivairiems pradiniams parametrams. Programa paleidziama komandineje
eiluteje surinkus "test".
Vartotojui pateikiamas programos langas, kuris turi tokius meniu punktus:
"Global", "Local", "Operations", "Quit",
"Parameters", "Output".
Meniu punktais "Global" ir "Local" vartotojas gali
pasirinkti darbo algoritmus.
Meniu punktas "Output" suteikia galimybe perziureti skaiciavimu
rezultatus programos darbo metu.
Pasirinkus algoritma, reikia meniu punkte "Parameters" parinkti
darbinius parametrus: IT - iteraciju skaiciu, LT - pradiniu iteraciu skaicius.
Ai ir Bi - tai intervalai, kuriuose programa pagal pasirinkta algoritma
parinks skaicius.
Jei visi nustatymai baigti, reikia pasirinkti meniu punkta "Operations.Run".
Programos pabaiga - punktas "Quit".
Programos kurimo metu buvo sudarytos dvi programos versijos: DOS ir UNIX opracinems sistemoms.
Programos versija UNIX operacinei sistemai buvo priderinta prie jau egzistuojancio ivairius optimizavimo metodus palaikancio paketo. DOS operacinei sistemai buvo galima naudotis tuo paciu paketu TurboC kalbai, arba paleisti vykdyti sia programa visiskai atskirai. Paskutiniuoju atveju reikia ranka nustatyti vidiniu taisykliu parinkimo tikimybes (masyvas X). Abiem kitais atvejais sias tikimybes pagal pasirinktus metodus parinkdavo programiniai paketai. Pateikti programiniai paketai leidzia stebeti gauto optimalaus sprendinio kitimo dinamika. Autonominis DOS variantas rezultatus pateikia tekstiniame pavidale, taciau jis leidzia analizuoti ir ankstesnius duomenis, ko neleidzia mineti programiniai paketai.
Kaip pavyzdi pateiksime vieno skaiciavimo eiga. Buvo atlikta 30 globaliu iteraciju. Kiekvienos globalios iteracijos metu buvo vykdoma 10 lokaliu iteraciju. Lokalioje paieskoje buvo generuojama 100 galimu tolesniu perstatymu. Programa ekrane pateike toki vaizda:
2. Mokytojai: Global = 184 Local = 164 Min = 164
3. Mokytojai: Global = 187 Local = 165 Min = 164
5. Mokytojai: Global = 175 Local = 155 Min = 155
6. Mokytojai: Global = 191 Local = 169 Min = 155
7. Mokytojai: Global = 173 Local = 171 Min = 155
8. Mokytojai: Global = 197 Local = 170 Min = 155
10. Mokytojai: Global = 181 Local = 157 Min = 155
11. Mokytojai: Global = 174 Local = 166 Min = 155
13. Mokytojai: Global = 190 Local = 158 Min = 155
14. Mokytojai: Global = 180 Local = 162 Min = 155
15. Mokytojai: Global = 167 Local = 140 Min = 140
16. Mokytojai: Global = 195 Local = 160 Min = 140
18. Mokytojai: Global = 167 Local = 161 Min = 140
19. Mokytojai: Global = 181 Local = 156 Min = 140
20. Mokytojai: Global = 188 Local = 169 Min = 140
21. Mokytojai: Global = 174 Local = 163 Min = 140
22. Mokytojai: Global = 197 Local = 158 Min = 140
23. Mokytojai: Global = 189 Local = 163 Min = 140
24. Mokytojai: Global = 190 Local = 170 Min = 140
25. Mokytojai: Global = 188 Local = 154 Min = 140
26. Mokytojai: Global = 200 Local = 169 Min = 140
27. Mokytojai: Global = 196 Local = 181 Min = 140
30. Mokytojai: Global = 181 Local = 165 Min = 140
Stulpeliuose atitinkamai pavaizduoti mokytoju langai: po globalios paieskos, po lokalios paieskos ir rastas geriausias sprendinys. Kai kuriu iteraciju rezultatai i ekrana isvesti nebuvo, nes po globalios paieskos buvo gautas neleistinas sprendinys ir lokali paieska su tuo variantu nebuvo atliekama..