首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Reversi/Othello AI在1秒内工作

Python Reversi/Othello AI在1秒内工作
EN

Stack Overflow用户
提问于 2016-10-21 00:00:55
回答 1查看 896关注 0票数 2

在最近的一项任务中,我们被赋予了创建Reversi/Othello AI的任务,它可以在1 s下进行有效的移动。我已经开始了一个简单的机器人,它采取所有可用的移动和得分的基础上的价值。在第二个bot上,我也增加了移动价值的排名。现在,我已经做了一个机器人,搜索与最小最大3移动前进,并评估的移动,根据得分。我的问题是,它被分数/机动性打败了,比机器人高出一步。这有可能吗?还是我把人工智能编码错了?是因为我只在前面三步搜索吗?

我的机器人从这个开始:

代码语言:javascript
复制
possible_moves = self.get_available_moves(board,self.my_color,self.opponent_color)
for [x, y] in possible_moves:
    new_board = self.make_board_copy(board)
    new_board[x][y] = self.my_color
    new_alpha = self.minmax(new_board,1,alpha,beta)
    if new_alpha > alpha:
        alpha = new_alpha
        best_move = [x,y]

然后讲到这个:

代码语言:javascript
复制
    def minmax(self, board, depth, alpha, beta):
    # END NODE
    if depth == self.max_depth:
        return self.evaluate(board)
    else:
        # MAX NODE = MY MOVE
        if depth % 2 == 0:
            possible_moves = self.get_available_moves(board,self.my_color,self.opponent_color)
            for [x, y] in possible_moves:
                new_board = self.make_board_copy(board)
                new_board[x][y] = self.my_color
                new_alpha = self.minmax(new_board,depth+1,alpha,beta)
                if new_alpha > alpha:
                    alpha = new_alpha
                if alpha > beta:
                    return alpha
            return alpha
        # MIN NODE
        else:
            possible_moves = self.get_available_moves(board,self.my_color,self.opponent_color)
            for [x,y] in possible_moves:
                new_board = self.make_board_copy(board)
                new_board[x][y] = self.my_color
                new_beta = self.minmax(new_board, depth + 1, alpha, beta)
                if new_beta < beta:
                    beta = new_beta
                if beta < alpha:
                    return beta
            return beta

我检查了很多次代码,但仍然找不出我的代码是坏的,还是AI被击败,因为它搜索不够深入。

EN

回答 1

Stack Overflow用户

发布于 2016-10-21 00:16:36

如果它使用相同的评估,我认为低深度搜索不太可能超过更高深度搜索,而且很可能是不可能的。

你能解释alpha和beta,minmax函数更多一点,或者显示更多的代码吗?阿尔法和贝塔都是正面的吗?

我认为奇怪的节点函数可能有问题:

代码语言:javascript
复制
if new_beta < beta:
    beta = new_beta
if beta < alpha:
    return beta

如果alpha和beta都是正值,那么您希望第一行是

代码语言:javascript
复制
if new_beta > beta:

这也取决于你如何在棋盘上得分。这显然是非常重要的--我不知道你的人工智能是从比赛中学到这一点,还是你根据各种位置因素和判断给了它一个评价。

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

https://stackoverflow.com/questions/40166357

复制
相关文章

相似问题

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