SZI2019SmieciarzWmi/Raports/SVM.md
2019-06-12 10:38:31 +02:00

3.0 KiB

12.06.2019
# SVM raport ##### Konrad Pierzyński ###### Śmieciarz 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.

5d00b5469956838867


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.