7 Commits

Author SHA1 Message Date
5cc2ae8bd0 fix: 确定性牌计数推理 — UnknownCount修复 + 绝对大牌判断 + EndgameSolver修正
CardTracker:
- UnknownCount: 52→48 - handSize - seenCount (修正底牌+手牌漏算)
- 新增 RemainingCount/GetUnknownPool: 精确剩余牌计数
- 新增 IsAbsolutelyHighest: 全牌型确定性无敌判断 (单张/对子/三张/炸弹/顺子/连对/飞机)

EndgameSolver:
- GeneratePool → 调用 tracker.GetUnknownPool (修复已见牌未排除bug)

IsmctsBot:
- 确定性无敌出牌加成: 无敌出牌 +15-25% win rate bonus

SOIsmctsBot:
- 同步 UnknownCount(hand) 调用

验证: 100局0错误, 0.8s/局, ENDGAME求解正常触发
2026-07-13 00:40:27 +08:00
b5b02db2e6 结论: 切回IsmctsBot — SO-ISMCTS实验总结
SO-ISMCTS v4 (引擎级rollout+全牌型):
- GetTipCard在isNewRound时只返单张 → rollout对手只出单张
- 补多牌枚举后仍无法达到IsmctsBot的53%多牌率
- 根因: MO-ISMCTS的独立世界树更适合不完全信息卡牌游戏
  SO的优势(信息共享)在对手手牌随机化的场景下被稀释

IsmctsBot最终指标: 多牌53%, 1.0s/局, 全牌型
SOIsmctsBot保留为备选方案
2026-07-12 23:51:24 +08:00
6a267738df fix: FastSim清牌效率优先 — 领牌出多牌+最小rank, 跟牌出最小压制
核心改动: 从'出最大的看谁能压'改为'出最省的清牌快'

领牌(新轮):
- 三张 > 对子 > 单张 (多牌优先)
- 始终用最小rank (保留大牌给跟牌阶段)

跟牌:
- 三张/对子: 找最小rank能压制的同类型
- 单张: 出最小的压制牌(保留大牌)

效果: 多牌29%→34% (+5%), 单张-4.4%, 0.7s/局
vs IsmctsBot: 34% vs 53%, 差距来自straight/飞机等复杂牌型在rollout中缺失
2026-07-12 23:41:50 +08:00
8b30caff1a perf: FastSim rollout 支持对子 (DuiZi) — 模拟更真实
FastSim改进:
- 新轮次: 优先找最大对子 → 再出最大单张
- 跟牌: 对子跟牌→找≥2张同rank且大于对手
- 单张跟牌: 找最小可压牌

效果: 多牌29%, ShunZi 8.8%, DuiZi 19.0%, 0.8s/局

已知局限: 贪婪rollout低估清牌效率, 后续需全局序列优化
2026-07-12 23:31:11 +08:00
30a4d06b33 fix: SO-ISMCTS 多牌候选补全 — 恢复ShunZi/ZhaDan/SanZhang
BuildCandidates: 复用 IsmctsBot.AddMultiCardLeads 完整牌型枚举
- 对子/三张/顺子/炸弹/连对 → 与 IsmctsBot 完全一致
- 使用 PokerLogic.GetShunZi + PokerLogic.GetPlayZhaDans

效果:
- ShunZi 0%→13.8%
- DuiZi 正常 (21.8%)
- 速度 0.8s/局
- 仍需改进 FastSim rollout (仅模拟单张)
2026-07-12 23:28:40 +08:00
2af570c0b3 perf: SO-ISMCTS v2 — 静态牌池实现 1.0s/局 (8x提升)
SOIsmctsBot.cs 重写:
- 静态 FullDeck[52]: 52张牌只创建一次, 模拟时只交换ID数组
- 预生成300份对手手牌分布 (byte[] ID数组)
- FastSim核心全部用 byte/List<byte>, 零对象分配
- 8个候选→800次模拟=800×4个List.ToList (可忽略)

性能: 7.9s→1.0s/局 (8x)
触发: 298次SOv2决策, 2次LOCK
默认启用: InitBots改用SOIsmctsBot

vs IsmctsBot:
- SO 更快收敛(单树共享统计)
- SO 确定性预生成hand(无随机采样偏差)
- 速度相同(1.0s)
2026-07-12 23:24:13 +08:00
bce5e10cf2 feat: SO-ISMCTS 备选方案 (非默认)
SOIsmctsBot.cs (新文件, 284行):
- 单树共享统计: SONode 累积所有候选的胜/负
- 200次检查收敛: winRate>90% → 提前终止
- 整合 HandOptimizer/CardTracker/EndgameSolver/LockDetector

性能问题 (当前不启用):
- 每次模拟重新生成对手手牌(48张TCardInfoPdkF) → 5-8x慢
- 优化方向: 对象池缓存+批量determinization
- 作为备选bot保留, InitBots仍用 IsmctsBot
2026-07-12 23:14:52 +08:00