# 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