Fakulteta za elektrotehniko, računalništvo in informatiko Smetanova ulica Maribor, Slovenija Leon Merc SESTAVLJANJE URNIKA S POMOČJO ROJNE INT

Podobni dokumenti
Poročilo za 1. del seminarske naloge- igrica Kača Opis igrice Kača (Snake) je klasična igrica, pogosto prednaložena na malce starejših mobilnih telefo

Navodila za programsko opremo FeriX Namestitev na trdi disk Avtor navodil: Martin Terbuc Datum: December 2007 Center odprte kode Slovenije Spletna str

PowerPointova predstavitev

Optimizacija z roji delcev - Seminarska naloga pri predmetu Izbrana poglavja iz optimizacije

ISOFT , računalniški inženiring

Slide 1

NEVTRIN d.o.o. Podjetje za razvoj elektronike, Podgorje 42a, 1241 Kamnik, Slovenia Telefon: Faks.: in

RAM stroj Nataša Naglič 4. junij RAM RAM - random access machine Bralno pisalni, eno akumulatorski računalnik. Sestavljajo ga bralni in pisalni

Microsoft Word - CNC obdelava kazalo vsebine.doc

NAVODILA ZA UPORABO K01-WIFI Hvala, ker ste se odločili za nakup našega izdelka. Pred uporabo enote skrbno preberite ta Navodila za uporabo in jih shr

Document ID / Revision : 0519/1.3 ID Issuer System (sistem izdajatelja identifikacijskih oznak) Navodila za registracijo gospodarskih subjektov

Navodila Trgovina iCenter

ZAČETNI VODNIK ZA POVEZAVO Izkusite prilagojeno nego perila z aplikacijo My AEG Care. Pralni stroj lahko povežete in upravljate od koder koli in preje

Navodila za uporabo Mini prenosna HD kamera s snemalnikom

Vaja 2 Virtualizacija fizičnih strežnikov in virtualni PC A. Strežnik Vmware ESX Namestitev strežnika VMware ESX 3.5 na fizični strežnik 2. Nas

Navodila za uporabo Mini snemalnik

ŠTEVCI PROMETA IN NJIHOVA UPORABA ZA NAMENE STATISTIK ČRT GRAHONJA

PowerApps

Spoznajmo PowerPoint 2013

INFORMATOR BIROKRAT 1/2011

Nove različice programske opreme GE Podjetje GE Digital, vodilni svetovni proizvajalec programske opreme za področje avtomatike, je izdalo kar nekaj n

Zbornica zdravstvene in babiške nege Slovenije Zveza strokovnih društev medicinskih sester, babic in zdravstvenih tehnikov Slovenije Stanje:

Gimnazija Bežigrad Peričeva Ljubljana OPERACIJSKI SISTEM Predmet: informatika

INTERAKTIVNE REŠITVE PROMETHEAN

MT40X Kratka navodila

DES

Navodila za uporabo aplikacije mlist - neposredni mentorji za Zdravniško zbornico Slovenije pripravila Gooya, interaktivni mediji, d.o.o. Ljubljana, m

Microsoft Word - M docx

Orodje za izvoz podatkov

PowerPointova predstavitev

BYOB Žogica v vesolju Besedilo naloge Glavna ideja igre je paziti, da žoga ne pade na tla igralne površine, pri tem pa zbrati čim več točk. Podobno ig

Navodila za nastavitev mail odjemalca na ios in Android napravah TELEFONI iphone (ios 12) Predlagamo, da do svoje študentske e-pošte dostopate s pomoč

Watch 40_MT40X_UM_SL.pdf

PowerPoint Presentation

Najboljša skupaj Kontrola pristopa + registracija delovnega časa

Microsoft Word - M doc

NAVODILA ZA MONTAŽO SI EWPE SMART Wi-FI app

(Microsoft Word - MSDN AA Navodila za \232tudente FS.doc)

(Microsoft Word - U\350enje telegrafije po Kochovi metodi.doc)

Microsoft Word - A-3-Dezelak-SLO.doc

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Verjetnost Pisni izpit 5. februar 2018 Navodila Pazljivo preberite

Poskusi s kondenzatorji

Navodila za pripravo oglasov na strani Med.Over.Net v 2.2 Statistično najboljši odziv uporabnikov je na oglase, ki hitro in neposredno prenesejo osnov

1 MMK - Spletne tehnologije Vaja 5: Spletni obrazci Vaja 5 : Spletni obrazci 1. Element form Spletni obrazci so namenjeni zbiranju uporabniških podatk

