Псевдокод и методы алгоритма поиска единой стоимости

Вот псевдокод алгоритма поиска единой стоимости:

function uniformCostSearch(problem):
    frontier = Priority Queue()
    explored = Set()
    frontier.push(Node(problem.initialState), 0)

    while not frontier.isEmpty():
        node = frontier.pop()

        if problem.isGoalState(node.state):
            return node.solution

        explored.add(node.state)

        for action in problem.getActions(node.state):
            childState = problem.getResult(node.state, action)
            childCost = node.pathCost + problem.getCost(node.state, action)

            if childState not in explored and not frontier.contains(childState):
                childNode = Node(childState, node, action, childCost)
                frontier.push(childNode, childCost)

            elif frontier.contains(childState):
                existingNode = frontier.getNode(childState)

                if childCost < existingNode.pathCost:
                    existingNode.parent = node
                    existingNode.action = action
                    existingNode.pathCost = childCost

    return null

Вот несколько методов, которые можно использовать при реализации поиска по единой стоимости:

  1. frontier: структура данных приоритетной очереди, которая отслеживает узлы, подлежащие исследованию. Приоритет каждого узла определяется стоимостью его пути.
  2. исследовано: набор, в котором отслеживаются уже исследованные состояния.
  3. Узел: структура данных, представляющая узел в дереве поиска. Он включает состояние, родительский узел, действие и стоимость пути от начального состояния до текущего узла.
  4. problem.initialState: возвращает исходное состояние проблемы.
  5. problem.isGoalState(state): возвращает true, если данное состояние является целевым, что указывает на то, что поиск достиг желаемого решения.
  6. problem.getActions(state): возвращает список допустимых действий, которые можно выполнить в данном состоянии.
  7. problem.getResult(state, action): возвращает результирующее состояние, когда данное действие применяется к текущему состоянию.
  8. problem.getCost(state, action): возвращает стоимость, связанную с выполнением данного действия в текущем состоянии.