https://github.com/andreip/t2-ml
https://github.com/andreip/t2-ml
Last synced: about 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/andreip/t2-ml
- Owner: andreip
- Created: 2014-04-24T07:47:15.000Z (about 12 years ago)
- Default Branch: master
- Last Pushed: 2014-04-29T22:23:24.000Z (about 12 years ago)
- Last Synced: 2025-02-12T12:57:00.575Z (over 1 year ago)
- Language: Python
- Size: 195 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README
Awesome Lists containing this project
README
# Petre Andrei, 342 C3
== General ==
Fisierul de configurare config.rc este utilizat pentru mai tot ce tine de joc sau de
alegeri din algoritmi sau din module.
Module si cum am implementat:
* toate se gasesc in directorul modules/
* preprocesarea consta in extagerea pozitiilor (coordonate) relative a pradatorilor si a
capcanelor si stocarea lor sub forma de lista [(a,b),(c,d),(e,f),...].
* clasificarea lor apoi se face cu kmeans
- am considerat infinita distanta pentru ceea ce nu vad sau ceea ce a fost anihilat
- intre doua stari, incerc sa obtin distanta minima posibila si fac legatura acelor
coordonate care au combinatia distantei minime
* modulul de recunoastere foloseste ceea ce am folosit si la kmeans, gasirea combinatiei minime
a distantei intre doua stari (care e reprezentat printr-un vector de coordonate)
- e tratat tot timpul cazul de a lua separat capcanele de pradatori, nu sunt tratate
in acelasi timp pe ambele analiza distantelor intre stari
* modulul de learning: am folosit algoritmul SARSA cu politica Eps-greedy, si are de ales
initial mai mult random dintre cele 360 de posibilitati (grade) ale directiei de deplasare
pentru o pozitie data (o stare codificata ca mai sus).
== Fisiere ==
* tests/
- unit tests pentru dezvoltarea initiala cu kmeans care a fost mai plina de bug-uri
* modules/
- toate cele patru module, explicate mai sus
* gui.py
- am folosit pygame pentru interfata, ei i se da controlul prin metoda draw()
care deseneaza o data si iese (desenreaza instantele la care tine referinte, ale caror
pozitii sunt modificate in programul principal)
* game.py
- clasa Game contine logica de progres a jocului, construind coordonate random initiale
la fiecare joc (fara coliziuni) pentru toate instantele
- tine toate instantele in memorie
- stie cand jocul se termina si poate rezolva coliziunile aparute in joc prin stergerea
unor entitati => stergerea are efecte si asupra interfetei (care foloseste aceeasi lista din
care sunt sterse entitatile)
* helper.py
- functii de calcul mai mult, gen dist euclidiana
* objects.py
- mostenirea de obiecte
BaseObject
|
|---Pray
|---Predator
|---Trap
- toate mostenesc capacitati comune, cu mici distinctii de date din fisierul de configurare
- au:
* directie
* viteza
* coordonate
- aflare directie noua prin
x += speed * cos(radians(directie))
y += speed * sin(radians(directie))
== Rezultate obtinute ==
Am rulat 10 batch-uri de cate 100 de teste pentru diferite configurari, mai jos.
La final rulez cu interfata din care se observa:
- evita capcane
- castiga impotriva atacatorilor
- [BONUS] atacatorii se sincronizeazaza asupra prazii atunci cand amandoi o vad
(pt config actual)
Won 93/100 total games.
Won 89/100 total games.
Won 87/100 total games.
Won 88/100 total games.
Won 91/100 total games.
Won 82/100 total games.
Won 87/100 total games.
Won 83/100 total games.
Won 91/100 total games.
Won 95/100 total games.
(pt condif actuala dar cu 30 de capcane - foarte incarcata harta)
Won 43/100 total games.
Won 45/100 total games.
Won 43/100 total games.
Won 44/100 total games.
Won 50/100 total games.
Won 42/100 total games.
Won 43/100 total games.
Won 51/100 total games.
Won 42/100 total games.