棋盘游戏AI的启发式功能

时间:2017-11-22 01:09:02

标签: algorithm data-structures artificial-intelligence heuristics

我正在尝试为棋盘游戏找出一个更好的启发式功能,我将在代码后指定其规则。我的评价函数是:

def evaluate(self, board):
        score = 0
        for i in range(board.LENGTH):
            for j in range(board.WIDTH):
                if board.board[i][j].token == "G":
                    score += 100 * (i+1) + 50 * (j + 1)
                if board.board[i][j].token == "R":
                    score -= 100 * (i+1) + 50 * (j + 1)
return score

Board

初始板包含绿色和红色标记,如图所示。 AI首先移动,播放与你相反的颜色,攻击你的标记。在黑色单元格上,令牌可以正交(左,右,上,下)或对角移动。如果它在白色单元格上,则只能正交移动。

当您将令牌移到对手的令牌旁边时,您将移除该方向上的所有对手令牌。例如,如果我将绿色标记从C4移动到C5,我将杀死C-6到C-9上的所有R标记。这称为前向攻击。同样,如果你有一个与对手令牌相邻的令牌,你可以远离它,移除该行中的所有令牌。

显然,黑色细胞上的标记有更多可能的移动。

AI会有什么好的启发式功能?我目前的职能应该改变什么?

1 个答案:

答案 0 :(得分:2)

你所拥有的功能确实很差:它重视右下角和碎片的数量。 D8的单件在中心的价值超过三件。

我建议您在AI中使用当前的技术:不要让我们为您做研究,而是开发一个探索空间的程序。开发基于广泛的评估功能并执行遗传搜索以优化该功能的参数。

例如,遍历所有部分,而不是行&编号使用

的功能
  • 占据黑色广场
  • 邻近的敌人
  • 相邻的友好作品
  • 在边缘/角落附近
  • 可用的动作

现在,让您的评估功能成为这些功能的线性组合。比方说,选择100套参数。在循环赛中对阵彼此的比赛。

保持前20名选手。通过变异和交叉来制作另外80组参数。重复比赛。

继续这些重复,直到程序强度收敛,或者至少达到满足你的游戏水平。