Introducere … … … … 2 [617690]
1
Cuprins
Introducere ………………………….. ………………………….. ………………………….. …. 2
Capitolul 1 Învățare automată ………………………….. ………………………….. ….. 3
1.1 Elemente introductive ………………………….. ………………………….. ……… 3
1.2 Învă țare automată – metode ………………………….. ………………………….. . 3
1.2.1 Descriere succintă a metodelor ………………………….. …………………. 4
1.3 Învățare automată -Tehnica Reinforcement Learning …………………… 4
1.3.1 Învățarea de tip Reinforcement Learning – Model ………………….. 5
1.3.2 Învățarea de tip Reinforcement Learning – Politica ………………… 5
1.3.3 Învățarea de tip Reinforcement Learning – Q–Learning …………. 5
1.4 Sisteme de învățare automată ………………………….. ………………………… 9
Capitolul 2 Proiectarea sistemului Smart Bird ………………………….. ……….. 13
2.1 Analiza cerințelor ………………………….. ………………………….. ………….. 13
2.2 Arhitectura sistemului ………………………….. ………………………….. …….. 16
Capitolul 3 Implementarea sistemului Smart Bird ………………………….. ….. 17
3.1 Sistemul de învățare automată de tip Reinforcement Learning …….. 17
3.2 Instrumente software folosite ………………………….. ………………………. 33
3.3 Experimente ………………………….. ………………………….. ………………….. 34
Capitolul 4 Concluzii ………………………….. ………………………….. ……………… 38
Abstract ………………………….. ………………………….. ………………………….. ……. 39
Bibliografie ………………………….. ………………………….. ………………………….. . 40
Webografie ………………………….. ………………………….. ………………………….. . 41
Anexă ………………………….. ………………………….. ………………………….. ………. 42
2
INTRODUCERE
Învățarea automată oferă calculatorului capacitatea de a învăța fără a fi programat în
mod explicit. Astfel c ă principalul obiectiv al acestui tip de învăț are este de a furniza algoritmi
care pot fi instruiți să efectueze o anumită sarcină.
Învățarea de tip Reinforcement Learning reprezintă o metodă a învățării automate care
permite unui agent să învețe într -un mediu interactiv prin încercări și erori, bazându -se pe
feedback -ul propriilor acțiuni și experiențe. Scopul final în cazul acestui tip de învățare este de
a maximiza reco mpensa cumulativă primită de către agent. Această ramura a învățării automate
are o multitudine de domenii din viața reala în care poate și este folosită. Din aceste motive,
învățarea de tip Reinforcement Learning prezintă interes la nivel global, dorindu -se dezvoltarea
acest ei tehnici și implementarea ei în domenii variate.
Domenii le în care există aplicații ale învățării automate în momentul de față sunt
reprezentate de , managementul resurs elor în grupuri de calculatoare, controlul traficului prin
intermediul semafoarelor, robotică, configurarea sistemelor web, chimie, recomandări
personalizate, licitare și publicitate, jocuri. După cum se poate observa domeniile aplicabilității
Reinforcemen t Learning sunt foarte variate, avem astfel de la domenii care nu sunt întâlnite în
viața cotidiană, de exemplu robotica, sau chimia, până la domenii cu care luam contact zilnic
sau de mai multe ori pe zi, de exemplu, publicitatea, jocurile sau recomandăr ile personalizate.
Din mulțimea domeniilor enumerate anterior cel mai potrivit pentru dezvoltarea unui
sistem de învățare automată a părut cel al jocurilor, deoarece acesta oferă o vizualizarea bună a
comportamentului agentului într-un anumit mediu virtual prin intermediul unor elemente
grafice. Un exemplu de joc în care agentul poate învăța într -un mediu interactiv, prin sistemul
de încercare eroare pentru cumularea unei recompense, a fost reprezentat de jocul FlappyBird.
Acest joc a fost dezvoltat în Hano i de către Dong Nguyen. Ideea de bază a acestui joc este aceea
că agentul (în acest caz o pasăre) trebuie să traverseze niște obstacole (țevi) pentru a cumula
puncte , iar de fiecare dată în care agentul atinge una din țevi sau baza (solul) jocul ia sfârșit iar
jucătorul este nevoit să reia jocul de la început.
În acest context se dorește implementarea conceptului care stă la baza jocului
FlappyBird folosind învățarea de tip Reinforcement Learning respectiv algoritmul de Q –
Learning, astfel încât mișcările a gentului să nu mai fie controlate de către jucător ci acesta să
învețe singur pe baza unor acțiuni care sunt recompensate corespunzător.
Acestea fiind spuse alegerea acestei teme de proiect de diplomă și anume, Proiectarea
și implementarea unui sistem de învățare automată de tip Reinforcement Learning, este una
justificată, deoarece acest domeniu este unul actual și în continuă dezvoltare.
3
CAPITOLUL 1
ÎNVĂȚARE AUTOMATĂ
1.1 Elemente introductive
Învățarea automată are rolul de -a oferi unui calculator capacitatea de a realiza o anumită
sarcină fără a fi programat în mod explicit.
Acest lucru fiind posibil deoarece învățare a automată are ca scop dezvolta rea unor
algoritmi și metode care să permită unui sistem informatic să învețe date, re guli sau
algoritmi .
Însă pe lângă cele enumerate anterior, învățarea automată trebuie să îmbunătățească
performanța acelui sistem nu doar în rezolvarea repetată a unui același set de probleme, ci
și în rezolvarea unor probleme noi , acest lucru fiind posib il prin generalizarea unei metode
de rezolvare.
Îmbunătățirea performanței se poate face fie inductiv, generalizând o problemă plecând
de la un set de exemple, fie deductiv, plecând de la o bază de cuno ștințe suficiente asupra
universului problemei și extrăgând date și reguli esen țiale [2].
Un sistem capabil să învețe este definit de următoarele caracteristici [14]:
• scopul metodei și baza de cuno ștințe necesară;
• formalismul de reprezentare a datelor util izate și a celor învă țate;
• un set de opera ții asupra datelor disponibile și învă țate;
• un spa țiu general al problemei în care se va specifica solu ția;
• opțional, reguli euristice pentru căutarea în spa țiul problemei
1.2 Învățare automat ă – metode
Principalele metode de învățare automat ă sunt urm ătoarele [7]:
a) Învățare inductiv ă
b) Reinforcement Learning
➢ Q-Learning
4
1.2.1 Descriere succint ă a metodelor
a) Învățare inductiv ă
Una dintre cele mai eficiente metode folosite pentru achizi ția automat ă a cunoa șterii este
reprezentat ă de învățarea inductiv ă.
Etapa de achizi ție a cunoa șterii presupune transferul cunoa șterii de la exper ții în
domeniu c ătre baza de cuno ștințe a sistemului expert [8].
Metodele învățării inductive sunt reprezentate de [8]:
• Învățare bazat ă pe arbori de decizie
• Învățare cu ajutorul re țelelor neuronale
• Algoritmi genetici
• Programarea logica inductiv ă
b) Învățarea de tip Reinforcement Learning
Învățarea de tip Reinforcement Learning reprezint ă o arie a învățării automate, care are
în vedere modul în care agen ții software ar trebui s ă întreprind ă acțiuni într-un mediu pentru a
maximiza o no țiune de recompens ă cumulativ ă[13].
1.3 Învățare automată -Tehnica Reinforcement Learning
Învățarea de tip Reinforcement Learning are la bază două componente:
– Agentul : care reprezint ă algoritmul de tip Reinforcement Learning
– Mediul : care reprezint ă obiectul asupra c ăruia agentul ac ționeaz ă
Învățarea de tip Reinforcement Learning poate fi descrisă cât mai simplu astfel,
interacțiunea cu mediul a unui agent este o secvența de stare -acțiune -recompense: ceea ce
înseamnă că mediul transmite o stare 𝑺𝒕, către agent, care bazându -se pe cunoștințele sale
realizează o acțiune 𝑨𝒕, drept răspuns stării , apoi mediul transmite către agent o pereche de stări
viitoare și recompensa 𝑹𝒕, conform figurii 1 [15].
Fig.1 Schemă bloc a învățării de tip Reinforcement Learning
5
1.3.1 Învățarea de tip Reinforcement Learning – Model
a) Învățare de tip Reinforcement Learning bazată pe model
În acest caz are loc o simulare a dinamicii mediului. Modelul învață probabilitatea de
tranzi ție T(s1|(s0, a)) de la perechea de stare curenta s0 și acțiunea a la urm ătoarea stare s.
Daca probabilitatea de tranzi ție este învățată cu succes, agentul va ști cât de probabil
este sa intre într-o anumit ă stare av ând în vedere starea și acțiunea actual ă. Cu toate acestea,
acest model devine nepractic pe m ăsura ce spa țiul de stare și spațiul de ac țiune cresc [15].
b) Învățare de tip Reinforcement Learning fără model
Acest caz, unde învățarea nu are un model, se bazeaz ă pe un set de încerc ări și erori
pentru a -și actualiza cuno ștințele. Ca urmare, nu este nevoie de spa țiu pentru a stoca toate
combina țiile de st ări și acțiuni [15].
1.3.2 Învățarea de tip Reinforcement Learning – Politica
Putem avea dou ă tipuri de politica, în cazul învățării de tip Reinforcement Learning, on –
policy sau off -policy.
Un agent bazat on -policy, învață pe baza acțiunii sale curent e derivat ă din politica
actual ă, în timp ce un agent bazat off -policy învață pe baza ac țiunii ob ținută dintr -o altă politic ă
[15].
1.3.3 Învățarea de tip Reinforcement Learning – Q–Learning
Tehnica Q-Learning este o form ă a algoritmului Reinforcement Learning, folosit ă în
învățarea automat ă. Aceasta are ca scop învățarea unei politici, care s ă-i spun ă agentul ce
acțiune s ă realizeze în anumite circumstan țe, ea nu necesit ă un model al mediulu i și poate
rezolva problemele cu ajutorul tranzi țiilor și al recompenselor, f ără a necesita adapt ări.
Aceast ă metod ă oferă agen ților capacitatea de a învăța să se comporte optim în spa țiul
Markovian , experiment ând consecin țele ac țiunilor efectuate, f ără a le solicita construirea unor
harți ale domeniului [15].
Q – Learning este un algoritm off -policy , bazat pe ecua ția Bellman (1).
𝑣(𝑠)=𝔼[𝑅𝑡+1+ 𝜆𝑣(𝑆𝑡+1)|𝑆𝑡=𝑠] (1)
Unde: E – reprezint ă așteptarea
ƛ – reprezint ă factorul de reducere
6
Ecua ția (1) rescris ă sub forma unei valori Q, are forma (2):
𝑄𝜋(𝑠,𝑎)=𝔼[𝑟𝑡+1+𝜆𝑟𝑡+2+𝜆2𝑟𝑡+3+ …|𝑠,𝑎] (2)
=𝔼𝑠′[𝑟+𝜆𝑄𝜋(𝑠′,𝑎′)|[𝑠,𝑎]
În algoritmul Q -Learning , un agent încearcă să învețe politica optimă din istoria
interacțiunii cu mediul. Istoricul privind interacțiunea cu mediul a unui agent este o secvența
de stare -acțiune -recompense: (s0, a0,r1 ; s1, a1,r2 ; s2, a2,r3 ; s3, a3,r4,s4 …) ceea ce înseamnă
că agentul se afl ă în stare s0, realizează acțiune a a0, iar drept rezultat primește recompensa r1
trecând în starea s1; apoi realizează acțiune a a1, prim ește recompensa r2, și ajun ge în starea
s2; apoi realiz ează acțiune a a2, prim ește recompensa r3 și ajun ge în starea s3 și așa mai departe.
Tratăm acest istoric al interacțiunii ca o secvență de experiențe, în care experiența este
un tu plu (s, a, r, s'), ce înseamn ă că agentul a fost în starea s, a realizat ac țiunea a, a primit
recompensa r, și a ajuns în starea s'. Aceste experien țe reprezint ă datele de la care agentul poate
învăța ce s ă facă.
Ca și în planificarea decizională -teoretică, scopul este ca agentul s ă-și maximizeze
valoarea, care este de obicei o recompensa r edusă [10].
Putem observa în cele ce urmează modul în care funcționează controller -ul Q-Learning
[10]:
controler Q -Learning (S, A, γ, α)
Intrări
S este setul de st ări
A este setul de ac țiuni
γ reducerea
α este m ărimea "pasului"
Variabile Local e
real array Q[S, A]
starea anterioar ă s
acțiunea anterioar ă a
inițializăm arbitrar Q[S, A]
observ ăm starea curent ă s
Repetă
select ăm și realiz ăm o acțiune a
observ ăm recompensa r și starea s'
Q[s, a] ← Q[s, a] + α (r + γ max a' Q[s', a'] − Q[s, a])
s ← s'
Până când terminare
7
Reamintim că Q * (s, a), unde a este o acțiune și s este o stare, este valoarea așteptată
(recompensa cumulată redusă) de a face a în starea s, urmând politica optimă.
Q-Learning utilizează diferențe temporale pentru a estima valoarea lui Q * (s, a).
În Q-Learning , agentul menține o tabelă de Q [S, A], unde S este setul de stări și A este
setul de acțiuni. Q [s, a] reprezintă estimarea actuală a lui Q * (s, a). O experiență (s, a, r, s')
furnizează un punct de date pentru valoarea lui Q (s, a). Punctul de date este că agentul a primit
valoarea viitoare a lui r + γV (s), unde V (s) = max a' Q (s', a'); aceasta este răsplata actuală
plus viitoarea valoarea estimată. Acest nou punct de date se numește "return".
Agentul poate utiliza ecuația urm ătoare pentru a actualiza estimarea pentru Q (s, a) (3):
Q[s, a] = Q[s, a] + α (r + γ max a' Q[s', a'] − Q[s, a]) (3)
sau, echivalentul:
Q[s, a] = (1 − α)Q[s,a] + α(r + γ max Q[s', a']) (4)
Tehnica Q-Learning învață o politică optimă indiferent de politica pe care agentul o
urmea ză
(adică, ce acțiune a este selectată pentru orice stare s) atâta timp cât nu există o constr ângere
legată de numărul de ori in care o acțiune încearcă în orice stare (de ex nu întotdeauna face
același subgrup de acțiuni într -o stare). Pentru că învață o politică optim ă indiferent de politica
pe care o desfășoară, se numește metoda off -policy. [10]
Explorare și exploatare
Algoritmul Q -Learning nu specifică ce ar trebuie să facă agentul , acesta învață o funcție
Q care poate fi utilizată pentru a determina o acțiune optimă.
Există două lucruri utile pe care agentul le poate face:
• să exploateze cunoștințele pe care le -a găsit pentru starea actuală s, făcând una din
acțiunile a care maximizează Q [s, a].
• să exploreze pentru a realiza o estimare mai bună a funcției Q optimale. Acesta,
ar trebui să aleagă o acțiune diferită, din cele curente, pe care o consideră în prezent cea mai
buna [10].
8
Modalit ăți de a trata explorarea si exploatarea :
a) Strategia „lacomă ” ( E-greedy) aceasta presupune selectarea unei acțiuni „lacome ”
(una care să maximizeze Q[s,a]). Intuitiv la început agentul ar trebui să selecteze o strategie
random, astfel încât să încurajeze explorarea inițială și în timp ce progresează să acționeze mai
„lacom”.
Problema acestei strategii este aceea ca trateaz ă toate ac țiunile, în afara de cea mai bun ă,
în acela și mod.
Dacă există două acțiuni aparent bune și mai multe ac țiuni mai pu țin promi țătoare,
aceast ă strategie poate fii un pic sensibil ă în ceea ce prive ște selectarea unei ac țiuni din cele
bune: depun ând astfel mai mult efort în a determina care din ac țiunile promi țătoare este cea
mai bun ă, în loc s ă depun ă efort în a explora ac țiunile care ar ătau rău.
O modalitate de a rezolva aceast ă problem ă este de a selecta acțiunea a cu
o probabilitate în funcție de valoarea Q [s, a]. Aceasta este cunoscută ca selectarea acțiunilor
soft-max [10].
b) O alta strategie este „Optimism in the face of uncertainty ” aceasta ini țializeaz ă funcția
Q cu valori care încurajeaz ă explorarea. Da că valorile lui Q sunt prea mari, zonele neexplorate
vor ar ăta bine, astfel încât o căutare "lacoma" va tinde s ă exploreze aceste zone.
Acest lucru încuraj ând explorarea, cu toate acestea, agentul poate halucina faptul că
unele perechi de stare – acțiune sunt bune pentru o lungă perioadă de timp, chiar daca nu există
dovezi reale pentru ac easta.
O stare devine rea atunci c ând toate ac țiunile arat ă rău, dar c ând toate aceste ac țiuni
conduc la st ări care arat ă bine, este necesar un timp îndelungat pentru a ob ține o imagine
realist ă a valorilor respective.
Acesta fiind un caz în care estim ările vechi ale valorilor lui Q pot fi estim ări destul
de eronate privind valoarea real ă a lui Q, și acestea pot r ămâne estimate eronat pentru
o perioada mare de timp.
Pentru a ob ține o convergenta rapid ă, valorile ini țiale ar trebui sa fie pe c ât posibil
aproape de valorile finale, încercarea de a le supraestima va face convergenta s ă fie mai lent ă.
Bazându-ne numai pe aceast ă strategie, aceasta nu este util ă în cazul în care dinamica
se schimb ă, deoarece se tratează per ioada de timp inițială ca fiind timpul pentru a explora, și
după această explorare inițială, nu mai există explorare [10].
9
1.4 Sisteme de învățare automată
Sistemele de învățare automată s -au dezvoltat foarte mult în ultimii ani, ele întâlnindu –
se în multe din aplicațiile și sistemele pe care le utilizăm zilnic.
Învățarea de tip Reinforcement Learning se poate întâlni atât în domenii specifice
inteligentei artificiale precum Robotică , Chimie , Jocuri, dar și în domenii mai puțin speci fice
acesteia, precum Controlul Traficului, Agricultură, Industria petrolieră, Recomandări
Personalizate, Configurarea Site -urilor Web, Publicitate, iar lista poate continua.
În continuare vor fi prezentate câteva exemple de aplicații din viața reală car e au la bază
învățarea automată.
a) Robotică
În prezent roboții pot efectua de la cele mai simple sarcini, precum punerea unor
componente pe o bandă de lucru, până la cele mai complexe, precum operații chirurgicale.
Însă aceste lucruri sunt posibile de cele mai multe ori doar cu ajutorul oamenilor, astfel încât
se dorește ca, prin intermediul învățării automate, roboții să fie capabili să îndeplinească singuri
unele sarcini.
Folosirea R einforcement Learning în acest domeniu a permis dezvoltarea unor roboți
capabili să îndeplinească diverse sarcini fără intervenția omului [3].
Fig.2 Exemple de sarcini îndeplinite de roboți cu ajutorul Reinforcement Learning,
sursă imagine [3].
Exemple de astfel de sarcini sunt deschiderea dopului unei sticle, punerea unui umeraș pe
o bara, scoaterea unui cui, introducerea unor forme geometrice într -o cutie dar doar pe orificiul
care corespunde acelei forme, și lista poate continua [17].
b) Jocuri
În prezent Reinforcement Learning este des folosit în cazul jocurilor, atât din dorința de a
rezolva anumite jocuri dar uneori și din dorinț a de a se depășii performanța uman ă în ceea ce
privește abilitățile jucătorului de a depășii diverse obstacole și de a obține un scor cât mai bun.
Un bun exemplu este reprezentat de jocul Atari [6].
10
c) Controlul traficului
În cazul controlului traficului, Reinforcement Learning se utilizează cu scopul de facilita
dezvolta rea unor sisteme inteligente de control al semafoarelor astfel încât să se reducă
aglomerația și ambuteiajele.
Această metodă a fost testată numai într -un simulator, însă a avut rezultate foarte bune
comparativ cu metodele tradiționale [1].
Fig.3 Schema unei intersecții în care traficul este controlat cu ajutorul Reinfo rcement
Learning, sursă imagine [1] .
d) Agricultură
Cu toate că p are surprinzător în cadrul acestui domeniu există multe aplicații ale învățării
automate , precum [25]:
– managementul speciilor , în acest caz algoritmii de învățare automat ă primesc date
privind culturile din anii anteriori, mai exact date privind culturile din ultimele decenii,
pentru a determina ce specii de pla nte pot fi cultivate și în ce mediu pentru a dezvolta
culturi c ât mai bune.
– tot cu ajutorul acestor algoritmi se p oate realiza o recunoa ștere a speciilor mult mai
rapid ă și mai eficienta dec ât cea realizat ă de către oameni .
– managementul cantității de apă pe care solul o primește zilnic, această estimare se face
pe baza unor date privind cantitatea de apă furnizată zilnic, săptămânal sau lunar și pe
baza indicelui de evaporare a acesteia. Această aplicație are un impact major atât din
punct de vedere hidrologic, climatologic dar și agronomic.
11
– managementul culturilor presupune detectarea și clasificarea pre cisă a caracteristicilor
calității culturilor, lucru care poate determina o cre ștere a pre țului produsului dar și o
reducere a risipei.
Fig.4 Imagine orientativă privind culturile de plante , sursă imagine [25] .
e) Industria petrolieră
În cazul industriei petroliere se folosește pentru optimizarea rezervoarelor Deep
Reinforcement Learning. În această situație pentru optimizarea producției agentul poate
realiza una din acțiunile următoare [24]:
– Modificarea valorii bph în funcție de mo dul de control al sondei
– Deschiderea/închiderea puțului
– Deschiderea/închiderea perforațiilor
– Modificarea comportamentului operațional de la producție la injecție și invers
Fig.5 Rezultate preliminare privind simularea 2D , sursă imagine [24] .
12
Pentru testare s -a folosit o rețea simpla 2D . Modelul constă într-un sistem simplu de lichide
comprimabile în două faze (apă – ulei), rocă compresibilă, acvifer si un puț de producție. În
această situație agentul și mediul au următoarele caracteristici :
– Informații de stare și anume informații volumetrice și saturaț ie a apei.
– Acțiuni valorile presiunii continue aflate în cavitatea inferioară.
– Funcția recompensă este reprezentată de factorul de recuperare
f) Recomandări personalizate
Deoarece sistemele clasice nu erau suficient de precise în ceea ce privea recomandările
făcute utilizatorului, datorită dinamicii schimbării preferințelor clientului, introducerea
învățarea de tip Reinforcement Learning în algoritmii de recomandare îmbunăt ățește fluxul de
date care ajung la client ca și recomandare.
Astfel încât de fiecare dată când utilizatorul primește o recomandare bună și accesează
acea recomandare, agentul privește această acțiune ca pe o recompensă.
Acest lucru, împreună cu datele pr ivind acțiunile clientului și cu datele pe care agentul
deja le deține privind clientul, îmbunătățind lista de recomandări pe care utilizatorul le
primește [12].
Fig.6 Exemplificarea modului în care funcționează recomandările personalizate,
sursă imagine [1 2].
13
CAPITOLUL 2
PROIECTAREA SISTEMULUI SMART BIR D
În cadrul acestui capitol vom analiza cerințele necesare proiec tării unui sistem de
învățare automată de tip Reinforcement Learning dar și arhitectura acestuia.
2.1 Analiza cerințelor
Pentru a proiecta un astfel de sistem este necesară analiza cerințelor atât din punct de
vedere al utilizatorului cât și al proiectantului.
Se dorește dezvoltarea unui sistem de învățare automată de tip Reinforcement Lea rning
pornind de la ideea de bază a jocul ui FlappyBird . Acesta joc are o logică relativ simpl ă, în care
pasărea este controlată de jucător, prin intermediul specebar -ului sau a mouse -ului, scopul fiind
de a realiza mișcări sus -jos astfel încât să fie pos ibilă trecerea printre țevi, de regulă de culoare
verzi, și astfel să acumuleze puncte.
În cazul în care pasărea atinge solul sau una din țevi aceasta m oare, iar jocul se termin ă.
În figura 7 este ilustrat jocul FlappyBird .
Fig.7 Ilustrare joc FlappyBird, sursă imagine [23]
14
Cerințele utilizatorului în dezvoltarea sistem ului Smart Bird sunt după cum urmează :
– Pentru dezvoltarea sistemului să se utilizeze un instrument software care să ofere o
vizualizare grafică cât mai bună, astfel î ncât toate acțiunile să poată fi înțelese cu
ușurință.
– Folosirea sistemului să fie una ușoară, să nu existe etape complexe în rularea lui precum
scrierea unor comenzi.
– Deoarece ideea ce stă la baza acestui sistem este jocul FlappyBird se dorește o
implemen tare cât mai fidela atât din punct de vedere grafic cât și logic.
– Detaliere parte grafică : se dorește ca pasarea tipică din jocul original să fie înlocuită cu
un model cât mai realist, de asemenea să se realizeze o altă grafică a obstacolelor
(țevilor) ia r fundalul rămâne la libera alegere a proiectantului.
– Detaliere parte logică : în jocul original acțiunile păsării erau controlate de utilizator, în
această situație se dorește ca acțiunile să fie controlate de algoritmul de tip
Reinforcement Learning.
– Pentru a ridica gradul de dificultate în ceea ce privește gradul de învățare se dorește ca
poziția obstacolelor în scenă să fie una random.
– Toate detaliile privind starea păsării să fie stocate într -un fișier, de preferat un fișier de
tip cvs.
– Și cel mai imp ortant aspect pasărea nu trebuie să dispună de un set de date inițiale care
să-i faciliteze procesul de învățare.
Cerințele proiectantului în dezvoltarea sistemului Smart Bird sunt după cum urmează:
– Pentru implementarea sistemului se va folosi algoritmul Q -Learning , această alegere
este justificată de faptul că s -a dorit ca agentul să fie capabil să învețe pe baza propriilor
acțiuni, și nu pe baza unor cunoștințe transmise de la experții din domeniu (în cazul
învățării inductive) sau pe baza unei funcții șablon – set de exemple (în cazul învățării
supervizate).
– Pentru a îndeplinii atât criteriul privind grafica dar și cel privind utilizarea sistemului se
va folosi ca mediu de dezvoltare Unity.
– Pentru scrierea algoritmului se va folosi limbajul de programare C# cu ajutorul
instrumentului software Visual Studio Com munity 2017.
– Pasărea va fi reprezentată de o imagine de tip png iar obstacolele (țevile) vor fi realizare
cu ajutorul instrumentului Paint3D.
– Stocarea datelor se va face într -un format de tip cvs.
– Logica sistemului va fi asemănătoare ce cea a jocului origi nal însă adaptată conform
algoritmului de tip Q -Learning. În figura X observăm logica care se va afla în spatele
sistemului.
– În figura 8 este prezentată schema bloc a logicii ce se află în spatele jocului dezvoltat.
Se observă c ă folosirea acestuia va fi u na simplă, fiind necesară apăsarea unui singur
buton de play pentru rularea sistemului.
15
– Agentul se află în primă fază într -o stare în care nu realizează nicio acțiune, ca mai apoi
să realizeze salturi. Rezultatul salturilor este reprezentat de starea agent ului, în sensul
că în cazul în care agentul atinge fie baza fie un obstacol acesta moare, primind o
recompensă de -1000, iar în caz contrar daca în urma salturilor acesta depășește
obstacolele el primește o recompensă de 1 incrementând astfel și scorul cu o unitate.
Fig.8 Schemă funcționare Smart Bird
16
2.2 Arhitectura sistemului
Arhitectura sistemului este una relativ simpl ă, fiind formată din dou ă componente
principale, și anume :
a) Modulul grafic
b) Modulul logic
Cele două module sunt conectate prin intermediul tehnicilor specifice învățării automate
și anume ramura de Reinforcement Learning respectiv algoritmul Q -Learning. Acest aspect este
evidențiat și în figura 9.
Fig.9 Arhitectura sistemului Smart Bird
Modulul grafic are rolul de a dispune eleme ntele în scenă și de a le seta anumite
proprietăți. Aceste elemente sunt reprezentate de :
– Funda l
– Bază (sol)
– Obstacole
– Agent
– Alte elemente grafice care au diverse roluri
Modulul logic are rolul de a oferi dinamică elementelor din scenă, acest lucru este realizat
cu ajutorul scripturilor. Exemple de astfel de scripturi :
– Agent
– Direcție Deplasare
– Multiplicare obstacol
– QLController
– Incrementare Scor, etc.
17
CAPITOLUL 3
IMPLEMENTARE A SISTEMULUI SMART BIRD
3.1 Sistemul de învățare automată de tip Reinforcement Learning
În cadrul acestui capitol sunt puse în evidență etapele parcurse în realizarea sistemului
de învățare automată de tip Reinforcement Learning denumit simbolic Smart Bird.
Sunt detaliate atât etapele necesare realizării modulului grafic dar și cele privind
implementarea modulului logic
a) Fundalul
Fundalul este un element static, fiind caracterizat doar de poziționarea lui în spațiul de
lucru. Acesta este ilustrat în figura 10.
Fig.10 Fundal joc
Această imagine a fost realizată cu ajutorul instrumentului Adobe Flash, iar singurele
elemente preluate au fost copacul [18] și soarele [19]. Restul elementelor au fost realizate cu
ajutorul instrumentelor puse la dispoziție de Adobe Flash. [11]
18
b) Baza
După cum se poate observa pe fundal , figura 1 1, baza este evidențiată printr -un
dreptunghi de culoare verde, acel dreptunghi re prezintă de fapt un Box Collider 2D, care a fost
dimensionat conform nevoilor noastre. Aces t element are rolul de a detecta interacțiunea
agentului cu baza (solul ).
Fig.11 Ilustrare bază
De asemenea se poate observa în figura 1 1, că elementul bază, este caracterizat și de un
script , detaliat în figura 1 2, cu numele Stare Agent, care are rolul de a determina dac ă agentul
a atins sau nu baza, lucru posibil cu ajutorul Box Collider -ului 2D.
Fig.12 Codul asociat bazei
19
Cu ajutorul unui Game Object denumit Direcție Deplasare asociem elementului Bază
un script Direcție care stabilește direcția și viteza cu care aceasta se va deplasa , conform figurii
13.
Fig.13 Codul scriptului Direcție
c) Obstacol
Elementul obstacol este format din doua componente cilindrice , ilustrate în figura 1 4,
acestea au fost realizate cu ajutorul Paint 3D.
Fig.14 Ilustrare obstacol
După cum se poate observa și în figura 1 4, acest element are asociat un script cu numele
Obstacol , detaliat în figura 1 5, acesta având rolul de defini cele două elemente care vor forma
în final obstacolul dar și scriptul de incrementare a scorului.
20
Fig.15 Script Obstacol
Cele două elemente care formează obstacolul sunt caracterizat e atât de un Box Collider
2D,evidențiat în figura 1 6, care are rolul de stabili dacă agentul a atins obstacolul fie în partea
superioară fie în cea inferioară , dar și de scriptul Stare Agent, prezentat în figura 1 2.
Fig.16 Ilustrare proprietăți asociate e lementului inferior
Anterior am menționat faptul că elementului Obstacol îi este asociat și scriptul de
incrementare a scorului.
Acest lucru este posibil prin intermediul unui Box Collider 2D , evidențiat în figura 1 7,
care atunci când este declanșat apele ază scriptul Incrementare Scor, detaliat în figura 1 8, care
are rolul de a incrementa variabila scor cu o unitate.
21
Fig.17 Evidențiere Box Collider 2D – incrementare scor
Fig.18 Script Incrementare Scor
Odată stabilite aceste elemente statice este necesar să oferim acestora o dinamic ă (mișcare).
Pentru a realiza acest lucru am creat un Game Object denumit Dinamic ă Mediu, care include la
rândul sau alte două Game Object și anume Dinamic ă Obstacol și Dinamic ă Bază.
Scopul acestora este după cum u rmează :
1. Dinamic ă Obstacol
Acest element conține scriptul Multiplicare Obstacol , figura 20, care are rolul de a
multiplica obstacolul definit anterior, de a stabili direcția în care se vor deplasa prin apelarea
script -ului Direc ție Deplasare de -a stabili distanța dintre obiectele multiplicate și de a apela
scriptul Scor. Elementele multiplicate sunt ilustrate în figura 1 9.
22
Fig.19 Obstacole multiplicate
Fig.20 Script Multiplicare Obstacol
2. Dinamic ă Bază
Acest element conține scriptul Dinamic ă Bază, detaliat în figura 2 1, având rolul de a
oferi bazei dinamică, astfel se creează senzația de deplasare de la dreapta la stânga a
obstacolelor multiplicate anterior. Ca și în cazul dinamicii obstacolelor, se va folosi scriptul
Direc ție Deplasa re, detaliat în figura 1 3.
23
Fig.21 Script Dinamică Bază
d) Eliminare obstacol
Multiplicarea obstacolelor aduce cu sine o problemă, și anume, odată cu creșterea
numărului acestor, derularea lor și implicit a bazei devine greoaie. O soluție este reprezentată
de eliminarea obstacolelor care au fost depășite de către agent.
Acest lucru este posibil prin crearea unui obiect, Eliminare Obstacol, care cuprinde
următoarele elemente RigidBody 2D, Box Collider 2D pus în evidență în figura 22 și un script
denumit Eliminare Obstacol , explicat în figura 2 3.
Fig.22 Evidențiere BoxCollider 2D
Box Collider – ul 2D poate fi observat în partea stângă, fiind marcat pr intr-un dreptunghi
de culoare verde. Atunci când obiectele ajung în partea stângă a scenei este de la sine înțeles
faptul ca agentul a trecut de acele obiecte, iar când acestea ating Box Collid er-ul 2D ele sunt
eliminate.
24
Acest lucru este posibil cu ajuto rul scriptului Eliminare Obstacol, conform căruia
elementele care au un anumit tag și care declanșează Box Collider -ul 2D sunt eliminate.
Fig.23 Script Eliminare Obstacol
e) Agent
Agentul este reprezentat de pasarea ce se poate vedea în figura 2 4, acesta e ste caracterizat
de elementele :
– Box Collider 2D, este reprezentat de pătratul format în jurul agentului, acesta are rolul
de a detecta fiecare interacțiune a agentului cu mediul, fie solul sau obstacolul.
– Scriptul Agent detaliat în figura 2 5.
Fig.24 Ilustrare agent, sursă imagine [20]
25
Fig.25 Script Agent
În codul de mai sus este stabilită viteza de deplasare a agentului, starea inițial ă a acestuia
și anume că este în viață, și tipul de controller folosit.
Se poate observa că avem doua tipuri de controller primul tip Input Controller are rol ul
de a permite jucătorului să dirijeze acțiunile agentului iar cel de -al doilea QL Controller
reprezintă partea de Q –Learning care oferă posibilitatea agentului de a învăța singur, pe baza
propriilor acțiuni.
f) Implementarea algoritmului Q – Learning
Impl ementarea acestui algoritm se face conform [10]:
controler Q -Learning(S, A, γ, α)
Intrări
S este setul de st ări
A este setul de ac țiuni
γ reducerea
α este m ărimea "pasului"
Variabile Local e
real array Q[S, A]
starea anterioar ă s
acțiunea anterioar ă a
inițializăm arbitrar Q[S, A]
observ ăm starea curent ă s
Repetă
select ăm și realiz ăm o acțiune a
observ ăm recompensa r și starea s'
Q[s, a] ← Q[s, a] + α (r + γ max a' Q[s', a'] − Q[s, a])
s ← s'
Până când terminare
26
Pentru îmbunătățirea procesului de învățare este necesară discretizarea spațiului stărilor.
Aceasta a fost realizată ținând cont de următorii parametrii :
1. Distanța vertical ă (figura 2 6)
2. Distanța orizontală (figura 2 6)
3. Starea agentului daca trăiește sau nu
Fig.26 Evidențiere distanțe
Fig.27 Script distanțe
27
Acțiuni pe care agentul le poate realiza sunt în număr de două:
1. Sare
2. Nu face nimic
Fig.28 Script acțiuni posibile
Recompense le primite de agent în urma acțiunilor sunt urm ătoarele :
1. +1 Dacă agentul este în viață
2. -1000 Dacă agentul moare
Fig.29 Script valoare recompensă
Fig.30 Script alocare recompensă
28
Implementarea algoritmului Q –Learning are la bază ecuația (4):
Q[s, a] = (1 − α) Q[s,a] + α(r + γ max a' Q[s', a']) (4)
Inițial au fost setate valorile privind procentul învățare, cel de atenuare și cel de
explorare , conform figurii 3 1 [21].
Fig.31 Script setare proprietăți Q -Learning
În continuare algoritmul a fost implementat ținând cont de recomandările întâlnite în
cartea Artificial Intelligence for Games Second Edition de Ian Millington și Jhon Funge.
În acest caz agentul trebuie să înțeleagă problema, și anume, în ce stare se afla și ce
acțiune poate să realizeze. Conform pseudo -codului de mai jos [4] :
class ReinforcementProblem:
# Choose a random starting state for the problem
def getRandomState()
# Gets the available actions for the given state
def getAvailableActions(state)
# Takes the given action and state, and returns
# a pair consisting of the reward and the new state.
def takeAction(state, action)
29
În plus valorile Q sunt stocate într -o structură de date care este indexată atât de stare cât
și de acțiune. Exemplu [4] :
class QValueStore:
def getQValue(state, action)
def getBestAction(state)
def storeQValue(state, action, value)
Fig.32 Script stocare valoarea Q
Funcția GetBestAction are rolul de a returna acțiunea cu cea mai mare valoare Q pentru
starea dată.
Q-Learning poate rula prin toate stările și acțiunile posibile de mai multe ori, de aceea
este indicată folosirea unui vector indexat de stare.
Fig.33 Script vector indexat
30
Odată definite aceste aspecte, conform cărții menționate anterior, un sistem Q -Learning
are în general următoarea structură [4] :
Holds the store for Q -values, we use this to make
# decisions based on the learning
store = new QValueStore()
# Updates the store by investigating the problem
def QLearning(problem, iterations, alpha, gamma, rho, nu):
# Get a starting state
state = problem.getRandomState()
# Repeat a number of times
for i in 0..iterations:
# Pick a new state every once in a while
if random() < nu: state = problem.getRandomState()
# Get the list of available actions
actions = problem.getAvailableAct ions(state)
# Should we use a random action this time?
if random() < rho:
action = oneOf(actions)
# Otherwise pick the best action
else:
action = store.getBestAction(state)
# Carry out the action and retrieve the reward and
# new state
reward, newState = problem.takeAction(state, action)
# Get the current q from the store
Q = store.getQValue(state, action)
# Get the q of the best action from the new state
maxQ = store.getQValue(newState, store.getBestAction(newSt ate))
# Perform the q learning
Q = (1 – alpha)*Q+ alpha * (reward + gamma * maxQ)
# Store the new Q -value
store.storeQValue(state, action, Q)
# And update the state
state = newState
31
Fig.34 Script implementare Q – Learning
Fig.35 Script explorare mediu
32
g) Stocare date
Pentru a se menține o evidență a acțiunilor și stărilor agentului, sunt stocate valori ale
unor parametrii într-un fișier de tip cvs, conform figurilor 35 și 36 .
Fig.36 Script stocare date
Fig.37 Script date ce vor fi stocate
h) GameController
Acest script are rolul de a gestiona fluxul jocului , prin controlarea stării jocului și prin
repornirea acestuia atunci când este necesar. Este bazat pe modelul singleton fiind astfel
persistent la fiecare reîncărcare a scenelor. Totodată are rolul de a stoca date despre starea
agentului și de a calcula scorul maxim obținut de acesta , conform figurii 37.
Fig.38 Ilustrare proprietăți Game Controler
33
3.2 Instrumente software folosite
Pentru implementarea sistemului Smart Bird au fost folosite următoarele instrumente
software :
a) Unity
Pentru realizarea parții grafice a acestui sistem a fost folosit Unity, acesta este un
instrument software care poate fi folosit pe mai multe platforme.
Acesta este utilizat pentru a crea jocuri fie 2D fie 3D, realitate virtuala, realitate
augmentată dar și simulări sau alte experiențe.
Acest motor de dezvoltare are aplicabilitate nu doar in domeniul jocurilor video, dar și
în domenii precum film, inginerie, automobile, arhitectură sau construcții. [ 22]
Elementele principale pe care le -am folosit sunt rep rezentate de : Main Camera ,
Rigidbody 2D , Box Collider 2D , Sprite Render , Canvas – Text, Prefabs , Sprites , Script -uri.
b) Visual Studio Community 2017
Printre elementele enumerate anterior s -au numărat și scripturile, pentru crearea acestora
este necesar un alt instrument software, și anume Visual Studio.
Acest instrument software permite crearea unor aplicații de tip ASP.Net, Servicii Web
XML, aplicații desktop sau mobile.
Cu ajutorul acestui mediul integrat a fost posibilă creare unor scripturi î n limbajul de
programare C# și totodată testarea lor, astfel încât a fost posibilă verificarea corectitudinii
acestora.
Visual Studio permite atașarea acestor scripturi la Unity, însă numai după ce au fost
corectate toate erorile.
c) Paint 3D
Pentru realizar ea unor elemente grafice precum obstacolele sau cifrele folosite pentru
afișarea scorului, s -a folosit instrumentul software Paint 3D.
Acesta a permis realizarea unor imagini cu formatul png care aveau fundalul transparent.
d) Adobe Flash
Pentru realizarea i maginii de fundal a fost folosit instrumentul Adobe Flash, acesta
permițând suprapunerea unor scene, redând astfel un aspect realistic și totodată a simplificat
procesul de creare a acestei imagini.
e) Excel
Acest instrument software a fost folosit pentru a stoca date privind starea agentului.
34
3.3 Experimente
După implementarea sistemului de învățare automată cu ajutorul instrumentelor
software prezentate anterior, s -a realizat o simulare a comportamentului agentului în mediul
dezvoltat anterior, obținându -se valorile următor ilor parametrii :
– Număr iterație
– Procent învățare
– Procent Explorare
– Procent atenuare
– Precizie
– Recompensă viață
– Recompensă moarte
– Timpul de început
– Durata
– Scor final
Se observă faptul că agentul începe să învețe după 286 de iterații, astfel încât iterația
numărul 287 reprezintă p rima încercare reușită de a trece cu succes de obstacol, reușind astfel
să incrementeze scorul cu o unitate.
După ace astă etapă procesul devine unul mai ușor, astfel încât la iterația 479 reușește să
realizeze cel mai mare scor și anume 190.
Valorile parametrilor enumerați anterior au fost stocate într -un fișier de tip cvs, ele putând
fi observate în figurile : 39-48.
Fig.39 Date comportament agent
35
Fig.40 Date comportament agent
Fig.41 Date comportament agent
Fig.42 Date comportament agent
36
Fig.43 Date comportament agent
Fig.44 Date comportament agent
Fig.45 Date comportament agent
37
Fig.46 Date comportament agent
Fig.47 Date comportament agent
Fig.48 Date comportament agent
38
CAPITOLUL 4
CONCLUZI I
Învățarea automată a cunoscut o creștere importantă în ultimii ani, acest lucru
datorându -se faptului că sistemele computaționale sunt accesibile din punct de vedere al
prețului dar și pentru că există o cantitate impresionată de date pe care o putem folosi în
antrenarea modelelor.
Astfel că acest tip de învățare are aplicabilitate în d omenii din ce în ce mai variate, unele
implement ând cu succes metodele învățării autom ate, pe când alte aflându -se fie în că în stadiul
de simulare fie în cel de cercetare. Un lucru este cert, majoritatea companiilor sunt interesate să
faciliteze procesul de producție prin folosirea unor metode prezentate anterior.
Avantajele sunt unele maj ore, deoarece spre deosebire de oameni acești algoritmi nu
obosesc și sunt mult mai preciși.
Așa cum am prezentat în capitolele anterioare învățarea automată are rolul de -a oferi
unui calculator capacitatea de a realiza o anumită sarcină fără a fi progra mat în mod explicit .
Această tehnică s-a dorit a fi implementat ă și în cazul aplicației realizate și anume, Smart
Bird, unde am folosit ramura de Reinforcement Learning a învățării automate, mai precis
algoritmul Q -Learning, unde agentul (pasărea) nu a di spus de un set de date inițiale, care să
faciliteze procesul său de învățare și nici de instrucțiuni explicite în ceea ce privește acțiunile
pe care agentul ar trebui să le realizeze.
Sistemul de tip Reinforcement Learning, Smart Bird, a fost implementat cu succes prin
folosirea algoritmului Q -Learning adaptat în funcție de ideea de bază de la care s -a plecat, și
anume jocul Flappy Bird, astfel încât agentul (pasărea) nu depinde de intrările oferite de către
un jucător din exterior ci în această situație el este capabil să învețe din propriile acțiuni, pe
baza recompenselor primi te.
Cu ajutorul instrumentului software Unity s -a putut oferi o vizualizare bună a acțiunilor
și a evoluției agentului.
De asemenea s -au stocat date privind evoluția agentului pe întreaga perioadă în care
acesta învață, cu scopul de a vizualiza mai ușor punctele acumulate, recompensele dar și datele
setate inițial privind procentul de învățare, de explorare și de atenuare.
Îmbunătățirile care se pot efectua asupra acestui sistem pot fi atât de natură grafică, se
poate modifica aspectul conform cerințel or utilizatorului prin utilizare instrumentelor puse la
dispoziție de instrumentul software Unity, dar și de natură logică în sensul că se poate
îmbunătății algoritmul de învățare fie prin modificarea valorilor asociate celor trei procente de
învățare, exp lorare sau atenuare, fie prin optimizarea algoritmului.
39
ABSTRACT
Within this project the main theme was represented by Machine Learning , more
accurate Reinforcement Learning, and the way this is implemented into a real project.
We define machine learning like a method used by computers to do a specific task
effectively without using an algorithm with specific instructions.
In this project it was implemented successfully the system named Smart Bird, the main
idea on which is base d is the game Flappy Bird.
Flappy Bird is a simple game in which the bird must go through some obstacle
represented by pipes and with every pipe passed the score is incremented with a point, the only
actions that the bird can do are jumping or nothing, thi s actions are representing inputs from an
outsider player.
Starting from this idea the project Smart Bird was implemented by using Reinforcement
Learning more precisely Q -Learning. The Q -Learning is an algorithm whose goal is to learn a
policy which tells the agent what actions to take.
In the case of Smart Bird the concept remains the same as in the case of Flappy Bird,
but the only thing that is different is that the actions aren’t anymore represented by inputs from
an outsider player, they are being controlled now by the Q -Learning algorithm.
The Smart Bird system was implemented using different software products like Unity,
Visual Studio Community 2017, Adobe Flash and Paint 3D.
The algorithm of Q -Learning was developed by using the book Artificial Int elligence
for Games Second Edition, in this the algorithm is explained rigorously .
The main idea of algorithm implemented on this case, Smart Bird, is that the agent that
is represented by the bird can make two actions to jump or to do nothing, when he jum ps if it
touches the ground or one of the obstacles, represented by the pipes, he dies, and if it doesn’t
touches the ground or one of the obstacle that means that he passed successfully the obstacles.
In this case the score is incremented with one unit.
An important thing to highlight is that the agent has every state reward ed, if the agent is
alive, that means that he didn’t touched any obstacle or ground, he receive a reward of 1 if the
agent dies, that means that he touched an obstacle or ground, he re ceive a reward of -1000.
After the system has been implemented both graphically and logically, the agent was
left to learn how to get through the pipes , this being possible through the rewards received from
the actions taken by the agent in the environment .
For a better visualization of the learning process there was some data, like learning rate,
discount rate, exploration rate, re wards, time and score, stocked in a excel file.
40
BIBLIOGRAFIE
1. Arel I, Liu C, Urbanik T, Kohls A.G Reinforcement learning -based multi -agent system
for network traffic signal control , Articol publicat În IET Intelligent Transport Systems,
14 iulie 2009.
2. Cristei M, Marin G, Stelea V. Prezicerea performan țelor studen ților folosind învă țarea
automată (Machine Learning) , Universitatea de Stat din Moldova , Studia Universitatis
Moldaviae, 2017, nr.2(102), Seria Stiințe exacte și economice pag.42 -49.
3. Levine S, Finn C, Darrell T, Abbeel P End-to-End Training of Deep Visu almotor
Policies, University of California, Division of Computer Science, Journal of Machine
Learning Research 17 (2016) 1 -40
4. Millington I, Funge J. Artificial Intelligence for Games Second Edition , Editura CRC
Press, 6 august 2009.
5. Mnih V, Kavukcuoglu K , Silver D, Rusu A.A, Veness J, Bellemare M.G , Graves A ,
Riedmiller M , Fidjeland A.K , Ostrovski G, Petersen S, Beattie C , Sadik A ,
Antonoglou I , King H , Kumaran D , Wierstra D , Legg S & Hassabis D , Human -level
control through deep reinforcement learning , Macmi llan Publishers Limited, 2015.
6. Mnih V, Kavukcuoglu K, Silver D, Graves A, Antonoglu I, Weirstra D, Riedmiller M
Playing Atari with Deep Reinforcement Learning
7. Oprea M. Inteligență artificială – Notițe de c urs, Universitatea Petrol Gaze Ploiești, An
universitar 2018 -2019
8. Oprea M. Învățarea inductiv ă a regulilor, Revista Informatic ă Economic ă, nr. 1
(17)/2001
9. Oprea M. Programare Orientată pe obiecte -Notițe de curs, Universitatea Petrol Gaze
Ploiești, An universitar 2017 -2018.
10. Poole L.D, Mackworth A.K Artificial Intelligence Cambridge , Carte publicată în
Cambridge University Press, New York, 2010.
11. Popescu M. Sisteme Multimedia – Îndrumar de Laborator , Universitatea Petrol Gaze
Ploiești, A n universitar 2018 -2019
12. Zheng G , Zhang F , Zheng Z, Xiang Y,Yuan N.J , Xie X, Li Z DRN: A Deep
Reinforcement Learning Framework for News Recommendation , Aprilie 2018, Lyon
Franța.
41
WEB OGRAFIE
13. https://en.wikipedia.org/wiki/Reinforc ement_learning Data accesării :11.06.2019
14. https://webcache.googleusercontent.com/search?q=cache:8EWb22P5w5sJ:https://profs.info.ua
ic.ro/~ ipistol/ia0910/res/IA.pdf+&cd=4&hl=ro&ct=clnk&gl=ro Data accesării :18.06.2019
15. https://towardsdatascience.com/ introduction -to-various -reinforcement -learning -algorithms -i-
q-learning -sarsa -dqn-ddpg -72a5e0cb6287 Data accesării :20.10.2018
16. https://towardsda tascience.com/applications -of-reinforcement -learning -in-real-world –
1a94955bcd12 Data accesării :11.06.2019
17. https://www.youtube.com/watch?time_continue=97&v=Q4bMcUk6pcw
Data accesării :11.06.2019
18. https://www.google.com/search?q=png+tree&source=lnms& tbm=isch&sa=X&ved=0ahUKE
wjZjMmrnebiAhVMJZoKHTKfA2sQ_AUIECgB&biw=662&bih=738&dpr=1.25#imgrc=I0zj
12OnpDkGBM: Data accesării :17.04.2019
19. https://www.google.com/search?q=png+sun&source=lnms&tbm=isch&sa=X&ved=0ahUKE
wiCrNuen –
biAhVRxMQBHflIBC8Q_AUIECgB&biw=1536&bih=754#imgrc=5ETigoNlm5YfNM:
Data accesării :17.04.2019
20. https://www.google.ro/search?hl=ro&q=colorful+bird+flying+png&tbm=isch&tbs=simg:CA
QSkwE JfIjAbr8IpuoahwELEKjU2AQaAAwLELCMpwgaYgpgCAMSKLsC4wbPEroC5AbO
EuIGqwrGBq8C8ymtItEo0CiuIvQpiSSyN90h9SkaMIOXa4OtaO9Q7TqgBGeCl0Wvm –
kSHQK5OxuyDHpzc -4wJybjitrccc9VH0pCziAuRCAEDAsQjq7 –
CBoKCggIARIE7x8hkAw&sa=X&ved=0ahUKEwidotCzyebiAhVQtIsKHU6rCdQQwg4IKy
gA&biw=1536 &bih=754&dpr=1.25#imgdii= -yxJDzjh96J8YM:&imgrc=VQplPrAi8NlxzM:
Data accesării :25.03.2019
21. http://sarvagyavaish.github.io/FlappyBirdRL/ Data accesării :17.12.2018
22. https://en.wikipedia.org/wiki/Unity_(game_engine) Data accesării :17.06.2019
23. https://www.g oogle.com/search?q=the+flappy+bird+game&tbm=isch&tbs=rimg:CfFtdROlK2
b4IjioX5UJZXbdOa73UAt6c0s4RTriEnippois2dP6KKSDxfJniGZNAkG8WZST -AfeT –
pPjYjrGCtkUyoSCahflQlldt05EeGcnFF0xH4DKhIJrvdQC3pzSzgRyoPU7I0ioi8qEglFOuISe
KmmiBGPYI9wADDItSoSCazZ0_1oopIPFEZ8PXx7zp6dHK hIJ8meIZk0CQbwRX1 –
5HNusfJAqEglZlJP4B95P6hFibA0A1Uuj7SoSCU -NiOsYK2RTEaH9U3E3X –
mx&tbo=u&sa=X&ved=2ahUKEwix3oTP4t7iAhUxMuwKHREiBycQ9C96BAgBEBs&biw=
1536&bih=754&dpr=1.25#imgdii=AojplAPxYIeJaM:&imgrc=RTriEnippoh4CM:
Data accesării :25.05.2019
24. https://www.linkedin.com/pulse/deep -reinforcement -learning -petroleum -reservoir -ruslan –
miftakhov Data accesării :03.07.2018
25. https://medium.com/sciforce/machine -learning -in-agriculture -applications -and-techniques –
6ab501f4d1b5 Data accesării :03.07.2018
42
ANEXĂ
Script Q-Learning
using System;
using System.Text;
using System.Linq;
using System.Collections.Generic;
using UnityEngine;
namespace QL{
[Serializable]
public class ProprietatiQlearning{
// Valorile initiale sunt definite precum http://sarvagyava ish.github.io/FlappyBirdRL/.
// alpha
[Range(0, 1)]
public float procentInvatare = 0.7f;
// gamma
[Range(0, 1)]
public float procentAtenuare = 1.0f;
// epsilon
[Range(0, 1)]
public float procentExplorare = 0.0f;
}
public interface IQValueStore<Stare, Actiune>{
// Returneaza valoarea q asociata tupluiu stare -actiune
// Returneaza 0.0f daca actiunea nu a fost inregistrata inc a in starea mentionata
float PreluareValoareQ(Stare stare, Actiune actiune);
// Preia cea mai buna actiune disponibila
KeyValuePair<Actiune, float> GetBestAction(Stare stare, List<Actiune> actiuni);
// Actualizeaza s au seteaza valoarea Q pentru setul stare -actiune
void SetareValoareQ(Stare stare, Actiune actiune, float ValoareaQ); }
43
// Referinta: Artificial Intelligence for Games 2nd Edition
// Ian Millington, John Funge
// Chapter 7.7.4
[Serializable]
public class QValueStore<Stare, Actiune> : IQValueStore<Stare, Actiune> where Stare :
class where Actiune : clas s{
// La recomandarea Millingotn and Funge in 7.7.5, se foloseste un vector
private Dictionary<Stare, Dictio nary<Actiune, float>> store = new Dictionary<Stare,
Dictionary<Actiune, float>>();
public float PreluareValoareQ(Stare stare, Actiune actiune){
// 0 inseamna valoarea initiala
float ValoareaQ = 0.0f;
Dictionary<Actiune, float> actiuni = null;
if (store.TryGetValue(stare, out actiuni)){
actiuni.TryGetValue(actiune, out ValoareaQ);
}
return ValoareaQ;
}
public KeyValuePair<Actiune, float> GetBestAction(Stare stare, List<Actiune> actiuni){
KeyValuePair<Actiune, float>? best = null;
Dictionary<Actiune, float>actiuniInregistrate = null;
if (store.TryGetValue(stare, out actiuniInr egistrate)) {
// Se repeta toate actiunile posibile, nu doar cele inregistrate
foreach (Actiune actiune in actiuni){
// 0 inseamna valoarea initiala
float ValoareaQ = 0.0f;
actiuniInregistrate.TryGetValue(actiune, out ValoareaQ);
if (best == null || ValoareaQ > best.Value.Value) {
//Deoarece KeyValuePair se modifica este necesara crearea unuia nou
best = new KeyValuePair<Actiune, float>(actiune, ValoareaQ);
}
44
}
}
if (best == null){
best = new KeyValuePair<Actiune, float>((actiuni.Count > 0 ? actiuni[0] : null), 0.0f);
}
return best.Value;
}
public void SetareValoareQ(Stare stare, Actiune actiune, float ValoareaQ){
if (!store.ContainsKey(stare)){
store.Add(stare, new Dictionary<Actiune, float>());
}
Dictionary<Actiune, float> actiuni = store[stare];
if (!actiuni.ContainsKey(actiune)){
actiuni.Add(actiune, 0.0f);
}
actiuni[actiune] = ValoareaQ;
}
public override string ToString(){
StringBuilder builder = new StringBuilder();
foreach (KeyValuePair<Stare, Dictionary<Actiune, float>> stare in store){
foreach (KeyValuePair<Actiune, float> actiune in stare .Value) {
builder.Append(stare.Key.ToString() + " " + actiune.Key.ToString() + ": " +
actiune.Value + " \n");
}
}
return builder.ToString();
}
}
// Referinta: Artificial Intelligence for Games 2nd Edition
// Ian Millington, John Funge
// Chapter 7.7.
45
public class CoalescedQValueStore<Stare, Actiune> : IQValueStore<Stare, Actiune> where
Stare : class where Actiune : class{
private class StateAction Pair{
public StateActionPair(Stare stare, Actiune actiune) {
Stare = stare;
Actiune = actiune;
}
public Stare Stare { get; set; }
public Actiune Actiune { get; set; }
public override bool Equals(object other) {
StateActionPair rhs = other as StateActionPair;
if (rhs != null)
{
return Stare.Equals(rhs.Stare) && Actiune.Equals(rhs.Actiune);
}
return false;
}
public override int GetHashCode(){
// Referinta: http://stackoverflow.com/questions/11795104/is -the-hashcode –
function -generated -by-eclipse -any-good
const int prime = 31;
int hashCode = 1;
hashCode = prime * hashCode + Stare.GetHashCode();
hashCode = prime * hashCode + Actiune.GetHashCode();
return hashCode;
}
}
//In aceasta situatie tuplulu stare actiune este vazut ca o enittate
private Dictionary<StateActionPair, float> store = new Dictionary<StateActionPair,
float>();
public float PreluareValoareQ(Stare stare, Actiune actiune) {
// 0 ins eamna valoarea initiala
float ValoareaQ = 0.0f;
46
store.TryGetValue(new StateActionPair(stare, actiune), out ValoareaQ);
return ValoareaQ;
}
public KeyValuePair<Actiune, float> GetBestAction(Stare stare, Lis t<Actiune> actiuni {
KeyValuePair<Actiune, float>? best = null;
// Se repeta toate actiunile posibile, nu doar cele inregistrate
foreach (Actiune actiune in actiuni) {
// 0 inseamna valoarea intiala
float ValoareaQ = 0.0f;
store.TryGetValue(new StateActionPair(stare, actiune), out ValoareaQ);
if (best == null || ValoareaQ > best.Value.Value) {
//Deoarece KeyValuePair se modific a este necesara crearea unuia nou
best = new KeyValuePair<Actiune, float>(actiune, ValoareaQ);
}
}
if (best == null) {
best = new KeyValuePair<Actiune, float>(( actiuni.Count > 0 ? actiuni[0] : null), 0.0f);
}
return best.Value;
}
public void SetareValoareQ(Stare stare, Actiune actiune, float ValoareaQ) {
StateActionPair key = new StateActionPair(stare, actiune);
if (!store.ContainsKey(key)) {
store.Add(key, 0.0f);
}
store[key] = ValoareaQ;
}
}
// Referinta: Artificial Intelligence for Games 2nd Edition
// Ian Millington, John Funge
// Chapter 7.7.4
47
public interface ReinforcementProblem<Stare, Actiune> where Stare : class where Actiune :
class{
List<Actiune> GetAvailableActions(Stare stare);
}
public class NullReinforcementProblem<Stare, Actiune> : ReinforcementProblem<Stare,
Actiune> where Stare : class where Actiune : class{
private static Actiune[] DEFAULT = { default(Actiune) };
private static List<Actiune> EMPTY = new List<Actiune>(DEFAULT);
public List<Actiune> GetAvaila bleActions(Stare stare) {
return EMPTY;
}
}
// Referinta: Artificial Intelligence for Games 2nd Edition
// Ian Millington, John Funge
// Chapter 7.7.3
[Serializable]
public class QLearning<Stare, Actiune> w here Stare : class where Actiune : class{
private IQValueStore<Stare, Actiune> store = new CoalescedQValueStore<Stare,
Actiune>();
public QLearning() :
this(new NullReinforcementProblem<Stare, Actiune>()){}
public QLearning( ReinforcementProblem<Stare, Actiune> problem) :
this(problem, new ProprietatiQlearning()){}
public QLearning(ReinforcementProblem<Stare, Actiune> problem, ProprietatiQlearning
proprietati) {
this.Proprietati = proprietati;
this.Problem = problem;
}
public ProprietatiQlearning Proprietati { get; set; }
public ReinforcementProblem<Stare, Actiune> Problem { get; set; }
public void Update(Stare stare, Actiune actiune, float recompensa, Stare stareNoua) {
Update(stare, actiune, recompensa, stareNoua, Problem.GetAvailableActions(stareNoua));
}
48
public void Update(Stare stare, Actiune actiune, float recompensa, Stare stareNoua,
List<Actiune> actiuniNoi) {
float newQValue = Reinforce(stare, actiune, recompensa, stareNoua, actiuniNoi);
store.SetareValoareQ(stare, actiune, newQValue);
}
public Actiune Explore(Stare stare) {
return Explore(stare, Problem.GetAvailableActions(stare));
}
public Actiune Explore(Stare stare, List<Actiune> actiuni) {
Actiune actiune = null;
// In aceasta situatie se activeaza explorarea
if (UnityEngine.Random.Range(0.0f, 1.0f) < Proprietati.procentExplorare) {
actiune = actiuni[UnityEngine.Random.Range(0, actiuni.Count)];
}
else{
actiune = store.GetBestAction(stare, actiuni).Key;
}
return actiune;
}
private float Reinforce(Stare stare, Actiune actiune, float recompensa, Stare stareNoua,
List<Actiune> actiuniNoi) {
float currentQValueForStateAction = store.PreluareValoareQ(stare, actiune);
float currentBestQValueForNewState = store.GetBestAction(stareNoua,
actiuniNoi).Value;
return Mathf.Lerp(
currentQValueForStateAction,(recompensa + (Proprietati.procentAtenuare *
currentBestQValueForNewState)),Proprietati.procentInvatare);
}
public override string ToString(){
return store.ToString();
}
}
} // namespace
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Introducere … … … … 2 [617690] (ID: 617690)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
