Connect-K AI的良好启发式

时间:2016-10-23 05:46:38

标签: python performance artificial-intelligence heuristics

我正在写一个Connect-K简单的AI(没有修剪,只有4层)。我想知道什么是快速计算的最佳启发式

比我的东西更好:

def eval(board, player)
    connections = 0
    magnitude = 0
    for x in range(0, self.boardW(board)):
        for y in range(0, self.boardH(board)):
            if(self.get_player(board, x, y) == player): #assuming x and y are in bounds
                temp = 1
                # keep checking in this direction to find the max temp can be
                if (magnitude < temp):
                    magnitude = temp
            if(self.get_player(board, x, y) == player):
                connection += 1
        ........
    return connection**2 + magnitude**2

基本上这应该返回板上任何位置与其相邻点的最大连接数,以及8个方向中任意一个连续项目的数量(向上,向下,向左,向右,左上角,左下角,......

我的 k 将大于4;因此,我无法进行详尽的树搜索。

1 个答案:

答案 0 :(得分:1)

min-max搜索在此方案中可能很有用,可能与简化的MCTS结合使用。基本上,更深层的递归会让你达到游戏的更多终结状态。通过分析哪个玩家在每个案例中获胜,您可以更好地理解某个行动的价值。

min-max方法对于两个玩家之间的游戏非常有用,并且广泛用于诸如此类的棋盘游戏。 MCTS可能有点矫枉过正,但总的想法是对随机,深入的搜索进行广泛搜索。例如,您可以随机选择10个分支,并使用相同的计算量进行6-7个递归步骤,而不是具有20的分支因子,并且只有5个递归级别(20 ^ 5 = 320万)。

在类似项目中获得良好结果的东西(用于检查器的AI)是在递归中进一步降低分支因子。通过定义最大分支(在递归步骤中要探索的最大分支数),让这个数字大于顶层的典型分支,并在递归时进一步减少到更小的数字(5-10到相当)很快,1-3在底部)。这样,您就可以获得两全其美的效果。您可以探索所有即将发生的动作,但您也可以获得有关它们如何影响游戏后期部分的大量信息。

快速回顾:使用MCTS和min-max,您可以找到许多终结状态。如果对手赢了,给它一个大的负分。如果你赢了,给它一个大的正分数如果两者都没有,你可以给它一个0,或者使用你在问题中显示的函数。通过利用最小 - 最大算法,让父游戏状态的得分取决于他们孩子的得分。