Projekt ma przedstawiać działanie niektórych aspektów sztucznej inteligencji na podstawie inteligentnego magazynu. Naszym agentem jest wózek widłowy poruszający się po kracie.
### Podprojekty
* Rozpoznawanie cech paczki na podstawie zdjęcia (uczenie sieci neuronowych). W dowolnym momencie działania programu będzie można dodać zdjęcie paczki, która zostanie przeanalizowana pod kątem jego cech. Następnie zostanie przekazane do rozłożenia na magazynie za pomocą kolejnego podprojektu, lub ręcznie, w zależności od wyboru użytkownika. Wykorzystane zostaną do tego biblioteki YOLOv3 oraz OpenCV.
* Wykorzystanie uczenia drzew decyzyjnych do decydowania na które regały rozmieścić paczkę, na podstawie jej cech. Zbiór uczący byłby wyznaczany za pomocą algorytmu na początku działania każdego programu, ponieważ musiałby się on dostosować do konktretnych warunków podanych przez użytkownika. Następnie po wciśnięciu konkretnego przycisku, drzewo decyzyjne decydowałoby w którą konkretną lokalizację umieścić przesyłkę. Wykorzystana zostanie biblioteka sklearn.
### Wykonanie
Do wykonania projektu w głównej mierze wykorzystany został język Python 3, wraz z bibliotekami:
* easygui - biblioteka użyta głównie przy starcie programu w celu pobrania od użytkownika wielkości kraty oraz ilości konkretnych regałów, ale również później do wyświetlania krótkich komunikatów.
* pygame - biblioteka użyta to wizualnej reprezentacji kraty wraz z agentem.
* YOLOv3 - Biblioteka użyta do rozpoznawania cech paczki.
* OpenCV - Biblioteka użyta do rozpoznawania cech paczki.
* sklearn - Biblioteka do obsługi drzew decyzyjnych.
* Wheel (z pliku wheel.py) - Klasa przedstawiająca wózek widłowy na kracie.
### Działanie środowiska
Aktualnie gotowe jest środowisko w którym agent może się poruszać. Nie ma gotowych implementacji z zakresu sztucznej inteligencji. Można również rozmieszczać paczki oraz usuwać je z magazynu. Po kliknięciu w polu gry pojawia się paczka na podłodze. Można ją rozmieścić w magazynie kierując się do konkretnego regału i próbując w niego wejść. Na takiej samej zasadzie działa usuwanie paczek, a po odwiezieniu paczki w przeciwległą odnogę od tej w której się pojawiła paczka automatycznie zniknie z wózka.
Gdy klikniemy na pole gry na planszy pojawi się paczka (w finalnej wersji, od użytkownika zostanie pobrana grafika przedstawiająca paczkę, która zostanie automatycznie sprawdzona i rozmieszczona na magazynie).
Po wjechaniu wózkiem w paczkę, zostanie automatycznie pobrana na wózek. Gdy wjedziemy w regał (koniecznie od dobrej strony) paczka zostanie automatycznie rozmieszczona na tym regale.
Gdy wjedziemy pustym wózkiem w regał na którym znajduje się paczka, paczka zostanie automatycznie pobrana na wózek. Jeśli natomiast wjedziemy w przeciwną odnogę magazynu, niż tą z której pobraliśmy na początku paczkę, zostanie usunięta z wózka i magazynu.