GHOSTBUSTERS navodila za učitelje O PROJEKTU S tem projektom se učenci sami naučijo izdelati igro. Ustvariti morajo več ikon (duhcov ali kaj drugega)

Analiza vpliva materiala, maziva in aktuatorja na dinamiko pnevmatičnega ventila

NAVODILA ZA IZPOLNJEVANJE ELEKTRONSKEGA OBRAZCA ZA PRIJAVO IN PREKLIC DIGITALNIH POTRDIL Verzija Datum Opis sprememb dokumenta dokumenta

VPELJAVA MDM V DRŽAVEM ZBORU MATJAŽ ZADRAVEC

Vaja 3 Kopiranje VM in namestitev aplikacij - strežnik SQL 2000 SP3a A. Lokalni strežnik Vmware ESX Dodajanje uporabnikov vajexx v skupino Vaje

Space Invaders Opis igre: Originalna igra: Space Invaders je arkadna igra, ki so jo ustvarili leta Bila je ena izmed prvih streljaških iger, v k

Microsoft Word - Brosura neobvezni IP

NAVODILA ZA UPORABO Smart watch JW018 POZOR! Ura vsebuje magnetne sestavine. Osebe z vgrajenim srčnim spodbujevalnikom (pacemaker) ali kakršnimi drugi

Navodila za uporabo programske opreme OTRS verzija Administracijska navodila Avtor navodil: Sebastijan Šilec Datum: December 2007 Center odprte

Slide 1

Univerza v Ljubljani FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Tržaška c. 25, 1000 Ljubljana Realizacija n-bitnega polnega seštevalnika z uporabo kvan

Linksys PLEK500 User Guide

Microsoft PowerPoint - IPPU-V2.ppt

Kratka navodila za uporabo razširjevalnika dosega WiFi AC750 model EX3800

Komisija za študijske zadeve UL Medicinske fakultete Vrazov trg 2 SI-1000 Ljubljana E: T: Režim študija Predmet: Uvod

Microsoft Word - avd_vaje_ars1_1.doc

Miluma Trader Miluma Trader navodila: V nadaljevanju sledijo osnovna navodila, kako začeli uporabljati Miluma Trader. 1. Preverite spletno stran Ta po

PowerPoint Presentation

Učinkovita izvedba algoritma Goldberg-Tarjan Teja Peklaj 26. februar Definicije Definicija 1 Naj bo (G, u, s, t) omrežje, f : E(G) R, za katero v

SETCCE Uporabniška navodila za namestitev in upravljanje komponente SETCCE proxsign v2.0.5 za MAC OS X [Nova generacija komponent SETCCE proxsign ] Id

Microsoft Word - CNR-BTU3_Bluetooth_vmesnik

Delavnica Načrtovanje digitalnih vezij

ACAD-BAU-Analiza-prostorov

Microsoft Word - CNR-MPV2 Quick Guide_SI

Arial 26 pt, bold

TRGOVSKI PORTAL SPLETNA APLIKACIJA NAMENJENA TRGOVCEM POGOSTA VPRAŠANJA IN ODGOVORI Ljubljana, Verzija 1.0

Datum in kraj

3. Metode, ki temeljijo na minimalnem ostanku Denimo, da smo z Arnoldijevim algoritmom zgenerirali ON bazo podprostora Krilova K k (A, r 0 ) in velja

Nameščanje Adopt Open Java Development Kit 8

PowerPointova predstavitev

Nameščanje Adopt Open Java Development Kit 8

Postopek poracuna 2007 za JU

Microsoft Word - Brosura neobvezni IP 2018

Microsoft Word - CN-BTU4 Quick Guide_SI

BDV-N890W/BDV-N790W

Microsoft Word - SI_vaja1.doc

PowerPoint Presentation

Microsoft PowerPoint - OAPS1- Uvod.ppt

INFORMATOR BIROKRAT 1/2011

Microsoft Word - M docx

Slajd 1

Macoma katalog copy

Diapozitiv 1

Zadeva: Ponudba

Predlog stališča Republike Slovenije

PKP projekt SMART WaterNet_Opis

Navodila za pisanje diplomskih nalog UM FERI

Turingov stroj in programiranje Barbara Strniša Opis in definicija Definirajmo nekaj oznak: Σ abeceda... končna neprazna množica simbolo

Podatkovni model ER

Microsoft Word - ELEKTROTEHNIKA2_ junij 2013_pola1 in 2

CODEKS IP KAMERA

Microsoft Word - Navodila za uporabo 1.1.doc

Slide 1

Delavnica Načrtovanje digitalnih vezij

