解剖 Stockfish 第三部分:深入了解棋类引擎

原文:towardsdatascience.com/dissecting-stockfish-part-3-in-depth-look-at-a-chess-engine-51b59e532bb4?source=collection_archive---------6-----------------------#2024-07-22

大规模浏览棋局树

https://medium.com/@antoine.champion?source=post_page---byline--51b59e532bb4--------------------------------https://towardsdatascience.com/?source=post_page---byline--51b59e532bb4-------------------------------- Antoine Champion

·发表于Towards Data Science ·阅读时间 5 分钟·2024 年 7 月 22 日

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e3759642068a88760c83493078f2d5eb.png

Stockfish 棋类引擎,背景照片由ᴊᴀᴄʜʏᴍ ᴍɪᴄʜᴀʟ提供,图片来自Unsplash

欢迎回到我们关于 Stockfish 棋类引擎内部运作的系列文章。本系列的目标是解释使 Stockfish 成为世界上最强大的棋类引擎之一的算法和技术。通过了解这些机制,我们可以深入理解计算机科学、人工智能和博弈论的交汇点。

本系列的前几部分探讨了 Stockfish 是如何找到一个可行的棋步(第一部分)并评估该棋步的局势质量(第二部分)。但如何考虑我们的对手接下来可能的棋步呢?我们又该如何回应?

为了应对这种情况,Stockfish 依赖于一个最终概念:深度。

所有棋步的树

游戏开始:兵到 e4。对手回应 e5。然后是 Nf3,Nc6,依此类推。这个序列在所有可能的棋步树中形成了一条分支。

Stockfish 浏览这个树状结构,以基于所有可能的结果确定最佳棋步。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/16ab623cbace833e3d4b82cb6a350c6a.png

高层概述 — 图片由作者提供

最坏的最优结果

在博弈论中,有一个适用于回合制游戏的通用算法:Minimax 算法。其核心在于,由于无法预测对手的棋步,因此假设对手总是为自己选择最好的棋步。

下面的图示展示了这一点:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/be81af5a92f71021445ee059068626cf.png

国际象棋的 Minimax 算法。正分意味着白方占优,负分意味着黑方占优 — 图片由作者提供

  • 对于主教到 G3这一步,Stockfish 会考虑对手的所有可能回应。

  • 尽管某些棋步,如兵到 A7A6,会得到正分,但车到 E8的棋步却导致了 -5.6 的不利局面。

  • 这个最坏的结果使得主教到 G3的分数为 -5.6,因为假设对手(黑方)会找到并下出最佳的棋步。

  • 计算完所有棋步和回应后,Stockfish 为自己(白方)选择了最佳的选项,即骑士到 D4

尽管那个例子展示了如何使用单一棋步及对手的回应,Minimax 算法可以递归地扩展到无限深度。限制因素是计算资源,这也引出了下一部分。

优化与权衡

尽管 Stockfish 每秒可以评估数百万个棋步,但由于每增加一层深度,可能的棋步呈指数级增长,它仍然无法在合理的时间内评估整个棋局。

例如,克劳德·香农证明,要从起始位置达到 10 步的深度,需要评估 690 亿个位置。仅使用 Minimax 算法,这将需要几天时间。

Stockfish 对 Minimax 算法进行了多项改进。其中之一是Alpha-Beta 剪枝,它优化了移动树的遍历。如下图所示:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/30800d0c726948a806121b8fc2cae162.png

国际象棋中的 Alpha-Beta 剪枝 — 图片由作者提供

  • Stockfish 计算得出,序列车到 E8 -> 骑士到 G4 -> 主教到 G4将导致 -5 的不利局面。

  • 另一序列车到 E8 -> 主教到 C6已经被探索过,并得出了 -1 的分数,这比当前正在探索的分支要好。

  • 因此,骑士到 G4可以被舍弃,转而选择更好的选项:主教到 C6

其他技术,如迭代加深,进一步提升了这个过程:当引擎在深度 N 上进行计算时,它会存储搜索的最佳线路,这样在深度 N+1 时,搜索时可以优先探索这些棋步。

Stockfish 的最终大局搜索算法非常复杂(见 search.cpp),但它利用了另一种现代计算技术:多线程。

分布式搜索

现代计算机可以使用多线程,从而使 Stockfish 能够利用分布式计算能力进行扩展。

为此,Stockfish 利用多个线程并行搜索最佳走法,每个线程通过并发内存存储系统进行通信。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/cbbe0e8bdfd6d63504325cdb915331fb.png

使用共享字典的并行计算 — 图片由作者提供

计算线程并行搜索树。

  • 当一个线程完成一个分支时,它将结果写入共享字典。

  • 当一个线程开始一个新分支时,它会检查字典中是否有其他线程已经计算过该分支。

还有一个主线程充当协调者:

  • 它从线程池中存储并启动计算线程。

  • 它为每个计算线程提供初始条件(例如,搜索树时的顺序偏移,以增加搜索熵并更快地填充字典)。

  • 它监视线程是否完成计算,若完成,则停止所有计算线程,并从字典中读取评估结果。

有趣的是,访问“真正的”并发字典时,内存锁所需的几纳秒会产生过多的开销。因此,Stockfish 的程序员开发了自己的分布式表格(参见tt.h)。

结论

总结:

  • Stockfish 为给定深度生成每一个候选走法。

  • 它在树中使用各种优化方法评估这些走法。

  • 它增加了评估深度,并重复这一过程。

通过这个系列,我们揭示了 Stockfish 如何将经典算法与现代计算技术和神经网络结合,实现最先进的性能。

理解 Stockfish 的内部工作原理,不仅能解开这款最强国际象棋引擎之一的神秘面纱,还能为计算和人工智能中的挑战及解决方案提供更广泛的见解。由于其固有特性,Stockfish 主要关注效率,这一主题在计算能力不断提升的背景下,已在人工智能领域变得越来越少见。此外,Stockfish 还是如何从 AI 核心构建一个完整的分布式系统的一个范例。

我希望这个系列对你有所启发并具有教育意义。感谢阅读!

若要进一步阅读,你可以查阅国际象棋编程百科,并加入计算机国际象棋俱乐部论坛,讨论国际象棋编程。

antoinechampion.com

六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)内容概要:本文档围绕六自由度机械臂的ANN人工神经网络设计展开,详细介绍了正向与逆向运动学求解、正向动力学控制以及基于拉格朗日-欧拉法推导逆向动力学方程的理论与Matlab代码实现过程。文档还涵盖了PINN物理信息神经网络在微分方程求解、主动噪声控制、天线分析、电动汽车调度、储能优化等多个工程与科研领域的应用案例,并提供了丰富的Matlab/Simulink仿真资源和技术支持方向,体现了其在多学科交叉仿真与优化中的综合性价值。; 适合人群:具备一定Matlab编程基础,从事机器人控制、自动化、智能制造、电力系统或相关工程领域研究的科研人员、研究生及工程师。; 使用场景及目标:①掌握六自由度机械臂的运动学与动力学建模方法;②学习人工神经网络在复杂非线性系统控制中的应用;③借助Matlab实现动力学方程推导与仿真验证;④拓展至路径规划、优化调度、信号处理等相关课题的研究与复现。; 阅读建议:建议按目录顺序系统学习,重点关注机械臂建模与神经网络控制部分的代码实现,结合提供的网盘资源进行实践操作,并参考文中列举的优化算法与仿真方法拓展自身研究思路。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值