Merge branch 'VowpalWabbit' of https://git.wmi.amu.edu.pl/s440556/SZI2019SmieciarzWmi into VowpalWabbit

This commit is contained in:
Anna Nowak 2019-06-11 19:41:01 +02:00
commit 78c4b6f01c

View File

@ -0,0 +1,99 @@
# 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.
3. 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.
4. 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