3.0 KiB
12.06.2019
SVM - Support-Vector Machine - zestaw metod uczenia stosowanych głównie do klasyfikacji, której nauka ma na celu wyznaczenie płaszczyzn rozdzielających dane wejściowe na klasy.
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:
{
"maps": [
[Int, Int, ...],
[Int, Int, ...],
...
],
"moves":
[
Int, Int, ...
]
}
I dopisywany do głównej struktury:
{
"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.