头图

在没有现代机器学习算法之前,围棋游戏软件中的人机对弈主要依赖于经典的算法和技术手段。这些算法并不像今天的深度学习模型那样可以从大量数据中自我学习,而是根据棋局规则和预定的计算逻辑来决定下一步动作。围棋作为一种拥有极高复杂度的棋盘游戏,棋盘上的状态空间极其庞大。因此,早期的围棋游戏软件需要依赖特定的算法来处理这类问题,主要有两大类方法:穷举法启发式算法

穷举法:极小化极大算法 (Minimax Algorithm)

围棋是一种零和游戏,也就是说,游戏中一方的得分增加意味着另一方的得分减少。因此,经典的围棋对弈软件常使用极小化极大算法(Minimax Algorithm),它的基本思想是将玩家分为两方:一方希望最大化自己的得分,另一方则希望最小化对方的得分。在这一算法中,计算机会通过穷举所有可能的走法,评估每一种局面的得分,进而选择最优的一步。

Minimax Algorithm 示意图

极小化极大算法的原理可以通过一个简单的例子来说明。假设在围棋的某个局面下,有三个可能的走法:A、B 和 C。对于每一个走法,计算机会继续模拟对手的应对,并对每个可能的局面进行评估:

  • 如果选择走法 A,计算机会模拟对方的应对,发现对方有两种可能的反应:a1 和 a2。计算机会评估 a1 和 a2 对当前局面的影响,并选择对自己最不利的那个结果,因为它假设对手会尽量选择最优应对。
  • 对于走法 B 和 C,计算机也会模拟类似的对手反应,并最终选择一个对自己影响最小的局面。

这样,计算机会在评估了所有可能的走法后选择最优的一步,从而达到“最佳防守”的效果。
{B729FA71-94A3-4861-ACAE-ECFB4DD8144C}.png

Alpha-Beta 剪枝:优化搜索过程

由于围棋的复杂性,直接穷举所有可能的走法计算量过大,因此实际使用中经常会结合Alpha-Beta 剪枝算法来优化极小化极大算法的搜索过程。Alpha-Beta 剪枝的核心思想是通过剪枝不必要的分支,减少需要计算的节点数量,从而提高搜索效率。

举一个具体的例子。假设当前棋盘上有多个可能的走法,而极小化极大算法需要对这些走法进行评估。如果计算机在计算某个走法时发现,这个走法的最差结果已经比另一个已知的走法更差,那么它就不需要继续深入评估这个分支。这种“提前放弃”的机制就是剪枝的核心。

Alpha–beta pruning algorithm

Alpha-Beta 剪枝技术大大减少了计算机在每一步时所需计算的节点数量,使得算法可以在合理的时间内完成对较复杂局面的搜索。

启发式算法:模式识别与局部搜索

尽管极小化极大算法和 Alpha-Beta 剪枝能够有效处理部分问题,但围棋的复杂性依然超出了这些算法的能力范围。因此,围棋游戏软件往往还结合了启发式算法,即通过一些经验法则或棋盘模式的识别,来缩小搜索范围或加速决策。

启发式算法的思想类似于人类的思考过程。人类在下棋时,通常不会从头到尾穷尽每一个可能的走法,而是通过对棋盘上的形势进行判断,找出一些值得重点关注的区域。围棋软件在此过程中会使用局部搜索算法,即只对那些影响较大的区域进行深入分析,而忽略其他无关紧要的地方。

例如,当计算机在某个局部看到一个可能的活三(在围棋中指三子成线,只差一子即成五子连珠的局面),它会优先对这一局部进行搜索和处理。这种基于棋盘模式的启发式搜索能够显著提高计算效率,同时避免全局穷举的低效。

实例:早期围棋软件的设计

一个经典的围棋对弈软件的实例是 1990 年代的 Handtalk。这是由中国程序员陈志行开发的一款围棋软件,并在当时的电脑围棋比赛中取得了不错的成绩。Handtalk 的设计主要依赖于极小化极大算法和启发式算法的结合。具体来说,它会基于局部形势进行启发式搜索,识别棋盘上的关键区域,再结合 Alpha-Beta 剪枝来减少搜索空间,最终做出决策。

在对局过程中,Handtalk 也会参考大量的棋谱数据库,通过比对当前棋局与历史上经典棋局的相似性来调整策略。这样,它不仅可以使用计算力量来进行搜索,还能依靠“经验”进行合理推断。

极大难点:围棋的庞大状态空间

尽管这些算法在围棋对弈中发挥了重要作用,但由于围棋的状态空间极其庞大,早期的计算机围棋水平仍然有限。围棋的棋盘有 19x19 格,可能的棋局变化数以亿万计,远远超出了传统算法可以处理的范围。即使是结合了启发式搜索和剪枝技术,早期的围棋软件仍然无法完全穷尽所有可能性,决策的质量受限于搜索深度和启发式规则的有效性。

为了应对这一问题,围棋软件开发者们尝试通过进一步优化算法和增加棋谱库来提高对弈水平。然而,围棋的复杂性依然限制了计算机在高水平对局中的表现,这也是为什么在没有机器学习和深度学习之前,计算机围棋软件在人类顶尖棋手面前常常处于劣势。

案例研究:1997 年 Deep Blue 与围棋的对比

作为对比,可以参考 1997 年的深蓝(Deep Blue)击败世界国际象棋冠军卡斯帕罗夫(Garry Kasparov)的事件。深蓝使用的是类似的极小化极大算法和 Alpha-Beta 剪枝技术,并结合了大量的棋局数据库。然而,国际象棋的状态空间相比围棋要小得多,深蓝可以通过增强的计算能力进行足够深的搜索,从而在短时间内做出较为精准的决策。

与围棋不同,国际象棋的棋盘为 8x8 格,状态空间相对有限,深蓝能够通过计算力弥补其决策逻辑上的缺陷。而在围棋中,即便拥有强大的计算能力,仅仅依赖传统算法依然难以应对棋盘的庞大复杂性。因此,深蓝的成功并没有立即复制到围棋软件上,直到深度学习技术的出现,围棋软件的对弈水平才有了质的飞跃。

启示与总结

在没有现代机器学习算法的时代,围棋软件主要依赖于经典的搜索算法和启发式规则来进行对弈。极小化极大算法与 Alpha-Beta 剪枝是早期计算机棋类游戏中的重要技术手段,而启发式算法则通过经验和模式识别来提高决策效率。然而,围棋的复杂性使得这些传统算法在处理大规模状态空间时遇到瓶颈,导致早期计算机围棋软件在面对高水平人类棋手时表现有限。

这些早期技术的发展为后来的机器学习和深度学习技术奠定了基础,而机器学习的引入彻底改变了围棋对弈软件的格局,使计算机在围棋领域中取得了巨大的进步。


注销
1k 声望1.6k 粉丝

invalid