sts-rl-agent / README.md
Jialeiv's picture
Upload README.md with huggingface_hub
7d315d9 verified
|
Raw
History Blame Contribute Delete
5.55 kB
---
license: mit
library_name: pytorch
tags:
- reinforcement-learning
- game-ai
- slay-the-spire
- reinforce
- policy
---
# sts-rl-agent — a learned non-combat policy for Slay the Spire
[English](#sts-rl-agent--a-learned-non-combat-policy-for-slay-the-spire) | [中文](#中文说明)
To our knowledge, the **first working learned policy published for [sts_lightspeed](https://github.com/gamerpuppy/sts_lightspeed)** — the fast C++ Slay the Spire simulator, which ships a 412-dim neural-network observation interface (`NNInterface`) but no trained weights.
A small MLP (~100k params, `[128,128]`, trained from scratch with REINFORCE) makes **all non-combat decisions** — map pathing, card rewards, shops, campfires, events — while the simulator's built-in MCTS plays combat.
## Headline result
Same MCTS combat, same 50 held-out seeds, A0 Ironclad — only the non-combat "brain" differs:
| non-combat decisions | combat | avg floor | win rate |
|---|---|---|---|
| stock bot heuristics (map = random) | MCTS @50000 | 31.2 | 6% |
| **this model** | MCTS @50000 | **42.5** | **14%** |
The learned non-combat layer is worth **~11 floors** over the stock bot: its biggest weakness was never combat, it was walking the map at random.
## Files
| file | what |
|---|---|
| `armG_model_G128x128_15k.pt` | **the non-combat policy** behind the headline number (15k games) |
| `armG_model_G128x128.pt` | earlier 8k-game checkpoint |
| `armS_card_vocab.json` | card vocabulary (required to encode candidates) |
| `armB_model_B256x256.pt` | combat behavior-cloning model — **negative result** (floor ~12 vs teacher 23) |
| `armB_model_VAL256x256.pt` | combat value net — negative result (1-ply lookahead: floor ~8) |
| `armB_model_ATTN_d64L2.pt` | combat attention model — negative result (floor ~14) |
The combat models are published on purpose: six different attempts to distill MCTS combat into a feed-forward network all failed the same way (imitation caps at 0.44 train accuracy — the MCTS teacher effectively sees the future draw order; a one-frame policy can't). *Judgment*-type decisions compress into small networks easily; *planning*-type decisions resist.
## Usage
Input is `obs(412) ⊕ candidate-descriptor(368)` → scalar score per candidate; pick the argmax. You need the patched simulator and the encoding code — **full code, sim patch, training scripts and eval protocol: [github.com/valiant-wjl/sts-rl-agent](https://github.com/valiant-wjl/sts-rl-agent)**.
```python
import torch
from agent.armG_train import Scorer, build_choices, obs_vec # from the GitHub repo
net = Scorer((128, 128))
net.load_state_dict(torch.load("armG_model_G128x128_15k.pt", weights_only=True))
```
## Limitations
- A0 (lowest difficulty), Ironclad only (the simulator only fully implements Ironclad).
- Combat is still search (MCTS), not learned.
- Single-run numbers on 50 fixed seeds, no confidence intervals.
Slay the Spire is a trademark of Mega Crit Games; this is an unaffiliated research project on a clean-room simulator (MIT).
---
# 中文说明
据我们所知,这是**第一个针对 [sts_lightspeed](https://github.com/gamerpuppy/sts_lightspeed) 神经网络接口公开发布的、能用的学习型策略**——这个快速 C++《杀戮尖塔》模拟器自带 412 维观测接口(`NNInterface`),但作者从未公开过训好的权重。
一个从零训练的小 MLP(约 10 万参数,`[128,128]`,REINFORCE)做**全部非战斗决策**——地图选路、奖励选卡、商店、篝火、事件;战斗由模拟器内置的 MCTS 执行。
## 核心结果
同样的 MCTS 战斗、同样的 50 个留出关卡(A0 铁甲),只换"非战斗的脑子":
| 非战斗决策 | 战斗 | 平均楼层 | 通关率 |
|---|---|---|---|
| 原生 bot 启发式(地图=随机) | MCTS @50000 | 31.2 | 6% |
| **本模型** | MCTS @50000 | **42.5** | **14%** |
学习型非战斗层比原生 bot **高出约 11 层**——它最大的软肋从来不是打牌,而是选路基本靠随机。
## 文件说明
| 文件 | 说明 |
|---|---|
| `armG_model_G128x128_15k.pt` | **核心结果背后的非战斗策略**(1.5 万局训练) |
| `armG_model_G128x128.pt` | 更早的 8 千局 checkpoint |
| `armS_card_vocab.json` | 卡牌词表(编码候选项必需) |
| `armB_model_B256x256.pt` | 战斗行为克隆模型——**负结果**(实战 ~12 层 vs 老师 23) |
| `armB_model_VAL256x256.pt` | 战斗价值网——负结果(1 步前瞻只有 ~8 层) |
| `armB_model_ATTN_d64L2.pt` | 战斗注意力模型——负结果(~14 层) |
战斗模型是**有意公开的负结果**:六种把 MCTS 战斗蒸馏进前馈网络的方法全部以同样方式失败(模仿训练准确率卡死 0.44——MCTS 模拟用的是真实未来抽牌顺序,老师"看得见未来",只看当前一帧的策略学不像)。**判断型决策容易压进小网络;规划型决策会抵抗。**
## 使用
输入 = `obs(412) ⊕ 候选描述符(368)` → 每个候选一个分,取 argmax。需要打过 patch 的模拟器和编码代码——**完整代码、sim patch、训练脚本、评测协议见 [github.com/valiant-wjl/sts-rl-agent](https://github.com/valiant-wjl/sts-rl-agent)**(含中文 README 和架构图)。
## 局限
- 只测了 A0(最低难度)、只有铁甲(模拟器只完整实现了铁甲);
- 战斗仍是搜索(MCTS),不是学出来的;
- 50 个固定 seed 的单次结果,无置信区间。
《杀戮尖塔》(Slay the Spire)是 Mega Crit Games 的商标;本项目是基于净室模拟器的非官方研究项目(MIT)。