
现代国际象棋引擎在Pentium上能否击败1996年的卡斯帕罗夫?
来源标题:Could a modern chess engine on a Pentium have defeated Kasparov in 1996?
有人探讨了现代国际象棋引擎在1996年的Pentium硬件上运行是否能击败卡斯帕罗夫。国际象棋水平以Elo分衡量,200分差距意味着强者胜率约75%,而现代引擎如Stockfish每秒可分析数百万个局面。
以下正文由 AI 翻译自 Hacker News(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
等等,什么?!怎么会这样??
提升国际象棋水平有三条路径:分析更多走法、分析更好的走法,或者把走法分析得更透彻。众所周知,人类棋手是靠后两条进步的:一位国际象棋特级大师在慢棋比赛中分析的走法数量,和一位业余棋手大致相当,但他们只挑最关键的那些走法来分析,而且分析得更深入。像 Stockfish 这样的国际象棋引擎运行在硅基芯片而非人脑上,在第一条路径上彻底碾压我们,每秒能分析数百万个局面。而由于现代引擎在微优化上的空间已经不大——也就是让给定 CPU 每秒处理更多局面——国际象棋 AI 的大部分进展也倾向于沿袭人类进步的方式,寻找更好的方法来选择走法和分析局面。
国际象棋水平用 Elo 分来衡量。200 Elo 的差距意味着你应当预期强者每四局赢三局,依此类推呈倍数增长:400 Elo 的差距对应 90% 的期望得分,1000 Elo 的差距则给出 99.7% 的期望得分。在 1996 年的普通硬件上能运行的最好的国际象棋引擎,等级分大约为 2300 Elo。Deep Blue 的等级分是 2700。相比之下,现代 Stockfish 的等级分接近 3700。
这就引出了一个问题:现代国际象棋引擎的优势中,有多少来自现代台式机极快的速度,又有多少仅仅来自我们在国际象棋引擎编程上变得更好了?结果发现,大部分 Elo 增益(+1335 中的 +720)可以归因于更好的编程,而非更好的硬件。
为了验证这一点,我做了两个实验。第一个实验使用 Crafty,一款 1996 年的竞技级引擎,其源代码如今已公开。在我的 Pentium Pro 上,1996 年构建的 Crafty 11.13 版本在每步 1 秒时 Elo 为 1999 ± 90,在每步 10 秒时为 2383 ± 77。在现代硬件(一台 Ryzen 7)上,同一引擎在同样每步 1 秒时 Elo 大幅跃升至 2614 ± 97。但如果我拿这个引擎,慢慢开始加入我们所知的关于如何设计更好国际象棋引擎的全部知识——加入 fail-soft、LMR、correction history 等现代搜索算法;加入更好的静态搜索方法;以及加入神经网络评估(NNUE)——那么在 Pentium Pro 上每步 1 秒时 Elo 可以提升到 2718 ± 34,每步 10 秒时达到 2974 ± 74。
在第二个实验中我更进了一步:与其试图更新 Crafty,不如直接试着让 Stockfish——当今最好的国际象棋引擎——在 1996 年的硬件上跑起来,看看它表现如何。这需要一些工作,主要就是重写代码,使其使用 32 位算术(PPro 是 32 位机器)并且不占用超过 64MB 的内存。这个朴素移植版在每步 1 秒时 Elo 约为 2496 ± 64(每步 10 秒时为 2940 ± 76)。但我们还能做得更好!现代 Stockfish 引擎是为在现代 CPU 上运行而设计的。通过对算法做一系列调整并针对 Pentium 进行调优,我们可以把它的 Elo 提升到每步 1 秒时 2846 ± 35、每步 10 秒时 3109 ± 79、每步 30 秒时 3180 ± 80。
概括以上所有内容最简洁的方式,就是让它们互相对弈 100 局。当我这样做时,我发现一台运行在 1996 年 Pentium Pro 上的现代国际象棋引擎,对阵运行在现代硬件上的 1996 年 Crafty 引擎,取得了 78 胜、17 平、5 负的战绩。
本文余下部分将提供细节。
说实话,关于硬件没什么太多可说的。我买了一台二手(商品列表上写的是“复古”)台式机,硬件都是符合那个年代的标准配置。这台台式机运行着一颗 200 MHz 的 Intel Pentium Pro,连接在一块 Intel VS440FX 主板上,配有 64MB、时钟频率 66 MHz 的 SIMM 内存。操作系统从一张 1.44MB 的 3.5 英寸软盘启动,并通过一块 Realtek RTL8139C 连接互联网。我还配了一块 1MB 的 Trio64V+ 显卡,通过 VGA 连接到我的显示器,输入则来自 PS/2 键盘——但这两样我都不怎么用,而是通过一个串口与现代台式机通信来操作它。
对于那些可能无法恰当理解这套硬件定位的读者:一颗 200 MHz 的 Pentium Pro 在 1995 年 11 月上市时售价 1325 美元,四条 16 MB 的 SIMM 大约要花 2000 美元。再加上其他外设,这台机器当年大概要卖四五千美元。所以它是一台不错的工作站,但绝不是超级计算机。然而,考虑到硬件的折旧速度和指数级的性能提升,同样这台机器在 1997 年——也就是第二场比赛举办的那一年——大概只值一千美元了(因为当几乎各方面都更好的 Pentium MMX 只要 400 美元就能买到时,谁还会想买 Pentium Pro 呢?)
国际象棋引擎与互联网之间的接口是一个自制的“操作系统”,它唯一的职责就是启动国际象棋引擎并将其直接连接到网卡。(在本文中,每当我说“我写了”,我真正的意思是“我让 LLM 写了”。我组合使用了 Fable 5.1、Opus 5.5 和 GPT-6。)它的设计目标是尽可能紧凑:这个操作系统(事实上,它更像是一个 hypervisor 之类的东西)放在一张可启动软盘上。它唯一的职责就是把 Pentium Pro 引导进入 32 位保护模式、初始化网卡,然后等待进一步的指令。之后我可以把任意想要的“用户态”客户程序发送到 RAM 中,它就会启动并运行该程序。我写的国际象棋程序会启动一个自制的 HTTP 服务器,等待传入的、带有给定局面(以 FEN 字符串表示)的 HTTP 请求
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。