Zaktualizowany raport route-planning
This commit is contained in:
parent
3375a8adca
commit
b7675d3946
@ -4,16 +4,21 @@
|
||||
|
||||
**Temat projektu:** Inteligentny Traktor
|
||||
|
||||
**klawisz B** - uruchomienie automatycznego znadjdwowania ścieżki dla jednego z trybów pracy:
|
||||
**klawisz B** - uruchomienie automatycznego znajdowania ścieżki dla jednego z trybów pracy:
|
||||
* 1 - podlewanie
|
||||
* 2 - odchwaszczanie
|
||||
* 3 - sadzenie
|
||||
* 4 - zbieranie
|
||||
|
||||
W celu zaplanowania ruchu agenta na kracie wykorzystano schemat procedury przeszukiwania grafu stanów z uwzględnieniem kosztu.
|
||||
Zaimplementowano strategię A*, czyli funkcję wyznaczającą priorytet następników,
|
||||
uwzględniającą zarówno koszt, jak i odpowiednią heurystykę.
|
||||
Poniżej przedstawiono poszczególne fragmenty kodu, kluczowe dla działania całej procedury.
|
||||
|
||||
## Pętla główna strategii przeszukiwania
|
||||
|
||||
* spradzenie aktualnego trybu pracy traktora:
|
||||
* sprawdzenie aktualnego trybu pracy traktora:
|
||||
|
||||
```
|
||||
if activity == 0:
|
||||
avaiable_value = [0,1,2,3]
|
||||
@ -26,7 +31,7 @@ if activity == 0:
|
||||
```
|
||||
|
||||
* ustalenie pozycji startowej
|
||||
* sprawdzenie czy pozycja startowa równa się pozyzji końcowej
|
||||
* sprawdzenie czy pozycja startowa równa się pożądanej pozyzji końcowej
|
||||
* jeżeli nie, ustalenie w którą stronę poruszy się traktor:
|
||||
|
||||
```
|
||||
@ -46,15 +51,15 @@ if start_position == end_point:
|
||||
move_left()
|
||||
pygame.display.update()
|
||||
time.sleep(2)
|
||||
work([int(((config.TRAKTOR_POZ[1]-5)/70)-1), int(((config.TRAKTOR_POZ[0]-5)/70)-1)])
|
||||
work([int(((config.TRAKTOR_POZ[1]-5)/70)-1), int(((config.TRAKTOR_POZ[0]-5)/70)-1)])
|
||||
```
|
||||
|
||||
* funkcja A*, jest to algorytm, którego zadaniem jest znalezienie najkrótszej trasy dla traktora:
|
||||
* funkcja A* - jest to algorytm, którego zadaniem jest znalezienie najkrótszej trasy dla traktora:
|
||||
|
||||
```
|
||||
def a_star(start, end):
|
||||
a_queue = PriorityQueue()
|
||||
a_queue.put(start,0)
|
||||
a_queue.put(start,0)
|
||||
cost = {tuple(start): 0}
|
||||
path_from = {tuple(start): None}
|
||||
finall_path = [tuple(end)]
|
||||
@ -100,16 +105,19 @@ for next in points(current):
|
||||
found = 1
|
||||
break
|
||||
if found:
|
||||
break
|
||||
break
|
||||
```
|
||||
|
||||
## Heurystyka
|
||||
|
||||
Oszacowuje koszt dotarcia do caleu z akutualnego położenia traktora na planszy
|
||||
Heurystyka to oszacowany dystans między punktem początkowym (aktualnym położeniem agenta na planszy) a punktem końcowym (celem).
|
||||
Wylicza się ją za pomocą różnic między współrzędnymi (agenta i celu) w pionie i poziomie,
|
||||
a następnie podstawienia ich do prostego wzoru Pitagorasa.
|
||||
Krótko mówiąc, za pomocą heurystyki można wstępnie szacować koszt dotarcia do celu z akutualnego położenia traktora na planszy.
|
||||
|
||||
```
|
||||
def heuristic(a, b):
|
||||
(x1, y1) = a
|
||||
(x2, y2) = b
|
||||
return abs(x1 - x2) + abs(y1 - y2)
|
||||
```
|
||||
```
|
Loading…
Reference in New Issue
Block a user