sestavljanje urnika s pomoČjo rojne ...zunanji pomnilnik dobimo s pomočjo razširitvenega medija,...
TRANSCRIPT
-
i
Fakulteta za elektrotehniko, računalništvo in informatiko
Smetanova ulica 17 2000 Maribor, Slovenija
Leon Merc
SESTAVLJANJE URNIKA S POMOČJO ROJNE INTELIGENCE NA MOBILNI
PLATFORMI ANDROID
Diplomsko delo
Maribor, september 2013
-
ii
SESTAVLJANJE URNIKA S POMOČJO ROJNE
INTELIGENCE NA MOBILNI PLATFORMI ANDROID
Diplomsko delo
Študent: Leon Merc
Študijski program: Univerzitetni, Računalništvo in informacijske tehnologije
Mentor: Doc. dr. Iztok Fister
-
iii
-
iv
Zahvala
Zahvaljujem se mentorju doc. dr. Iztoku Fistru,
za pomoč in vodstvo ob pisanju diplomske naloge.
Prav tako bi se rad zahvalil vsem družinskim
članom, ki so me spodbujali skozi vsa leta mojega
šolanja.
-
v
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platformi Android
Ključne besede: Android, rojna inteligenca, optimizacija z roji delcev
UDK:621.39:004.5(043.2)
Povzetek
V diplomski nalogi se ukvarjamo s problemom avtomatizirane generacije urnika za
poljubno šolsko ustanovo. Kot ciljni operacijski sistem smo uporabili mobilno platformo
Android. Za optimizacijo samega urnika smo uporabili pristop rojne inteligence,
natančneje algoritma PSO (angl. Particle swarm optimization), katerega smo tudi
podrobno opisali.Ugotovili smo, da je optimizacija z zadovoljivimi rezultati na mobilnem
telefonu možna, ter predstavili pridobljene rezultate pri različnih konstantah.
-
vi
Timetabling using swarm intelligence on mobile platform Android
Key words: Android, swarm intelligence, Particle Swarm Optimization
UDK:621.39:004.5(043.2)
Abstract
In the thesis, we have dealt with the problem of automatic timetable generation for a
chosen academic institution. As the target operating system, an Android mobile platform
was used. The swarm intelligence approach, specifically the PSO (Particle swarm
Optimization) algorithm was applied for scheduling the optimization itself. This algorithm is
also described in detail. The conclusion of this thesis is that the automatic generation of
timetable on mobile devices is possible and the obtained results are appropriate to use in
a real-world.
-
vii
Kazalo
1 UVOD ................................................................................................................................................. 1
2 OPERACIJSKI SISTEM ANDROID .......................................................................................................... 3
2.1 MOBILNE NAPRAVE ............................................................................................................................... 3
2.2 O ANDROIDU ....................................................................................................................................... 3
2.2.1 Različice sistema Android ............................................................................................................ 4
2.2.2 Shranjevanje podatkov ................................................................................................................ 5
2.2.3 Vrste pomnilnika .......................................................................................................................... 5
2.3 MOBILNA APLIKACIJA ............................................................................................................................. 5
2.3.1 Aktivnost ...................................................................................................................................... 6
2.3.2 Storitve......................................................................................................................................... 6
2.3.3 Ponudniki vsebine ........................................................................................................................ 6
2.3.4 Sprejemniki obvestil ..................................................................................................................... 7
2.4 RAZVOJ MOBILNIH APLIKACIJ ................................................................................................................... 7
3 ROJNA INTELIGENCA .......................................................................................................................... 9
3.1 OPTIMIZACIJA Z ROJI DELCEV ................................................................................................................. 10
3.2 SESTAVLJANJE URNIKA Z ROJI DELCEV ...................................................................................................... 12
3.2.1 Določitev omejitev ..................................................................................................................... 13
3.2.2 Predstavitev problema ............................................................................................................... 13
3.2.3 Predstavitev položaja delca ....................................................................................................... 14
3.2.4 Sestavljanje urnika ..................................................................................................................... 15
3.2.5 Ocenitvena funkcija ................................................................................................................... 17
3.2.6 Lokalno iskanje .......................................................................................................................... 18
4 MOBILNA APLIKACIJA ZA SESTAVLJANJE URNIKA ............................................................................. 20
4.1 GRAFIČNA PODOBNA APLIKACIJE ............................................................................................................ 20
4.1.1 Osnovni meni ............................................................................................................................. 20
4.1.2 Dodajanje učilnice ...................................................................................................................... 21
4.1.3 Dodajanje predmetov ................................................................................................................ 22
4.1.4 Dodajanje razreda ..................................................................................................................... 23
4.1.5 Informacijski zaslon ................................................................................................................... 24
4.2 SHRANJEVANJE V DATOTEKO.................................................................................................................. 25
4.3 GENERACIJA URNIKA ............................................................................................................................ 26
-
viii
5 EKSPERIMENTI IN REZULTATI ............................................................................................................ 28
5.1 DOLOČANJE VELIKOSTI POPULACIJE ......................................................................................................... 29
5.2 KAKOVOST IN ČAS IZDELAVE URNIKA ........................................................................................................ 30
5.3 ČASOVNA ZAHTEVNOST POSAMEZNIH KOMPONENT ALGORITMA ................................................................... 31
6 SKLEP ................................................................................................................................................ 33
7 SEZNAM UPORABLJENIH VIROV ....................................................................................................... 34
-
ix
Kazalo slik
Slika 2-1: Primer oblikovanja enega izmed zaslonov......................................................... 8
Slika 3-1: Primer gibanja delca ........................................................................................12
Slika 3-2: Krčenje števila na termine za manjšo kompleksnost ........................................14
Slika 3-3: Primer položaja delca .......................................................................................15
Slika 3-4: Primer izbiranja 4 največjih števil .....................................................................15
Slika 3-5: Primer izbire novega števila, ko pride do konflikta ............................................16
Slika 4-1: Izgled osnovnega menija ..................................................................................21
Slika 4-2: Izgled aktivnosti za dodajanje učilnice ..............................................................22
Slika 4-3: Izgled aktivnosti za dodajanje predmeta ...........................................................23
Slika 4-4: Aktivnost za dodajanje razreda ........................................................................24
Slika 4-5: Izgled informacijskega zaslona .........................................................................25
Slika 4-6: Prikaz rezultatov sestavljanja urnika .................................................................26
-
x
Kazalo tabel
Tabela 2-1: delež različic Android nameščenih na mobilnih napravah .............................. 4
Tabela 3-1: Vrednosti za ocenjevanje urnika ...................................................................17
Tabela 5-1: Rezultati eksperimenta ..................................................................................30
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
1
1 Uvod
Sestavljanje urnika je organizacijski problem, s katerim se ljudje srečujemo na različnih
področjih življenja že od nekdaj, npr. ko delamo preprost razpored izmen v službah z
večizmenskim delom, urnik dogodkov ob večdnevnih prireditvah, urnik prostega časa, ipd.
Eden izmed takšnih problemov je tudi sestavljanje šolskega urnika, ki se mu posvečamo v
pričujoči diplomski nalogi. Pri sestavljanju šolskega urnika je potrebno upoštevati
naslednje štiri elemente oz. zainteresirane skupine [13]:
predavatelje/učitelje,
študente/učence,
predavalnice/učilnice in
časovne termine.
V praksi imamo namesto skupine pogosto predavateljev/učiteljev opravka s predmeti, saj
lahko en predmet uči več predavateljev/učiteljev. Prav tako študente/učence razvrščamo v
razrede/oddelke, saj v praksi en predmet običajno obiskuje skupina študentov/učencev. V
nadaljevanju zato uporabljamo izraz razred, za skupino študentov/učencev, ki obiskujejo
iste predmete.
Prav zaradi števila različnih kombinacij teh štirih elementov, je sestavljanje šolskega
urnika običajno veliko kompleksnejše, kot sestavljanje urnika za običajne namene. To so v
svoji raziskavi potrdili tudi avtorji Even, Itai in Shamir [1], ki so ugotovili, da je sestavljanje
šolskega urnika NP-poln problem. Ker je sestavljanje šolskega urnika problem, ki ga je
običajno potrebno prilagoditi razmeram na posamezni šoli, se je to opravilo donedavna
praviloma izvajalo ročno, kar je zahtevalo ogromno časa in človeških virov. Z uporabo
računalnika lahko upoštevamo želje posameznih skupin in na ta način kljub postavljenim
omejitvam generiramo urnik, s katerim je zadovoljna večina zainteresiranih skupin [2].
Področje sestavljanja šolskega urnika sta obravnavala med drugimi avtorja Ruey-Maw in
Hsiao-Fang [2], ki sta za optimizacijo urnika predlagala algoritem z roji delcev. Dowsland
in Thompson [17] sta se usmerila v dokaj podoben problem, sestavljanje urnika za pisne
preizkuse znanja, za kar sta uporabila optimizacijo z roji mravelj. Alzaqebah in Abdullah
[16] sta se enakega problema lotila z uporabo optimizacije z roji čebel.
V naši diplomski nalogi za sestavljanje urnika uporabljamo mobilno napravo z
operacijskim sistemom Android. Pri sami optimizaciji si pomagamo z optimizacijo z roji
delcev, ki spada pod algoritme rojne inteligence. Ker so mobilni telefoni donedavnega
veljali za računsko omejene, so se redko uporabljali za optimizacijske ali kakšne druge
računsko zahtevne operacije. Moč mobilnih telefonov se z leti hitro povečuje, njihova
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
2
uporaba pri sami optimizaciji pa nekoliko manj, saj še vedno velja prepričanje, da je moč
mobilnih naprav v primerjavi z osebnimi računalniki veliko manjša. Za razliko od
obravnavanih metod, smo naš optimizacijski algoritem razvili za mobilno napravo,
analizirali rezultate, ter ocenili njegovo učinkovitost. Glavna prednost takšnega razvoja je
dostopnost naše aplikacije kadarkoli in kjerkoli, saj je običajno mobilni telefon zmeraj v
dosegu roke.
Naša diplomska naloga je sestavljena iz petih poglavij. V drugem poglavju predstavimo
operacijski sistem Android, njegove različice in razvojna orodja. V tretjem poglavju
povemo nekaj o osnovah rojne inteligence, naštejemo nekaj algoritmov s tega področja in
opišemo algoritem, ki smo ga uporabili pri svoji optimizaciji. V četrtem poglavju
predstavimo grafični izgled naše aplikacije, opišemo postopek generacije urnikov, ter na
koncu vse rezultate analiziramo in predstavimo grafično. V sklepu povzemamo svoje
izkušnje o primernost mobilnih naprav za sestavljanje urnika.
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
3
2 Operacijski sistem Android
Z razvojem mobilnih tehnologij, se je izboljšala tudi dostopnost do naših podatkov. Danes
lahko uporabniki, dostopajo do svojih osebnih ali službenih podatkov kadarkoli in od
koderkoli, ne glede na njihovo lokacijo na svetu. Vse to je mogoče zaradi priročnih
aplikacij, ki so implementirane na eni izmed mobilnih naprav [24]. Ena izmed takšnih
aplikacij, je tudi aplikacija, ki smo jo implementirali v tem diplomskem delu.
2.1 Mobilne naprave
Mobilna naprava je običajno, majhna, prenosna, ročna, računalniška naprava [25]. Ena
izmed takšnih naprav je tudi mobilni telefon, ki je namenjen opravljanju in sprejemanju
klicev preko omrežja.
Pametni telefon je mobilna naprava z mobilnim operacijskim sistemom, ki jo od
običajnega mobilnega telefona loči boljša računska moč in povezljivost. Pametni telefon
običajno vsebuje sprejemnik GPS, medijski predvajalnik, vgrajen fotoaparat, vgrajeno
kamero, ipd. Večina modernih pametnih telefonov je opremljena z zaslonom na dotik,
brezžičnim in internetnim sprejemnikom. Največja razlika med običajnim in pametnim
telefonom je napredni programski vmesnik na slednjih, ki omogoča boljšo integracijo
aplikacij tretjih oseb in operacijskega sistema [18].
2.2 O Androidu
Android je mobilni operacijski sistem, ki temelji na jedru sistema Linux. Primarno je
zasnovan za naprave z zaslonom na dotik, pametne telefone in tablične računalnike.
Sistem je odprto-koden, kar pomeni, da ga lahko modificira in distribuira vsak posameznik
[3]. Prav zaradi slednjega in svoje izredne priljubljenosti med razvijalci, je Android v
zadnjem četrtletju leta 2010 prehitel konkurenčni sistem Symbian, ter z tem postal najbolj
razširjena platforma za pametne telefone [3][4].
Osnovni programski jezik za razvoj aplikacij je prilagojena oblika Jave [3]. Poleg Jave
Android omogoča tudi implementacijo delov kode napisanih v ostalih splošnih
programskih jezikih, kot so C in C++, kar zna biti, zaradi ponovne uporabljivosti že
napisane kode, za določene aplikacije še kako koristno. Vendar tak način prinaša tudi
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
4
svoje slabosti, predvsem v zmogljivosti napisane kode. Zato je naloga vsakega razvijalca
posebej, da oceni, kaj je najboljše za njegovo aplikacijo [5].
V naši diplomski nalogi smo za razvoj svoje aplikacije izbrali programski jezik Java, kot
razvojno okolje pa smo uporabili Android studio, ki ga predstavljamo kasneje. Najprej pa
se dotaknimo vprašanja, kako izbrati pravilno različico sistema Android.
2.2.1 Različice sistema Android
V svoji prvi preizkusni različici je Android prvič izšel novembra leta 2007. Prva
komercialna verzija Androida, označena kot verzija 1.0, je izšla septembra leta 2008. Vse
verzije Androida so po aprilu leta 2009 poimenovane po eni izmed slaščic in si sledijo po
abecednem vrstnem redu (Cupcake, Donut, itd.) [6].
Ker se je z razvojem različic spreminjal tako vizualni kot funkcijski vidik samega
operacijskega sistema, smo se v našem primeru morali odločiti, katera je minimalna
zahtevana različica Androida, s katero lahko zajamemo večino trenutnih naprav, in pri tem
še vedno uporabljamo najnovejše gradnike mobilnih aplikacij. Dne 1.9.2013 je bil delež
različic nameščenih na mobilnih napravah takšen, kot ga prikazuje tabela 2-1 [3].
Tabela 2-1: delež različic Android nameščenih na mobilnih napravah
Verzija Ime Datum izdaje API nivo Delež
4.1.x Jelly Bean 9. julij 2012 16 36.6%
2.3.3 Gingerbread 9. februar 2011 10 30.7%
4.0.3 Ice Cream Sandwich 16. december 2011 15 21.7%
4.2.x Jelly Bean 13. november 2012 17 8.5%
2.2 Froyo 20. maj 2010 8 2.4%
3.2 Honeycomb 15. julij 2011 13 0.1%
Pri tem je potrebno dodati, da je v veliki večini primerov aplikacija napisana za določeno
različico kompatibilna tudi z novejšimi različicami. Obratno pa tega ne moremo trditi. Sami
smo glede na podatke v omenjeni tabeli izbrali različico Ice Cream Sandwich, ki je bila v
času razvijanja naše mobilne aplikacije dovolj nova, in je pri tem še vedo zajemala dobrih
65% vseh mobilnih naprav Android.
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
5
2.2.2 Shranjevanje podatkov
Večina mobilnih aplikacij mora vsaj enkrat v svojem življenjske ciklu shraniti podatke.
Android omogoča naslednje načine shranjevanja [22][23]:
Shranjevanje datotek, primerno za shranjevanje velikih količin podatkov. Še
posebej takrat, ko podatke beremo od začetka do konca.
Shranjevanje podatkov v SQL bazo, primerno za shranjevanje ponavljajočih ali
strukturiranih podatkov.
Shranjevanje ključ-vrednost parov, se uporablja, ko imamo relativno majhno
število podatkov vezane na neke ključe. Ključ nam predstavlja edinstven
identifikator, ki kaže na vrednost. Vrednost je naš podatek ali kazalec na ta
podatek.
2.2.3 Vrste pomnilnika
V samem Androidu obstajata dve vrsti spomina in sicer notranji in zunanji. Notranji
pomnilnik je vgrajen v samo mobilno napravo. Zunanji pomnilnik dobimo s pomočjo
razširitvenega medija, kot je kartica SD (angl. Secure Digital), ipd. Imena pomnilnikov
izhajajo iz začetkov razvoja samega Androida, ko je večina telefon poleg notranjega oz.
internega pomnilnika uporabljala tudi zunanje medije.
Danes večina naprav svoj notranji pomnilnik deli na zunanjo in notranjo particijo, kar
pomeni, da lahko simuliramo zunanji pomnilnik z notranjim [13].
2.3 Mobilna aplikacija
Mobilna aplikacija, je programska oprema, ki je implementirana tako, da jo poganjajo
mobilni telefoni. Mobilne aplikacije so običajno na voljo preko posebne distribucijske
platforme, ki jo upravlja sam mobilni operacijski sistem. Primeri najbolj znanih distribucijski
platform so App Store [28], Google Play [29] in Windows Phone Store [30]. Na voljo so
tako plačljive kot ne-plačljive aplikacije. Mobilne aplikacije so na začetku zajemala le
najosnovnejše funkcionalnosti kot so elektronska pošta, koledar, kontakti, borzni podatki
in informacije o vremenu. Vendar so z časom in zahtevami uporabnikov hitro razširile
svoje funkcionalnosti tudi na mnoga druga področja, kot so mobilne igre, navigacija,
bančništvo, ipd. [19].
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
6
2.3.1 Aktivnost
Aktivnost (angl. Activity) je razred oz. komponenta v operacijskem sistemu Android, ki
skrbi za prikaz grafičnega vmesnika. Aktivnost običajno predstavlja neke logično
povezane funkcionalnosti. Aplikacija je sestavljena iz več aktivnosti. Katera aktivnost teče
trenutno določa sklad aktivnosti (angl. Activity Stack). Aktivnost, ki trenutno teče je zmeraj
na vrhu sklada. Sama aktivnost ima lahko naslednja stanja [20]:
Aktivna oz. teče (angl. active or running), ko je aktivnost v ospredju našega
zaslona.
Začasno ustavljena (angl. paused) aktivnost, ki je še zmeraj vidna vendar je
izgubila pozornost. Takšna aktivnost ohranja vrednosti vseh spremenljivk in se
zaustavi le v primeru, ko nam začne primanjkovati glavnega pomnilnika.
Ustavljena (angl. stopped) aktivnost, ki ni več v ospredju in jo popolnoma
prekriva neka druga aktivnost. Aktivnost ohranja vrednosti spremenljivk, vendar
se zaustavi takoj, ko je glavni pomnilnik potreben za druge aktivnosti.
2.3.2 Storitve
Storitev je komponenta oz. gradnik Androida, ki nima uporabniškega vmesnika. Uporablja
se za dolgotrajne operacije, ki tečejo v ozadju. Primer storitve je, predvajanje glasbe, ko
smo v drugi aplikaciji ali pridobivanje podatkov preko spleta, ne da bi blokirali interakcijo z
našo aktivnostjo. Storitev lahko zaženemo iz katerekoli aktivnosti [27].
2.3.3 Ponudniki vsebine
Ponudniki vsebine skrbijo za podatke aplikacije v skupni rabi. Omogočajo shranjevanje
podatkov v podatkovno bazo, datotečni sistem, splet ali kateri koli drug vir za shranjevanje
do katerega lahko dostopa naša aplikacija. Od ponudnika vsebine lahko druge aplikacije
zahtevajo podatke ali jih celo spreminjajo (če imajo ustrezne pravice). Primer ponudnika
vsebine je npr. seznam kontaktov. Aplikacije z ustreznimi pravicami lahko pridobijo
podatke o posameznem kontaktu, ter jih spreminjajo če imajo za to zadostne pravice [27].
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
7
2.3.4 Sprejemniki obvestil
Sprejemniki obvestil, so še ena izmed komponent Androida, ki nimajo uporabniškega
vmesnika. Veliko obvestil izhaja iz samega operacijskega sistema. Preko njih sprejmemo
obvestila o prazni bateriji, ko se ugasne ekran, ko je bila zajeta zaslonska slika ipd.
Obvestila lahko poleg operacijskega sistema pošiljajo tudi samo aplikacije. Vzemimo na
primer aplikacijo, ki pridobi z spleta nov vir podatkov in razpošlje obvestila ostalim
aplikacijam. S tem jih obvesti, da je ta vir na voljo vsem.
2.4 Razvoj mobilnih aplikacij
V preteklosti je kot glavno integrirano okolje za razvoj aplikacij Android veljalo ogrodje
Eclipse. V Eclipse je bilo potrebno namestili vtičnik, ki je dodal funkcionalnosti potrebne za
razvoj mobilnih aplikacij (npr. emulator, razhroščevalnik, ipd.) in lahko smo pričeli z delom
[7] . Ker je ogrodje Eclipse v osnovi namenjeno za razvoj široke palete aplikacij, ki niso
namenjene prvenstveno platformi Android, so dodatne funcionalnosti pomenile večjo
kompleksnost uporabniškega vmesnika, kot bi bilo potrebno.
Android studio je za razliko od ogrodja Eclipse integrirano razvijalno orodje, ki se
osredotoča le na razvoj aplikacij za platformo Android. Izdan je bil junija leta 2013 kot
zgodnji predogled, kar pomeni, da je bilo orodje v času našega razvijanja še v poizkusni
različici [8].
Kljub preizkusni različici Android studia smo med samim razvojem naše mobilne aplikacije
ugotovili, da je orodje dovolj stabilno, da nam je uspelo v njem razviti celotno aplikacijo
brez kakšnih večjih težav. Android studio za izdelavo aplikacij ponuja široko paleto že
implementiranih gradnikov. Nekaj izmed teh gradnikov smo uporabili tudi mi [21]:
Zavihki (angl. tabs): s pomočjo katerih olajšamo navigacijo med različnimi
pogledi in funkcionalnostmi naše aplikacije.
Gumbi (angl. button): gradnik sestavljen iz teksta in slike, ki ob pritisku nanj
zažene določeno akcijo.
Vnosno polje (angl. text field): uporabljajo se za pridobivanje podatkov od
uporabnika. Lahko so tekstovna ali številska, omogočajo pa tudi posebne tipe
vnosa kot so gesla.
Potrditveno polje (angl. checkbox): uporabniku omogočajo izbiro različnih
možnosti iz nabora funkcij oz. podatkov (v našem primeru seznam predmetov),
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
8
izbrane možnosti so predstavljene kot obkljukano polje, neizbrane pa kot prazno
polje.
Seznam (angl. list): se uporablja za prikaz podatkov. Podatki so predstavljeni v
vertikalnih vrsticah, kot tekst.
Razširljiv seznam (angl. Expandable list): je po sestavi podoben seznamu, z
dodatno funkcionalnostjo razširitve vsakega elementa. Ko pritisnemo na poljubno
podatkovno vrstico v razširljivem seznamu, se ta razširi in prikaže dodatne
informacije o naši izbiri.
Slika 2-1: Primer oblikovanja enega izmed zaslonov
Na sliki 2-1 lahko vidimo primer oblikovanja ene izmed aktivnosti naše aplikacije. Na levi
strani vidimo nabor gradnikov, ki jih lahko uporabimo pri gradnji izgleda naše aplikacije.
Na sredini imamo okno za oblikovanje naše aktivnosti. Če želimo uporabiti določen
gradnik ga preprosto izberemo in prenesemo na želeno mesto na sredo ekrana. Na desni
zgornji strani strani lahko vidimo hierarhično drevo naših gradnikov in njihovo povezavo.
Ko izberemo katerega izmed gradnikov, se v spodnjem desnem kotu prikažejo njegove
lastnosti. Z lastnostmi gradnika vplivamo na njegov izgled in obnašanje, s čimer ga lahko
prilagodimo svojim potrebam.
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
9
3 Rojna Inteligenca
Rojna inteligenca (angl. Swarm Intelligence, krajše SI) je disciplina umetne
inteligence(UI). Na svoji popularnosti je pridobila predvsem v zadnjem desetletju.
Običajno se zgleduje po kolektivnem obnašanju bioloških sistemov, kot npr. roji mravelj,
čebel, termitov, črvov ter jate ptic in rib [15].
Osnovni gradnik populacije rešitev predstavljajo t.i. agenti. Agenti komunicirajo med seboj
lokalno, z okoljem pa globalno. Agenti se obnašajo po zelo preprostih pravilih, čeprav ni
centralnega sistema, ki bi tem agentom naročal, kako naj se obnašajo, nas komunikacija
med agenti pripelje do neke vrste inteligentnega obnašanja, ki ga posamezni agenti ne
poznajo [9].
Zaradi različnosti sistemov, ki jih lahko opazujemo z rojno inteligenco, raziskave na tem
področju razvrstimo glede na naslednje kriterije [10]:
Naravni–umetni: o naravnih sistemih govorimo takrat, ko so cilj študije biološki
sistemi, o umetnih pa, ko so to človeški artefakti.
Znanstvene–inženirske: znanstvene raziskave so tiste, katerih cilj je osamitev in
razumevanje mehanizma, ki omogoča sistemom inteligentno in koordinirano
obnašanje. Medtem pa je cilj inženirske raziskave, izkoriščanje razumevanja
znanstvenih raziskav, za sestavo sistema, ki razrešuje praktični problem.
Naštejmo samo nekaj primerov algoritmov rojne inteligence [9]:
Optimizacija s kolonijo mravelj (angl. Ant Colony Optimization, krajše ACO):
je optimizacijski algoritem, ki posnema obnašanje kolonije mravelj. Uporaben je
predvsem v primerih, ko moramo najti optimalno pot do cilja. V naravi mravlje
puščajo feromone, s čimer usmerjajo ena drugo, medtem ko raziskujejo prostor.
Kolonija čebel (angl. Artificial Bee Colony, krajše ABC): simulira obnašanje
roja čebel pri iskanju hrane. V koloniji obstajajo tri vrste čebel (delavke, sledilci,
skavti), ki ocenjujejo kakovost virov hrane s količino nektarja v njegovi okolici.
Optimizacija z roji kresnic (angl. Firefly Algorithm, krajše FA): lastnost
kresnic je njihova svetilnost, ki jo lahko občudujemo v toplih poletnih nočeh.
Kresnice ocenijo svoj trenutni položaj glede na kriterije in ga zakodirajo v svojo
svetilnost. Vsaka kresnica prepozna svoje sosede glede na doseg senzorjev in
izračuna svoj premik proti kresnici, ki ima svetilnost večjo od svoje [15].
Optimizacija z roji delcev (angl. Particle Swarm Optimization, krajše PSO): je
globalni optimizacijski algoritem, ki rešitve problema (delce) predstavlja kot točke
v n-dimenzionalnem prostoru. Vsak delec ima svojo začetno pozicijo in hitrost. Po
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
10
vsaki iteraciji posodobimo oceno vsakega delca glede na kriterije in opravimo
njegov premik. Premik je odvisen od komunikacije med delci, kar pomeni, da
delec vedno privlačijo ostali delci z boljšo oceno.
Več-rojna optimizacija (angl. Multi-swarm Optimization): je ena izmed izvedb
optimizacije z roji delcev. Namesto, da pri optimizacijo uporabimo en roj delcev,
ustvarimo več manjših pod-rojev. Vsak tak manjši roj se posveča preiskovanju
svoje regije v prostoru preiskovanja.
Samih osnovnih algoritmov v rojni inteligenci je veliko več, vendar tukaj na kratko
opisujemo samo najpomembnejše. V našem primeru rešujemo optimizacijski problem
z algoritmom z roji delcev.
3.1 Optimizacija z roji delcev
Optimizacijo z roji delcev so razvili Kennedy, Eberhart in Shi [11] leta 1995. Pri optimizaciji
z roji delcev, algoritem iterativno izboljšuje kandidate za rešitev dokler ne doseže
končnega pogoja. Vsaka rešitev problema je predstavljena kot delec. Vsak delec v
populaciji predstavimo z njegovim položajem in hitrostjo gibanja za
in . Položaj vseh delcev v prostoru obravnavamo kot možne rešitve.
Poleg same položaja, je vsak delec opremljen tudi z funkcijo za ocenitev, ki vsakemu
delcu dodeli številsko vrednost glede njegove kakovosti. Ko se vsak delec premakne na
nov položaj, si zapomni položaj, na katerem je bila njegova ocena največja. Tako dobimo
osebne najboljše rezultate za vsak delec za in , kjer
označuje število delcev v populaciji in dimenzijo problema. Poleg tega, da si vsak
delec beleži svoj najboljši osebni rezultat pa beležimo tudi globalno najboljši rezultat
za . Glede na osebne najboljše rezultate in globalno najboljši rezultat
vsak delec spremeni svoj položaj in hitrost, kar ga usmerja proti optimalni vrednosti in
rešitvi.
Pred začetkom zagona algoritma moramo najprej naključno generirati položaj in hitrost
vsakega delca v populaciji. Ko vsem delcem določimo njihove začetne vrednosti
nadaljujemo po algoritmu psevdokod 3-1 [2]:
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
11
Psevdokod 3-1: Psevdokod algoritma PSO
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Delec[SteviloDelcev];i=0;ocena=0;
FOR EACH delec
Delec.Inicializiraj()//inicializiramo delce
ENDFOR
WHILEiPbest.Ocena() THEN
Pbest=Delec.Pozicija();//nov osebno najboljši delec
ENDIF
IFocena>Gbest.Ocena() THEN
Gbest=Delec.Pozicija();//nov globalno najboljši delec
ENDIF
Delec.Premakni();()//delec premaknemo
ENDFOR
i=i+1;
ENDWHILE
Delci se gibajo v prostoru po naslednji enačbi [2]:
( ) ( ) (3.1)
kjer pomenijo:
Np–velikost populacije,
D –število dimenzij našega problema,
- hitrost i-tega delca v j-ti dimenziji,
- položaj i-tega delca v j-ti dimenziji,
c1 - kognitivni faktor učenja,
c2 - socialni faktor učenja,
- osebno najboljši rezultat i-tega delca v j-ti dimenziji,
– globalno najboljši rezultat v j-ti dimenziji,
RAND1 in RAND2– naključno realno število med 0 in 1.
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
12
Slika 3-1: Primer gibanja delca
Na sliki 3-1 lahko vidimo primer gibanja delcev [12]. Zamislimo si, da se vsi naši delci
gibljejo po prostoru. Vsak delec se giblje v neki smeri in z neko hitrostjo, kar označimo na
sliki z dolgimi črtkanimi črtami. Poleg osnovnega gibanja vsakega delca, delujejo na njem
tudi druge privlačne sile. Silo, s katero globalno najboljši rezultat k sebi privlači delec, na
sliki označimo z polno krepko črto. Naš delec poleg globalno najboljšega k sebi privlači
tudi osebni najboljši rezultat, kar označimo z navadno črto. Rezultat vseh sil je nova smer
in hitrost gibanja našega delca, kar prikazuje kratka črtkana črta.
3.2 Sestavljanje urnika z roji delcev
Sestavljanje šolskega urnika je problem kombiniranja štirih elementov [13]:
predavatelji/učitelji,
študenti/učenci,
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
13
predavalnice/učilnice,
časovni termini.
Pri tem moramo zagotoviti, da so izpolnjene določene omejitve. Za optimizacijo samega
urnika izhajamo iz algoritma optimizacije z roji delcev za sestavljanje urnikov, ki sta ga
opisala Ruey-Maw in Hsiao-Fang v [2].
3.2.1 Določitev omejitev
Kot prvo moramo določiti omejitve, ki jih mora izpolnjevati naš urnik. Omejitve delimo na
težke in lahke. Težke omejitve so omejitve, ki jih moramo obvezno izpolniti, če želimo, da
je izdelani urnik veljaven. Lahko omejitve sicer lahko kršimo, vendar te kršitve vplivajo na
oceno samega urnika [2].
Stroge omejitve pri sestavljanju našega urnika so naslednje:
vsak razred ima istočasno samo en predmet,
vsak profesor lahko istočasno uči samo en predmet,
vsaka učilnica ima lahko samo en predmet istočasno,
število učencev ne sme presegati kapacitete učilnice,
računalniški predmet potrebuje računalniško učilnico.
Lahka omejitev je ena sama, in sicer:
izogibanje jutranjih ur v ponedeljek ter popoldanskih v torek.
3.2.2 Predstavitev problema
Pri sestavljanju šolskega urnika imamo opravka s štirimi glavnimi elementi: profesorji
(predmeti), študenti (razredi), učilnicami in časovni termini. Kombinacije teh elementov
definirajo položaj delca in s tem tudi rešitev. Naša naloga je, da s premikanje delcev v
prostoru preiskovanja poizkusimo najti rešitev, ki je najbližja optimalni [2].
Podobno kot Ruey-Maw in Hsiao-Fang smo tudi sami definirali urnik, ki zavzema 8 ur na
dan, 5 dni na teden, kar nanese 40 ur tedensko. Po prvih 4 šolskih urah dneva sledi ura
malice, nakar se nadaljuje pouk. Zaradi zmanjšanja kompleksnosti in manjše računske
zahtevnosti samega sestavljanja urnika, smo 40 urni tedenski urnik, skrčili na 20 terminov,
kar z drugimi besedami pomeni, da 1 termin zajema 2 šolski uri (slika 3-2). Posledično
lahko urnik vsakega profesorja predstavimo kot polje z 20 elementi. Enako velja tudi za
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
14
urnik razredov in učilnic. Iz tega sledi, da delec predstavimo kot tri dimenzionalen seznam
polj za pripadajoče urnike učilnic, profesorjev in razredov [2].
Slika 3-2: Krčenje števila na termine za manjšo kompleksnost
3.2.3 Predstavitev položaja delca
Naslednji element, potreben pri definiciji delca, je njegov položaj. Za položaj delca smo
uporabili vektor, ki ima velikost 20*n elementov, pri čemer določa n število profesorjev.
Takšna predstavitev vektorja namreč poenostavlja samo generacijo urnika. Primer
vektorja, ki opisuje položaj delca (rešitev), lahko vidimo na sliki 3-3. Urnik, v katerem
nastopa 5 profesorjev, na primer, predstavimo s položajskim vektorjem dolžine 100
elementov [2].
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
15
Slika 3-3: Primer položaja delca
3.2.4 Sestavljanje urnika
Pri samem sestavljanju urnika smo najprej ponastavili celoten položajski vektor. Vse
njegove elemente smo nastavili na naključno vrednost med 0-9. Prav tako smo določili
hitrost vsakega delca med -0,5 in 0,5. S tem smo delec naključno umestili v D-
dimenzionalni prostor. Število dimenzij prostora preiskovanja je odvisno od števila
elementov položajskega vektorja. Prvih 20 elementov položajskega vektorja predstavlja
parametre za sestavo urnika prvega profesorja, drugih 20 za sestavo urnika drugega
profesorja, tretjih 20 za sestavo urnika tretjega profesorja, itd.
Pri sestavljanju urnika najprej vzamemo prvih 20 elementov našega položajskega vektorja
in jih shranimo v vmesno spremenljivko. Iz vmesne spremenljivke nato poiščemo indekse
elementov, ki vsebujejo najvišja števila. Koliko števil izvlečemo, je odvisno od števila
predmetov, ki jih uči posamezen profesor. Na sliki 3-4 lahko vidimo primer, ko profesor
potrebuje za vse svoje predmete 4 termine [2].
Slika 3-4: Primer izbiranja 4 največjih števil
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
16
Ko smo izvlekli najvišja števila, preverimo ali je predlagan termin prost. Najprej preverimo
ali ima prost termin sam profesor. Nato preverimo vse skupine študentov oz. razrede, ki
obiskujejo izbrani predmet. Če imajo vsi zainteresirani pri predmetu prost termin, na
samem koncu preverimo še ali obstaja prosta učilnica, ki zadosti vsem našim potrebam.
Če pri preverjanju ne pride do konfliktov, lahko v urnike pripadajočega profesorja,
razredov in učilnice vpišemo rezervacijo za izbran termin. V primeru, da pride do konflikta,
izbrani termin zavržemo in izberemo naslednjega po velikosti (Slika 3-5) [2].
Slika 3-5: Primer izbire novega števila, ko pride do konflikta
Zgoraj opisan postopek ponovimo za vse preostale profesorje. Po obravnavi vseh
profesorjev dobimo kot končni rezultat sestavljen urnik. Ta urnik je s pomočjo ocenitvene
funkcije potrebno še oceniti. Če ocena kakovosti urnika presega oceno osebne oz.
globalne najboljše rešitve, jo/ju zamenjamo s trenutno rešitvijo. Položaj delca na koncu
glede na enačbo (3.1) še posodobimo [2].
Poenostavljen psevdokod za zgoraj opisan postopek nam prikazuje psevdokod 3-2.
Psevdokod 3-2: Sestavljanja urnika iz položaja delca
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Polozaj[SteviloProfesorjev*20];i=0;ocena=0;najvisja=0;vmesni[20];
WHILEi
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
17
18:
19:
20:
21:
22:
ENDIF
UNTIL !nadaljuj
ENDFOR
i=i+1;
ENDWHILE
Ker smo vsak teden razdelili na 20 terminov, to pomeni, da lahko vsak termin traja
natanko dve uri. Težava nastane, ko želimo dodeliti predmet, ki traja 3 ure. Če dodelimo
tak predmet terminu pomeni, da lahko naslednjem terminu dodelimo le eno uro. Zato
poleg preverjanja ali je sam termina prost, tukaj preverimo tudi predhodni in naslednji
termin [2].
3.2.5 Ocenitvena funkcija
Ocenitvena funkcija izračuna urniku neko številsko vrednost, s katero merimo njegovo
kakovost. Ta je močno odvisna od želj študentov in profesorjev. Na urniku z oceno 5
predstavimo najbolj zaželen termin, z oceno 4 drugi najbolj zaželen termin, z oceno 3
povprečnega, z oceno 2 slabega, in 1 najmanj zaželen termin. Z oceno -1 predstavimo
termin, ki se ga želimo izogibati. V tabeli 3-1 lahko vidimo ocene terminov, ki jih
uporabljamo v naši aplikaciji. Z oceno -1 smo označili le ponedeljkov jutranji termin in
popoldanski termin v petek, saj smo v svojih lahkih omejitvah definirali, da sta ta termina
nezaželena [2].
Tabela 3-1: Vrednosti za ocenjevanje urnika
Termin Ponedeljek Torek Sreda Četrtek Petek
1 -1 4 5 4 3
2 1 5 5 5 2
Malica
3 2 4 4 4 1
4 3 3 3 3 -1
Oceno urnika za posameznega profesorja oz. oddelek, dobimo tako, da v času, ko je
njihov termin zaseden prištejemo pripadajočo število iz naše ocenjevalne matrike. Ocena
urnika, je skupni seštevek ocen vseh terminov, ki so zasedeni v urniku. Skupno oceno
celotnega urnika dobimo tako, da seštejemo ocene vseh urnikov po enačbi (3.2) [2]:
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
18
( ) ∑ ∑
. (3.2)
kjer pomenijo :
– položaj i-tega delca,
n_pred - število predavateljev/učiteljev,
n_raz – število razredov,
- urnik j-tega profesorja,
– urnik j-tega razreda,
Primer implementacije lahko vidimo na sliki psevdokod 3-3
Psevdokod 3-3: Ocenitvena funkcija
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
vmesni[20];i=0;j=0;ocena=0;
WHILEi
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
19
uvedli tako imenovan motilni mehanizem, ki po premiku delca in njegovi ocenitvi, poskuša
naključno zamenjati 2 elementa našega položajskega vektorja in nato preveriti še
naključno sosednjo rešitev. S tem prisilimo delec, da razišče tudi sosednje rešitve, z čimer
povečamo kakovost rešitve s tem, da se izogibamo lokalnemu optimumu [2].
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
20
4 Mobilna aplikacija za sestavljanje urnika
4.1 Grafična podobna aplikacije
Naša aplikacija za sestavljanje urnika sestoji iz šestih osnovnih aktivnosti. To so:
osnovni meni,
dodajanje učilnic,
dodajanje predmetov,
dodajanje razredov,
informacijski zaslon,
prikaz rezultatov.
Pri zagonu aplikacije na Androidu se kot prvi zaslon pojavi osnovni meni, iz katerega
dostopamo do ostalih funkcionalnosti naše aplikacije.
4.1.1 Osnovni meni
Namen osnovnega menija prikazanega na sliki 4-1 je, da z njim povežemo vse ostale
funkcionalnosti naše aplikacije. Če pritisnemo gumb levo zgoraj, aplikacija odpre
aktivnost, v kateri lahko dodajamo in brišemo učilnice. Pritisk na desni zgornji gumb,
odpre aktivnost za dodajanje predmetov, spodnji levi nas povezuje z aktivnostjo za
dodajanje razredov, medtem ko je spodnji desni gumb namenjen aktivnosti, ki vsebuje
osnovne informacije o aplikaciji.
Poleg osnovnih gumbov za proženje aktivnosti ima osnovni zaslon v skrajnem desnem
kotu zgoraj tudi meni. Ob pritisku na menijsko tipko, se prikaže možnost, ki omogoča
izbris vseh že vpisanih podatkov. Potem, ko dodamo podatke o učilnicah, predmetih in
razredih imamo na voljo še gumb za proženje aktivnosti za sestavljanje urnika, glede na
podatke, ki smo jih vstavili.
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
21
Slika 4-1: Izgled osnovnega menija
Na levi strani slike 4-1 lahko vidimo sam izgled in razporeditev naših gradnikov. Na desni
strani slike pa si lahko ogledamo, kaj se zgodi ko pritisnemo na menijsko postavko.
4.1.2 Dodajanje učilnice
Aktivnost za dodajanje učilnice je zelo preprosta, saj vsebuje le dve vnosni polji. Prvo
polje je tekstovno in je namenjeno vnašanju imena učilnica. Drugo polje je številčno in je
namenjeno vnosu kapacitete naše učilnice. Dodatno imamo na voljo še potrditveno polje,
ki ga označimo v primeru, da gre za računalniško učilnico.
Ko vnesemo zahtevane podatke o učilnici, aktivnost omogoča gumb za dodajanje učilnice.
S pritiskom na ta gumb aplikacija pobere podatke iz vnosnih polj in doda novo učilnico v
datoteko. Več o samem shranjevanju podatkov obravnavamo v nadaljevanju.
Poleg samega dodajanja učilnice lahko uporabnik izbere ogled vseh učilnic. S pritiskom
na zavihek zgoraj desno se odpre pogled na seznam vseh učilnic, ki jih lahko po potrebi
tudi izbrišemo.
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
22
Slika 4-2: Izgled aktivnosti za dodajanje učilnice
Slika 4-2 prikazuje aktivnost za dodajanje učilnic. Na levi strani vidimo primer vstavljanja
testne učilnice, na desni pa izgled drugega zavihka, kjer v seznamu prikazujemo vse že
vstavljene učilnice.
4.1.3 Dodajanje predmetov
Sama aktivnost za dodajanje predmetov je zelo podobna tisti za dodajanje učilnic. Tudi tu
imamo polje, ki ga obkljukamo v primeru, da predmet zahteva računalniško učilnico.
Razlika nastopi pri številu vnosnih polj. Podobno kot pri vnosu učilnic, imamo tudi tukaj
tekstovno vnosno polje za vnos imena predmeta in numerično polje za vnos potrebnega
števila ur predavanj. K temu dodamo še tekstovno polje za vnos nosilca predmeta. Tudi v
tem primeru sprožimo dodajanje zapisa v datoteko šele ob pritisku na gumb . Seznam vseh predmetov lahko vidimo v drugem zavihku, kjer ji lahko brišemo
po enakem postopku, kot smo brisali učilnice (slika 4-3).
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
23
Slika 4-3: Izgled aktivnosti za dodajanje predmeta
Slika 4-3 na levi strani prikazuje izgled prvega zavihka za dodajanje predmeta in na desni
strani seznam vseh že vstavljenih predmetov.
4.1.4 Dodajanje razreda
Samo dodajanje razreda se nekoliko razlikuje od prej opisanih dodajanj učilnic in
predmetov. Pri dodajanju razreda imamo dve vnosni polji . Prvo vnosno polje je tekstovno
in je namenjeno vnosu imena razreda. Drugo numerično vnosno polja pa je namenjeno
vnosu števila učencev/študentov vpisanih v ta razred.
Pri ustvarjanju novega razreda potrebujemo tudi podatke o predmetih, ki jih dani
študenti/učenci razreda obiskujejo. Zato odpremo datoteko s predmeti in preberemo vse
predmete, ki smo jih do zdaj vstavili. Za vsak predmet posebej ustvarimo potrditveno
polje. Ko dodajamo nov razred, tako potrdimo samo polja, tistih predmetov, katere bodo
opravljali študenti/učenci tega razreda. Prav tako je spremenjeno prikazovanje podatkov o
že vstavljenih razredih. Podatke prikazujemo v drugem zavihku. Za prikaz predmetov
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
24
razreda uporabimo razširljivi seznam. Najprej se prikaže ime samega razreda. Če z
dotikom na zaslon to ime izberemo, se prikaže seznam predmetov. Prav tako lahko
posamezne razrede tudi odstranjujemo. Če želimo razred odstraniti, enostavno pritisnemo
njegovo polje na zaslonu in pridržimo za nekaj časa.
Slika 4-4: Aktivnost za dodajanje razreda
Slika 4-4 na levi strani prikazuje dodajanje samega razreda, kjer lahko označimo
predmete, ki jih študenti/učenci razreda obiskujejo. Na desni strani vidimo razširljiv
seznam in primer prikaza predmetov posameznega razreda, ko ga izberemo na seznamu.
4.1.5 Informacijski zaslon
Informacijski zaslon je najpreprostejša aktivnost, saj ne potrebuje nobenega
uporabniškega vnosa. Njegove edina naloga je sporočanje osnovnih informacij in virov
uporabljenih pri izdelavi aplikacije. Ker je bilo uporabljeno tujo slikovno gradivo, ki je bilo
javno objavljeno za ne-plačljivo uporabo (angl. free use), smo v tej aktivnosti zapisali tudi
vse avtorje oz. vire uporabljenega gradiva. Ne-plačljiva uporaba pomeni, da lahko
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
25
uporabljamo gradiva brez plačila, če avtorja v svojem produktu tudi navedemo. Izgled
informacijskega zaslona lahko vidimo na sliki 4-5.
Slika 4-5: Izgled informacijskega zaslona
Slika 4-5 prikazuje preprost princip, po katerem v našem delu navedemo avtorje
posameznih del.
4.2 Shranjevanje v datoteko
Za shranjevanje podatkov uporablja naša aplikacija preprost zapis v datoteke. Razlog,
zakaj smo izmed vseh možnosti izbrali prav shranjevanje v datoteke tiči v tem, da ob
vsakem sestavljanju urnika potrebujemo popolnoma vse podatke. To pa pomeni, da
podatke vedno preberemo od začetka do konca, za kar so pa izredno primerne datoteke.
V našem primeru za sam zapis datotek uporabimo notranji pomnilnik. Pri tem ustvarimo tri
različne datoteke za: učilnice, predmete in razrede. Vsakega izmed teh elementov
zapisujemo v pripadajočo datoteko po en element na eno vrstico, kar zelo poenostavi
samo branje podatkov. Ko želimo podatke iz datoteke prebrati, lahko to počnemo
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
26
sekvenčno, t.j. vrstico po vrstico, in sproti pretvarjamo prebrani tekst v ustrezne
podatkovne tipe. Vendar moramo pri tem paziti, da je vrsti red zapisa parametrov enak
vrstnemu redu elementov pri branju.
4.3 Generacija urnika
Ob pritisku na gumb generiranje urnika na osnovnem meniju poženemo sestavljanje
našega urnika. Preden s samo generacijo začnemo, moramo prebrati vse podatke o
razredih, predmetih in učilnicah, ki jih je predhodno shranil uporabnik. Te podatke najprej
filtriramo tako, da vzpostavimo povezave med predmeti, profesorji in učenci. Optimizacijo
izvedemo s pomočjo algoritma prikazanega v psevdokod 3-1
Ko opravimo z generiranjem in sestavljanjem našega urnika, nas čaka še samo
predstavitev rezultatov (slika 4-6).
Slika 4-6: Prikaz rezultatov sestavljanja urnika
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
27
Rezultate optimizacije predstavimo kot barvne bloke v tabeli. Na levi strani imamo
definirane termine, zgoraj pa dneve v tednu. Za vsak razred dinamično dodamo zavihek
na vrhu zaslona.
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
28
5 Eksperimenti in rezultati
Cilj našega eksperimenta je bil oceniti kakovost naših rešitev pri sestavljanju urnika in na
podlagi teh sklepati o primernosti mobilnih naprav pri optimizaciji realnih problemov. V
samih testih smo uporabili algoritem PSO. Vsi podatki so bili pridobljeni pri testiranju
aplikacije na mobilni napravi Samsung Galaxy S2, ki ga poganja procesor ARM s hitrostjo
1.2GHz.
Pri eksperimentih smo uporabili naslednje parametre PSO: kognitivni faktor učenja
(po raziskavi [2]), socialni faktor učenja (po raziskavi [2]), velikost
populacije (dobljenih empirično), in pogoj ustavljanja
generacij (dobljenih empirično). Algoritem smo zagnali 10 krat.
Testni problem smo definirali kot: imamo 10 profesorjev, 10 razredov in 10 učilnic. Pet
učilnic je računalniški, ostalih pet pa običajnih. Vsak profesor uči dva štiri-urna predmeta.
Vsak razred obiskuje štiri različne predmete. Vsak predmet posameznega profesorja
obiskujejo študenti/učenci vsaj dveh razredov.
Za merjenje rezultatov sestavljanja urnika smo uporabili dve merili: kakovost izdelanega
urnika in časovno zahtevnost izdelave . S prvim merilom preverjamo kakovost
izdelanega urnika. Merilo definiramo po naslednji enačbi;
∑
, (5.1)
kjer izrazimo kot ( )
, nruns označuje število neodvisnih zagonov algoritma,
( ) oceno urnika po enačbi (3.2) in MAX_OC maksimalno oceno definiranega urnika po
tabeli 3-1. Časovno zahtevnost izdelave izrazimo z enačbo
∑
, (5.2)
kjer določa časovno zahtevnost i-tega zagona algoritma.
V našem eksperimentalnem delu smo izvedli naslednje teste:
- določanje velikosti populacije,
- kakovost in čas izdelave urnika,
- časovna zahtevnost posameznih komponent algoritma.
V nadaljevanju predstavljamo rezultate omenjenih testov podrobneje.
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
29
5.1 Določanje velikosti populacije
Prvi korak pri izvajanju eksperimentov je bil določitev velikosti populacije. Ruey-Maw in
Hsiao-Fang [2] sta v svoji raziskavi prišla do zaključka, da je optimalno število delcev 30.
Čeprav smo sam algoritem za optimizacijo implementirali po njunem vzoru, smo prišli do
nekoliko drugačnih rezultatov. Pri vsaki velikosti roja smo opravili 10.000 premikov delcev.
Pri tem smo spreminjali velikost populacije od 5 do 30 s korakom 5. Pri tem smo
maksimalno število generacij spreminjali po enačbi ⁄ . Algoritem smo
za vsako velikost populacije zagnali trikrat in se na podlagi rezultatov odločili, da je v
našem primeru najbolj optimalna velikost roja 25 delcev. Rezultate testa lahko vidimo na
grafu 5-1.
Graf 5-1: Odvisnost ocene od velikosti roja
Na grafu 5-1 vidimo gibanje merila kakovosti urnika glede na število delcev. Z rdečo črto
označujemo maksimalno oceno MAX_OC, ki jo urnik lahko doseže. Z modro črto
označujemo najboljšo oceno kakovosti pri izbrani velikosti roja. Iz grafa je razvidno, da
najvišjo oceno kakovosti dosežemo pri velikosti roja 25 delcev. Z zeleno črto smo označili
povprečno oceno kakovosti prek vseh generacij. Iz slike lahko razberemo, da povprečna
0,8
0,85
0,9
0,95
1
5 delcev 10 delcev 15 delcev 20 delcev 25 delcev 30 delcev
Kva
lite
ta u
rnik
a [Q
]
Velikost roja[Np]
Velikost roja
Najboljša ocena
MAX_OC
Povprečna ocena
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
30
ocena kakovosti več ali manj sledi maksimalni oceni, iz česar bi lahko sklepali, da je bilo
izbrano število zagonov algoritma nekoliko premajhno.
5.2 Kakovost in čas izdelave urnika
Pri testu kakovosti in časa izdelave urnika smo spremljali končno oceno kakovosti
vsakega zagona algoritma in čas, ki smo ga pri tem porabili. Algoritem smo zagnali 10
krat pri parametrih in . Pri tem smo porabili
ovrednotenj ocenitvene funkcije. Dobljene rezultate prikazuje
tabela 5-1.
Tabela 5-1: Rezultati eksperimenta
i Qi Čas izvajanja[s]
1 495 1760
2 502 1941
3 498 1880
4 498 1713
5 504 1895
6 502 2014
7 508 1975
8 498 1922
9 502 1769
10 498 1893
povprečno 500,5 1876,2
Iz podatkov v tabeli 5-1 lahko razberemo, da je naše sestavljanje urnika zelo uspešno, saj
v povprečji dosežemo kar 89% ocene kakovosti urnika. V najboljših primerih pa ta
odstotek še nekoliko zvišamo. Po drugi strani pa ima najslabša ocena kakovosti, ki smo jo
dosegli prek 10 zagonov algoritma, še vedno kar 88% odstopanja od maksimalne ocene
urnika MAX_OC. Največja težava pri tem je trajanje algoritma, saj v povprečju porabimo
za 5.000 generacij kar 31 minut in 7 sekund. S tem, ko se omejimo na 1.000 generacij
žrtvujemo tudi oceno kakovosti urnika, saj je njegova ocena kakovosti pri tem števili
generacij le 84%, kar lahko vidimo na grafu 5-2.
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
31
Graf 5-2: Spreminjanje ocene kakovosti glede na generacije
5.3 Časovna zahtevnost posameznih komponent algoritma
Prav tako nas je zanimalo, katera komponenta našega algoritma je najpočasnejša in
predstavlja t.i. ozko grlo. Tako kot pri testu kakovosti in časa izdelave urnika, smo tudi v
tem primeru opravili 10 zagonov algoritma pri parametrih in ,
pri tem pa merili skupni čas, ki ga porabi vsako opravilo.
Tri glavna opravila v vsaki generaciji so:
sestavljanje urnika iz položaja delca,
ocenitev urnika,
premik delcev.
Kot lahko razberemo z grafa 5-3, kar 88% časa uporabimo na samem sestavljanju urnika
iz položaja delca. Možna rešitev problema bi bila zmanjšanje samih omejitev pri
0,6
0,65
0,7
0,75
0,8
0,85
0,9
0,95
1
0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000
Kva
lite
ta r
eši
tve
[Q
]
število generacij
Spreminjanje ocene kakovosti glede na generacije
Najboljša ocena
MAX_OC
Najslabša ocena
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
32
sestavljanju urnika, ali implementacija tega dela kode v kakšnega od splošnih jezikov kot
je C++.
Graf 5-3: Časovna zahtevnost posameznih komponent algoritma PSO
Iz grafa 5-3 lahko razberemo, da algoritem PSO povprečno porabi le 10% vsega časa
izvajanja, kar je187 sekund oz. 3 minute in 7 sekund po tabeli 5-1. Ostalih 90% časa
izvajanja pa porabimo za hevristično sestavljanje urnika. Najmanjši odstotek porabi sama
ocenitvena funkcija, saj skozi celoten potek algoritma povprečno porabi le nekaj več kot
37 sekund kar pomeni samo 2%. Preostalih 88% izvajanja pa porabimo na samem
sestavljanju urnika, kar povprečno nanese na 1.650 sekund oz 27 minut in pol.
Sestavljanje urnika 88%
Ocenitvena funkcija
2% Premik delca 10%
Časovna zahtevnost posameznih komponent algoritma PSO
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
33
6 Sklep
V diplomski nalogi smo se podrobneje seznanili z rojno inteligenco in mobilnim
operacijskim sistemom Android. Glavni problem, ki smo se ga lotili, je bila implementacija
enega izmed algoritmov rojne inteligence za mobilno napravo in njegova uporaba pri
optimizaciji urnika. Uporabili smo algoritem PSO. Pri tem smo ugotovili, da je kljub rasti
moči samih mobilnih naprav, njihova uporabnost na področju optimizacije omejena, saj je
njihov računska moč v primerjavi z običajnimi računalniki veliko manjša. Sama
optimizacija urnika na Androidu je za enkrat mogoča le, če je problem dovolj majhen in
obsega le nekaj učilnic in predmetov. Večji problemi namreč zahtevajo veliko daljši čas
izvajanja algoritma. Rezultati, ki smo jih dobili skozi eksperimentalno delo, so več kot
zadovoljivi, saj smo dosegli tudi 91% oceno kakovosti našega urnika. Z mobilno
implementacijo pa pridobimo dostopnost naše aplikacije od kjerkoli in to kadarkoli.
Za nadaljnje delo bi bilo vsekakor potrebno optimizirati hevristično funkcijo, ki opravlja
sestavljanje urnika, saj prav ta funkcija predstavlja najbolj zahteven del aplikacije. Glede
na izreden porast moči samih mobilnih telefonov v zadnjih letih, pa obstaja velika
možnost, da se naši rezultati še izboljšajo, saj nam večja računska moč dovoljuje večje
število generacij.
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
34
7 Seznam uporabljenih virov
[1] Even, S., Itai, A., Shamir, A., On the Complexity of timetable and Multi-Comodity Flow
Problems, 16th IEEE Annual Symposium on Doundations of Computer
Science,California,CA,USA, 13-15 Oktober 1975,str. 184-193
[2] Ruey-Maw, C., Hsiao-Fang
S.,SolvingUniversityCourseTimetablingProblemsUsingConstrictionParticleSwarmOpti
mizationwithLocalSearch, Algorithms 2013, 6, str. 227-244
[3] Android operating system, Wikipedia. Dostopno na:
http://en.wikipedia.org/wiki/Android_(operating_system)
[25.8.2013]
[4] Google's Android becomes the world's leading smartphone platform, Canalys,
Dostopno na:
http://www.canalys.com/newsroom/google%E2%80%99s-android-becomes-
world%E2%80%99s-leading-smart-phone-platform
[25.8.2013]
[5] Android NDK, Dostopno na:
http://developer.android.com/tools/sdk/ndk/index.html
[25.8.2013]
[6] Android version history, Wikipedia, Dostopno na:
http://en.wikipedia.org/wiki/Android_version_history#Android_1.1_.28API_level_2.29
[25.8.2013]
[7] Installing Eclipse plugin, Wikipedia Dostopno na:
http://developer.android.com/sdk/installing/installing-adt.html
[25.8.2013]
http://en.wikipedia.org/wiki/Android_(operating_system)http://www.canalys.com/newsroom/google%E2%80%99s-android-becomes-world%E2%80%99s-leading-smart-phone-platformhttp://www.canalys.com/newsroom/google%E2%80%99s-android-becomes-world%E2%80%99s-leading-smart-phone-platformhttp://developer.android.com/tools/sdk/ndk/index.htmlhttp://en.wikipedia.org/wiki/Android_version_history#Android_1.1_.28API_level_2.29http://developer.android.com/sdk/installing/installing-adt.html
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
35
[8] Android Studio, Wikipedia, Dostopno na:
http://en.wikipedia.org/wiki/Android_Studio
[25.8.2013]
[9] Swarm Intelligence, Wikipedia,Dostopno na:
http://en.wikipedia.org/wiki/Swarm_intelligence
[26.8.2013]
[10] Swarm Intelligence, scholarpedia,Dostopno na:
http://www.scholarpedia.org/article/Swarm_intelligence
[26.8.2013]
[11] Particle swarm optimization, Wikipedia
Dostopno na:
http://en.wikipedia.org/wiki/Particle_swarm_optimization
[26.8.2013]
[12] Xiangyang, W.,Xiaoqin, Z., Xiaoqing Y., Wanggen, W., Annealed particle filter
based on particle swarm optimization for articulated three-dimensional human motion
tracking, Optical Engineering, Volume 49,Issue 1, MachineVision, Pattern
Recognition,Dostopno na:
http://opticalengineering.spiedigitallibrary.org/article.aspx?articleid=1096261
[2.9.2013]
[13] Schooltimetable, Wikipedia, Dostopno na:
http://en.wikipedia.org/wiki/School_timetable
[26.8.2013]
[14] Writing to files, Android, Dostopno na:
http://developer.android.com/training/basics/data-storage/files.html
[3.9.2013]
http://en.wikipedia.org/wiki/Android_Studiohttp://en.wikipedia.org/wiki/Swarm_intelligencehttp://www.scholarpedia.org/article/Swarm_intelligencehttp://en.wikipedia.org/wiki/Particle_swarm_optimizationhttp://opticalengineering.spiedigitallibrary.org/article.aspx?articleid=1096261http://en.wikipedia.org/wiki/School_timetablehttp://developer.android.com/training/basics/data-storage/files.html
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
36
[15] I. Fister, I. Fister Jr, X.-S. Yang, J. Brest. A comprehensive review of firefly
algorithms. SwarmandEvolutionaryComputation,
2013.DOI10.1016/j.swevo.2013.06.001
[16] Alzaqebah, M., Abdullah, S., Artificial bee colony search algorithm for examination
timetabling problems, International Journal of the Physical Sciences, vol. 6(17), str.
4264-4272
[17] Dowsland, K.A., Thompson J.M., Ant colony optimization for the examination
scheduling problem, Journal of the Opreational Resarch Society, vol. 56, str. 426-438
[18] Smartphone, Wikipedia, Dostopno na:
http://en.wikipedia.org/wiki/Smartphone
[8.9.2013]
[19] Mobile app, Wikipedia, Dostopno na:
http://en.wikipedia.org/wiki/Mobile_app
[8.9.2013]
[20] Activity, Android, Dostopno na:
http://developer.android.com/reference/android/app/Activity.html
[8.9.2013]
[21] Buildingblocks, Android, Dostopno na:
http://developer.android.com/design/building-blocks/index.html
[8.9.2013]
[22] Savingdata, Android, Dostopno na:
http://developer.android.com/training/basics/data-storage/index.html
[9.9.2013]
[23] Key-Valuepair, Dostopno na:
http://searchenterprisedesktop.techtarget.com/definition/key-value-pair
[10.9.2013]
http://www.sciencedirect.com/science/article/pii/S2210650213000461http://www.sciencedirect.com/science/article/pii/S2210650213000461http://dx.doi.org/10.1016/j.swevo.2013.06.001http://en.wikipedia.org/wiki/Smartphonehttp://en.wikipedia.org/wiki/Mobile_apphttp://developer.android.com/reference/android/app/Activity.htmlhttp://developer.android.com/design/building-blocks/index.htmlhttp://developer.android.com/training/basics/data-storage/index.htmlhttp://searchenterprisedesktop.techtarget.com/definition/key-value-pair
-
Sestavljanje urnika s pomočjo rojne inteligence na mobilni platform android
37
[24] FISTER, I., FISTER, D., FONG, S., FISTER, I.. Wide spread mobile devices in
applicationsfor real-time drafting detection in triathlons. Journal of emerging
technologies in web intelligence, 2013, vol. 5, no. 3, str. 310-321
[25] Mobiledevice, Wikipedia, Dostopno na:
http://en.wikipedia.org/wiki/Mobile_device
[13.9.2013]
[26] Mobilephone, Wikipedia, Dostopno na:
http://en.wikipedia.org/wiki/Mobile_phone
[13.9.2013]
[27] Applicationfundamentals, Android, Dostopno na:
http://developer.android.com/guide/components/fundamentals.html
[13.9.2013]
[28] App store, Wikipedia, Dostopno na:
http://en.wikipedia.org/wiki/App_Store_(iOS)
[13.9.2013]
[29] Google play, Wikipedia, Dostopno na:
http://en.wikipedia.org/wiki/Google_Play
[13.9.2013]
[30] Windows phone store, Wikipedia, Dostopno na:
http://en.wikipedia.org/wiki/Windows_Phone_Store
[13.9.2013]
http://en.wikipedia.org/wiki/Mobile_devicehttp://en.wikipedia.org/wiki/Mobile_phonehttp://developer.android.com/guide/components/fundamentals.htmlhttp://en.wikipedia.org/wiki/App_Store_(iOS)http://en.wikipedia.org/wiki/Google_Playhttp://en.wikipedia.org/wiki/Windows_Phone_Store