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;
}

そして、現在の位置とスコアのコピーを保存するように拡張できますか?

次に、この情報を移動生成関数または検索自体に供給する必要がありますか?

4

1 に答える 1

1

開くには、動きを事前に計算する方法が必要です。次に、ゲームの状態と移動のハッシュを保存します。GoogleZobristHashing。

エンドゲームの場合、ゲームによっては、ゲームを終了する位置から開始できます。Googleエンドゲームテーブルベース。それらは、ゲームを「逆方向」にプレイすることにより、勝利ポジションから動的計画法によって構築されます。勝ちポジションを強制できるポジションは、勝ちポジションなどとしてマークされます。勝ちポジションのハッシュ、勝つための移動距離、そしておそらく最高のプレーを保存します。

于 2013-03-20T10:14:44.900 に答える