✨🎉🎉🎉✨ 2023/11 重写了全部代码,代码更加简洁易懂,并修复了之前存在的AI可能会偶尔走错棋的问题,棋力更加稳定,React也更新到了最新的V18版本。
本仓库代码仅供个人业余研究AI用,代码肯定存在有很多不完善的地方,精力和专业所限请谅解
极小化极大算法的五子棋AI实现。 扫描上方二维码,或者打开此页面可以直接体验 https://gobang2.light7.cn/ 如果 http 协议无法打开,可以用这个http的链接 http://gobang2.light7.cn/
如果你对机器学习、神经网络有兴趣,这里有一个基于Alpha Zero原理的AI alpha-zero-gobang 正在开发中,Tensorflow2.x实现,有兴趣的可以关注交流。
- Q:AI的原理是什么?
- A:参考后文中我的博客。基本原理是极小化极大搜索算法,做了一些常见的性能优化。没有用到神经网络、强化学习之类的机器学习算法。
- Q:为什么感觉AI的棋力不强?
- A:这个AI是极小化极大算法,做了有限的优化,并且受限于浏览器执行JS的速度,其搜索的深度比较浅,所以棋力不会很强。
- Q:不同难度有啥区别?
- A:不同难度的区别在于搜索的深度,AI的搜索深度越深,棋力越强,相应的耗时也会变长。
- Q:需要联网吗?
- A:第一次打开页面或者刷新需要联网,但AI的执行是本地的,因此只要页面打开之后,就不需要联网了。
- Q:为啥感觉电脑走棋很慢?
- A:这个AI是本地浏览器执行的,AI的速度受硬件性能影响比较大,并且难度越高,搜索的深度越深,耗时越长。如果发现耗时过长,可以降低难度。
- Q:AI涉及到的算法是你原创的吗?
- A:并不是我原创的,绝大部分都是网络上公开的算法,我只是把它们组合起来,并做了一些有限的优化。
需要交流的同学可以加QQ群 622613966,进群验证信息请填写 gobang
-
2026/09/17 更新:新增对局导入/导出——以 JSON 序列化完整对局(落子历史 + 对局设置),导出支持复制到剪贴板与下载
.json,导入支持粘贴或上传文件并严格校验非法输入,导入后自动轮到 AI 落子。修复 VCT 防守方活三被一刀切剪掉、漏掉反威胁线导致误判必胜/必败的问题:现只剪「孤立活三」(该点无眠三/冲四/双三等复合威胁),保留能构成反威胁的复合活三,最坏耗时大幅下降(无杀棋7 约 87s→22s、无杀棋5 约 2.5s→1.2s)且评估值不回退。修复中盘反威胁防守分支被误标为「开局库」的局面判断 bug:assessScore改为显式接收fromOpeningBook标记,不再用空搜索轨迹推断。 -
2026/09/14 更新:评分表科学化,修复评估标度硬伤。重写
src/ai/eval.js的评分常量与getRealShapeScore映射:权重改为严格等比(base=10,FOUR > BLOCK_FOUR > THREE > BLOCK_THREE > TWO > BLOCK_TWO);点分与威胁阈值同标度,修复hasThreatAtLeast阈值失效导致 VCT 触发门槛几乎恒为 false 的问题;取消活四/冲四的错位映射;双威胁(四四/四三/双活三)提权至必胜级。评测(candidate vs HEAD):固定深度 4 的 200 局 +131 Elo(95% 区间 [52.7, 204.8],显著),固定深度 6 的 100 局 +42 Elo(95% 区间 [-13.0, 94.4],不显著)。收益集中在浅深度,代价是候选引擎耗时约 baseline 的 2 倍(VCT 被正确触发所致)。 -
2026/08/13 更新:新增战术题库及 8 种旋转/镜像扩展,支持失败主变化、历史报告对比和方向敏感度诊断。当前工作区相对提交
04def12的 150ms 限时评测为 33 胜 3 和 24 负,得分率 57.5%,Elo 点估计 +53;节点吞吐提升 14.5%,平均实际搜索耗时降低 4.2%。95% Elo 区间仍跨 0,暂视为正向信号。 -
2026/08/12 更新:修复候选点距离与裁剪问题,增量维护有效候选点及威胁索引;浅层搜索增加受限活三延伸,并在第二、第三候选评分并列时自适应扩展第三点,固定深度搜索默认启用根节点 PVS。VCT 对手搜索改为复用原棋盘和置换表,避免反色棋盘重建;固定深度 100 局等价性评测保持 50% 得分率,同时节点减少 6.5%、累计耗时减少 7.6%。新增独立进程 A/B 棋力评测器及战术题库,支持交换先手、Elo 聚类置信区间、48 个旋转/镜像战术局面、历史报告对比和方向敏感度诊断。
-
2026/08/09 更新:优化 AI 搜索与测试体系。修复增量评估受搜索顺序影响的问题,引入带上下界的置换表、迭代加深、战术静态搜索、增量胜负判断和 killer move 排序,默认搜索深度提升到 6。基于 12 个 Gomocup 2026 官方开局的 7 轮交错测试,当前版本相对冻结基线中位加速约 2.87 倍,并保持 7/7 轮更快;同时增加搜索一致性、分数稳定性、限时搜索和性能回归工具。
-
2023/11/23 更新:V3版本重写了所有代码,现在代码更加简洁易懂,并修复了之前存在的AI可能会偶尔走错棋的问题,棋力更加稳定。
-
2020/11/29 更新: 修复了评分的明显bug,随机开局库可配置,网站已修复,可以愉快玩耍了
我写了一个系列博客,教你如何一步步编写自己的五子棋AI:
- 五子棋AI设计教程第二版一:前言
- 五子棋AI设计教程第二版二:博弈算法的前世今生
- 五子棋AI设计教程第二版三:极小化极大值搜索
- 五子棋AI设计教程第二版四:Alpha Beta 剪枝算法
- 五子棋AI设计教程第二版五:启发式评估函数
- 五子棋AI设计教程第二版六:迭代加深
- 五子棋AI设计教程第二版七:Zobrist缓存
- 五子棋AI设计教程第二版八:算杀
- 五子棋AI设计教程第二版九:性能优化
注意教程中的代码与代码仓库的有一定区别,但原理是一样的。作者本着开源分享的精神,知道的都写出来,没有任何保留,如有遗漏或错误可以提issue。
本仓库是一个纯前端仓库,AI也是用JS写的,所以本地开发必须安装Node和NPM。Node版本没有完善测试过,但理论上 v16~20 应该都可以。
先执行 npm install 安装依赖。然后有如下命令可用:
npm start启动本地开发服务npm test运行单元测试npm run js编译JSnpm run less编译lessnpm run watch进入watch模式 自动编译文件npm run build编译生成dist目录
ai:evaluate 会分别构建当前工作区和指定 Git 基线,让两个引擎运行在独立进程中,使用同一批开局进行交换先手对局:
# 快速冒烟:20 局、固定深度 2
npm run ai:evaluate -- --games 20 --depth 2
# 较稳定的回归:200 局、4 组开局对并行,报告保存为 JSON
npm run ai:evaluate -- --baseline HEAD --games 200 --depth 4 \
--concurrency 4 --output .ai-eval/result.json
# 固定每步 300ms;限时赛建议单并发,避免 CPU 争抢影响公平性
npm run ai:evaluate -- --games 200 --depth 10 --time-ms 300 --concurrency 1报告包含胜和负、得分率、Elo 估计、95% 置信区间、节点数、耗时和平均完成深度。置信区间按原始开局家族聚类计算,同一开局的前缀、旋转和镜像不会被当成完全独立的样本。建议仅在 elo95 下界大于 0,或 probabilityBetter 大于 0.95 时确认棋力提升;少量对局只适合检查明显退化。
2026/08/13 使用当前工作区对比提交 04def12(feat(ai): add verified strength opening book):
| 场景 | 战绩 | 得分率 | Elo 点估计 | 95% Elo 区间 |
|---|---|---|---|---|
| 固定深度 2、关闭开局库、200 局 | 93 胜 20 和 87 负 | 51.5% | +10 | -43 ~ +67 |
| 每步 150ms、单并发、60 局 | 33 胜 3 和 24 负 | 57.5% | +53 | -19 ~ +125 |
| 固定深度 2、开启开局库、100 局 | 51 胜 6 和 43 负 | 54.0% | +28 | -49 ~ +110 |
固定深度下每次搜索节点增加 31.8%、耗时增加 9.2%,但节点吞吐提升 20.7%;150ms 限时下每次搜索节点增加 9.6%、平均实际耗时降低 4.2%,节点吞吐提升 14.5%。当前版本在限时场景呈现较强正向信号,但以上置信区间均跨过 0,尚不能认定为统计显著的棋力提升。
战术题库用于更快地检查漏杀、误杀和漏防,并可自动生成每题的 8 种旋转/镜像:
npm run ai:tactics
npm run ai:tactics -- --symmetries --details --output .ai-eval/tactics.json
npm run ai:tactics -- --symmetries --baseline-report .ai-eval/tactics-baseline.json报告包含题目通过率、失败主变化、节点数、耗时和棋盘状态恢复检查。指定旧报告后还会列出新增通过、回归题目及节点/耗时变化;性能数字适合本机同环境比较。
大厂前端工程师,曾(现)任职百度、阿里、字节等公司,业务时间会研究一些和工作无关的技术。