Dodaj 'route-planning.md'
This commit is contained in:
parent
fa7f01244f
commit
afc971574b
56
route-planning.md
Normal file
56
route-planning.md
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
# Route planning
|
||||||
|
|
||||||
|
## Spis treści
|
||||||
|
* [Informacje](#informacje)
|
||||||
|
* [Pętla główna](#definicja pętli głównej strategii przeszukiwania)
|
||||||
|
* [Funkcja następnika](#definicja funkcji następnika)
|
||||||
|
* [Heurystyka](#definicja przyjętej heurystyki)
|
||||||
|
|
||||||
|
|
||||||
|
## Informacje
|
||||||
|
|
||||||
|
Omawiane fragmenty kodu znajdują się w pliku ```dijkstra.py```.
|
||||||
|
Po uruchomieniu programu, użytkownik ma do wyboru samodzielne sterowanie traktorem przy pomocy strzałek (1) lub podawanie punktów wykorzystujące planowanie ruchu (0). Przy wyborze drugiej z opcji, aby wykonać ruch, użytkownik w aktywnym oknie programu naciska spację, po czym podaje dwa punkty.
|
||||||
|
|
||||||
|
## Pętla główna
|
||||||
|
|
||||||
|
Implementacja algorytmu Dijkstry:
|
||||||
|
|
||||||
|
```
|
||||||
|
def dijkstra(src):
|
||||||
|
dist = [sys.maxsize] * len(graph)
|
||||||
|
dist[src] = 0
|
||||||
|
sptSet = [False] * len(graph)
|
||||||
|
|
||||||
|
for cout in range(len(graph)):
|
||||||
|
u = minDistance(dist, sptSet)
|
||||||
|
sptSet[u] = True
|
||||||
|
for v in range(len(graph)):
|
||||||
|
if graph[u][v] > 0 and sptSet[v] == False and dist[v] > dist[u] + graph[u][v]:
|
||||||
|
dist[v] = dist[u] + graph[u][v]
|
||||||
|
|
||||||
|
return dist
|
||||||
|
```
|
||||||
|
|
||||||
|
Dla ```src``` będącego wierzchołkiem źródłowym, funkcja zwraca koszt przejścia do każdego punktu w grafie w postaci listy ```dist```.
|
||||||
|
|
||||||
|
Dopóki nie zostaną rozpatrzone wszystkie wierzchołki, pętla:
|
||||||
|
* za wierzchołek ```u``` przyjmuje wierzchołek najbliższy źródła, który nie został jeszcze rozważony
|
||||||
|
* dla każdego sąsiada ```v``` wierzchołka ```u```, jeżeli przez ```u``` da się dojść do ```v``` szybciej niż dotychczasową ścieżką, to wykonuje podstawienie: ```dist[v] = dist[u] + graph[u][v]```.
|
||||||
|
|
||||||
|
|
||||||
|
## Funkcja następnika
|
||||||
|
|
||||||
|
```
|
||||||
|
def minDistance(dist, sptSet):
|
||||||
|
mini = sys.maxsize
|
||||||
|
for v in range(len(graph)):
|
||||||
|
if dist[v] < mini and sptSet[v] == False:
|
||||||
|
mini = dist[v]
|
||||||
|
min_index = v
|
||||||
|
return min_index
|
||||||
|
```
|
||||||
|
|
||||||
|
Funkcja zwraca indeks wierzchołka, który jest najbliższej źródła, a nie został jeszcze rozważony, przeszukując w tym celu pozostałe wierzchołki grafu.
|
||||||
|
|
||||||
|
## Heurystyka
|
Loading…
Reference in New Issue
Block a user