# 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) 系统性高估。 **修复方案**: 1. **提升模拟对手强度**:Rollout 中对手也使用一定程度的 ISMCTS(如 50 sims 轻量版) 2. **校准阈值**:P(win)≥45% → P(win)≥60% 或更高 3. **动态校准**:记录实际胜率,用 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 |