SZI2019SmieciarzWmi/Raports/SVM.md

90 lines
3.0 KiB
Markdown
Raw Permalink Normal View History

2019-06-12 10:38:31 +02:00
---
# SVM raport
##### Konrad Pierzyński
###### Śmieciarz
12.06.2019
---
**SVM** - **S**upport-**V**ector **M**achine - zestaw metod uczenia stosowanych głównie do klasyfikacji, której nauka ma na celu wyznaczenie płaszczyzn rozdzielających dane wejściowe na klasy.
![5d00b5469956838867](https://i.loli.net/2019/06/12/5d00b5469956838867.png)
---
### Przygotowanie danych
Dane uczące zostały wygenerowane w następujący sposób:
+ Program generuje losową mapę o określonych wymiarach
+ Uruchamiany jest jeden z algorytmów (*BestFirstSearch*), który generuje listę ruchów.
+ Do zestawu uczącego dopisywana jest para składająca się na ruch i otoczenie gracza.
- Ruch odpowiada kierunkom: góra, prawo, dół, lewo i akcji zebrania/oddania śmieci - odpowienio liczbowo 1, 2, 3, 4, 99
- Otocznie to tablica dwuwymiarowa 7x7, gdzie element środkowy to pozycja gracza. Tablica ta następnie spłaszczana jest do tablicy jednowymiarowej
- Każdy 'domek', na którym została wykonana już akcja zebrania i jest opróżniony, widoczny jest na mapie tak samo jak element otoczenia, z którym gracz nie może wejść w żadną interakcję (stanąć, zebrać)
- Jeśli siatka 7x7 wykracza swoim zakresem za mapę, siatka uzupełniana jest przez trawę, czyli obiekt, z którym gracz nie wchodzi w interakcję
+ Po przejściu całej mapy algorytmem i zebraniu danych proces jest powtarzany tak długo, by zgromadzić około tysiąc rozwiązanych map
Pojedynczy zestaw danych jest zapisywany jako json postaci:
```json
{
"maps": [
[Int, Int, ...],
[Int, Int, ...],
...
],
"moves":
[
Int, Int, ...
]
}
```
I dopisywany do głównej struktury:
```json
{
"moveset": [
Zestaw, Zestaw, ...
]
}
```
---
### Uczenie
Do przeprowadzenia procesu uczenia dane uczące zostały podzielone na dwie listy:
- Pierwsza lista X zawiera wszystkie mapy częściowe (otoczenia)
```X = [ [Int, Int, ...], [Int, Int, ...], ... ]```
- Druga lista y zawiera odpowiadające mapom ruchy (1,2,3,4,99), które wykonał algorytm (*BestFirstSearch*) na danych otoczeniach.
```y = [ Int, Int, ... ]```
Wyżej wymienione dwie listy zostały podane jako argument metodzie ```fit(X,y)```, która odpowiada za uczenie się SVM. Natomiast utworzenie samego obiektu polega na zaimportowaniu biblioteki *scikit-learn*:
```from sklearn import svm```
a następnie już same utworzenia obiektu svm:
```clf = svm.SVC(gamma='scale')```
Wyuczony obiekt jest zapisywany do pliku, dzięki modułowi ```pickle```, aby nie przeprowadzać procesu uczenia za każdym uruchomieniem programu.
---
### Wykonywanie ruchów
Do przewidywania ruchów wystarczy użyć metody ```predict([ [otoczenie] ])``` , które przyjmuje mapę częściową, a jej wynik jest akcją, którą powinien wykonać gracz. Wynik metody przekazywany jest graczowi, który wykonuje ruch.