Commit Graph

6 Commits

Author SHA1 Message Date
73c8783276 feat: 对手牌型预测 — PredictOpponent + ISMCTS 候选加权
CardTracker:
- 新增 OpponentPrediction 类: RankProbabilities/MaxRank/BombProbability/LikelyPairs/LikelyTriples/MaxStraightLength
- 新增 PredictOpponent: 基于剩余rank计数+对手手牌数计算期望持有量
  核心公式: expected = remainingCount × (oppNeed / totalUnknown)
  推断: 对子(>=1.5期望)/三张(>=2.5)/炸弹概率/顺子长度/MaxRank
- Pass约束强化: 对手pass过某单张 → 降低MaxRank

IsmctsBot:
- 新增步骤5.7 对手牌型预测加权:
  我的出牌rank > 对手MaxRank → +8-13%
  我的出牌rank < 对手MaxRank → -5%
  对手可能有炸弹 → 大牌型-3%

验证: 100局0错误 0.8s/局
2026-07-13 01:05:14 +08:00
1b1404f38e feat: 确定性牌计数推理v2 — AbsoluteHandStrength + 包庄否决 + 混合策略修正
CardTracker:
- 新增 AbsoluteHandStrength: 综合评估手牌实力(rank控制/绝对最高牌/炸弹/效率/已知率)
- 用于包庄决策的安全检查

IsmctsBot:
- EstimateWinProbability: 混合策略回退为纯ISMCTS + 确定性否决
  (混合加成导致虚假信心, v3验证0%胜率)
- 策略: detStrength<0.15 → 直接否决不包, 否则纯ISMCTS
- 阈值保持 v2 水平: minPlays≤3→0.50,≤4→0.60,≤5→0.65

验证: 100局0错误 0.8s/局 ENDGAME=983次 LOCK=3次
2026-07-13 00:59:48 +08:00
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
180be25ffa fix: code review — 修复4个问题
1. CardTracker.UnknownCount: 48→52 (硬编码修正)
2. IsmctsBot.GenerateDeck → 静态FullDeck池复用 (减少对象分配)
3. CardTracker: 删除3个死字段(_passStreak/_isNewRound/_bombCounts)
4. CardTracker.Update: 清理pass约束记录逻辑

验证: 100局0错误, 0.9s/局
2026-07-13 00:21:15 +08:00
4263146487 fix: code review — 清理CardTracker死代码 + IsmctsBot未使用变量
CardTracker.BombsOutside: 删除13行注释+空循环(seenByRank从未填充)
IsmctsBot: 删除未使用的bombRanks变量
2026-07-12 22:51:48 +08:00
e67b06caa3 feat: CardTracker — 出牌记录+对手手牌推断+炸弹检测
CardTracker.cs (新文件, 400行):
- 48位bitset追踪已出牌(按ID)
- 对手pass约束记录: pass对子9→该对手无对子≥9
- BombsOutside(): 外面还剩几个炸弹
- BombRanks(): 可能藏炸弹的rank列表
- CanAnyoneBeat(play): 判断是否可能被压制
- SampleOpponentHands(): 约束采样替代随机分配
- 支持6种牌型的压制判断: 单张/对子/炸弹/顺子/连对/飞机

IsmctsBot.cs 整合:
- CardTracker实例,每次DecidePlay/DecideBaoZhuang调用Update()
- 炸弹感知加权: 外面没炸弹→我方炸弹+25%, 快赢时+15%
- 外面有炸弹且快赢→保守出牌(-5%多牌分)
- SimulateToEnd改用约束采样(回退随机补齐)
2026-07-12 22:36:22 +08:00