Agent 优化牌局五天,神经网络未带来增益
作者让 Agent 连续五天优化牌类游戏机器人,以固定对手、胜率和平均得分评估,每轮记录假设与结果。最终交付是一行配置调整,训练出的神经网络未带来收益。
AI 深度解读
让 agent 连续研究五天,训练神经网络、调整搜索参数,最后上线的却只有一行配置:增加每步模拟的发牌数。作者 Anthony Hunt 的实验里,训练出的网络没有带来额外收益,规则机器人反而靠更多搜索变强了。
这次实验更有价值的部分,是他们如何拆穿「看起来赢了」的结果:幸运样本、机器限时、重复数据,都曾制造进步的假象。对正在用 AI 自动改代码、跑评测的程序员,这比一个漂亮的提升数字更值得看。
网络看起来变强,为什么最后被拿掉了
实验对象是一款四人海盗题材的吃墩牌类游戏,包含叫分。线上机器人已经使用规则和蒙特卡洛搜索:每次出牌前,模拟隐藏牌可能怎样分布,再据此选择动作。
agent 可以自由选择方法,但评判标准不能随意改动。胜局比例是决定指标,平均每局得分负责兜底;除非另有说明,每次测量使用 400 副发牌。每次尝试都记下假设、数字、结论和原因。作者负责修改任务文件、停止实验和下令部署,没有逐次人工审核。
重置后的起始网络胜率为 47.1%,平均得分 196.3,参考机器人是 197.1 分。agent 随后训练了预测隐藏牌位置的网络输出头,一个「冠军」达到 59.6% 和 204.0 分,还在新发牌上复现过一次。
但同样方法再跑三轮,结果都退回 49%–52%。作者判断,59.6% 主要来自运气,仅初始化就能让结果波动约 1.6 个百分点。
真正有效的改动来自搜索:把己方每步模拟的发牌数从 16 增至 48,胜率达到 60.6%,得分达到 224.6。继续观察思考时间,收益在 750–1000 ms 之间进入平台期。
于是他们在相同的 1000 ms 预算下拆开比较:
| 配置 | 胜率 | 平均每局得分 |
|---|---|---|
| 纯规则机器人 | 64.1% | 236.6 |
| 带网络的冠军 | 64.3% | 232.6 |
在这次实验的相同时间预算下,训练出的网络没有提供可确认的额外收益。
这句话的范围很重要:它针对当前游戏、网络和搜索组合,不能推广成「神经网络不适合打牌」。
为什么连评测器也要接受评测
网络被排除后,agent 转向搜索权重。一组权重在 800 副发牌上提高了 4.3 个百分点,看起来又找到了突破口。取消时间限制重测,它却以 62.8% 输给了参考配置的 64.1%。
原因是机器无法在限定时间内完成模拟。限时测试里的优势,混入了执行速度和实际完成搜索量的差异,不能直接归功于权重。
五天里,他们试过 13 组权重、3 档采样预算、6 档时间预算和 8 轮训练,最终没有保留新权重,也没有保留网络。
评测流程还暴露出三个问题:两台机器连续两天用了不同构建版本的裁判;生产数据中有 20% 的发牌重复;一个衡量「从当前冠军手里拿走多少分」的相对指标,会奖励能击败前任、却输给其他对手的候选。
最后保留的配置是每步模拟 256 副发牌。它在 1,600 副发牌上取得 63.8% 胜率、239.4 分;原线上配置在 1,200 副上是 60.0%、220.9 分。报告的提升为胜率增加 3.8 个百分点、每局增加 18.5 分。
自动研究循环最先要证明的,是它的尺子能稳定量出同一件事。
一个能复跑的循环,需要哪些约束
作者把经验收进了简化仓库。先让四个相同的参考机器人对打,检查各自胜率是否接近 25%;再用两个种子训练同一方案,估计初始化带来的波动。保留改动的最低门槛,取 2 个百分点与该波动幅度中的较大值。
评测分成两套:固定评测集负责决策,控制集只用于确认。每次尝试使用相同训练预算。只有胜率提升超过门槛、控制集上没有负收益,而且每局得分下降不超过 5 分,改动才可以留下。
下面这段命令用于检查简化评测器,再跑一轮自动尝试并查看真实实验日志:
git clone https://github.com/anthohunt/la-boucle-cas-jeu-de-plis && cd la-boucle-cas-jeu-de-plis
python3 -m unittest discover -s tests -t . # 20 tests, a few seconds
python3 -m trickloop measure --bot rules # the meter checks itself: about 25%
python3 -m trickloop loop --workdir run --passes 4 --preset fast
python3 -m trickloop dashboard recit/journal.jsonl -o story.html # the real five-day journal as a page
要特别留意 --preset fast:作者桌面机上四轮共跑了 34 秒,两项保留、两项丢弃,但短测里的「保留」仍可能只是幸运。
仓库只需 Python 3.10 或更新版本和标准库,不需要模型或 API key。它使用专门编写的简化游戏,共 48 张牌、6 轮,并非原商业游戏;真实实验的任务、方法和结果放在 recit/,内容为法语。文中数字来自 recit/journal.jsonl 和 recit/progression.jsonl。
我的判断
我认同这次实验的取舍:先确认增加搜索是否有效,再判断网络有没有独立贡献。已有规则系统足够强时,复杂组件应该拿出增量证据。
但最终的 3.8 个百分点仍有证据边界。两组结果分别来自 1,600 和 1,200 副发牌,原文没有交代是否逐副配对,也没有给出置信区间。生产环境能承受多少延迟、增加模拟后占用多少资源,同样没有说清。它支持作者在当前条件下选择该配置,尚不足以保证其他团队也有相同收益。
相比只展示一次冠军成绩,这种记录失败并做隔离测试的方法更可信。不过,2 个百分点和最多掉 5 分是这套实验的经验门槛,原文没有提供它们优于其他门槛的对照数据,不能直接当成通用标准。
能拿来做什么
- 给 AI 编程 agent 固定一套验收标准,并记录每次修改的假设、结果和去留原因,避免只留下成功案例。
- 优化现有搜索或决策系统时,先测采样量、时间预算等直接参数,再通过移除网络的对照测试确认复杂组件的价值。
- 为 Node 等项目跑自动性能实验时,核对运行版本、机器条件和实际完成的工作量,避免把超时造成的差异算成算法提升。
- 把快速评测用于筛选候选,把独立控制集用于确认;短测通过后,仍要检查收益是否超过实验自身的波动。