寻找最优启发式,A*搜索,吃豆人

small board

larger board

(所有棋盘开始时每个角落都有豆子)

如果我有一个这样的吃豆人棋盘

*--------------------*------------------------------------------------------------------------------------------------------------------------------------P--------------------*----------------------

要让他吃掉所有的豆子(*),最好的启发式是什么?我在使用A*搜索。我尝试过使用曼哈顿距离,但是一旦加入了墙壁,它的效果就不如广度优先搜索(BFS),因此不是最优的。我希望它在扩展的节点数少于BFS的情况下达到最优效果。


回答:

好的,我找到了一个解决方案:

(到最远角落的最大(x,y)距离)

childXY = state[0] cornersLeft = state[1]

maxDistance = 10000minDistance = 0farthestCorner = 0nearestCorner = 0for 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 = farthestCornerprint "heuristic is: ", heuristicreturn heuristic

我的A*搜索存在一个问题,最终导致我的启发式无法正常工作的主要问题。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注