电脑象棋循序渐进
象棋小巫师系列源程序 | 象棋资源 - 象棋百科全书 (xqbase.com)
循序渐进的最后一步,就一个源文件XQWL06.CPP,内核+图形界面共1823行(与开局库有关的部分可以安全去掉)。下得有模有样。费点心思能看懂程序。代码片段:

static void SearchMain(void) { int i, t, vl, nGenMoves; int mvs[MAX_GEN_MOVES]; // 初始化 memset(Search.nHistoryTable, 0, 65536 * sizeof(int)); // 清空历史表 memset(Search.mvKillers, 0, LIMIT_DEPTH * 2 * sizeof(int)); // 清空杀手走法表 memset(Search.HashTable, 0, HASH_SIZE * sizeof(HashItem)); // 清空置换表 t = clock(); // 初始化定时器 pos.nDistance = 0; // 初始步数 // 搜索开局库 Search.mvResult = 0; // 检查是否只有唯一走法 vl = 0; nGenMoves = pos.GenerateMoves(mvs); for (i = 0; i < nGenMoves; i ++) { if (pos.MakeMove(mvs[i])) { pos.UndoMakeMove(); Search.mvResult = mvs[i]; vl ++; } } if (vl == 1) { return; } // 迭代加深过程 for (i = 1; i <= LIMIT_DEPTH; i ++) { vl = SearchRoot(i); // 搜索到杀棋,就终止搜索 if (vl > WIN_VALUE || vl < -WIN_VALUE) { break; } // 超过一秒,就终止搜索 if (clock() - t > CLOCKS_PER_SEC) { break; } } }
从计算机博弈 - 象棋百科全书 (xqbase.com)摘录的:
阿伦·图灵(Alan Turing)对国际象棋非常感兴趣。不过他尽管智力超群并且下了很大工夫在学棋上,他还是一个蹩脚的棋手。
Chess Terms and Definitions (chesscentral.com)
二战期间美国在新墨西哥州的阿拉莫斯建立了一个巨大的实验室,它的主要目的就是发展核武器。要正确执行触发链式反应的内部爆炸需要数量巨大的计算。
[老照片里“两弹一星”故事:中国第一颗核弹是算盘算出来的? | 他们用算盘“造出”了中国第一艘核潜艇]
1946年美籍匈牙利数学家约翰·冯·诺依曼(John von Neumann)被指派设计一台强大的计算机器以加快工作进度的任务。到了1950年,一台叫“MANIAC一号”的巨型机被交付使用,它内装有数千个电子管和开关,每秒能执行10,000条指令。
[2010年三季度发布的i3 370m是32nm工艺,bogomips是4787.64,差不多每秒可以执行47亿条指令,是MANIAC一号的47万倍。上面说的是单核。通过流水线、VLIW或 Superscalar,可以达到同时执行两条指令的效果。是的,两条。主频2.4GHz, bogomips 不到4800嘛. 虽然测bogomips的程序循环执行两条指令,可Fritz Chess Benchmark,最新的i9和Pentium III 1GHz相比,基本上也就是时钟频率的倍数(单核对单核)。Fritz的指令数可不少。i9的cache还大多了呢。为啥某人无端地觉得自家单核性能很强了可以玩GPU了?Very Long Instruction Word. 超标量. issue(发射). ]
它[以下指MANIAC一号]也可以编程。科学家并不马上用它来设计核弹,而是先试验一下这台机器,而首先做的事情之一就是编写一个下棋的程序。这是一个缩小的6x6棋盘,没有象。虽然这么简化了但程序要搜索四层的深度就需要12分钟(译注:四层相当于当前局面双方各两步),如果加上象[8x8?],就需要3个小时[3小时/47万=23毫秒]。50年代中期,这台机器下了三局棋。第一局是自己对自己,白胜。第二局是对一位让王后的强棋手,这局棋进行了10个小时,结果人类大师胜。第三局机器的对手是一位刚学棋一个星期的的年轻姑娘,结果程序23回合得胜。这是在智力博弈中人类首次负于电脑。
[自己和自己下不稀奇(可以随机生成着法,蒙特卡洛法不是开玩笑);赢人也不稀奇。]
电脑科学家肯·汤普森(Ken Thompson)觉得不能等待快5-25倍的百万美元级超级电脑来用于提高下棋能力。他和贝尔实验室的同事一起决定建造一台专门用途的机器,使用了价值大约20,000美元的几百个芯片。他们把这台机器叫做“尤物”(belle),它只会下国际象棋。它能够每秒搜索大约18万个局面(而当时的超级电脑只能搜索5000个)。“尤物”在比赛中可以搜索八至九层那么深,因此可以和大师同场竞技。从1980年到1983年它赢得了世界电脑国际象棋和所有其它电脑竞赛冠军,直到被价钱贵上千倍的克雷(Cray) X-MPs巨型机取代为止。
In 1969 Kenneth Thompson and Dennis Ritchie developed the UNIX operating system at Bell Labs. The first C compiler written by Dennis Ritchie used a recursive descent parser, incorporated specific knowledge about the PDP-11, and relied on an optional machine-specific optimizer to improve the assembly language code it generated. The first C compiler was also written by him, in assembly.
"Ken Thompson: I was interested in college in three dimensional tic-tac-toe, four by four, by four... And I wrote some game playing programs, one of them being 3D tic-tac-toe." [link] [生活大爆炸里的3D国际象棋可能取材于此。]
80年代中期,电脑科学家、卡梅隆大学的汉斯·贝利纳(Hans Berliner)教授接手肯·汤普森放下的工作。贝利纳曾经是世界国际象棋通讯赛冠军,他制造了一台硬件型的机器叫“高技术”(HiTech),他和他的研究生一起研究可拔插芯片。装有64个并行芯片的“高技术”差点赢得了1986年的世界电脑国际象棋冠军(冠军是克雷巨型机)。随后贝利纳的几个学生包括华人许锋雄等自行研究叫“芯测”的机器,后来则是“深思”(Deep Thought)。它只花5000美元但每秒搜索50万个局面。许锋雄等后来加入了IBM,和其他人合作制造了IBM的“深蓝”(Deep Blue)。
……可以计算出搜索深度达到十四层时,就达到了世界冠军的程度即2800分。[14层相当于双方各7步。想14步就世界冠军水平了。推箱子有人想出来的300多步,电脑不能推14步就宣称自己能推出来——谁信啊:-)]
国际象棋的棋盘是8*8的方格,每方16个共计32个棋子,每方6种共计12种棋子。中国象棋是9*10的交叉点,32个棋子14种(车马相仕帅炮兵)。围棋是19*19的棋盘,双方2种棋子。
- Stockfish 15 - Stockfish - Open Source Chess Engine (stockfishchess.org)
- A Brief Guide to Stockfish NNUE – Saumik Narayanan
- A Brief Guide to Neural Network Chess Engines – Saumik Narayanan
- engines - Hardware used in AlphaZero vs Stockfish match - Chess Stack Exchange
- engines - Which is better-Stockfish 10 or AlphaZero? - Chess Stack Exchange
- Deep Blue, AlphaGo, and AlphaZero - Breakfast Bytes - Cadence Blogs - Cadence Community
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
2021-12-04 The Go tools for Windows + Assembler很好玩
2021-12-04 admire, admit
2021-12-04 A Child's History of England.49
2021-12-04 ffmpeg简介
2021-12-04 SQLITE_BTREE_H
2021-12-04 如何把图像放大到原来的1.5倍
2021-12-04 three.js很好玩