Zaktualizuj 'Raports/SI_Raport_2.md'

This commit is contained in:
Anna Nowak 2019-05-14 22:18:55 +00:00
parent c6ab3a51df
commit b999fd4df6

View File

@ -13,29 +13,26 @@
#### Implementacja
Pierwszym podejściem naszej grupy do rozwiązania problemu była implementacja
algorytmu przeszukiwania drzewa w głąb - DFS (Wersja iteracyjna).
algorytmu przeszukiwania drzewa w głąb - DFS (Wersja rekurencyjna).
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
1. Sprawdź czy w pobliżu śmieciarki znajduje się nieopróżnioony domek
2. Jeżeli możliwa jest jakaś akcja (zebranie/oddanie smieci) wykonaj ją
- Jeżeli akcja została wykonana, 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
3. Dla każdego możliwego kierunku wykonaj algorytm od punktu 1
Rozwiązanie następuje wtedy, gdy wszystkie śmieci zostaną zebrane przez agenta.
Rozwiązanie następuje wtedy, gdy domek zostaje opróżniony. Algorytm zostaje wywołany tyle samo razy, ile jest domków. Agent nie zna położenia domków na mapie podczas działania algorytmu.
#### Obserwacje