Лучший алгоритм первого поиска в Python: реализация и пример

Алгоритм «первого наилучшего поиска» – это алгоритм поиска по графу, который использует эвристическую функцию оценки, чтобы определить, какой узел исследовать следующим. Вот пример реализации лучшего алгоритма первого поиска в Python:

from queue import PriorityQueue
def best_first_search(graph, start, goal, heuristic):
    queue = PriorityQueue()
    queue.put((0, start))
    visited = set()
    while not queue.empty():
        cost, node = queue.get()
        if node == goal:
            return True
        visited.add(node)
        for neighbor in graph[node]:
            if neighbor not in visited:
                priority = heuristic(neighbor, goal)
                queue.put((priority, neighbor))
    return False

В этом примере параметр graphпредставляет граф или сеть, в которой выполняется поиск, start— начальный узел, цель— целевой узел, а heuristic — эвристическая функция оценки, которая оценивает стоимость пути от данного узла к цели.

Вот пример эвристической функции, которая вычисляет евклидово расстояние между двумя узлами в двумерном пространстве:

import math
def euclidean_distance(node1, node2):
    x1, y1 = node1
    x2, y2 = node2
    return math.sqrt((x2 - x1)  2 + (y2 - y1)  2)

Эту эвристическую функцию можно использовать с функцией best_first_searchдля поиска кратчайшего пути между двумя узлами в 2D-пространстве.