[英]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.