Added Raport #2
This commit is contained in:
parent
c5ed2423d6
commit
7cd150fa90
74
Raports/SI_Raport_2.md
Normal file
74
Raports/SI_Raport_2.md
Normal file
@ -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**.
|
Loading…
Reference in New Issue
Block a user