簡體   English   中英

BFS 或 DFS 是 Pacman 女士的有效搜索算法嗎

[英]Is BFS or DFS an efficient search algorithm for Ms Pacman

我正在為 Ms Pacman AI 實現搜索算法。 我認為從一些基本搜索(如 BFS 或 DFS)開始是個好主意。 我剛剛實現了一個 BFS,但是當我運行我的代碼時,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 以最有效的方式(即最短路徑)解決吃豆子女士的問題。 我認為您的 BFS 存在一些問題,但是如果不訪問您的其余代碼,則很難確切地知道每個函數調用在做什么。 您的代碼中可能存在錯誤的是,您永遠不會將 bestMove 設置為 MOVE.NEUTRAL 以外的任何內容,這可以解釋撞牆。 通常使用 BFS,您希望找到到達特定目標的最短路徑,並且您希望通過跟蹤訪問過的空間來避免回溯。 在將 BFS 應用於您的游戲之前,它可能有助於真正適應 BFS 來解決迷宮或更簡單的問題。

如果我要使用 bfs 實現類似的東西,我會使用 bfs 找到最近的葯丸的路徑並返回該路徑。 然后我會使用這條路徑一步一步地將 Pacman 女士移到葯丸上。 然后一旦她吃了葯丸,我就會重復這個過程,直到沒有剩下。 我不確定 bfs 是 Pacman 的最佳算法,但它應該可以工作,只是可能不會導致 AI 成為最佳播放器。 同樣為了防止玩家卡住,我只會跟蹤訪問過的空間以獲取葯丸的單個路徑,然后使用每個新路徑重置它。

聽起來是個有趣的項目,祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM