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

对于开局,您需要有一种预先计算移动的方法。然后存储游戏状态的哈希值和要进行的移动。谷歌 Zobrist 哈希。

对于残局,根据游戏的不同,您可以从结束游戏的位置开始。谷歌残局表库。它们是通过动态编程从获胜位置构建的,通过“向后”玩游戏。任何可以强制获胜的位置都被标记为获胜位置等。存储获胜位置的哈希值、获胜的移动距离以及可能的最佳玩法。

于 2013-03-20T10:14:44.900 回答