DSZI_2020_Projekt/Raporty/raport1.md

4.0 KiB

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