2. 引言
1997 年是一个具有象征意义的日子,国际象棋世界冠军加里·卡斯帕罗夫在与 IBM 的深蓝(Deep Blue)计算机的复赛中落败。这一事件标志着人们对机器学习系统的认知发生了范式转变,也证明了机器在复杂的零和博弈中战胜人类的能力。自那以后,象棋引擎不断进化,变得越来越强大。
本文将记录机器学习方法在国际象棋领域的发展历程。
3. 历史视角
让机器与人类下国际象棋的想法由来已久,最早可以追溯到 18 世纪末的一个复杂骗局。发明家沃尔夫冈·冯·肯佩伦(Wolfgang von Kempelen)为取悦奥地利女皇玛丽亚·特蕾莎,展示了一台名为“机械土耳其人”(The Mechanical Turk)的机器。
这台机器不仅能下出令人印象深刻的国际象棋对局,还能解决诸如“骑士巡游”(Knight’s Tour)之类的难题(骑士遍历棋盘上的每一个格子)。
但后来人们发现这其实是个骗局,因为机器内部需要有人操作。
虽然这并非真正的算法实现,但它无疑激发了后来工程师们的灵感。
4. 国际象棋算法的核心机制
第一台电子计算机的诞生几乎与第一批国际象棋算法的出现同步。计算机科学领域的几位先驱为这些算法的发展做出了重要贡献。
4.1. 阿兰·图灵与克劳德·香农
英国数学家和计算机科学家阿兰·图灵(Alan Turing)是最早开发国际象棋算法的杰出人物之一。他因在二战期间破解纳粹的加密通信而闻名。战后,他设计了第一个能在尚未问世的计算机上运行的国际象棋引擎。
后来,图灵与其本科同学大卫·加文·钱珀瑙恩(David Gawen Champernowne)共同设计了启发式算法 Turochamp,并尝试在 1951 年的 Ferranti Mark 1 计算机上运行,但因计算能力有限未能成功。不过,他们手动在棋盘上实现了该算法。
与此同时,图灵的前密码分析同事克劳德·香农(Claude Shannon)发表了该领域的第一篇科学论文。两位计算机科学家奠定了国际象棋编程的基本思想。
显然,程序必须使用某种方式来表示棋盘和棋子,以便做出决策。目前主要有两种表示棋盘的方法。
4.2. 不同的棋盘表示方式
香农在其论文中指出,国际象棋棋盘有两种常见的表示方式。我们先来看看“棋子中心表示法”。
在这种方法中,计算机维护一个所有棋子及其所在格子的列表。
我们可以这样表示开局:
反过来,还有一种“棋盘中心表示法”,它维护一个所有格子及其是否有棋子占据的列表。这也是香农在论文中偏爱的表示方式。尽管这不是最高效的编码方式,但在计算上更方便。
![0](/wp-content/ql-cache/quicklatex.com-8354ade9c79ec6a......
![0](/wp-content/ql......