【问题标题】:Is BFS or DFS an efficient search algorithm for Ms PacmanBFS 或 DFS 是吃豆人女士的有效搜索算法吗
【发布时间】:2021-12-19 22:57:31
【问题描述】:

我正在为 Ms Pacman AI 实施搜索算法。我认为从 BFS 或 DFS 等基本搜索开始是个好主意。我刚刚实现了一个 BFS,但是当我运行我的代码时,ms pacman 撞到了墙上。我想知道,我的 BFS 代码有什么可以改进的吗?还是不够?

    public MOVE BFS(Game game){
        EnumMap<Constants.GHOST,MOVE> ghostMove = new EnumMap<>(Constants.GHOST.class);
        MOVE bestMove = MOVE.NEUTRAL;
        Queue<Game> q = new LinkedList<>();
        q.add(game.copy());
        while(!q.isEmpty()){
            Game current = q.peek();
            q.remove();
            for (MOVE move : current.getPossibleMoves (current.getPacmanCurrentNodeIndex())) {
                Game neighbor = game.copy();
                neighbor.advanceGame(move, ghostMove);
                q.add(neighbor);
                if ((current.getNumberOfActivePills() == 0) && (current.getNumberOfActivePowerPills() == 0)) {
                    return move;
                }
            }
        }
        return bestMove;
    }

【问题讨论】:

  • 为什么要运行 BFS/DFS?你希望用它完成什么?
  • 先尝试自己调试代码,如果还不够,请发布minimal reproducible example 显示您的调试尝试。

标签: java artificial-intelligence depth-first-search breadth-first-search pacman


【解决方案1】:

我将假设您打算使用 BFS 以最有效的方式解决 Ms Pacman,即最短路径。我认为您的 BFS 存在一些问题,但是如果不访问您的其余代码,很难确切地知道每个函数调用在做什么。您的代码中可能存在错误的是,您永远不会将 bestMove 设置为 MOVE.NEUTRAL 以外的任何内容,这可能会导致撞墙。通常使用 BFS,您希望找到到特定目标的最短路径,并且您希望通过跟踪访问过的空间来避免回溯。在将 BFS 应用到您的游戏之前,它可能有助于真正熟悉 BFS 以解决迷宫或更简单的事情。

如果我要使用 bfs 来实现类似的东西,我会使用 bfs 找到最近的药丸的路径并返回该路径。然后,我将使用这条路径将 Pacman 女士一步一步移到药丸上。然后,一旦她吃了药丸,我就会重复这个过程,直到没有剩下的为止。我不确定 bfs 是否是 Pacman 的最佳算法,但它应该可以工作,但可能不会导致 AI 成为最佳玩家。另外,为了防止玩家卡住,我只会跟踪访问过的空间以找到通往药丸的单个路径,然后用每个新路径重置它。

听起来是个有趣的项目,祝你好运!

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2011-10-05
  • 2018-09-29
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 2017-02-05
  • 2019-04-01
相关资源
最近更新 更多