新增: - hjha-console/Program.cs: --stress N 压测模式 - 每局独立日志 stress_logs/round_NNNNN.txt - 每 50 局进度汇报 + 异常捕获 - docs/stress-test-report.md: 完整分析报告 - P0: 包庄严重高估(5.2%成功) → 需校准阈值 - P1: 75 moves 异常局 → 疑似死循环 - P2: 只出单张不组合 → rollout 优化 - P3: 性能瓶颈分析 - .gitignore: stress_logs/, analyze_stress.py 压测结果: 12.8min, 0 crashes, 1000/1000通过
3.7 KiB
3.7 KiB
1000轮 ISMCTS 压测分析报告
运行时间: 12.8 min | 1000/1000 完成 | 0 crashes
1. Bug / 异常
1.1 稳定性:完美
- 0 次 Unhandled Exception
- 0 次空日志(每局都有完整结算)
- 所有 1000 局产出了完整的 包庄→打牌→结算→test over 流程
1.2 Move 分布异常
| 指标 | 值 | 说明 |
|---|---|---|
| 平均 move | 12.8 | 正常 |
| p50 move | 7 | 偏少,很多局快速结束 |
| min move | 4 | 极快结束 |
| max move | 75 | 异常! 一局走了 75 个 whoPlay 回合 |
75 moves 的异常局需要排查:正常跑得快一局 15-30 步。75 步说明可能出现了长期 pass 循环——三人都不出牌,一轮轮空转。需要检查是否有游戏状态机 bug 导致无法正常出牌。
1.3 结算异常
- 1 局结算 ±6(非标准的 ±32/±64),需要查该局日志。
2. 性能
2.1 吞吐量
| 指标 | 值 |
|---|---|
| 总时间 | 12.8 min |
| 每局平均 | 0.77s |
| 每局 whoPlay | 12.8 次 |
| 每局 ISMCTS 决策 | ~12.8 × 3 人 ≈ 38 次(估算) |
| 每次 ISMCTS 决策 | ~20ms |
2.2 优化建议
| 方向 | 当前 | 优化后 | 改动 |
|---|---|---|---|
| ISMCTS sims 自适应 | 800 固定 | 手牌>8→800, ≤8→300, ≤4→100 | IsmctsBot 参数 |
| GamePack JSON 保存 | 每步写文件 | 压测模式跳过 | SendPack() 加 if |
| Log 写入 | 每步 flush | 压测模式仅写结算 | 控制台 Log 静默 |
预估优化后:每局 0.3-0.4s,1000 局 < 7 分钟。
3. Bot 逻辑问题(关键)
3.1 包庄决策:严重高估胜率
| 指标 | 值 |
|---|---|
| 包庄次数 | 1331 次(每局平均 1.33 人包庄) |
| 包庄成功 | 52 次 |
| 包庄失败 | 947 次 |
| 包庄成功率 | 5.2% |
根因:ISMCTS 包庄评估中用"对手贪心 roll-out"模拟 P(win)。但实际对局中对手使用的是完整 ISMCTS 决策,强度远高于贪心 roll-out。导致 P(win) 系统性高估。
修复方案:
- 提升模拟对手强度:Rollout 中对手也使用一定程度的 ISMCTS(如 50 sims 轻量版)
- 校准阈值:P(win)≥45% → P(win)≥60% 或更高
- 动态校准:记录实际胜率,用 Kalman 滤波修正评估偏差
3.2 包庄人数分布
0人包庄: 1 局 (0.1%)
1人包庄: 667 局 (66.7%) ← 常态
2人包庄: 332 局 (33.2%)
3人包庄: 0 局 (0.0%)
三人都包的情况从未发生——3 人同时 P(win)≥45% 需要牌局极度均衡,几乎不可能。
3.3 各位置输赢分布
pos1: -1498 (最差)
pos2: +1178 (最好)
pos3: +320 (中等)
pos1 表现显著弱于 pos2。可能原因:FistPlay(黑桃3持有者)通常被分配到 pos1,而先出牌不一定占优——先出的人被后面两人联手压制。
3.4 出牌策略优化空间
当前 ISMCTS 出牌只选单张(DanZhang:1c),从不选多牌组合。根因:
- Rollout 策略用
GetTipCard取第一个方案(最小牌),几乎总是单张 - 单张是最"安全"的选择——容易通过 ISMCTS 模拟获得高胜率
- 但这导致 bot 永远打单张,浪费了对子/顺子等高效出牌机会
修复:Rollout 策略增加多牌组合的权重,鼓励一次清多张牌。
4. 修复优先级
| 优先级 | 问题 | 影响 | 估计时间 |
|---|---|---|---|
| P0 | 包庄严重高估(5.2% 成功率) | 大幅降低包庄 bot 的期望收益 | 2h(校准阈值+提升rollout) |
| P1 | 75 moves 异常局 | 潜在死循环 bug | 30min(查日志根因) |
| P2 | 只出单张不组合 | 降低清牌效率 | 1h(rollout 多牌权重) |
| P3 | 性能优化(静默日志) | 压测速度翻倍 | 15min |