Zing 论坛

正文

宝可梦对战AI:基于50万场对战的神经网络决策系统

一个Chrome浏览器扩展,通过拦截宝可梦对战协议、提取完整战场状态,利用深度为2的expectiminimax搜索和神经网络评估,为玩家提供实时最优行动建议。

Pokémongame AIneural networkexpectiminimaxONNXbrowser extensionmachine learningBayesian inferenceopponent modeling
发布时间 2026/06/02 11:15最近活动 2026/06/02 11:23预计阅读 4 分钟
宝可梦对战AI:基于50万场对战的神经网络决策系统
1

章节 01

导读 / 主楼:宝可梦对战AI:基于50万场对战的神经网络决策系统

一个Chrome浏览器扩展,通过拦截宝可梦对战协议、提取完整战场状态,利用深度为2的expectiminimax搜索和神经网络评估,为玩家提供实时最优行动建议。

3

章节 03

项目概述

这是一个专为宝可梦Showdown随机对战设计的Chrome浏览器扩展,能够在对战中实时分析战场局势并给出最优行动建议。项目结合了博弈树搜索、贝叶斯推断和神经网络评估,展示了如何将复杂的AI技术应用于游戏辅助场景。


4

章节 04

技术架构与数据流

系统采用多层架构,从页面注入到神经网络评估形成完整的数据处理链:

hook.ts (页面层) → bridge.ts (内容脚本) → sw.ts (服务工作线程) → eval-worker.ts
    ├── minimax.ts (搜索算法)
    ├── learned-eval.ts (ONNX神经网络)
    ├── features.ts (206维特征提取)
    ├── damage.ts (@smogon/calc伤害计算)
    └── opponent-model.ts (贝叶斯对手建模)
    ↓
overlay (Preact, Shadow DOM界面)

hook.ts(页面层): 直接注入到宝可梦Showdown页面,拦截app.receive()函数以捕获对战协议消息。

bridge.ts(内容脚本): 作为页面层与扩展之间的桥梁,转发状态数据并挂载UI覆盖层。

sw.ts(服务工作线程): 协调消息路由,将任务分发给各个处理模块。

eval-worker.ts(Web Worker): 在独立线程中运行搜索和评估,避免阻塞主线程。


5

章节 05

战场状态提取与对手建模

状态提取:系统通过拦截对战协议提取完整的战场状态,包括:

  • 双方队伍信息(宝可梦、属性、道具、特性)
  • 场地效果(天气、场地、状态)
  • 对手已揭示的信息

贝叶斯对手建模:这是系统的核心创新之一。由于随机对战中对手的宝可梦配置是随机的,系统采用贝叶斯集合收窄策略:

  • 维护对手可能的配置集合
  • 随着对战进行和信息披露,逐步排除不可能的配置
  • 动态更新对手模型的概率分布

这种建模方式允许AI在信息不完全的情况下做出更准确的决策,类似于扑克AI中的对手建模技术。


6

章节 06

Expectiminimax搜索算法

系统使用深度为2的expectiminimax算法进行决策搜索,结合了alpha-beta剪枝优化:

Expectiminimax的特点

  • 处理游戏中的随机因素(如技能命中率、随机伤害波动)
  • 在决策节点使用max(选择最优行动)
  • 在随机节点使用expectation(计算期望值)
  • 在对手节点使用min(假设对手选择最优应对)

Alpha-beta剪枝: 在搜索过程中剪除不可能影响最终决策的分支,大幅提高搜索效率。尽管搜索深度仅为2,但结合强大的评估函数,已经能够产生高质量的建议。


7

章节 07

神经网络评估函数

叶节点的评估由一个多层感知器(MLP)神经网络完成:

特征工程:系统提取206维特征向量,涵盖:

  • 双方宝可梦的状态(HP、属性、能力值)
  • 可用技能及其效果
  • 场地状态和环境因素
  • 道具和特性的影响
  • 对战历史信息

神经网络架构

  • 输入层:206维特征
  • 隐藏层:多层感知器结构
  • 输出层:胜率预测(0-1之间)
  • 准确率:65%的胜率预测准确率

ONNX运行时:模型导出为ONNX格式,使用onnxruntime-web在浏览器中进行实时推理,无需服务器端支持。


8

章节 08

训练数据与模型训练

数据来源

  • HuggingFace数据集:3170万场对战回放
  • 筛选条件:Gen 9随机对战,评分1400+的对局
  • 最终使用:50万+高质量对局

训练流程

# 1. 下载对战回放
python -m scraper.download_replays --count 100000

# 2. 提取特征
python -m features.extract_features --input data/replays --output data/training_data.npz

# 3. 训练模型
python -m train.train_model --data data/training_data.npz

# 4. 导出ONNX
python -m export.export_onnx --model models/value-net-v1.pt --output ../models/value-net-v1.onnx

技术栈

  • @smogon/calc: 官方伤害计算库
  • @pkmn/data: 宝可梦、技能、特性数据
  • onnxruntime-web: 浏览器端神经网络推理
  • preact: 轻量级UI框架
  • vite: 多入口扩展构建工具