tune: 包庄阈值 60%→70% + 多牌加权 +10%/张

包庄: 100局校准 60%阈值→30%成功率 → 提至70%(更保守)

多牌: 加 MultiBonusPerCard=0.10 加权,但实际效果有限——
两阶段选择已经无条件优先多牌。53%比例接近16张手牌
结构的天然上限(约一半牌可组组合,其余为散牌)

10局验证: DanZhang 88|DuiZi 61|ShunZi 19|SanDai2 10|LianDui 3|SiDai3 2
This commit is contained in:
2026-07-07 14:51:44 +08:00
parent 750e36462e
commit aa30bfac29
7 changed files with 13 additions and 1 deletions

View File

@ -18,7 +18,8 @@ namespace PdkFriendServer.Logic
{
private readonly int _simulations;
private readonly Random _rng;
private const double BaoThreshold = 0.60;
private const double BaoThreshold = 0.70; // 100局校准: 60%→30%, 提至70%
private const double MultiBonusPerCard = 0.10; // 多牌加权: 每多1张+10%
public IsmctsBot(int simulations = 800)
{
@ -93,6 +94,17 @@ namespace PdkFriendServer.Logic
scoredCandidates.Add((play, (double)wins / simsPerCandidate, allCandidates[ci].isMulti));
}
// 多牌加权: 两阶段选择前给多牌候选加胜率偏置
for (int i = 0; i < scoredCandidates.Count; i++)
{
if (scoredCandidates[i].isMulti)
{
int cardCount = scoredCandidates[i].play.Ids?.Length ?? 1;
var (p, wr, m) = scoredCandidates[i];
scoredCandidates[i] = (p, wr + cardCount * MultiBonusPerCard, m);
}
}
// 两阶段选择:多牌优先
scoredCandidates.Sort((a, b) => b.winRate.CompareTo(a.winRate));
var best = scoredCandidates[0];