1

從測試玩我的抽象策略遊戲與AI,我注意到前幾個動作和末日遊戲的動作比遊戲中期需要更多的時間。生成抽象策略遊戲的開放書籍和遊戲數據庫

什麼是一個很好的方法來產生一個開放的書和殘局數據庫和什麼應該存儲在這些數據庫的?

也許可以使用perft功能:

private long perft(IBoard boardCopy, int depth) 
{ 
    long nodes = 0; 

    List<Move> moves = boardCopy.getMoves(); 

    if (depth == 1) return moves.size(); 

    for (int i = 0, n = moves.size(); i < n; i++) 
    { 
     boardCopy.make(moves.get(i), true); 
     nodes += perft(boardCopy, depth - 1); 
     boardCopy.undo(moves.get(i)); 
    } 

    return nodes; 
} 

,它可以提高保存當前位置和得分的副本?

該信息是否應該被送到移動生成函數或搜索本身?

回答

1

對於開放,您需要有一種預先計算移動的方法。然後你存儲遊戲狀態的散列和做出的動作。谷歌Zobrist哈希。

對於末日遊戲,根據遊戲情況,您可以從結束遊戲的位置開始。 Google Endgame Tablebase。它們是通過動態編程從獲勝位置開始構建的,通過「向後」玩遊戲。任何能夠強制獲勝的位置都被標記爲獲勝位置等。存儲獲勝位置的哈希值,獲勝的距離,以及可能的最佳表現。