如果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
在最后
if
,如果snode不在open\u集中(没有双关语!)不应该只设置启发式,而应该设置启发式加上当前节点的成本。如果snode在open集中是,则应检查当前值和当前值之间的最小值(如果有两种或两种以上的方法到达同一节点,则应考虑代价最小的方法)。你知道吗这意味着您需要同时存储节点的“实际”成本和“估计”成本。初始节点的实际成本为零。对于每个新节点,它是每个传入弧的最小值,介于另一个顶点的开销加上弧的开销(换句话说,最后一个节点的开销加上从该节点移动到当前节点的开销)之间。估计的成本必须加上两个值:到目前为止的实际成本加上启发式函数。你知道吗
我不知道这些节点在代码中是如何表示的,所以我不能给出比这更具体的建议。如果您仍然有疑问,请编辑您的问题提供更多细节。你知道吗
相关问题 更多 >
编程相关推荐