SZI2019SmieciarzWmi/Raports/SI_Raport_VowpalWabbit.md

4.7 KiB

Sztuczna inteligencja 2019 - Vowpal Wabbit

Czas trwania opisywanych prac: 22.05.2019 - 13.06.2019

Osoby odpowiedzialne za implementajcę: Anna Nowak, Magdalena Wilczyńska

Implementowana technika: Vowpal Wabbit

Link do repozytorium projektu: https://git.wmi.amu.edu.pl/s440556/SZI2019SmieciarzWmi

Techniki uczenia - Vowpal Wabbit

Implementacja

Cała implementacja dla VW znajduje się na osobnym branchu /VowpalWabbit

Środowisko i łączenie z Python3

W związku z informacjami o błędach w implementacji wrappera VowpalWabbit dla Python3, został zaimplementowany własny wrapper umożliwiający komunikację między aplikacją a VW. Dodana została możliwość wywoływania skryptów shellowych (w języku bash) bezpośrednio ze środowiska Python3, dzięki czemu mogłyśmy uzyskać płynną komunikację.

Aby móc dostarczać poprawne dane wejściowe zarówno w trakcie procesu uczenia się jak i podczas szukania rozwiązania problemu, musiałyśmy dodać kilka modyfikacji do istniejących algorytmów. Domki dostają teraz dodatkowe oznaczenie jeśli zostały już odwiedzone.

Dodatkowo, podczas szukania rozwiązania istniejącymi algorytmami, oprócz listy koordynatów agenta zwracamy listę komend, które wykonuje.

Komunikacja agent - VW

Dodałyśmy wiele funkcji obsługujących łącznośc między agentem oraz samą aplikacją a VW:

  1. Parsery - mapują komendy oraz obiekty na liczby.
  2. Generatory danych wejściowych:
  • Generator danych do uczenia się - konwertuje listy ruchów, koordynatów i otoczenia na wiersze w formacie VW, po czym zapisuje je do pliku.
  • Generator danych rzeczywistych - konwertuje listę obiektów w otoczeniu agenta o promieniu R = 2 na wiersz w formacie VW i zapisuje ją do pliku przeznaczonego do tymczasowego przechowywania danych.
  1. Funkcja odczytująca obiekty w otoczeniu agenta o promieniu R = 2. Funkcja ta oblicza współrzędne lewego górnego rogu pola widzenia agenta w celu poprawnego zapisania obiektów w otoczeniu. Funkcja pomija współrzędne agenta oraz współrzędne będące poza siatką mapy.

  2. Funkcja odczytująca wynik przewidywań VW. Funkcja ta odczytuje liczbę rzeczywistą zwrócona przez VW i mapuje ją do jednej z możliwych do wykonania przez agenta komend. Przewidywanie VW otrzymujemy przy użyciu komendy

    vw -i ./VowpalWabbit/VowpalModels/100k_input.model -t ./VowpalWabbit/VowpalDataCahce/constant_input.txt -p ./vowpalWabbit/VowpalDataCahce/constant_output.txt

Format danych

Przedstawione poniżej tabele pokazują mapowania użyte podczas procesu generwania danych.

Mapowanie obiektów na mapie

Obiekt Cyfra
E: empty 0
R: road 1
H: house 2
V: visited house 3
Y: yellow dump 4
B: blue dump 5
G: green dump 6

Mapowanie komend

Komenda Cyfra Waga przykładu
pick_garbage 1 10.0
right 2 1.0
left 3 1.0
up 4 2.0
down 5 2.0

Wyjściowa linijka dla VW:

HYHYHYH

Gdzie Fxy: a to zmapowany na cyfrę obiekt a będący na koordynatach (x,y) w stosunku do prawego górnego rogu pola widzenia agenta.

Proces uczenia

Aby usprawnić procec zbierania danych dodałyśmy parametry wymagane przy starcie aplikacji. Dla projektu VowpalWabbit, zamiast

python3 ./main.py ./Resources/Maps/map_002.txt

od teraz wymagane są 2 do 3 argumentów:

  • plik mapy (ścieżka do mapy lub "auto" dla losowo generowanych map)
  • informacja, czy aplikacja ma się zamknąc po zakończeniu wykonywania jednego z wcześniej zaimplementowanych algorytmów (true / false)
  • algorytm, który automatycznie uruchamia się po starcie aplikacji (bfs / dfs / bestfs / brak wartości jeżeli nie chcemy nic automatycznie włączać)

W celu maksymalnego zautomatyzowania procesu uczenia się, stworzyłyśmy skrypt, które wszystkie potrzebne rzeczy robi za nas. Wymaga podania liczby uruchomień aplikacji, informacji, czy ma wyczyścić poprzednie dane, nazwę wyjściowego modelu oraz informację, czy po zakończeniu zbierania danych powinien od razu zacząć sie uczyć. Po uruchomieniu aplikacji wymaganą liczbę razy, skrypt zbiera dane z powstałych plików i tworzy z nich jeden plik .txt, który następnie przekazuje do VW za pomocą komendy

vw 100k_input.txt -c --passes 2 -f ./VowpalWabbit/VowpalModels/100k_input.model

Poniżej znajdują się parametry, dla których stworzyłyśmy prezentowany model:

Liczba wykonań programu Typ mapy Przykładowy algorytm Pole widzenia
2000 auto BestFS 2

W wyniku procesu zbierania danych, który trwał 1,5 h, otrzymałyśmy dane w liczbie 100 000 linii i output z VW:

Dlaczego

to

nie

działa

HALP

Obserwacje