Graph 如何通过收集最多的项目来击败迷宫中的贪婪搜索算法?

Graph 如何通过收集最多的项目来击败迷宫中的贪婪搜索算法?,graph,artificial-intelligence,path-finding,a-star,maze,Graph,Artificial Intelligence,Path Finding,A Star,Maze,首先我来解释这个问题。我有一个玩家在一个封闭的迷宫里,里面装满了他应该收集来赢得比赛的物品。我们还有一个对手,他也尝试着做同样的事情。收集物品最多的玩家获胜。假设对手按照BFS算法收集物品,我们可以访问其每一回合的所有决定,我们可以预测迷宫中的哪些物品应该首先进入(这样它就不会有机会让物品靠近它),或者只是锁定一个物品更密集的位置 感觉随机性也会对这一点产生非常严重的影响(例如,大多数物品落在对手旁边)。如果对手采用A*算法呢 我已经为我们的玩家实现了一个A*算法。首先,我使用曼哈顿距离启发式地

首先我来解释这个问题。我有一个玩家在一个封闭的迷宫里,里面装满了他应该收集来赢得比赛的物品。我们还有一个对手,他也尝试着做同样的事情。收集物品最多的玩家获胜。假设对手按照BFS算法收集物品,我们可以访问其每一回合的所有决定,我们可以预测迷宫中的哪些物品应该首先进入(这样它就不会有机会让物品靠近它),或者只是锁定一个物品更密集的位置

感觉随机性也会对这一点产生非常严重的影响(例如,大多数物品落在对手旁边)。如果对手采用A*算法呢

我已经为我们的玩家实现了一个A*算法。首先,我使用曼哈顿距离启发式地寻找最近的物品,然后我去收集它并再次寻找新的最近的物品,等等。我觉得“寻找最近的物品”方法可能没有那么有效,可能是针尖指向(不知怎的,哈哈)正如我所说的,物品密集的地方更好

def astar(开始、项目、mazeMap):
#mazeMap是一个包含节点的字典,并作为每个节点的键
与另一个包含邻居作为键的字典相关联
并将边的权重作为值传递给它们
#items是一个给出每个项目位置的成对列表
#明显目标
#目标是一对(最近的项目,距离最近的项目)
目标=最近的项目(开始,项目)
#不再需要检查的节点集
#closedSet={node:[gscore,fscore]}
closedSet={}
#潜在短路径节点集
#openSet={node:[gscore,fscore]}
openSet={开始:[0,目标[1]]}
#设置以构造最佳路径
cameFrom={}
而len(openSet)>0:
#正在查找具有最小fscore的节点
当前=列表(openSet.keys())[0]
对于键,openSet.items()中的值:
如果值[1]=开放集[keys][0]:
持续
#此新路径比上一条更好,请保存它!
cameFrom[键]=当前
openSet[keys][0]=暂定的\u gscore
openSet[keys][1]=暂定的\u gscore+曼哈顿距离(keys,目标[0])
返回“不可能”