我正试图为棋盘游戏找出一个更好的启发式函数,我将在代码之后指定它的规则。我的评价职能是:
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令牌。这就是所谓的向前攻击。类似地,如果您有一个令牌与对手的令牌相邻,您可以离开它,移除该行中的所有令牌。
显然,黑色细胞上的标记有更多的可能移动。
对于人工智能来说,什么才是好的启发函数?我应该改变我目前的职能吗?
发布于 2017-11-22 01:29:55
你所拥有的功能确实很差:它重视右下角和作品数量。在D8,一件作品胜过中心的三件。
我建议你在人工智能中使用当前的技术:而不是让我们为你做你的研究,开发一个程序来探索这个空间。开发一个广泛的评估功能,并进行遗传搜索,以优化该功能的参数。
例如,迭代所有的片段,但是没有使用行数,而是使用了
现在,将您的评估函数作为这些功能的线性组合。挑选,比如说,100组参数。在一场循环赛中,互相对决。
保持前20名决赛。通过变异和交叉生成另外80组参数。重复巡回演出。
继续这些重复,直到程序强度会聚,或至少达到满足你的游戏水平。
https://stackoverflow.com/questions/47425277
复制相似问题