Les deux méthodes ont une structure de données qui contient les nœuds (avec leur coût) à développer. Les deux méthodes développent d'abord le nœud au meilleur coût. Alors, quelle est la différence entre eux?
On m'a dit que la recherche à coût uniforme est une méthode aveugle et que la meilleure recherche en premier ne l'est pas, ce qui m'a encore plus dérouté (les deux ont des informations sur les coûts des nœuds ou non?).
La différence réside dans la fonction heuristique .
La recherche à coût uniforme est non informée recherche: elle n'utilise aucune connaissance de domaine. Il étend le nœud le moins coûteux, et il le fait dans toutes les directions car aucune information sur l'objectif n'est fournie. Il peut être considéré comme une fonction f(n) = g(n)
où g(n)
est un coût de chemin ("coût de chemin" lui-même est une fonction qui attribue un coût numérique à un chemin par rapport à la mesure de la performance, par exemple distance en kilomètres, ou nombre de déplacements, etc.). C'est simplement un coût pour atteindre le nœud n.
Meilleure recherche en premier est informé recherche: il utilise une fonction heuristique pour estimer à quel point l'état actuel est proche du but (est-ce qu'on se rapproche du but?) . Par conséquent, notre fonction de coût f(n) = g(n)
est combinée avec le coût pour aller de n au but, la h(n)
(fonction heuristique qui estime ce coût) nous donnant f(n) = g(n) + h(n)
. Un exemple d'algorithme de recherche best-first est Un algorithme * .
Oui, les deux méthodes ont une liste de nœuds étendus, mais la meilleure recherche en premier tentera de minimiser ce nombre de nœuds étendus (coût du chemin + fonction heuristique) .
Il y a un petit malentendu ici. La recherche de coût uniforme, la meilleure première recherche et les algorithmes de recherche A * sont tous des algorithmes différents. Le coût uniforme est un algorithme de recherche non informé lorsque Meilleur avant et Les algorithmes de recherche A * sont des algorithmes de recherche informés. Informé signifie qu'il utilise une fonction heuristique pour décider du nœud en expansion. La différence entre la meilleure première recherche et A * est que la meilleure utilise d'abord f(n) = h(n)
pour développer et A * utilise f(n) = g(n)+h(n)
pour choisir le nœud en expansion. h(n)
est la fonction heuristique. g(n)
est le coût réel du nœud de départ au nœud n.
https://www.cs.utexas.edu/~mooney/cs343/slide-handouts/heuristic-search.4.pdf On peut le voir ici avec plus de détails.
Légère correction à la réponse acceptée
La recherche Best-first ne permet pas d'estimer la proximité de l'objectif de l'état actuel, elle estime la proximité de l'objectif de chacun des prochains états (à partir de l'état actuel) pour influencer le chemin sélectionné.
La recherche à coût uniforme étend le nœud le moins cher (quelle que soit l'heuristique), et la recherche en premier lieu étend le nœud le moins (coût + heuristique).
f(n) = g(n)
f(n) = g(n) + h(n)
Chacune de ces fonctions évalue les nœuds d'expansion potentiels, pas le nœud actuel lors de la traversée de l'arbre à la recherche d'un n qui est un état objectif
Les différences sont données ci-dessous:
La recherche à coût uniforme (UCS) développe le nœud avec le coût de trajet le plus bas (c'est-à-dire avec le g (n) le plus bas), tandis que la recherche Best-first (BFS) développe le nœud avec le plus proche de l'objectif
UCS ne peut pas traiter avec une fonction heuristique, alors que BFS peut traiter avec une fonction heuristique
Dans UCS, f(n) = g (n), alors que, dans BFS, f(n) = g(n) + h (n).
La recherche à coût uniforme sélectionne le nœud non visité avec la distance la plus faible, calcule la distance qui le traverse jusqu'à chaque voisin non visité et met à jour la distance du voisin s'il est plus petit.
La meilleure recherche en premier est un algorithme basé sur l'heuristique qui tente de prédire à quelle distance la fin d'un chemin (c'est-à-dire le dernier nœud du chemin) est proche du nœud cible, de sorte que les chemins jugés plus proches d'une solution soient développés premier.