寻找最佳启发式算法、A* 搜索、pacman
Looking for optimal heuristic, A* search, pacman
(所有图板的每个角都以点开头)
如果我有这样的吃豆人板
*--------------------*
----------------------
----------------------
----------------------
----------------------
----------------------
----------------------
P--------------------*
----------------------
让他吃掉所有点 (*
) 的最佳试探法是什么?
我正在使用 A* 搜索。我试过使用曼哈顿距离,但是一旦将墙壁扔进混合物中,它就不会达到与 BFS 相同的结果,因此不是最优的。我正在寻找它是最佳的,同时比 BFS 扩展更少的节点。
好的,我找到了解决方案:
(到最远角的最大(x,y)距离
childXY = 州[0]
cornersLeft = 状态[1]
maxDistance = 10000
minDistance = 0
farthestCorner = 0
nearestCorner = 0
for corner in cornersLeft:
if util.manhattanDistance(childXY, corner) > minDistance:
minDistance = util.manhattanDistance(childXY, corner)
farthestCorner = minDistance - min((childXY[0]-corner[0]),(childXY[1]-corner[1]))
heuristic = farthestCorner
print "heuristic is: ", heuristic
return heuristic
我的 A* 搜索存在问题,最终导致我的启发式算法无法正常工作。
(所有图板的每个角都以点开头)
如果我有这样的吃豆人板
*--------------------*
----------------------
----------------------
----------------------
----------------------
----------------------
----------------------
P--------------------*
----------------------
让他吃掉所有点 (*
) 的最佳试探法是什么?
我正在使用 A* 搜索。我试过使用曼哈顿距离,但是一旦将墙壁扔进混合物中,它就不会达到与 BFS 相同的结果,因此不是最优的。我正在寻找它是最佳的,同时比 BFS 扩展更少的节点。
好的,我找到了解决方案:
(到最远角的最大(x,y)距离
childXY = 州[0] cornersLeft = 状态[1]
maxDistance = 10000
minDistance = 0
farthestCorner = 0
nearestCorner = 0
for corner in cornersLeft:
if util.manhattanDistance(childXY, corner) > minDistance:
minDistance = util.manhattanDistance(childXY, corner)
farthestCorner = minDistance - min((childXY[0]-corner[0]),(childXY[1]-corner[1]))
heuristic = farthestCorner
print "heuristic is: ", heuristic
return heuristic
我的 A* 搜索存在问题,最终导致我的启发式算法无法正常工作。