Псевдокод поиска единой стоимости: пошаговое руководство по решению задач на графах

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

function UniformCostSearch(problem)
    frontier <- Priority Queue with initial state
    explored <- Empty set

    add problem.initialState to frontier with cost 0

    while frontier is not empty
        node <- frontier.pop()

        if problem.goalTest(node.state)
            return node.solution

        add node.state to explored

        for action, childState, stepCost in problem.successorFunction(node.state)
            if childState is not in explored or frontier
                newNode <- Node(childState, node, node.solution + action, node.pathCost + stepCost)

                if childState is in frontier with higher path cost
                    replace that frontier node with newNode
                else
                    add newNode to frontier with path cost

    return failure

Вот несколько дополнительных методов, обычно используемых в алгоритмах поиска по графам:

  1. problem.initialState: возвращает исходное состояние проблемы.
  2. problem.goalTest(state): проверяет, является ли данное состояние целевым.
  3. problem.successorFunction(state): генерирует преемников данного состояния, а также соответствующие действия и стоимость шагов.
  4. Node(state, родительский, action, pathCost): представляет узел в дереве поиска, где state— текущее состояние, parent— родительский узел, action— действие, предпринятое для достижения этого состояния из родительского узла, а pathCost— стоимость пути от начального состояния к текущему состоянию..