首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >棋类游戏AI的启发式函数

棋类游戏AI的启发式函数
EN

Stack Overflow用户
提问于 2017-11-22 01:09:02
回答 1查看 1.8K关注 0票数 0

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

代码语言:javascript
复制
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令牌。这就是所谓的向前攻击。类似地,如果您有一个令牌与对手的令牌相邻,您可以离开它,移除该行中的所有令牌。

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

对于人工智能来说,什么才是好的启发函数?我应该改变我目前的职能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-22 01:29:55

你所拥有的功能确实很差:它重视右下角和作品数量。在D8,一件作品胜过中心的三件。

我建议你在人工智能中使用当前的技术:而不是让我们为你做你的研究,开发一个程序来探索这个空间。开发一个广泛的评估功能,并进行遗传搜索,以优化该功能的参数。

例如,迭代所有的片段,但是没有使用行数,而是使用了

  • 占领黑色广场
  • 邻近敌国
  • 邻接友好件
  • 在边缘/拐角处或附近
  • 可用移动

现在,将您的评估函数作为这些功能的线性组合。挑选,比如说,100组参数。在一场循环赛中,互相对决。

保持前20名决赛。通过变异和交叉生成另外80组参数。重复巡回演出。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47425277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档