SZI2019SmieciarzWmi/raports/SI_Raport_1.md

4.8 KiB

Sztuczna inteligencja 2019 - Raport 1

Czas trwania opisywanych prac: 06.03.2018 - 26.03.2018

Członkowie zespołu: Anna Nowak, Magdalena Wilczyńska, Konrad Pierzyński, Michał Starski

Wybrany temat: Inteligentna śmieciarka

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

Środowisko agenta i reprezentacja wiedzy

Pracę zaczeliśmy od spisania wszystkiego co będzie nam potrzebne do napisanie działającego środowiska. Notatki

można obejrzeć pod tym linkiem. Pod uwagę wzieliśmy następujące czynniki:

  • Jak dana technologia radzi sobie z graficznym przedstawieniem informacji (render mapy i rozmieszczenie na niej obiektów, zmiana stanów obiektów w zależności od sytuacji ...)

  • Poziom skomplikowania operacji na strukturach danych

  • Podejście języka do paradygmatu obiektowego

  • Trudność w implementacji mechanizmów sztucznej inteligencji

  • Preferencje programistyczne grupy

Po naradzie i sugestiach od strony prowadzącego zdecydowaliśmy, że do projektu najlepiej będzie pasował język python z uwagi na jego uniwersalność i łatwość przetwarzania danych.

Plansza po której porusza się agent

Założenia

  1. Plansza jest generowana losowo przy każdym uruchomieniu skryptu

  2. Każda plansza zawiera n domów i 3 wysypiska śmieci

  3. Każdy domek klatkę generuje jeden z 3 rodzajów śmieci z prawdopodobieństwem P (domyślnie 1/25)

  4. Agent chodzi po domkach zbiera śmieci i wyrzuca je na odpowiednie wysypisko

  5. Agent ma pojemność 10 na każdy rodzaj śmiecia

  6. Dom może wygenerować maksymalnie 10 śmieci

  7. Plansza jest dyskretna

Detale implementacyjne

Środowisko powstało przy użyciu biblioteki pygame, która udostępnia nam narzędzia do wygodnego zbudowania schludnie wyglądającej symulacji. Plansza ma postać dwuwymiarowiej płaszczyzny kartezjańskiej podzielonej na komórki (Cells). Na komórkach umieszczane są po kolei obiekty, tak, aby nie doszło do sytuacji, w której agent nie ma możliwości ruchu. Środowisko jest generowane dynamicznie w zależności od parametru home-count, który podajemy przy starcie skryptu. Dzięki temu możemy testować agenta w możliwie różnych sytuacjach. Opis elementów środowiska został przedstawiony przy użyciu paradygmatu obiektowego, dzięki temu kod jest czytelniejszy i wydzielony.

Na ten moment na planszy pojawiają się instancje klas:

Grass - klasa reprezentująca komórkę po której agent może swobodnie się poruszać, wypełnia większość mapy

House - klasa reprezentująca dom, agent wchodzi z nią w interakcję, zabiera wygenerowane śmieci

Landfill - klasa reprezentująca wysypisko, agent wchodzi z nią w interakcję, oddaje zebrane śmieci

Garbage_collector - klasa reprezentująca agenta - porusza się po mapie i wchodzi w interakcję z innymi obiektami

HUD - klasa reprezentująca HUD aplikacji (jeszcze niezaimplementowany)

Struktura plików projektu

--enums     => Klasy dziedziczące po klasie Enum, ułatwiające parsowanie informacji

--fonts     => Czcionki

--images    => Obrazy i ikony używane w aplikacji

--raports    => Raporty

--sprites     => Klasy reprezentujące obiekty na mapie

    .gitignore

    config.py    => Plik przechowujący funkcję zarządzające konfiguracją aplikacji    

    game.py    => Plik rozruchowy programu

    utils.py    => Funkcje pomocnicze

    README.md     => Informacje o aplikacji

    requirements.txt    => Przechowuje informacje na temat używanych bibliotek

    to_do.txt    => Lista przyszłych zadań do zrobienia

Reprezentacja Wiedzy

Przyjeliśmy na potrzeby projektu, że agent będzie wiedział co się dzieje na całym obszarze środowiska. W tym momencie wszystko co wie agent wyświetlane jest w oknie terminala, w czasie rzeczywistym, podczas trwania programu. Do informacji posiadanych przez agenta należą:

  • Ile zebrano śmieci od startu programu

  • Stopień zapełnienia śmieciarki

  • Ile śmieci zostało na mapie

Podczas dalszego rozwoju powyższe informacje będą przedstawiane na ekranie aplikacji.

Uruchamianie aplikacji

Linux

Uruchomienie standardowe (z 5 domami)

make init #stworzenie wirtualnego środowiska
make install #zainstalowanie zależności
make start #uruchomienie z domyślnym parametrem home-count=5

Uruchomienie niestandardowe

env/bin/python3 ./game.py home-count=amount #Liczba domów nie może być mniejsza niż 3

Windows

py -m virtualenv env # Stworzenie wirtualnego środowiska
env\Scripts\pip.exe install -r requirements.txt
env\Scripts\python.exe ./game.py --home-count=amount