我正在尝试为棋盘游戏找出一个更好的启发式功能,我将在代码后指定其规则。我的评价函数是:
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
初始板包含绿色和红色标记,如图所示。 AI首先移动,播放与你相反的颜色,攻击你的标记。在黑色单元格上,令牌可以正交(左,右,上,下)或对角移动。如果它在白色单元格上,则只能正交移动。
当您将令牌移到对手的令牌旁边时,您将移除该方向上的所有对手令牌。例如,如果我将绿色标记从C4移动到C5,我将杀死C-6到C-9上的所有R标记。这称为前向攻击。同样,如果你有一个与对手令牌相邻的令牌,你可以远离它,移除该行中的所有令牌。
显然,黑色细胞上的标记有更多可能的移动。
AI会有什么好的启发式功能?我目前的职能应该改变什么?
答案 0 :(得分:2)
你所拥有的功能确实很差:它重视右下角和碎片的数量。 D8的单件在中心的价值超过三件。
我建议您在AI中使用当前的技术:不要让我们为您做研究,而是开发一个探索空间的程序。开发基于广泛的评估功能并执行遗传搜索以优化该功能的参数。
例如,遍历所有部分,而不是行&编号使用
的功能现在,让您的评估功能成为这些功能的线性组合。比方说,选择100套参数。在循环赛中对阵彼此的比赛。
保持前20名选手。通过变异和交叉来制作另外80组参数。重复比赛。
继续这些重复,直到程序强度收敛,或者至少达到满足你的游戏水平。