6.1 Uvod 6 Igra Chomp Marko Repše, Chomp je nepristranska igra dveh igralcev s popolno informacijo na dvo (ali vec) dimenzionalnem prostoru

Transkripcija:

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 i

SESTAVLJANJE URNIKA S POMOČJO ROJNE INTELIGENCE NA MOBILNI PLATFORMI ANDROID Diplomsko delo Študent: Študijski program: Mentor: Leon Merc Univerzitetni, Računalništvo in informacijske tehnologije Doc. dr. Iztok Fister ii

iii

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. iv

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. v

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. vi

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 vii

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 viii

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 ix

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 x

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 1

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. 2

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 3

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. 4

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]. 5

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]. 6

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), 7

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. 8

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 9

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]: 10

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 WHILEi<SteviloIteracij FOR EACH delec ocena=delec.ocena();()//ocenimo položaj delca IFocena>Pbest.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: N p 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, c 1 - kognitivni faktor učenja, c 2 - socialni faktor učenja, - osebno najboljši rezultat i-tega delca v j-ti dimenziji, globalno najboljši rezultat v j-ti dimenziji, RAND 1 in RAND 2 naključno realno število med 0 in 1. 11

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, 12

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 13

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]. 14

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 15

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<SteviloProfesorjev FOR EACH predmet v Profesor[i] //cez vse prof predmete REPEAT vmesni[]<-polozaj[i i+20];//prof. parametri najvisja<-vmesni.najvisja();//vzamemo najvisjestevilo nadaljuj=true; IF!profesor[i].Prost(najvisja)THEN nadaljuj=false;//če profesor ni prost vzamemo drugo stevilo ENDIF FOR EACH razred v Razred.ImaPredmet(predmet)//cez vse razrede IF!razred.Prost(najvisja)THEN nadaljuj=false;//če razred ni prost vzamemo drugo stevilo ENDIF ENDFOR IF!dodeliUcilnico(najvisja)THEN nadaljuj=false;// vzamemo drugo stevilo 16

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]: 17

( ). (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<SteviloProfesorjev vmesni[]<-profesor[i].urnik; WHILEj<20 IF vmesni[j]>0then ocena=ocena+tabelavrednosti[j];//prištejemo vrednost termina ENDIF j=j+1; ENDWHILE i=i+1; ENDWHILE j=0;i=0; WHILEi<SteviloRazredov vmesni[]<-razred[i].urnik; WHILEj<20 IF vmesni[j]>0then ocena=ocena+tabelavrednosti[j];//prištejemo vrednost termina ENDIF j=j+1; ENDWHILE i=i+1; ENDWHILE 3.2.6 Lokalno iskanje Ko iščemo in premikamo delce po prostoru preiskovanja glede na osebni in globalni najboljši rezultat, s tem ta prostor manjšamo, saj naše delce privlačijo trenutne najboljše najdene rešitve. Čeprav naši delci dodobra preiščejo prostor med trenutnim, osebnim in globalno najboljšim položajem, se kaj hitro lahko zgodi, da se ujamejo v lokalnem optimumu. Lokalni optimum je najboljša rešitev v prostoru, ki ga določata osebni in trenutni globalno najboljši rezultat, ki pa ni tudi globalno najboljši, zato pri tem lahko izgubimo sposobnost, da bi našli optimalno rešitev. Da bi se temu pojavu izognili, smo 18

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]. 19

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. 20

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. 21

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 <Dodaj učilnico>. Seznam vseh predmetov lahko vidimo v drugem zavihku, kjer ji lahko brišemo po enakem postopku, kot smo brisali učilnice (slika 4-3). 22

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 23

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 24

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 25

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 26

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. 27

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. 28

Kvaliteta urnika [Q] 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. 1 Velikost roja 0,95 0,9 0,85 Najboljša ocena MAX_OC Povprečna ocena 0,8 5 delcev 10 delcev 15 delcev 20 delcev 25 delcev 30 delcev Velikost roja[np] 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 29

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. 30

Kvaliteta rešitve [Q] 1 Spreminjanje ocene kakovosti glede na generacije 0,95 0,9 0,85 0,8 0,75 0,7 Najboljša ocena MAX_OC Najslabša ocena 0,65 0,6 0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000 število generacij 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 31

sestavljanju urnika, ali implementacija tega dela kode v kakšnega od splošnih jezikov kot je C++. Časovna zahtevnost posameznih komponent algoritma PSO Ocenitvena funkcija 2% Premik delca 10% Sestavljanje urnika 88% 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. 32

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. 33

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-becomesworld%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] 34

[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] 35

[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] 36

[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] 37