# Opis dokumentu Ten dokument to raport z wykonanego drugiego zadania projektu zespołowego na przedmiot Sztuczna Inteligencja. Celem zadania jestzastosowanie strategii przeszukiwania stanów `A*` do problemu planowania ruchu agenta na kracie. Tematem projektu jest inteligentny traktor. # Zespół W skład zespołu wchodzą: Tomasz Dzierzbicki, Szymon Parafiński, Karol Piotrowski, Jarosław Zbąski. # Zasady poruszania się agenta po planszy * Agent nie może wejść na pole oznaczone jako '#', gdyż jest to granica mapy. * Koszt wejścia na pole bez buraków oznaczone jako '.' wynosi 1. * Koszt wejścia na pole buraków oznaczone jako 'B' wynosi 9. * Agent może poruszać się do przodu i obracać się w lewo/prawo. # Heurystyka i koszt w algorytmie przeszukiwania Koszt f obliczany jest ze wzoru f=g+h, gdzie: * g - suma wag należących do ścieżki * h obliczne jest funkcją *calculateHValue*, która oblicza odległość w metryce Manhattan. ![](images/calculateHValue.png) # Obroty traktora Zwrot traktora jest zmieniany pod wpływem niezgodności porządanego kierunku ruchu z obecnym zwrotem w funkcji *CorrectMovement* ![](images/CorrectMovement.png) # Funkcja isValid Sprawdza, czy pole nie jest ścianą ('#'). ![](images/isValid.png) # Test celu Funkcja isDestination sprawdza, czy agent osiągnął zadany cel. ![](images/isDestination.png) # Funkcja aStarSearch Jest to funkcja zawierająca główną pętlę strategii przeszukiwania. ![](images/aStarSearch.png) Najpierw konfigurowane są początkowe parametry potrzebne do prawidłowego działania funkcji. Tworzone są dwie listy: * **bool** *closedList[][]* , która jest tablicą z początkowymi wartościami False, która przechowuje informacje o tym, czy dana komórka została już odwiedzona. * openList, która jest zbiorem par typu ` >` W *cellDetails[i][j].parent_i* i *cellDetails[i][j].parent_j* zapisywane będą współrzędne poprzednika danej komórki ![](images/mainLoop.png) Główna pętla pozostaje otwarta, dopóki *openList* nie będzie pusta. Pierwszą z instrukcji zawartych w pętli while jest zapamiętanie współrzędnych z pary z początku zbioru *openList*, zapisanie ich pod zmiennymi *i* i *j*, usunięcie pary ze zbioru i oznaczenie komórki o danych współrzędnych jako odwiedzoną. Następnie do zmiennej *waga* przypisuje się wagę tego pola.