AIProjekt/route-planning.md
2020-04-28 21:01:14 +00:00

1.9 KiB

Route planning

Spis treści

  • Informacje
  • [Pętla główna](#pętla główna)
  • [Funkcja następnika](#funkcja następnika)
  • Heurystyka

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