From 7cd150fa90f0eb6730fe94ac9f4bc081aff1ceca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Starski?= Date: Wed, 24 Apr 2019 02:27:58 +0200 Subject: [PATCH] Added Raport #2 --- Raports/SI_Raport_2.md | 74 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 Raports/SI_Raport_2.md diff --git a/Raports/SI_Raport_2.md b/Raports/SI_Raport_2.md new file mode 100644 index 0000000..6ee5132 --- /dev/null +++ b/Raports/SI_Raport_2.md @@ -0,0 +1,74 @@ +# Sztuczna inteligencja 2019 - Raport 2 + +**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 + +## Pierwszy algorytm przeszukiwania mapy - DFS + +#### Implementacja + +Pierwszym podejściem naszej grupy do rozwiązania problemu była implementacja +algorytmu przeszukiwania drzewa w głąb - DFS (Wersja iteracyjna). +Aby zaimplementować ten algorytm, niezbędne było przygotowanie dla niego kilku +struktur pomocniczych dzięki którym będziemy mogli jasno zdefiniować warunki stopu i uzyskać satysfakcjonujące nas rozwiązanie. + +Do użytych struktur należą: + +- **Lista dwuwymiarowa przedstawiająca mapę w formie siatki po której można łatwo iterować** - Jeden stan takiej listy traktowaliśmy jako wierzchołek grafu +- **Stos wykonanych przez algorytm ruchów** - Używany do przechodzenia do kolejnych możliwych stanów jak i zapamiętania rozwiązania problemu. +- **Lista możliwych ruchów do wykonania przez agenta przy konkretnym stanie mapy** +- **Licznik głębokości na którą zszedł algorytm** - Zapobiega zajściu za głęboko w przypadku braku rozwiązania + +**Przebieg algorytmu**: + +- Dodaj do stosu pierwszy krok +- Dopóki stos nie jest pusty: + 1. Weź stan mapy ze stosu (operacja stack.pop()) + 2. Sprawdź warunek końca (Czy problem został rozwiązany ?) + - Jeżeli tak, zakończ algorytm + - Jeżeli nie, sprawdź czy głębokość przekroczyła 30 + 1. Jeżeli tak, zakończ algorytm informacją o braku rozwiązania + 2. Jeżeli nie, kontynuuj algorytm + +Rozwiązanie następuje wtedy, gdy wszystkie śmieci zostaną zebrane przez agenta. + +#### Obserwacje + +Przede wszystkim, algorytm przeszukiwania w głąb działa dla tego problemu +**zdecydowanie wolniej niż powinien**, przy jego działaniu łatwo wchodzić w głąb złej ścieżki, która nie doprowadzi nas do rozwiązania. Co prawda przy małej mapie algorytm radzi sobie z problemem, jednak z każdą kolejną większą +jest co raz gorzej. + +Problem można pokazać na przykładzie: + +Załóżmy, że hipotetyczne drzewo T wygląda w taki sposób: + +``` +a -- e +| +b +| +c +| +d +. +. - 100 wierzchołków +. +x +``` + +Naszym rozwiązaniem będzie doprowadzenie agenta z wierzchołka startowego **a** do wierzchołka końcowego **b**. DFS odwiedzi najpierw wierzchołki po kolei od a aż do x i dopiero później przyjdzie do e. Naturalnie można stwierdzić, że to nie jest sposób którego szukamy. Oczywiście 100 wierzchołków to mała liczba dla komputera, ale co jak będzie ich 1000, 10 000, lub 1 000 000 ? + +#### Podsumowanie + +Szukanie w głąb miałoby sens w innych przypadkach, na przykład gdybyśmy chcieli znaleźć możliwe wyniki w grze gdzie każda akcja pociąga za sobą kolejną, tworząc dość głęboki graf. + +Do szukania ścieżki po której ma poruszać się agent lepiej byłoby jednak przeszukiwać graf wszerz. + +#### Uruchamianie + +Aby uruchomić DFS na mapie Śmieciarza WMI, należy kliknąć **0**.