Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

men100-ai

men100-ai 用 Python 驱动真实网页游戏《是男人就下100层》,把浏览器页面包装成 Gymnasium 环境,支持带 LSTM 的 RecurrentPPO、规则基线和贪心落板基线。训练不是本地复刻版,而是直接接 https://game.haiyong.site/100/ 这个 Egret canvas 游戏。

Read First

如果你是换电脑后接手开发,建议先按这个顺序看:

  1. README.md
  2. docs/HANDOFF.md
  3. docs/DEVELOPMENT-2026-04-17.md

其中:

  • README.md 负责总览、环境安装、常用命令
  • docs/HANDOFF.md 负责新电脑接手步骤
  • docs/DEVELOPMENT-2026-04-17.md 负责今天的完整开发过程和设计演进

Setup

项目默认使用本地 venv

python3 -m venv .venv
. .venv/bin/activate
pip install --upgrade pip
pip install -e ".[dev]"
python -m playwright install chromium

推荐额外做一次环境自检:

. .venv/bin/activate
python - <<'PY'
import platform, torch
print("machine:", platform.machine())
print("torch:", torch.__version__)
print("cuda_available:", torch.cuda.is_available())
print("mps_built:", torch.backends.mps.is_built())
print("mps_available:", torch.backends.mps.is_available())
PY
pytest -q

如果你在 Apple Silicon 上开发,并且 mps_available: True,训练时建议显式传 --device mps

Current Algorithm

当前主算法不是 DQN,也不是 TensorFlow 方案,而是:

  • 强化学习算法:sb3-contribRecurrentPPO
  • 策略网络:MlpLstmPolicy
  • 深度学习后端:PyTorch
  • 环境并行:DummyVecEnv / SubprocVecEnv
  • 归一化:VecNormalize

默认训练组合是:

  • preset = stable_v1
  • reward_profile = stable_v4
  • summary_layout = target_v2
  • n-envs = 2

默认思路不是“让模型自己从零猜怎么跳”,而是:

  • 环境给出目标板导向的观测特征
  • 奖励函数鼓励朝首选目标板靠近
  • LSTM 负责处理“下落过程”和“顶针逃生”这种时序决策

Optimization History

今天实际做了两轮优化:

Round 1

  • 从基础浏览器环境和原始奖励出发
  • 加入 RecurrentPPO
  • 加入 stable_v1 训练 preset
  • 加入 VecNormalize、checkpoint、best model、early stopping
  • 奖励升级到 stable_v3

这轮的主要目标是先把训练跑稳,避免“刚学会一点就迅速训崩”。

Round 2

  • 加入共享目标板选择器 targeting.py
  • 让规则基线与训练观测复用同一套目标板逻辑
  • 观测升级为 target_v2
  • 奖励升级为 stable_v4
  • 增加 target_approach / target_landing
  • 加入同维不同语义模型的兼容逻辑

这轮的主要目标是提高稳定性,让模型在下落过程中更像“主动找板并对齐”,而不是只靠运气落到安全板。

Run

显示浏览器并运行规则基线:

. .venv/bin/activate
python -m men100_ai.rule_baseline --agent rule --episodes 5 --show-browser

显示浏览器并运行贪心落板基线:

. .venv/bin/activate
python -m men100_ai.rule_baseline --agent greedy --episodes 5 --show-browser

显示浏览器训练 RecurrentPPO:

. .venv/bin/activate
python -m men100_ai.train \
  --algo recurrent-ppo \
  --preset stable_v1 \
  --total-timesteps 50000 \
  --show-browser

使用多个浏览器子进程并行训练:

. .venv/bin/activate
python -m men100_ai.train \
  --algo recurrent-ppo \
  --preset stable_v1 \
  --n-envs 2 \
  --headless

评估模型并录制视频:

. .venv/bin/activate
python -m men100_ai.evaluate \
  --algo recurrent-ppo \
  --model runs/recurrent-ppo-YYYYMMDD-HHMMSS/best_model/best_model.zip \
  --episodes 3 \
  --show-browser \
  --record-dir videos/eval

这里优先加载训练时 EvalCallback 保存的 best_model/best_model.zip,这是最稳的检查点。若该 run 使用了 VecNormalize,评估入口会自动从同一个 run 目录里恢复对应的 vecnormalize.pkl

离线绘制训练曲线:

. .venv/bin/activate
python -m men100_ai.plot_curves \
  --run runs/recurrent-ppo-YYYYMMDD-HHMMSS \
  --output curves.png

Notes

  • --show-browser 会打开可见浏览器,你可以直接观察训练或评估过程。
  • 这个环境现在使用宏动作和子步采样:每个 env.step() 会执行一个 120ms240ms 的控制片段。
  • 训练模型是 sb3-contribRecurrentPPO(MlpLstmPolicy),比单帧 MLP PPO 更适合“低血保命”和“安全落板”这种时序决策。
  • 训练默认 preset 是 stable_v1:更小的学习率日程、更低的熵系数、target_kl、更大的 rollout/batch,以及 VecNormalize + early stopping
  • --n-envs > 1 时,训练默认自动切到真正的多进程 SubprocVecEnv,每个子进程独立启动一个浏览器环境。
  • 这个环境是实时网页游戏,不是离线模拟器,所以训练速度受浏览器帧率限制。
  • Playwright 视频会在 browser context 关闭后落盘,因此 record-dir 下的文件会在一次 episode 结束后出现。
  • 训练和评估默认奖励配置是 stable_v4:在 stable_v3 的楼层、血量、顶部风险、钉子/滚动板惩罚基础上,额外加入朝向首选目标的轻量密集奖励,以及更像样的目标对齐落板奖励;stable_v3default_v2 仍可通过 --reward-profile 回退。
  • 训练和评估现在支持 VecNormalize。训练会把归一化统计和 best_model / checkpoint / final model 一起保存;评估会自动恢复同 run 下的统计文件。
  • 评估入口兼容旧模型:如果 checkpoint 是老的 154 维 observation,程序会自动切回旧布局;如果是第一版 166 维 summary-feature 模型,会按旧的 summary_v1 语义解释;新的第二轮优化模型仍然是 166 维,但会通过 run 配置切到新的 target_v2 语义。
  • 曲线工具会递归读取 run 目录下的 TensorBoard event 文件,优先绘制 eval/mean_rewardeval/mean_ep_lengthrollout/ep_rew_meanapprox_klexplained_variance,并在存在时补充其它标量。
  • 如果 run 目录上层有 config.json,曲线标题会尽量带上 presetreward_profile,方便区分不同 preset 跑出来的实验。

Recommended Next Command

如果你拉下代码后想直接继续当前主线开发,先跑:

. .venv/bin/activate
python -m men100_ai.train \
  --algo recurrent-ppo \
  --preset stable_v1 \
  --n-envs 2 \
  --headless \
  --reward-profile stable_v4 \
  --total-timesteps 20000 \
  --eval-freq 2000 \
  --checkpoint-freq 5000

Structure

  • src/men100_ai/browser_adapter.py:Playwright + JS bridge,读写游戏状态
  • src/men100_ai/env.py:Gymnasium 环境封装
  • src/men100_ai/train.py:RecurrentPPO 训练入口
  • src/men100_ai/evaluate.py:模型评估入口
  • src/men100_ai/rule_baseline.py:规则代理和贪心落板基线

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages