a *搜索。从初始位置添加移动成本

时间:2012-03-20 17:04:49

标签: python search a-star

如果f = g + h,那么在下面的代码中我会添加g?

此外,除了从我的初始位置添加移动成本之外,我还能如何使这段代码更有效率?

def a_star(initial_node):
    open_set, closed_set = dict(), list()
    open_set[initial_node] = heuristic(initial_node)
    while open_set:
        onode = get_next_best_node(open_set)
        if onode == GOAL_STATE:
            return reconstruct_path(onode)
        del open_set[onode]
        closed_set.append(onode)
        for snode in get_successor_nodes(onode):
            if snode in closed_set:
                continue
            if snode not in open_set:
                open_set[snode] = heuristic(snode)
                self.node_rel[snode] = onode
    return False

1 个答案:

答案 0 :(得分:0)

在上一个if中,如果snode不在open_set中(没有双关语!),则不应该只设置启发式,而应该设置启发式加上当前节点的成本。如果在开放集中snode ,则应检查当前值与当前值之间的最小值(如果有两种或更多种方法到达同一节点,则应考虑成本最低的节点) )。

这意味着您需要存储节点的“实际”成本和“估计”成本。初始节点的实际成本为零。对于每个新节点,它是另一个顶点的成本加上弧的成本之间的每个传入弧的最小值(换句话说,最后一个节点的成本加上从那个节点移动到当前节点的成本)。估计的成本必须将两个值相加:到目前为止的实际成本加上启发式函数。

我不知道你的代码中是如何表示节点的,所以我不能给出更具体的建议。如果您仍有疑问,请编辑您的问题,提供更多详细信息。