Maison  >  Article  >  Périphériques technologiques  >  Discuter de l'analyse de la planification d'itinéraire de l'algorithme de recherche de chemin et de la mise en œuvre du code

Discuter de l'analyse de la planification d'itinéraire de l'algorithme de recherche de chemin et de la mise en œuvre du code

WBOY
WBOYavant
2023-12-20 11:39:40730parcourir

Discuter de lanalyse de la planification ditinéraire de lalgorithme de recherche de chemin et de la mise en œuvre du code

L'algorithme de recherche de chemin est l'un des algorithmes couramment utilisés dans le domaine de l'infographie et de l'intelligence artificielle, utilisé pour calculer le chemin le plus court ou le chemin optimal d'un point à un autre. Dans cet article, je présenterai en détail deux algorithmes de recherche de chemin couramment utilisés : l'algorithme de Dijkstra et l'algorithme A*

L'algorithme de Dijkstra

L'algorithme de Dijkstra est une méthode de largeur utilisée pour trouver le chemin le plus court entre deux points dans un graphe. algorithme de recherche. Cela fonctionne comme suit :

Nous devons créer un ensemble S pour stocker les sommets qui ont trouvé le chemin le plus court

Nous devons créer un ensemble Q pour stocker les sommets qui n'ont pas encore trouvé le chemin le plus court

Lors de l'initialisation Lorsque vous utilisez le tableau de distance dist, vous devez définir la distance du point de départ aux autres points à l'infini et la distance du point de départ à lui-même à 0

Répétez les étapes suivantes jusqu'à ce que l'ensemble soit défini. Q est vide :

  • in Trouvez le sommet u le plus proche du point de départ dans l'ensemble Q et ajoutez-le à l'ensemble S.
  • Pour chaque sommet voisin v du sommet u, mettez à jour la distance dist[v] du point de départ à v. Si dist[v] > dist[u] + edge(u, v), mettez à jour dist[v] est dist[u] + bord(u, v).

Enfin, le tableau dist stocke le chemin le plus court du point de départ à chaque sommet

Ce qui suit est le code source de l'algorithme de Dijkstra écrit en C# :

class DijkstraAlgorithm
{
    private int[,] graph;
    private int size;

    public DijkstraAlgorithm(int[,] graph)
    {
        this.graph = graph;
        this.size = graph.GetLength(0);
    }

    public int[] FindShortestPath(int start, int end)
    {
        int[] dist = new int[size];
        bool[] visited = new bool[size];

        for (int i = 0; i <h4><span>Un algorithme</span></h4><p><span>A L'algorithme est un algorithme de recherche heuristique utilisé pour trouver le chemin le plus court entre deux points d'un graphique. L'idée de l'algorithme est la suivante : </span></p><p><span>Créer une file d'attente prioritaire openSet pour stocker les sommets à explorer</span></p><p><span>Nous devons créer un tableau nommé gScore pour stocker le coût réel du point de départ à chacun vertex</span></p><p> <span>Nous devons créer un tableau nommé fScore pour stocker le coût estimé du point de départ au point cible</span></p><p><span>Ajoutez le point de départ à openSet, définissez gScore[start] sur 0 et définissez fScore[start ] à 0 Coût estimé du point de départ au point cible </span></p><p><span> Répétez les étapes suivantes jusqu'à ce que openSet soit vide : </span></p>
  • Trouvez le sommet actuel avec le plus petit fScore dans openSet.
  • Si le courant est égal au point cible, cela signifie que le chemin le plus court a été trouvé et le chemin est renvoyé.
  • Supprimez le courant d'openSet.
  • Pour chaque sommet voisin du courant, calculez le coût réel tempGScore du point de départ au voisin. Si tempGScore est inférieur à gScore[neighbor], mettez à jour gScore[neighbor] en tempGScore et calculez fScore[neighbor] =. gScore[voisin] + coût estimé. Si le voisin n'est pas dans openSet, ajoutez-le à openSet.

Si openSet est vide, cela signifie que le point cible ne peut pas être atteint et qu'une valeur nulle est renvoyée

Voici le code source de l'algorithme A* écrit en Java :

import java.util.*;class AStarAlgorithm {private int[][] graph;private int size;public AStarAlgorithm(int[][] graph) {this.graph = graph;this.size = graph.length;}public List<integer> findShortestPath(int start, int end) {PriorityQueue<node> openSet = new PriorityQueue();int[] gScore = new int[size];int[] fScore = new int[size];int[] cameFrom = new int[size];boolean[] visited = new boolean[size];Arrays.fill(gScore, Integer.MAX_VALUE);Arrays.fill(fScore, Integer.MAX_VALUE);Arrays.fill(cameFrom, -1);gScore[start] = 0;fScore[start] = heuristicCostEstimate(start, end);openSet.offer(new Node(start, fScore[start]));while (!openSet.isEmpty()) {int current = openSet.poll().index;if (current == end) {return reconstructPath(cameFrom, current);}visited[current] = true;for (int neighbor = 0; neighbor  reconstructPath(int[] cameFrom, int current) {List<integer> path = new ArrayList();path.add(current);while (cameFrom[current] != -1) {current = cameFrom[current];path.add(0, current);}return path;}private class Node implements Comparable<node> {public int index;public int fScore;public Node(int index, int fScore) {this.index = index;this.fScore = fScore;}@Overridepublic int compareTo(Node other) {return Integer.compare(this.fScore, other.fScore);}@Overridepublic boolean equals(Object obj) {if (this == obj) {return true;}if (obj == null || getClass() != obj.getClass()) {return false;}Node other = (Node) obj;return index == other.index;}@Overridepublic int hashCode() {return Objects.hash(index);}}}</node></integer></node></integer>

Ce qui précède est une comparaison de l'algorithme de Dijkstra et d'A* Introduction détaillée de l'algorithme, y compris les idées d'algorithme, les processus et le code source implémentés en C# ou Java. Ces deux algorithmes sont des algorithmes de recherche de chemin couramment utilisés et peuvent être sélectionnés et utilisés en fonction de besoins spécifiques.
Bien sûr, dans les villes d’aujourd’hui, les logiciels de navigation peuvent planifier les choses pour nous.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer