Aici sunt prezentate diferențele dintre versiunile selectate și versiunea curentă a paginii.
Both sides previous revision Versiuni anterioare Urmatoarea versiune | Versiuni anterioare | ||
16:teme:haskell-invatare-instrumentala [2016/04/08 17:26] Mihnea Muraru [Changelog] |
16:teme:haskell-invatare-instrumentala [2016/04/18 14:03] (curent) Mihnea Muraru [Haskell: Învățare instrumentală] |
||
---|---|---|---|
Linia 5: | Linia 5: | ||
* Deadline hard: __26.04.2016 ora 23.59__ | * Deadline hard: __26.04.2016 ora 23.59__ | ||
* Data publicării: 07.04.2016 | * Data publicării: 07.04.2016 | ||
- | * Data ultimei modificări: 08.04.2016 | + | * Data ultimei modificări: 18.04.2016 |
* Tema se va încărca pe **[[https://elf.cs.pub.ro/vmchecker/ui/#PP|vmchecker]]** | * Tema se va încărca pe **[[https://elf.cs.pub.ro/vmchecker/ui/#PP|vmchecker]]** | ||
* Data tester-ului: în curând | * Data tester-ului: în curând | ||
Linia 12: | Linia 12: | ||
== Changelog == | == Changelog == | ||
- | * (08.04, 15:20) A fost adăugată în schelet funcția ''updateEstimation'', pentru o modularizare și testabilitate mai bune. | + | * (08.04, 15:20) A fost adăugată în schelet funcția **''updateEstimation''**, pentru o modularizare și testabilitate mai bune. |
+ | * (09.04, 10:10) A fost adăugată o precizare despre **utilitățile stărilor terminale**. | ||
+ | * (10.04, 13:50) A fost publicat **tester-ul**. Fișierul ''readme.txt'' conține instrucțiunile de utilizare. | ||
+ | * (13.04, 22:20) A fost adăugat subtestul ''randomPath.neighbors'', care verifică faptul că două stări adiacente într-o cale sunt într-adevăr **vecine** în mediu. | ||
+ | * (18.04, 08:40) A fost adăugată o precizare pentru acordarea **bonusului** indus pe absența recursivității explicite. | ||
== Obiective == | == Obiective == | ||
Linia 55: | Linia 59: | ||
Se observă că utilitatea stării curente, $V(s)$, este actualizată cu o cantitate **proporțională cu diferența** dintre, pe de o parte, ceea ce obține agentul în starea curentă, $R(s)$, și ceea ce poate obține în medie în viitor, $V(s')$, realizând tranziția către noua stare, și, pe de alta, valoarea actuală a stării curente. Rata de învățare, $\alpha$, determină sensibilitatea procesului de actualizare, iar diminuarea ei în timp conduce la îmbunătățirea estimărilor. | Se observă că utilitatea stării curente, $V(s)$, este actualizată cu o cantitate **proporțională cu diferența** dintre, pe de o parte, ceea ce obține agentul în starea curentă, $R(s)$, și ceea ce poate obține în medie în viitor, $V(s')$, realizând tranziția către noua stare, și, pe de alta, valoarea actuală a stării curente. Rata de învățare, $\alpha$, determină sensibilitatea procesului de actualizare, iar diminuarea ei în timp conduce la îmbunătățirea estimărilor. | ||
+ | |||
+ | Pentru simplitate, se poate considera că utilitățile stărilor **terminale** corespund direct **consecințelor** intrării în acestea. | ||
=== Exemplu de aplicare a algoritmului === | === Exemplu de aplicare a algoritmului === | ||
Vom exemplifica pe prima figură de mai sus, unde toate utilitățile stărilor neterminale sunt inițial 0, câțiva pași de aplicare algoritmului, utilizând câteva căi generate aleator, și evidențiind actualizările de utilitate la fiecare tranziție realizată. | Vom exemplifica pe prima figură de mai sus, unde toate utilitățile stărilor neterminale sunt inițial 0, câțiva pași de aplicare algoritmului, utilizând câteva căi generate aleator, și evidențiind actualizările de utilitate la fiecare tranziție realizată. | ||
+ | |||
+ | Conform observației de la sfârșitul secțiunii anterioare, utilitățile stărilor terminale sunt $V(8) = R(8) = -1$, și $V(12) = R(12) = 1$. | ||
Să începem cu generarea căii 1-2-3-4-8. La fiecare dintre tranzițiile 1-2, 2-3 și 3-4, având forma $s \rightarrow s'$, expresia $R(s) + V(s') - V(s)$ are valoarea 0 și, prin urmare, utilitățile stărilor 1, 2 și 3 rămân 0. În schimb, presupunând o rată de învățare $\alpha = 0.1$, tranziția 4-8 induce actualizarea $V(4) \leftarrow V(4) + \alpha \left[ R(4) + V(8) - V(4) \right] = 0 + 0.1 (-1) = -0.1$. | Să începem cu generarea căii 1-2-3-4-8. La fiecare dintre tranzițiile 1-2, 2-3 și 3-4, având forma $s \rightarrow s'$, expresia $R(s) + V(s') - V(s)$ are valoarea 0 și, prin urmare, utilitățile stărilor 1, 2 și 3 rămân 0. În schimb, presupunând o rată de învățare $\alpha = 0.1$, tranziția 4-8 induce actualizarea $V(4) \leftarrow V(4) + \alpha \left[ R(4) + V(8) - V(4) \right] = 0 + 0.1 (-1) = -0.1$. | ||
Linia 96: | Linia 104: | ||
=== Bonus (20p) === | === Bonus (20p) === | ||
- | Se acordă 10p dacă implementarea **nu** utilizează recursivitate explicită, exploatând la maxim funcționalele și alte funcții de bibliotecă. | + | Se acordă 10p dacă implementarea **nu** utilizează recursivitate explicită, exploatând la maxim funcționalele și alte funcții de bibliotecă. Acest bonus se va acorda **proporțional** cu punctajul obținut pe cerințele standard. |
Se acordă 10p dacă generarea și accesarea fluxului infinit al ratelor scalate de învățare se realizează **eficient**, ca [[https://en.wikipedia.org/wiki/Exponentiation_by_squaring|aici]], utilizând tehnici de **memoizare**, ca [[http://stackoverflow.com/questions/3208258/memoization-in-haskell|aici]]. | Se acordă 10p dacă generarea și accesarea fluxului infinit al ratelor scalate de învățare se realizează **eficient**, ca [[https://en.wikipedia.org/wiki/Exponentiation_by_squaring|aici]], utilizând tehnici de **memoizare**, ca [[http://stackoverflow.com/questions/3208258/memoization-in-haskell|aici]]. | ||
Linia 107: | Linia 115: | ||
== Resurse == | == Resurse == | ||
- | * {{:16:teme:haskell.zip|Arhiva de pornire}} (Doar scheletul, urmează și tester-ul) | + | * {{:16:teme:haskell.zip|Arhiva de pornire}} (Schelet și tester) |
== Referințe == | == Referințe == |