Skip to content

Repository files navigation

五子棋AI

✨🎉🎉🎉✨ 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:

注意教程中的代码与代码仓库的有一定区别,但原理是一样的。作者本着开源分享的精神,知道的都写出来,没有任何保留,如有遗漏或错误可以提issue。

安装依赖

本仓库是一个纯前端仓库,AI也是用JS写的,所以本地开发必须安装Node和NPM。Node版本没有完善测试过,但理论上 v16~20 应该都可以。

先执行 npm install 安装依赖。然后有如下命令可用:

  • npm start 启动本地开发服务
  • npm test 运行单元测试
  • npm run js 编译JS
  • npm run less 编译less
  • npm run watch 进入watch模式 自动编译文件
  • npm run build 编译生成dist目录

AI 棋力评测

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 使用当前工作区对比提交 04def12feat(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

报告包含题目通过率、失败主变化、节点数、耗时和棋盘状态恢复检查。指定旧报告后还会列出新增通过、回归题目及节点/耗时变化;性能数字适合本机同环境比较。

关于作者

大厂前端工程师,曾(现)任职百度、阿里、字节等公司,业务时间会研究一些和工作无关的技术。

About

javascript gobang AI,JS五子棋AI,源码+教程,基于Alpha-Beta剪枝算法(不是神经网络)

Topics

Resources

Stars

1.8k stars

Watchers

33 watching

Forks

Releases

Packages

Used by

Contributors

Languages