Documente Academic
Documente Profesional
Documente Cultură
PROIECT DE DIPLOM
Ambient Intelligence for Task Integration on Android Devices
Coordonator tiinific:
.l. Dr. Andrei Olaru
Absolvent:
Vlad Costin Herescu
BUCURETI
2014
Cuprins
1. Abstract .......................................................................................................................................................... 4
2. Platforma i tehnologiile utilizate .................................................................................................................. 5
2.1Platform ................................................................................................................................................. 5
2.2 Tehnologii .............................................................................................................................................. 5
3. Noiuni teoretice ............................................................................................................................................. 7
3.1 Programare orientat pe obiecte ............................................................................................................. 7
3.2 Sistemul de operare Android .................................................................................................................. 7
3.2.1 Ciclul de via al unei activiti Android ..................................................................................... 8
3.2.2 Fiierul Manifest .......................................................................................................................... 9
3.2.3 Componentele grafice Android...10
3.2.4 BroadCast Receiver.10
3.2.5 Bluetooth.10
3.2.6 Stocarea datelor...11
3.3 Algoritmi nvtare automat..12
3.3.1 Algoritmul K-Means...........................................................................................................13
3.3.2 Algoritmi genetici.......................................................................................................................14
3.4 Inteligen ambiental...........................................................................................................................15
4. Algoritmi.........................................................................................................................................................17
4.1 Algoritmi genetici pentru implementarea problemei comis voiajorului................................................17
4.1.1 Testare algoritm...19
4.2 Algoritmul de clusterizare KMeans...19
4.2.1 Determinare K.21
4.2.2 Distana ntre titluri a doua taskuri..22
4.2.3 Testare algoritm...22
5. Detalii de implementare..23
5.1 Funcionalitti...23
5.1.1 Setarea programului fix..23
5.1.2 Adugarea unui task...23
5.1.3 Vizualizarea taskurilor introduse i modificarea proprietilor..25
5.1.4 Vizualizarea taskurilor ce se pot executa n contextul actual.26
5.1.5 Detectarea dispozitivelor prin Bluetooth27
5.1.6 Recomandarea orarului pentru un interval al zilei..28
5.1.7 Vizualizarea taskului curent de executat.28
5.2 Baza de date.29
5.2.1 Tabela tasks29
5.2.2 Tabela Schedule.30
5.2.3 Tabela Devices30
5.2.4 Tabela Task_Devices.30
5.2.5 Operatii DML Sqlite..31
5.3 Modularizare31
5.3.1 DatabaseOperation.32
5.3.2 Clustering...32
5.3.3 Travelling Salesman33
5.3.4 ContextElements....33
5.3.5 CheckCompatibility...34
6.Descrierea aplicaiei.35
6.1 Meniu principal.35
6.2 Adaugarea unui task.36
6.3 Vizualizarea i modificarea taskurilor..39
6.4 Setarea programului fix....41
1. Abstract
Aplicaia Task Scheduler are rolul de asista ntr-un mod inteligent utilizatorul n programarea
propriilor taskuri, oferindu-i informaii pe baza unor elementele de context precum locaie, ora de
execuie a taskului, persoanele i dispozitivele necesare.
Astfel, n afara posibilitii de a specifica taskuri ce reprezint programul fix al utilizatorului i
taskuri care nu au un interval fix, repetitive pe baza informaiilor obinute din taskurile executate,
aplicatia ofer functionaliti suplimentare precum:
-
Indicarea locaiei , a prioritii, a dispozitelor necesare n momentul adugrii unui nou task
pentru execuie
Specificarea taskurilor care pot fi executate n momentul curent, filtrarea fiind facut pe baza
informaiilor introduse de ctre utilizator i pe baza contextului actual n care se afl
utilizatorul :
ct ar dura execuia taskului i dac aceasta este n concordan cu programul fix al
utilizatorului,
dac n preajma utilizatorului se afl persoanele necesare pentru execuie,
dac utilizatorul se afl n apropierea locaiei pentru execuia taskului
Calcularea orarului taskurilor, lund n considerare prioritatea acestora, locaia i ora de
execuie pentru care durata necesar execuiei lor ar fi minim.
asemenea, serviciile google au fost folosite pentru a determina locaia curent a utilizatorului, pe
baza reelelor Wireless sau a GPS-ului, funcie de cea care ofer mai mult acuratee. Cunoaterea
locaiei curente este de asemenea necesar, n vederea determinrii distanelor ntre aceasta i alte
locaii.
Alt bibliotec specific Androidului folosit n cadrul aplicaiei este android.location prin
intermediul creia se determin adresa unei locaii pe baza unor coordonate, respectiv coordonatele
unei locaii pe baza unei adrese.
n ceea ce privete interfaa grafic, Android permite programatorului utilizarea facil a
componentelor grafice n cadrul activitii prin intermediul XML-ului. Astfel, folosind XML-ul,
programatorul poate specifica locaia relativ a componentelor una fa de cealalta, organizarea
componentelor sub form ierarhic i structurarea activitii n fragmente, a atributelor precum
fontul, culoarea textului, mrimea componentei i id-urile componentelor pentru a fi apoi referite i
utilizate n clas.
Printre componentele grafice puse la dispoziie de ctre Android se numr:
- Date Picker pentru selecia datei,
- Time Picker pentru selecia orei,
- liste drop down,
- cmpuri,
- butoane.
3. Noiuni teoretice
Pentru dezvoltarea aplicaiei au fost necesare cunotine de:
-
de tip , prin care o clas are acces la structura unei alte clase prin motenire
de agregare, prin care o clas are acces la structura altei clase avnd drept membru o
instan a sa.
ncapsularea este principiul prin care vizualizarea metodelor i valorilor membrilor unei clase
poate fi restricionat de relaiile ntre cele dou clase i de modificatorii de acces.
Prin urmare, programarea orientat pe obiecte este un limbaj care preia facilitaile programrii
procedurale i are n plus fa de aceasta structurarea programului n module uor de neles si
gsirea unor abloane ntre viaa real i contextul problemei.
Entitatea care st la baza implementarii unei aplicaii Android este activitatea. Activitatea
reprezint componenta aplicaiei prin care este gestionat interfaa grafic, analog ferestrelor ntr-o
aplicaie desktop sau a unei pagini dintr-o aplicaie web. Alte elemente importante utilizate in cadrul
unei aplicaii Android sunt componentele grafice, obiectele Broadcat Receiver i obiectele Intent.
Precum o aplicaie web sau desktop, o aplicaie android conine mai multe activiti,
comunicarea dintre acestea fiind realizat prin intermediul unui obiect Intent. Un obiect Intent are
rolul de a porni i de a descrie o nou activitate i de a-i transmite valori din activitatea actual. Alte
roluri ale obiectului Intent sunt pornirea serviciilor i a receiver-elor broadcast.
De asemenea, sunt specificate permisiunile care trebuie oferite aplicatiei pentru ca aceasta
sa functioneze in mod correct. Permisiunile sunt oferite de catre utilizator cand aplicatia este
instalata. Un exemplu de permisiune, prin care se solcita permisiunea de acces la internet, este
urmatoarea:
<uses-permission android:name="android.permission.INTERNET" />
Alte informatii din fisierul Manifest specifica activitatile aplicatiei, care este activitatea
principala a aplicatiei( prin marcajul intent-filter) , metadatele folosite, icon-ul folosit pentru
identificarea aplicatiei in interfata dispozitivului, etc. O secventa de cod prin care se specifica aceste
informatii este urmatoarea :
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity
android:name="com.example.meniu.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
. . . . . . . . . . . . . .
</application>
3.2.5 Bluetooth
Platforma Android ofer suport pentru reele Bluetooth, dnd posibilitatea dispozitivului de a
face schimb de informaii cu alte dispozitive prevzute cu Bluetooth[7].
10
Accesul la funcionalitatea Bluetooth se face prin API-ul Android Bluetooth, acest API realiznd
comunicarea wireless Point to Point ntre cele dou dispozitive. Prin folosirea API-ul, sunt posibile
urmatoarele operaiuni : scanarea pentru alte dispozitve prevzute cu Bluetooth, conectarea celor
dou dispozitive, transferul de date de la un dispozitiv la altul, interogarea adaptorului Bluetooth
pentru dispozitive mperecheate.
Detectarea de dispozitive este o procedur de scanare a dispozitivelor locale Bluetooth i care
solicit apoi informaii despre fiecare. Dispozitivele, n cazul n care sunt configurate pentru a fi
detectate, vor raspunde oferind informaii, cum ar fi : numele dispozitivului, clasa i o adres MAC
unic. Utiliznd aceste informaii, dispozitivul ce a executat cautarea poate iniia o conexiune cu
dispozitivele cutate.
Cutarea de dispozitive Bluetooth se realizeaz prin apelarea metodei startDiscovery de ctre o
instan BluetoothAdapter. Este un proces asincron de scanare care dureaza aproximativ 12
secunde, urmat de interogarea n detaliu a fiecrui dispozitiv pentru obinerea datelor acestuia.
Pentru ca aplicaia s fie notificat n momentul n care un nou dispozitiv este gsit, este
necesar nregistrarea unui Broadcast Receiver cu filtrul asociat BluetoothDevice.ACTION_FOUND.
Pentru ca resursele folosite pentru nregistrarea receiver-ului s nu ramn ocupate dup
distrugerea activitii, este necesar ca metoda onStoped sa fie suprascris pentru dealocarea
resurselor prin apelarea metodei cancelDiscovery() a instanei BluetoothAdapter.
Pentru utilizarea API-ului Android Bluetooth, trebuie s fie declarate permisiuni n fiierul
Manifest al aplicaiei :
<!-- for Bluetooth discovery devices -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
Shared Preferences[8]
Sqlite[9]
Shared Preferences reprezint o structur de date sub forma unui set de perechi cheie-valoare,
fiind o structur Non Relational Database. Este o opiune optim n cazul n care datele sunt simple,
nu este necesar a fi structurate, numrul intrrilor nu este foarte mare i are avantajul eliminrii
latenei cauzate de join-ul dintre tabele.
Dup obinerea handle-ului Shared Preferences asociat activitii curente, inserarea unei valori
se face prin apelarea unei metode care primete ca parametri o valoare distincta cu rolul de cheie al
perechii i valoarea asociat acesteia. De asemenenea, obinerea valorilor inserate se face prin
apelarea unor metode ce primesc ca parametru cheia folosit.
11
n cazul aplicaiei mele, Shared Preferences a fost o util pentru specificarea facil ctre
utilizator a adresei locaiei taskului, avnd drept cheie un string, iar ca valoare totalitatea adreselor
specificate de utilizator la adugarea taskurilor. Astfel, n momentul n care utilizatorul introduce o
noua adres, la salvarea taskului n baza de date, adresa este adaugat la lista de adrese din taskurile
precedente. Ulterior, cnd utilizatorul va dori sa specifice aceeai adres, setul de adrese extras din
shared preferences va fi folosit ca autocomplete pentru ca utilizatorul s nu fie nevoit s scrie
ntreaga adres.
Urmtorul cod explic modul n care sunt extrase i adugate informaiile din shared
preferences:
// pentru extragere
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
valueString = sharedPreferences.getString(valueKey, defaultString);
// pentru inserare
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
Editor edit = sharedPreferences.edit();
edit.putString(keyString, valueString);
edit.commit();
Sqlite ofer posibilitatea de a crea baze de date relaionale, utile cnd exista un numr mic de
date de salvat (n comparaie cu Shared Preferences), iar datele sunt complexe i pot fi vzute ca un
set de de perechi atribut-valoare, ntre care exist relaii.
n cazul aplicaiei mele, a fost necesar s stochez informaii privind dispozitivele detectate de
bluetooth, programul fix al utilizatorului i taskurile introduse. Pentru aceasta, am creat o clas ce
extinde SQLiteOpenHelper i care are metodele de creare i updatare a bazei de date suprascrise.
determine patternul. Cea mai des ntlnit utilizare a nvrii nesupervizate este clusterizarea:
mparirea setului de date n grupuri de date care pot fi considerate similare.
n nvarea supervizat, agentul primete apriori un set de date deja etichetate numit set de
antrenare i un set de date de testare neetichetate. Fiecrei valori din setul de date de antrenare Xi
i este asociat o valoare Yi , astfel nct exist o funcie F care, oricare ar fi i, F(Xi) = Yi. Scopul
algoritmului este de a calcula o funcie H numit funcie ipotez, care are rolul de a aproxima funcia
F. Astfel, pentru fiecare valoare din setul de antrenare, H(Xi) s ofere aceleai valori ca F, i pentru
fiecare valoare din setul de testare, H s ofere un rezultat ct mai apropiat de cel dat de F.
n nvarea prin recompens, precum n nvarea nesupervizat, agentul inteligent nu primete
un set de date apriori. n timpul derulrii algoritmului, dup fiecare decizie luat, agentul primete o
recompens sau o pedeaps, n funcie de calitatea deciziei. Ulterior, n cazul n care agentul se
regsete intr-o situaie prin care a mai trecut, va realiza aceeai aciune sau va ncerca una diferit,
n funcie de recompensa sau pedeapsa primit anterior.
=1 2
unde Nr este numrul de clustere, iar Dr este suma ptratelor distanelor euclidiene n cadrul
clusterului r ntre fiecare doua puncte i si j aparinnd clusterului.
= ( )2
Alt formul care nu presupune calculul distanei ntre fiecare doua puncte ale unui cluster,
ci se bazeaza numai pe distana euclidian ntre un punct dintr-un cluster i centroid, este
urmatoarea:
= ( )2
Algoritmii genetici reprezint o opiune euristic de a cuta o soluie pentru o problem dat.
Reprezint o alternativ la algoritmii clasici fa de care are avantajul de a determina mult mai rapid
o soluie ntr-un spaiu de cutare foarte mare. Soluia gsit nu este cea optim, dar este
satisfctoare pentru complexitatea problemei[14].
Algoritmii genetici se bazeaz pe principiile geneticii i ale seleciei naturale. Astfel, n contextul
algoritmilor genetici, o potential soluie a problemei se numete individ, iar un set de indivizi se
numete populaie. La o anumita etap n rezolvarea problemei, populaia trece printr-un set de
schimbri - selecie, combinare, mutaie -prin care indivizii acesteia devin mai bine adaptai
mediului ( potenialele soluii au o valoare mai apropiata de soluia optim).
n implementarea celor trei operaii trebuie s existe un echilibru ntre exploatare i explorare.
n cazul n care accentul n implementare este pus pe exploatare, este mbuntit valoarea
fitnessului celui mai bun individ la un moment dat, fr s se ia n considerare ca viitoare posibile
soluii ceilali indivizi, iar algoritmul converge astfel rapid ctre o soluie local. n cazul n care
accentul n implementare este pus pe explorare, se iau n considerare ca soluii finale pentru
problem foarte muli indivizi i se incearc imbuntirea lor, iar algoritmul converge ctre o soluie
global, ns foarte lent.
Valoarea individului i apropierea sa de soluia optim se numete fitness i este calculat cu
ajutorul unei funcii obiectiv a carei form depinde de contextul problemei.
Astfel, etapele implementrii algoritmului sunt urmatoarele :
1. Stabilirea structurii individului i generarea aleatoare a unui numr de indivizi care s
reprezinte populaia iniial.
14
caracter proactiv, anticipativ astfel c poate lua decizii proprii fr s fie necesar
interaciunea cu utilizatorul. Acest lucru se poate petrece intr-o situaie n care sistemul
poate s ia o decizie, situatie similar cu o una n care a fost informat de ctre utilizator cu
privire la aciunea ce trebuia luat.
Caracter senzitiv cu privire la situaia curent n care se afl utilizatorul. Determinarea
contextului curent se determin cu ajutorul tehnologiilor cu care este echipat dispozitivul.
Printre acestea se numar : senzori, tehnologie wireless, bluetooth, GPS, e.t.c.
Caracter omniprezent, astfel ca tehnologiile cu care este echipat dispozitvul i pe care se
bazeaz s fie funcionale indiferent de locaia n care se afl utilizatorul.
Utilizarea unei tehnologii hardware neobservabil sau ct mai puin observabil, astfel nct
interaciunea cu sistemul ambiental s fie ct mai natural posibil pentru utilizator.
Caracter comunicativ, astfel s poat s realizeze schimb de informaii cu alte dispozitive
pentru un suport mai mare oferit utilizatorului.
Pentru ca inteligena ambiental sa fie acceptat, scopul implementrii acesteia trebuie sa aib
n vedere rezolvarea problemelor/preocuprilor umane. Una dintre acestea este facilitarea
interaciunii dintre oameni ntr-o comunitate i a suportului oferit ntre acetia. Ca de exemplu, un
dispozitiv inteligent ar putea s comunice altor dispozitive c utilizatorul su are nevoie de asisten
n rezolvarea unei probleme, precum gsirea unei destinaii ( sau asistarea n utilizarea
calculatorului)
Un alt aspect al inteligenei ambientale privete sigurana i confidenialitatea utilizatorului,
aceasta putnd s reacioneze promt n cazul n care detecteaz o situaie n care viaa utilizatorului
este pus n pericol. Astfel, n cazul unui accident pe autostrad, soldat cu ranirea unor persoane,
poate s contacteze serviciile medicale pentru asistarea persoanelor rnite. Mai mult, deoarece se
bazeaz foarte mult pe informaiile obinute despre utilizator, este necesar ca informaiile
confideniale s fie folosite local de ctre dispozitiv i s nu fie partajate altor dispozitive.
Inteligena ambiental poate fi de asemenea folosit pentru motive economice i ecologice. Ca
de exemplu, cu ajutorul tehnologiilor cu care este echipat, dispozitivul poate s informeze
utilizatorul care este cel mai scurt i mai convenabil traseu spre o anumit destinaie, sau poate regla
utilizarea resurselor( precum aerul condiionat, iluminarea unei ncperi) n funcie de solicitarea i
necesitatea lor.
16
4. Algoritmi
4.1 Algoritmi genetici pentru implementarea problemei comis voiajorului
Problema comis voiajorului este definit astfel : Fie G = (V, E) un graf neorientat n care oricare
dou vrfuri diferite ale grafului sunt unite printr-o latur creia i este asociat un cost strict pozitiv.
Cerina este de a determina un ciclu care ncepe de la un nod aleatoriu al grafului, care trece exact o
dat prin toate celelalte noduri i care se ntoarce la nodul iniial, cu condiia ca ciclul sa aib un cost
minim. Costul unui ciclu este definit ca suma tuturor costurilor ataate laturilor ciclului[17].
n contextul aplicaiei, calcularea unui program ct mai optim al utilizatorului reprezint o
variant complex a problemei comis voiajorului, astfel ca locaiile unde se execut taskurile
reprezint nodurile grafului i se dorete calcularea unui traseu pentru parcurgerea cruia s fie
necesar ct mai puin timp. n plus fa de aceasta cerin, se adaug urmatoarele:
-
Pentru calcularea unui program ct mai optim sunt utilizai algoritmi genetici. Individul n acest
context este o structur format din setul de taskuri de executat i ora la care utilizatorul incepe s
execute acest set.
n etapa de iniializare, se creeaza un numr de indivizi cu setul de taskuri de lungime diferit
generat aleatoriu i cu ora de ncepere aleas aleatorie, astfel nct s respecte intervalul selectat de
utilizator.
n etapa de selecie, se calculeaz mai nti valoarea de fitness a fiecrui individ. Se dorete
obinerea unui individ cu fitnessul avnd o valoare ct mai mic, astfel ca : valoarea fitnessului este
constituita din durata total de execuie a taskurilor, la care se adaug penalizrile nerespectrii
17
programului i se scad recompensele oferite pentru execuia fiecrui task. Se ordoneaz apoi
populaia de indivizi n ordine descresctoare dupa fitness i se aleg 40% din numrul total al
indivizilor pentru a face parte din generaia urmtoare a populaiei.
Penalizrile folosite sunt : fiecare minut care nu este n concordan cu intervalul selectat este
multiplicat cu 5 pentru primele 15 minute, cu 10 pentru urmtoarele 15 si cu 15 pentru restul.
Recompensele oferite sunt : 60 pentru un task cu prioritatea MINOR, 120 pentru un task cu
prioritatea AVERAGE, 480 pentru un task cu prioritatea MAJOR, 1500 pentru un task cu prioritatea
CRITICAL.
n etapa de combinare, se completeaz restul de 60% din populaia generaiei urmatoare astfel:
-
se aleg aleator cte 2 indivizi avnd rolul de parini , indiferent de fitness, pentru a fi creai
doi copii.
Se calculeaz ora de ncepere a fiecrui individ copil dup formula recombinrii reale liniare :
offspring = parent1 + Alpha * (parent2 - parent1)
unde Alpha este un factor de scalare ales aleator n intervalul [-d, 1+d]. Parametrii din
formula preiau valorile :
Ora ncepere copil = Ora ncepere Individ1 + Alpha *(Ora de ncepere Individ2 Ora de
ncepere Individ1),
iar Alpha are valorile 0.25 pentru primul copil si -0.25 pentru al doilea copil
Se repet procedeul pn cnd populaia generaiei urmtoare are numrul de indivizi egal
cu populaia curent.
18
n etapa de mutaie, indivizii populaiei format din selecie i combinare pot suferi urmtoarele
mutaii, cu probabilitatea de 0.25 :
- Schimbarea aleatorie a orei de ncepere a execuiei taskului,
- Interschimbarea poziiilor a dou taskuri n setul de taskuri a individului
- Eliminarea un task din setul de taskuri a individului
- Adugarea unui task la setul de taskuri a individului
- nlocuirea unui task din setul de taskuri a individului cu unul ce nu se afl n setul de taskuri
Algoritmul se termin cnd se ajunge la un numr de iteraii egal cu 10 inmulit cu numrul de
taskuri, dac este depit un interval de timp, sau n cazul n care converge la un individ optim.
aceleai i pentru taskul respectiv. Astfel, n cazul n care baza de date conine un numr foarte mare
de taskuri executate, o soluie avantajoas comparrii contextului taskului ce urmeaz s fie adugat
cu fiecare context, se bazeaz pe compararea numai cu un numr mic de contexte reprezentative.
Astfel, pentru determinarea duratei unui task, sunt clusterizate taskurile executate dupa trei
proprieti ale acestora, analog unor puncte ntr-un sistem tridimensional: locaia, titlul si momentul
de execuie a taskului.
Pentru ca noiuni precum similaritatea, deprtarea s fie inelese n acest context, se calculeaz
distana ntre doua taskuri folosind urmatoarea formul :
d(T1, T2) =
unde distanceDuration reprezint diferena ntre momentele de start ale celor dou taskuri
exprimat n minute, distanceTitle reprezint o form a distanei Levenshtein dintre titluri, iar
distantaLocation reprezint distana euclidian ntre locaiile unde se execut cele dou taskuri.
Este necesar ca distana dintre durate si distana dintre titluri s fie inmulite cu anumite ponderi
pentru ca cele trei distane s fie comparabile. Astfel, presupunnd c distanele maxime sunt : cea
dintre locaii de 15 km, cea dintre titluri de 30 de caractere, iar cea dintre momentele de start de
720 de minute, este necesar ca distana dintre titluri sa fie amplificat de 500 de ori iar cea dintre
momentele de start aproximativ de 14 ori.
Primul pas const n alegerea a K taskuri cu rol de centroizi ct mai ndepartai unul de celalalt.
Al doilea pas const n determinarea pentru fiecare task executat din baza de date, a celui mai
apropiat centroid, iar taskul este asignat clusterului acestuia. Se recalculeaz coordonatele fiecrui
centroid pe baza coordonatelor punctelor ce aparin clusterelor lor.
Astfel, noul moment de ncepere a unui centroid se calculeaz ca media artmetic a momentelor
de start ale tuturor punctelor clusterului respectivului centroid :
startTime(Centroidj) =
(1)+(2)++()
, pentru j = 1, K
(1)+( 2)++()
longitude(Centroid) =
, pentru j = 1, K
(1)+(2)++()
, pentru j = 1,K
Dup acest pas, taskurile pot deveni mai apropiate de alte clustere dect fa de cele crora au fost
asignate. n acest caz, se repet algoritmul de la pasul 2, pn cnd taskurile nu ii mai schimb
centroizii crora au fost asignai, iar algoritmul se termin ( nu devin mai apropiate de alte clustere).
20
4.2.1 Determinare K
Provocarea n clusterizarea Kmeans este determinarea lui K pentru care clusterizarea s fie cea
corecta. O metod pentru determinarea lui K este metoda elbow care se bazeaz pe ideea c dac
se repet clusterizarea pentru o valoare K mai mare cu o unitate, nu se vor obine rezultate
considerabil mai bune.
Astfel, metoda elbow presupune etapele:
-
Iniializare K =1
Clusterizarea setului de taskuri
Calcularea variaiei taskurilor ntr-un cluster
Incrementarea lui K i reclusterizare pn cnd diferena variaiilor dintre doua etape
consecutive atinge un prag.
Metoda elbow se bazeaz exclusiv pe distana euclidian ntr-un sistem Euclidian, astfel c pot
aparea erori n determinarea numrului corect de taskuri din moment ce sunt implicate att distana
Levenstein ct i distana termporal. Astfel, pentru ca metoda elbow s nu se opreasc la un optim
local k, condiia pentru oprirea incrementrii numrului de centroizi este :
(() ( + 1) ) <
()
3
Pentru testare s-a folosit un set de 80 de taskuri. Toate taskurile au acelai titlu, se execut cte
40 ntr-o locaie i momentele de execuie variaz de la ora 8:00 pana la 19:00. Graficul din figura
K-means arat scderea variaiei n raport cu mrirea numrului de centroizi. Dei numrul de
centroizi de la care variaia nu mai scade drastic este 4, numrul de centroizi care verific condiia i
care d rezultate mai satisfctoare este 8.
(Fig K-means)
21
22
5. Detalii implementare
5.1 Funcionaliti
Fereastra principal a aplicaiei pune la dispoziia utilizatorului mai multe opiuni:
- setarea programului fix al utilizatorului ce se repet n fiecare sptaman ( activitatea Set Fix
Schedule)
- adugarea unui task i ce implic acesta : locaia, durata, prioritatea, e.t.c. ( activitatea Add
Task)
- vizualizarea taskurilor adugate i modificarea proprietilor lor (View Tasks)
- vizualizarea taskurilor ce se pot executa n contextul actual ( View compatible tasks)
- detectarea dispozitivelor prin Bluetooth i nregistrarea informaiilor primate de la acestea (
Detect Devices)
- recomandarea orarului pentru un interval al zilei lund n considerare taskurile adugate i
programul fix al utilizatorului ( Suggest Schedule)
- vizualizarea taskului curent de executat ( View Current Task)
23
Cmpurile care sunt completate de catre entitatea inteligenta sunt : locaia, dispozitivele i
persoanele necesare care se bazeaz pe titlul taskului introdus de ctre utilizator i prioritatea, care
se bazeaz pe titlul introdus, deadline i durat, n cazul n care acestea sunt completate.
De exemplu, pentru locaie, activitatea clusterizeaz apriori taskurile deja executate dupa titlu.
n momentul n care utilizatorul introduce titlul taskului, acesta este comparat cu titlurile centroizilor
obinui prin clusterizare. Se determin cu care dintre acestea titlul introdus este cel mai similar i n
cazul n care similaritatea depaete un anumit prag, se folosete locaia centroidului respectiv
pentru a completa locaia din interfaa grafic. Acelai procedeu este efectuat i pentru celelalte
cmpuri.
Pentru ca utilizatorul s seteze sau s vizualizeze locaia recomandat de entitatea inteligent,
acesta dispune de o harta obinut prin API-ul Google Map. Pentru uurin, n momentul
deschiderii activitii, harta afieaz automat locaia curent a utilizatorului determinat cu ajutorul
clasei LocationClient a bibliotecii Google Play Services.
Urmtoarea secven de cod descrie determinarea locaiei curente a utilizatorului:
public class AddTask implements com.google.android.gms.location.LocationListener,
GooglePlayServicesClient.ConnectionCallbacks{
/**
* used to get the user's location
*/
LocationClient mLocationClient;
/**
* used to get updates about the user's location
*/
LocationRequest locationRequest;
public void onCreate(Bundle savedInstanceState){
mLocationClient = new LocationClient(this, this, this);
locationRequest = new LocationRequest();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(5000);
locationRequest.setFastestInterval(1000);
locationRequest.setNumUpdates(1);
}
@Override
public void onConnected(Bundle arg0){
Location l = mLocationClient.getLastLocation();
if(l == null)
mLocationClient.requestLocationUpdates(locationRequest, this);
else
currentLocation = l;
}
@Override
public void onLocationChanged(Location arg0){ currentLocation = arg0; }
}
Utilizatorul poate de asemenea s caute o locaie pe hart specificnd n interfa cuvinte cheie
ce fac parte din adresa acesteia. Procedeul poate fi executat i n ordine invers, astfel c n
momentul n care utilizatorul selecteaz o locaie pe hart, n interfa este afiat adresa acesteia,
calculat cu ajutorul instanei Geocoder din biblioteca android.location
24
n momentul n care este aleas locaia taskului pe hart ( direct de ctre utilizator, prin
cutarea unei adrese sau prin compararea titlului cu cele aflate n baza de date), pe hart apare un
marcaj albastru iar locaia este afiat n prim plan. Codul pentru aceast funcionalitate este :
location = Double.toString( position.latitude) + " " +
Double.toString(position.longitude);
map.clear();
map.moveCamera(CameraUpdateFactory.newLatLngZoom(position, 15));
map.addMarker(new MarkerOptions().position(positionCurrent).
icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)));
map.addMarker(new MarkerOptions().position(position).
icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_action_location_place)));
25
26
().get(elementType),
currentContext.getContextElementsCollection
().get(elementType), task) == false)
isTaskCompatible = false;
break;
}
}
if(isTaskCompatible == true)
addTaskToInterface(task) ;
27
28
ID_TASK : reprezint cheia primar a tabelului i valoarea este id-ul taskului asociat unei
intrri n tabel.
DURATION : ir ce reprezint durata taskului. n cazul n care nu este tiut durata, are
valoarea -1. Valoarea i este schimbat n momentul n care taskul este ales pentru a fi
executat, cu durata unuia dintre centroizii calculai de entitatea inteligent prin clusterizare.
29
STATUS: ir ce reprezint statusul taskului. Poate avea valorile : AMONG_TO_DO, dac a fost
adugat n lista de taskuri, CURRENT_TASK, dac este taskul ce este executat la momentul
actual, EXECUTED, dac a fost finalizat.
ID_TASK : reprezint cheia primar a tabelului i valoarea este id-ul taskului asociat unei
intrri n tabel.
DAY_WEEK : ir ce specific n ce zi a sptmnii trebuie executat programul. Poate avea
valorile MONDAY, TUESDAY, WEDNESDAY, THURSADAY, FRIDAY.
- LOCATION : ir ce contine coordonatele locaiei alese de ctre utilizator, delimitate
de caracterul , .
START_HOUR : ir ce indic ora la care ncepe taskul.
START_MINUTE : ir ce indic minutul la care ncepe taskul.
END_HOUR
: ir ce indic ora la care se termin taskul.
END_MINUTE : ir ce indic minutul la care se termina taskul.
ID_DEVICE : reprezint cheia primar a tabelului i valoarea este id-ul device-ului asociat
unei intrari n tabel.
MAC : ir ce reprezint adresa mac a dispozitivului detectat.
NAME_DEVICE : ir ce reprezint numele dispozitivului detectat.
NAME_OWNER : ir ce reprezint numele persoanei care deine dispozitivul. n cazul n care
este vorba despre utilizator, NAME_OWNER are valoarea My Device.
5.3 Modularizare
Aplicaia este modularizat fiind prevzut pe lng activitile proprii cu urmtoarele module:
DatabaseOperation , ContextElements, Salesman, Check_Compatibility , Clustering.
31
5.3.1 DatabaseOperation
Acest modul conine implementarea bazei de date a aplicaiei . Principala clas este
DataBaseHandler ce conine metodele ce implementeaz operaiile DDL i DML ale tabelelor:
- crearea tabelelor,
- adugarea, updatarea, tergerea unui task, a unui dispozitiv, a unui task din programul fix al
utilizatorului,
- extragerea tuturor informaiilor din cele trei tabele sau doar a unui set de nregistrri pe baza
unor criterii primite ca parametri.
Conine de asemenea cte o interfa pentru fiecare tabel, n care sunt specificate atributele
acestora : deviceData, fixedTasksData, tasksData.
Alte componente ale acestui modul sunt clase ce implementeaza asculttorii asociai butoanelor
din activiti care apeleaz operaiile DDL si DML ale bazei de date.
5.3.2 Clustering
Acest modul conine clasele ce clusterizeaz taskurile cu statusul Executed. Taskurile sunt nite
puncte n sisteme avnd mai multe dimensiuni.
-
32
Modulul conine n plus i o clas n care sunt implementate metodele de calcul a distanelor
Levenshtein, distana euclidan i diferena dintre orele de nceput a taskurilor.
5.3.4 ContextElements
Taskul este conceput ca fiind format dintr-un set de elemente de context. Modulul
ContextElements conine aceste elemente de context. Pentru ca valorile acestora s fie obinute
ntr-un mod facil i clar din clasa task, aceasta are ca membru o list de perechi cheie-valoare, avnd
drept chei valorile din enumeraia ContextElementType i ca valori urmtoarele clase :
-
33
TemporalContext : are ca membru o list avnd ca elemente intervale ale zilei. n cazul
contextului curent, acestea sunt intervalele n care se desfaoar programul fix, iar n cazul
contextului taskului, reprezint intervalul n care este executat taskul, calculat pe baza
timpului curent, a duratei propriu-zise a execuiei taskului mpreun cu durata de deplasare
pn la locaia taskului i durata de deplasare pn la locaiile unde se desfasoar programul
fix al utilizatorului.
5.3.5 CheckCompatibility
Acest modul este folosit pentru afiarea taskurilor n activitatea View Compatible Tasks ale cror
contexte sunt n compatibilitate cu cel curent. Astfel, acesta conine urmtoarele clase ce
implementeaz metoda checkCompatibility a interfeei Checker. Metoda checkCompatibility
primete ca parametri dou elementele de context de acelasi tip, unul aparinnd contextului
curent, iar cellalt aparinnd contextului taskului de verificat. Rezultatul funciei este true dac
taskul poate fi executat sau false n caz negativ.
-
34
6. Descrierea aplicaiei
6.1 Meniu principal
La startarea aplicaiei, interfaa afieaz funciile disponibile, care apar n meniul principal.
Aceste funcii sunt urmtoarele:
- Adugarea unui nou task
- Vizualizarea i modificarea taskurilor nc neexcutate
- Vizualizarea taskurilor compatibile cu taskul curent
- Vizualizarea taskului curent de executat
- Setarea programului fix al utilizatorului
- Vizualizarea unui program pentru o zi sugerat de aplicaie
- Detectarea dispozitivelor prin Bluetooth .
Interfaa aplicaiei este prietenoas iar meniul principal este prezentat n figura 6.1
35
36
Locaia curent este marcat pe hart cu un roboel, iar cea cautat de utilizator cu un
pointer albastru (vezi figura 6.4 )
37
Pentru specificarea duratei, utilizatorul trebuie s apese pe cmpul din dreapta textului
Choose a duration. Efectul acestei aciuni este afiarea unei liste cu valori din care
utilizatorul trebuie sa aleag durata dorit (vezi figura 6.8 ).Valoarea implicit a duratei
este Unknown.
38
Pentru salvarea datelor, utilizatorul trebuie s apese butonul Save Task . Dac informaiile
introduse sunt corecte, este afiat mesajul The data has been inserted. Dac datele
completate sunt insuficiente utilizatorul este avertizat n momentul ncercarii salvrii
datelor.
39
Titlul este scris cu culoarea albastr i ncadrat ntr-un dreptunghi de culoare deschis.
Informaiile privind contextul n care poate fi executat taskul sunt afiate imediat sub
titlu :
Utilizatorul poate terge sau modifica taskul folosind butoanele ERASE TASK sau
Modify Task (vezi figura 6.10 )
o Apsarea butonului Erase task are ca efect tergerea datelor aferente taskului
respectiv din interfaa grafic.
o Apsarea butonului Modify task va conduce la deschiderea ferestrei
AddTask cu cmpurile deja completate ale taskului, n vederea modificrii
acestora.
40
Utilizatorul este informat n cazul n care nu sunt taskuri de executat, n fereastr fiind
afiat urmtorul mesaj:
Pentru adugarea / tergerea unui task din baza de date, sunt utilizate butoanele Add
Task respectiv ERASE TASK din dreptul intervalului taskului respective {vezi figura
6.13)
41
pentru a informa aplicaia ce task este ales pentru a fi executat n momentul actual,
utilizatorul trebuie sa apese butonul Execute task
42
Datele afiate despre fiecare dispozitiv sunt : numele setat de proprietatul acestuia i
adresa Mac
Pentru adugarea dispozitivului n baza de date ca aparinnd utilizatorului, acesta
trebuie sa apese butonul Add Device as mine. Orice este scris n cmpul din dreptul
textului Add owner este omis.
Pentru adugarea dispozitivului in baza de date ca aparinnd altei persoane, utilizatorul
trebuie s specifice n cmpul din dreptul textului Add owner numele acestuia si s
apese pe butonul Add Device with the added owner
Dup ce este adugat n baza de date, interfaa este reactualizat i nu mai conine
dispozitivul respectiv.
43
n cazul n care utilizatorul are n aceeasi zi un program fix, interfaa este schimbata
avnd si opiunea de a alege un interval prin butonul Show next Interval, care seteaz
automat urmtorul interval care nu se intercaleaz cu programul fix. (vezi figura 6.19).
44
este afiat titlul taskului, timpul rmas pn la execuia lui si date privind contextul n
care se desfoar taskul (vezi figura 6.21):
45
sunt puse la dispoziia utilizatorului butoane pentru gestionarea timpului. n cazul in care
durata a fost estimat greit, utilizatorul poate apasa pe butonul Add 10 minutes
pentru adugarea a 10 minute, sau Add one hour pentru adaugarea unei ore la
durata estimat.
dac utilizatorul apas butonul Task finished, taskul este considerat a fi terminat, iar
timpul rmas este sczut din durata total.
46
7. Concluzii
Task Scheduler este o o aplicaie implementat pe Android, care dispune de multe
functionaliti inteligente i care ofer o interfa prietenoas utilizatorului.
Interfaa prietenoas faciliteaz comunicarea dintre dispozitiv i utilizator, fiind redus
considerabil numrul de pai prin care utilizatorul obine sau introduce informaiile necesare
dispozitivului. De asemenea, interfaa grafic a unei activiti are componentele grafice dispuse ntrun mod n care utilizatorul percepe ct mai rapid rolul activitii i informaia afiat.
n ceea ce privete funcionalitile, acestea fac ca aplicaia s asiste utilizatorul n a-i organiza
programul, prin recomandarea unei ordini n care s execute taskurile zilnice astfel nct s
economiseasc ct mai mult timp posibil. Mai mult dect att, vizualizarea taskurilor posibile de
executat n contextul curent faciliteaz sarcina utilizatorului cu att mai mult cu ct programul
acestuia este foarte incrcat i prin urmare i este dificil s memoreze toate taskurile sau s decid
care taskuri pot fi executate.
Modul n care sunt utilizate tehnologiile i API-urile oferite de sistemul de operare Android
definete aplicaia ca fiind un sistem inteligent ambiental. Implementarea aplicaiei nu ar fi fost
posibil fr tehnologia Bluetooth pentru determinarea dispozitivelor din proximitatea utilizatorului
i fr GPS pentru determinarea poziiei curente a utilizatorului.
Una dintre viitoarele funcionaliti ale aplicaiei este partajarea informaiilor pe un server. n
acest fel, aplicaia ar dispune de informaiile mai multor utilizatori pentru clusterizare i nu s-ar mai
baza doar pe informaiile locale ale utilizatorului, grbind astfel procesul de obinere a datelor
necesare algoritmului K-Means. Un alt aspect pozitiv al acestui lucru este clusterizarea pe server,
astfel c aplicaia nu ar mai suferi de latena acestui proces care momentan este implementat local.
Provocarea n partajarea datelor pe un server ar fi pstrarea confidenialitii datelor utilizatorilor.
Alt funcionalitate privete calcularea programului utilizatorului. Momentan, acest calcul ia n
considerare ca execuie a unui task doar o posibil locaie a acestuia. n cazul n care taskul s-ar
putea executa n mai multe locaii, durata taskului poate sa difere considerabil i astfel aplicaia ar
putea recomanda un program mai eficient dect cel pe care l recomand n acest moment. Mai mult
dect att, aplicaia va trebui sa ia n considerare granularitatea duratei taskului. Acesta nu va trebui
s fie executat ntr-o etapa dac este foarte complex ci va fi executat n mai multe etape pe
parcursul mai multor zile.
Nu n ultimul rnd, aplicaia va dispune de un sistem de notificare prin care sa ntiineze
utilizatorul cnd sunt ndeplinite condiiile pentru a putea fi executat un task. De asemenea,
utilizatorul ar putea s transmit ntr-un mod mai facil aplicaiei cererile sale prin intermediul
microfonului.
Drept concluzie, aplicaia ofer funcionalitaile necesare pentru a putea fi utilizat i pentru a
asista utilizatorul n viaa de zi cu zi. Viitoare functionaliti vor optimiza aceast asistare.
47
BIBLIOGRAFIE
[1]http://ro.wikipedia.org/wiki/Programare_orientat%C4%83_pe_obiecte
[2] Mark L. Murphy , The busy Coders Guide to Android Development versiunea 4.2, 2012, editura
CommonsWare, pg 3
[3] http://developer.android.com/training/basics/activity-lifecycle
[4]http://developer.android.com/guide/topics/manifest/manifest-intro.html
[5] http://developer.android.com/training/basics/firstapp/building-ui.html
[6]http://www.vogella.com/tutorials/AndroidBroadcastReceiver/article.html
[7] http://developer.android.com/guide/topics/connectivity/bluetooth.html
[8] http://examples.javacodegeeks.com/android/core/content/android-sharedpreferencesexample/
[9] http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/
[10] Stuart Russell, Peter Norvig ,Artificial Intelligence A Modern Approach (Third Edition) capitolul
18
[11] http://en.wikipedia.org/wiki/K-means_clustering
[12] http://en.wikipedia.org/wiki/Determining_the_number_of_clusters_in_a_data_set
[13] http://web.stanford.edu/~hastie/Papers/gap.pdf : Estimating the number of clusters in a data
set via the gap statistic Robert Tibshirani, Guenther Walter, Trevor Hastie
[14] http://en.wikipedia.org/wiki/Genetic_algorithm
[15] Ducatel, Ken and Bogdanowicz, Marc and Scapolo, Fabiana and Leijten, Jos and Burgelman,
Jean-Claude, Scenarios for ambient intelligence in 2010, 2001
ftp://ftp.cordis.europa.eu/pub/ist/docs/istagscenarios2010.pdf
[16]http://en.wikipedia.org/wiki/Ambient_intelligence
[17]http://software.ucv.ro/~cmihaescu/ro/teaching/ACA/docs/PCV.pdf
[18]http://en.wikipedia.org/wiki/Levenshtein_distance
48