fix: afterMin权重强化 — 结构优化信号对抗模拟噪声

问题: 如玩家1手牌可拆2个顺子(6步完成), 但ISMCTS选择了8张顺子(7步)
→ 根因: 打散惩罚仅-3%, 被ISMCTS±3.5%噪声淹没

修复:
- 结构改善bonus: 12%→25% (对抗模拟噪声)
- 多牌打散penalty: 固定-3%→比例-30% (严重惩罚)
- 单张打散penalty: 新增-10%(之前无惩罚)
- 打散比例 = (afterMin-beforeMin)/beforeMin

效果: SanDai2 6.5%→8.1%(+25%), DanZhang-1.4%, 多牌54%
This commit is contained in:
2026-07-13 00:05:22 +08:00
parent b5b02db2e6
commit 1a97ea3d21
5 changed files with 10 additions and 6 deletions

View File

@ -187,21 +187,25 @@ namespace PdkFriendServer.Logic
}
}
// 4.5. afterMin 牌效率加权
// 4.5. afterMin 牌效率加权(强化版)
int beforeMin = HandOptimizer.MinPlays(hand);
for (int i = 0; i < scoredCandidates.Count; i++)
{
var (p, wr, am, m) = scoredCandidates[i];
if (am < beforeMin)
{
// 出牌后手牌结构变好 → 加权
// 手牌结构变好 → 大幅加分
double improvement = (double)(beforeMin - am) / beforeMin;
wr += improvement * 0.12; // 最多 +12% 当 minPlays 减半
wr += improvement * 0.25; // max +25%
}
else if (am > beforeMin && m)
else if (am > beforeMin)
{
// 多牌出牌反而把手牌打散 → 惩罚
wr -= 0.03;
// 手牌打散 → 惩罚
double degradation = (double)(am - beforeMin) / beforeMin;
if (m)
wr -= degradation * 0.30; // 多牌打散 → 严重(-30%)
else
wr -= degradation * 0.10; // 单张打散 → 中(-10%)
}
scoredCandidates[i] = (p, wr, am, m);
}