Database design 为抽象策略游戏生成开卷和收尾数据库

Database design 为抽象策略游戏生成开卷和收尾数据库,database-design,data-structures,artificial-intelligence,Database Design,Data Structures,Artificial Intelligence,通过测试我的抽象战略游戏和AI,我注意到前几步和最后几步比游戏中间要花更多的时间 生成开场白和尾声数据库的好方法是什么?这些数据库中应该存储什么 也许可以使用perft函数: private long perft(IBoard boardCopy, int depth) { long nodes = 0; List<Move> moves = boardCopy.getMoves(); if (depth == 1) return moves.size()

通过测试我的抽象战略游戏和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;
}
private long perft(IBoard boardCopy,int depth)
{
长节点=0;
List moves=boardCopy.getMoves();
if(depth==1)返回moves.size();
for(int i=0,n=moves.size();i
并且可以增强保存当前位置和分数的副本


然后,这些信息是否应该输入到移动生成功能或搜索本身?

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


对于结束游戏,根据游戏的不同,您可以从结束游戏的位置开始。谷歌终端游戏桌面。他们是通过动态规划从获胜的位置,通过玩游戏“向后”。任何可以迫使获胜的位置都被标记为获胜位置等。存储获胜位置的哈希值、获胜移动的距离,以及可能的最佳打法。

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

对于结束游戏,根据游戏的不同,您可以从结束游戏的位置开始。谷歌终端游戏桌面。他们是通过动态规划从获胜的位置,通过玩游戏“向后”。任何能够迫使获胜的位置都被标记为获胜位置等。存储获胜位置的哈希值、获胜移动的距离,以及可能的最佳打法