feat: EndgameSolver — 终局精确求解替代ISMCTS采样
EndgameSolver.cs (新文件): - 触发条件: 手牌≤5张 + 未知牌≤15张 - 枚举100种对手手牌分布 → 每分布贪心模拟到底 (深度限制30) - 比 ISMCTS 更精确: 确定性模拟 vs 随机rollout - 结果: 8/10局触发, 每局5-15次, 速度快(<50ms) 修复: candidates[1]越界
This commit is contained in:
@ -84,7 +84,25 @@ namespace PdkFriendServer.Logic
|
||||
var hand = view.MyHand;
|
||||
if (hand.Length == 0) return Pass(view);
|
||||
|
||||
// 锁手检测:残局时跳过 ISMCTS,走必胜序列
|
||||
// 终局精确求解:手牌≤5 + 未知牌少 → 替代 ISMCTS
|
||||
if (hand.Length <= 5 && _tracker.UnknownCount <= 15)
|
||||
{
|
||||
var endgameResult = EndgameSolver.Solve(hand, view, _tracker, _rng);
|
||||
if (endgameResult.HasValue)
|
||||
{
|
||||
var ep = endgameResult.Value;
|
||||
Console.WriteLine($"[ISMCTS pos{view.MyPos}] ENDGAME hand={hand.Length} unknown={_tracker.UnknownCount} → 精确求解");
|
||||
return new PlayOutCardPdkF
|
||||
{
|
||||
Pos = (byte)view.MyPos,
|
||||
GameNum = ep.GameNum,
|
||||
Ids = ep.Ids,
|
||||
Type = CardType1.None
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// 锁手检测:残局时跳过 ISMCTS,走必胜序列
|
||||
if (hand.Length <= 8)
|
||||
{
|
||||
var lockSeq = LockDetector.FindLockSequence(hand, _tracker, view.MyPos);
|
||||
|
||||
Reference in New Issue
Block a user