哪种人工智能算法最适合国际象棋?

数据挖掘 机器学习 深度学习 可解释的ai 游戏 深思熟虑
2022-02-23 05:01:04

我正在研究我的国际象棋机器人,我想为它实现简单的人工智能。我是新手,所以我不确定如何专门在国际象棋上做到这一点。我听说过 Q-learning、Supervised/Unsupervised learning、Genetic algorithm 等,这可能不适用于国际象棋。我想知道AlphaZero是如何创建的?可能是遗传算法,但国际象棋是“如果 A 那么 B”可能行不通的游戏。这意味着 Q-learning 也对它不利,依此类推。

有什么建议可以用吗?

注意:我找到了dataset,虽然它也包括低评分的玩家游戏,所以我不确定用这个来训练机器人是否可以

4个回答

我不是该领域的专家,但我想提请您注意强化学习(维基百科关于 AlphaZero 的文章中也提到了这一点)。

强化学习:简介”一书(Richard S. Sutton 和 Andrew G. Barto)是一个很好的起点。似乎是从强化学习开始的“圣经”。

有一些简单的游戏实现,例如“井字游戏”(网上有很多示例),您可以从中了解如何开始。TicTacToe 上还有一个R 包

我还注意到github 上有一些国际象棋项目(例如 Python),您可能会觉得它们很有趣。

这是一个很大的问题。有两种基本方法,主要区别在于搜索算法。

第一种方法,目前由世界上最强大的引擎 Stockfish 使用,涉及极小极大作为搜索算法。然后它调用NNUE来评估搜索树末尾的位置。minimax算法涉及大量人类知识来剪除不必要的分支,并且非常复杂;大多数人认为Stockfish 的搜索算法是一个黑匣子也就不足为奇了。

第二强引擎 Leela Chess Zero 使用的第二种方法涉及蒙特卡洛树搜索。还有一个神经网络,它获取当前位置并输出候选移动列表,每个移动都有获胜百分比。然后,引擎在最有希望的动作中分配时间,在每个节点调用神经网络。Leela 的神经网络是从零先验人类知识的自我游戏中训练出来的——这是计算密集型的。

您可以在Chess Programming wiki上找到更多详细信息,以及 Chess.SE 上的几个问题(例如thisthis)。

AlphaZero 算法在 Leela Chess Zero 中实现,并且至少在 Stockfish 实现自己的 NN 辅助算法之前实际上是领导者之一。

在这里:https ://en.wikipedia.org/wiki/Leela_Chess_Zero

神经网络:https ://training.lczero.org/networks/?show_all=0

代码:https ://github.com/LeelaChessZero/lc0/releases

它使用第 20 和第 30 系列的张量核心在 Nvidia GPU 上进行分布式学习,因此是最先进的系统,完全开源,包括所有(很多)NN 权重。

我会推荐一种经典的 AI 方法

我建议您实现具有深度限制的Minimax或具有深度限制的 A*在这些场景中,您基本上重建游戏树并尝试所有移动并观察会发生什么(“好吧,如果我将它移到这里,我将获得优势,如果我将它移到那里,我将获得更多优势,等等......”)

如果您执意实施机器学习方法,Deep Q Learning值得一试。在这里,您尝试教深度神经网络如何“评价”动作,然后您只需对所有动作进行评分并选择最佳动作。