|
|
e777aef687
|
fix(PX): 训练数据文件名加进程启动时间戳前缀,防止rsync覆盖旧文件
FlushGame 文件名从 game_00000.csv 改为 game_YYYYMMDD_HHMM_000000.csv。
_sessionPrefix 在类加载时固化,同一采集批次共享前缀,不同批次按启动时间区分。
|
2026-07-20 14:01:56 +08:00 |
|
|
|
f66f56d0f8
|
feat: ISMCTS q-value as training label
C#: TrainingCollector新增q_value列, IsmctsBot传入winRate
CSV: reward→q_value, ISMCTS状态带真实评估值, Neural填0
Python: 优先取ISMCTS状态+评估值训练, 无q_value的Neural状态跳过
旧CSV格式(reward)自动fallback到Neural-only过滤
信号从'这局谁赢'改为'ISMCTS评估这步有多好'
|
2026-07-13 11:38:42 +08:00 |
|
|
|
22acc3b2ca
|
feat: CSV加player列+#RESULT汇总 — 训练中直接看胜率进化
|
2026-07-13 08:40:14 +08:00 |
|
|
|
e5e1f4818e
|
fix: V-learning 出牌率 0%→81% — MakePlay Type=None导致所有候选被当pass
根因: MakePlay(Type=CardType1.None)
→ play.Type==None 对所有候选为true
→ afterHand保持原样(未出牌)
→ 所有候选V值相同 → 始终选第一个(pass)
修复:
- play.Type→play.Ids.Length判断是否真pass
- EncodeAfterPlay更新ShenYuCard(出牌后剩余-1)
- EncodeAfterPlay设MaxPlayCard为出的牌
- isPass用Ids==null而非Type
效果: Play 117 Pass 28(81%出牌) vs ISMCTS -108/10局
|
2026-07-13 03:03:36 +08:00 |
|
|
|
f43e47b0a6
|
feat: V-learning架构 — 改Q→V
Q-learning问题: pass action Q值稳定偏高 → 永远pass
V-learning修复:
- 网络输出 14(Q-action)→1(V-state): P(win|state)
- NeuralBot: 对每个候选编码出牌后state → 选V值最高的
- pass和出牌都是候选, 公平竞争(不是固定action slot)
TrainingCollector:
- 新增 EncodeAfterPlay(view, tracker, afterHand, playedIds)
- EncodeState 支持 extraSeen 参数(模拟出牌时标记已见)
Python:
- train_v.py: V-learning训练器(load CSV→predict win/loss)
- network.py: OUTPUT_DIM=14→1
验证: 200局0错误, V-model loss 0.81→0.0001
需更多数据覆盖状态空间
|
2026-07-13 02:52:48 +08:00 |
|