通过测试我的抽象策略游戏与人工智能,我注意到前几个动作和结束游戏比游戏中期花费更多时间。
生成一本开场书和残局数据库以及应该存储在这些数据库中的内容有什么好方法?
也许可以使用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;
}
可以增强它以保存当前位置和分数的副本吗?
是否应将此信息提供给移动生成功能或搜索本身?
答案 0 :(得分:1)
要打开,你需要有一种预先计算移动的方法。然后存储游戏状态的哈希和移动。 Google Zobrist Hashing。
对于结束游戏,根据游戏,你可以从结束游戏的位置开始。 Google Endgame Tablebases。它们是通过动态编程从获胜位置构建的,通过“向后”玩游戏。任何可以强制获胜位置的位置都被标记为获胜位置等。存储获胜位置的哈希值,移动中的距离以及可能的最佳游戏。