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); int beforeMin = HandOptimizer.MinPlays(hand);
for (int i = 0; i < scoredCandidates.Count; i++) for (int i = 0; i < scoredCandidates.Count; i++)
{ {
var (p, wr, am, m) = scoredCandidates[i]; var (p, wr, am, m) = scoredCandidates[i];
if (am < beforeMin) if (am < beforeMin)
{ {
// 出牌后手牌结构变好 → 加权 // 手牌结构变好 → 大幅加分
double improvement = (double)(beforeMin - 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); scoredCandidates[i] = (p, wr, am, m);
} }

Binary file not shown.

Binary file not shown.