route_planningVOL2
This commit is contained in:
parent
ebd0c89cf4
commit
5524f02464
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
##### Niniejszy raport poświęcony jest przekazaniu informacji na temat stanu projektu grupowego realizowanego na przedmiot Sztuczna Inteligencja w roku akademickim 2019/2020.
|
##### Niniejszy raport poświęcony jest przekazaniu informacji na temat stanu projektu grupowego realizowanego na przedmiot Sztuczna Inteligencja w roku akademickim 2019/2020.
|
||||||
|
|
||||||
Ruch agenta został zaimplementowany przy za pomocą algorytmu A* z następującymi warunkami:
|
Ruch agenta został zaimplementowany za pomocą algorytmu A* z następującymi warunkami:
|
||||||
|
|
||||||
- agent wykonuje: krok do przodu/ obrót w prawo/ obrót w lewo;
|
- agent wykonuje: krok do przodu/ obrót w prawo/ obrót w lewo;
|
||||||
- agent nie może wejść na pole "zajęte" przez stolik;
|
- agent nie może wejść na pole "zajęte" przez stolik;
|
||||||
@ -26,7 +26,7 @@ def heuristic(current, goal):
|
|||||||
|
|
||||||
Która oblicza odległość do punku końcowego przy pomocy wzoru Euklidesa.
|
Która oblicza odległość do punku końcowego przy pomocy wzoru Euklidesa.
|
||||||
|
|
||||||
Metoda __aStar__, wywoływana przez metodę __goByAStar__, wytycza ścieżkę, którą będzie poruszał się kelner. W pierwszej kolejności sprawdzane jest czy nasz punkt docelowy jest osiągalny. Jeżeli tak to zaczynamy wytyczanie ścieżki. Tworzymy węzły (obiekty klasy __Node__) startowy i końcowy oraz listy pomocnicze 'open' i 'closed'.
|
Metoda __aStar__, wywoływana przez metodę __goByAStar__, wytycza ścieżkę, którą będzie poruszał się kelner. W pierwszej kolejności sprawdzane jest, czy nasz punkt docelowy jest osiągalny. Jeżeli tak, to zaczynamy wytyczanie ścieżki. Tworzymy węzły (obiekty klasy __Node__) startowy i końcowy oraz listy pomocnicze 'open' i 'closed'.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
start_node = Node(None, start)
|
start_node = Node(None, start)
|
||||||
@ -39,11 +39,11 @@ closed_list = []
|
|||||||
open_list.append(start_node)
|
open_list.append(start_node)
|
||||||
```
|
```
|
||||||
|
|
||||||
Dopóki lista 'open' ma dostępne pola jest możliwa dalsza droga. Porównujemy koszty F i za każdym razem uaktualniamy obecny punkt, w którym koszt jest najmniejszy.
|
Dopóki lista 'open' ma dostępne pola, jest możliwa dalsza droga. Porównujemy koszty F i za każdym razem uaktualniamy obecny punkt, w którym koszt jest najmniejszy.
|
||||||
|
|
||||||
Jeżeli nasz obecny węzeł jest węzłem końcowym tzn. osiągnęliśmy nasz cel, metoda zwraca nam ścieżkę zbudowaną z odwróconej listy "kroków" (stanów) do klasy kelner.
|
Jeżeli nasz obecny węzeł jest węzłem końcowym, tzn. osiągnęliśmy nasz cel, metoda zwraca nam ścieżkę zbudowaną z odwróconej listy "kroków" (stanów) do klasy kelner.
|
||||||
|
|
||||||
Jeśli nie osiągnęliśmy celu przechodzimy do analizowania sąsiadów obecnej pozycji, najpierw sprawdzamy czy punkt ten jest osiągalny :
|
Jeśli nie osiągnęliśmy celu, przechodzimy do analizowania sąsiadów obecnej pozycji, najpierw sprawdzamy, czy punkt ten jest osiągalny :
|
||||||
|
|
||||||
```python
|
```python
|
||||||
for new_position in [(0, -1), (0, 1), (-1, 0), (1, 0)]:
|
for new_position in [(0, -1), (0, 1), (-1, 0), (1, 0)]:
|
||||||
@ -62,8 +62,8 @@ Tworzymy listę 'children'- potencjalnych następnych kroków.
|
|||||||
Jeśli nie analizowaliśmy danego węzła, obliczamy dla niego dany koszt G
|
Jeśli nie analizowaliśmy danego węzła, obliczamy dla niego dany koszt G
|
||||||
|
|
||||||
- jeśli jest on nieosiągalny - koszt jest zbyt duży do dalszego podążania w tym kierunku;
|
- jeśli jest on nieosiągalny - koszt jest zbyt duży do dalszego podążania w tym kierunku;
|
||||||
- jeśli jest to "kałuża" to koszt wynosi 3;
|
- jeśli jest to "kałuża", to koszt wynosi 3;
|
||||||
- jeśli jest to "zwykła płytka" koszt wynosi 1.
|
- jeśli jest to "zwykła płytka", koszt wynosi 1.
|
||||||
|
|
||||||
Następnie obliczamy koszt H i koszt F (jako sumę G i H) dla danego węzła 'child' i dodajemy go do listy 'open'.
|
Następnie obliczamy koszt H i koszt F (jako sumę G i H) dla danego węzła 'child' i dodajemy go do listy 'open'.
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ child.h = heuristic(child.position, end_node.position)
|
|||||||
child.f = child.g + child.h
|
child.f = child.g + child.h
|
||||||
```
|
```
|
||||||
|
|
||||||
Kontrolowane jest również czy dany krok nie oddalałby agenta od celu:
|
Kontrolowane jest również, czy dany krok nie oddalałby agenta od celu:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
for open_node in open_list:
|
for open_node in open_list:
|
||||||
|
Loading…
Reference in New Issue
Block a user