gpt4 book ai didi

algorithm - 棋盘游戏 AI 的启发式函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:52:06 26 4
gpt4 key购买 nike

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

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

如图所示,初始板上有绿色和红色标记。人工智能首先移动,播放与您相反的颜色,攻击您的标记。在黑色单元格上, token 可以正交(左、右、上、下)或对角线移动。如果它在白色单元格上,您只能正交移动。

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

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

对于 AI 来说什么是好的启发式函数?我应该在当前函数中更改什么?

最佳答案

您的功能确实很差:它重视右下角和棋子的数量。 D8 的单件值(value)超过中心的三件。

我建议您采用当前的 AI 技术:与其要求我们为您进行研究,不如开发一个程序来探索太空。开发广泛的评估函数并执行遗传搜索以优化该函数的参数。

例如,遍历所有片段,但使用

的特征代替行数和列数
  • 占据黑色方 block
  • 相邻的敌人棋子
  • 相邻的友好棋子
  • 在边缘/拐角处或附近
  • 可用 Action

现在,让您的评估函数成为这些特征的线性组合。比如说,选择 100 组参数。在循环赛中让这些程序相互竞争。

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

继续这些重复,直到程序强度收敛,或者至少达到让您满意的发挥水平。

关于algorithm - 棋盘游戏 AI 的启发式函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47425277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com