##### Raport przygotowały: Natalia Plitta, Marta Roszak, Kinga Molik, Sara Kowalska ##### Raportowany okres: 2 marca - 5 kwietnia 2020 ##### Niniejszy raport poświęcony jest przekazaniu informacji na temat stanu projektu grupowego realizowanego na przedmiot Sztuczna Inteligencja w roku akademickim 2019/2020. Jest to projekt, który ma na celu stworzenie autonomicznego agenta - "kelnera", poruszającego się po kracie - "restauracji". Program działa w środowisku graficznym. - wybrany język programowania i technologie: Python i biblioteka Pygame - wybrane środowisko programistyczne: PyCharm ### Struktura kodu i sposoby reprezentowania wiedzy wiedzy: #### Środowisko: Dwuwymiarowe, dyskretne środowisko o wymiarach 600 x 600 px (po 15 kolumn i wierszy) - tzw. krata, po której porusza się agent (kelner). Pojedyncza kratka ma rozmiar 40x40 px, włącznie z obramowaniem o szerokości 1 px. Program do narysowania kraty wykorzystuje wbudowane funkcje z biblioteki Pygame. Krata numerowana jest od punktu (0;0) - pierwsza kratka w lewym górnym rogu, do punktu (14;14) - ostatnia kratka w prawym dolnym rogu. Metoda drawGrid rysuje kratę, natomiast redrawWindow "odświeża okno" - rysuje je ponownie (wywoływane po zmianach). ---------------------- #### Klasy: ##### Waiter: W klasie "Waiter" zdefiniowany jest obecny wygląd agenta - zajmuje on pojedynczą kratkę, tj . 38x38 px (rozmiar zmniejszony o szerokość obramowania, aby pozostało ono widoczne). Zakładamy, że bot może nieść na raz 2 talerze. Atrybuty zawarte w klasie Waiter: - color - kolor agenta (do jego obecnego sposobu wyświetlania), - pos - dwuelementowa lista przechowująca aktualną pozycję agenta, - dirx i diry - atrybuty wykorzystane do ruchu bota; określają, w jakim kierunku jest zwrócony, - plates - lista zamówień (talerz, klient) Metody zawarte w klasie: - moveRandomly - metoda wykonywania losowego kroku, - moveWithKeyboard - sterowanie kelnerem przy pomocy klawiatury, - resetPosition - pozwala nadać nową pozycję botowi, - takePlates - jeśli kuchnia posiada gotowe dania, kelner zabiera je (metoda "giveDish" z klasy Kitchen) i dodaje je do listy talerzy, - giveClientPlate - wydanie talerza klientowi - metoda "takePlateAndEat" z klasy Client - draw - tworzy graficzną reprezentację bota (czerwony kwadrat) Metody moveWithKeyboard oraz resetPosition są obecnie nieużywane, zachowane do testów. ##### Table: Atrybuty: - pos - pozycja danego stołu w postaci dwuelementowej listy, - capacity - pojemność danego stołu Metody: - move - zmiana pozycji stolika poprzez podanie nowych współrzędnych, - draw - tworzy graficzną reprezentację stołu (grafika przeskalowana do rozmiaru kratki) ##### Dish: Atrybuty: - dishName - nazwa dania, - preparationTime - czas przygotowania, - eatingTime - czas potrzebny na zjedzenie danego dania, - price - cena Klasa nie posiada żadnych metod. ##### Plate: Atrybuty: - dishName, preparationTime, eatingTime oraz price - atrybuty pobierane z dania przypisanego do talerza, - isEmpty - oznaczenie czy dany talerz jest pusty, domyślne: False Metody: - eat - odczekuje czas zjedzenia dania z talerza i zmienia atrybut isEmpty na "True" ##### Client: Atrybuty: - age - wiek, - sex - płeć, - myPlate - talerz klienta, domyślnie: None, - budget - budżet klienta, - myTable - numer stołu, przy którym siedzi klient Metody: - takePlateAndEat - otrzymanie talerza i rozpoczęcie jedzenia (metoda "eat" klasy Plate), - takeASeat - przypisanie klientowi numeru stołu ##### Kitchen: Atrybuty: - readyDishes - kolejka gotowych już talerzy, do odbioru przez kelnera, - orders - kolejka talerzy (porcji) do wykonania Obie kolejki mają maksymalną długość równą 32. Metody: - makeDish - ściągnięcie talerza z kolejki orders, odczekanie czasu przygotowania dania, dodanie danego talerza do kolejki readyDishes, - giveDish - wydanie dania kelnerowi, jeżeli jest jakiś gotowy talerz