feat(audit): 清图支配性对账重跑批——条款⑤现行值链重推(只读对账零数值改动;2026-09-19 用户指令经 plan 批准提前执行 06 待办对账义务;台账 86)——①重算器 tools/clear_dominance_audit.py(registry clause5_dominance 判式全参数 CLI 可配=难度曲线调参批常设重跑入口;E_dig 七型 67 权重池重推 (54+39u)÷67≈1.388〔u=1〕;V_mine 双口径:甲=注册公式 u×m_amb 连续对比 / 乙=极性矩阵负向字典加权 (42+50.4u)÷67≈1.379 主读数——注册公式成文于"所有雷→固定伏击"旧世界,矩阵批后踩雷惩罚按格型路由);②板形探针 smoke/board_stat_probe.gd(200 样本/行:实测幸存雷 10×10≈12.9 / 12×12≈22.4,远低于名义初布 23/34——"先布后删"落地值);③主结论(设计权威 design/research/audit-clear-dominance-2026-09-19.md):非完美态 18 语境全负、完美态唯一翻正面=L1 前段实测板形 +8.3——与 2026-09-14 重算批结构同向,裁决②"清图非严格支配=设计态"维持建议呈报(拍板归用户);保守地板缺口收窄 L1≈24/L2≈45 当量(u=1·对 C_min=8);护栏 B 防钓鱼上界被 C=13 常态越线(2026-09-17 压缩批未登记连带面)披露归调参批三选一;④analyze_playtest.py 增弃图刷新率/轮出口分布读数+--policy 过滤(刷新经济性监控条目分析侧缺口闭合,基线仍挂验收重测批)——双画像配对 1200 局实证:刷新流通关率全档位 ≥ 推到底流(L1 基线档 87% vs 73%)、实测盲挖踩雷 0.30–0.87/局 远低于判式保守计价 E[踩雷]≈12–21/板(均匀交错全池盲挖=构造性上界)、刷新策略 0.03–0.23 次/局几乎不发生——"清图被刷新淘汰"风险模拟面不成立;⑤登记面:registry clause5_dominance rerun_2026_09_19 回执+rerun_obligation 挂两工具入口+修订留痕块;难度曲线与Boss.md 正文对账句改写+P1 行回执指针;⑥验证:冒烟 317 项 0 失败(本批零游戏代码,冒烟作回归护栏)。边界:06 条目删除与 active.md 台账 86 两个共享状态文件留在主工作区随收口批收编(并行会话在飞 hunk 混载,不入本分支——registry 回执与本提交为分支侧登记事实源)

This commit is contained in:
DKChan committed 2026-09-19 15:40:09 +08:00
1 parent d236d9f8e1
commit d73508ffa9
7 files changed
+486 -7

No files matched your search

+39 -4
View File
@@ -96,8 +96,10 @@ def parse_log(path):
# ---- 多局聚合模式(monte carlo 共享日志:run 行切分局次,按通关/失败分组对比) ----
def analyze_runs(rows, label, tier=None):
"""tier = (atk_pct, hp_pct):只统计该天赋档(None = 全档)。"""
def analyze_runs(rows, label, tier=None, policy=None):
"""tier = (atk_pct, hp_pct):只统计该天赋档(None = 全档)。
policy = "normal"/"perfect":只统计该策略画像(清图支配性对账批 2026-09-19——
双画像同文件时分开聚合做配对对照;None = 全画像混算,旧口径不变)。"""
runs = [] # [{meta, rows}]
cur = None
for r in rows:
@@ -111,6 +113,8 @@ def analyze_runs(rows, label, tier=None):
runs = [run for run in runs
if int(run["meta"].get("atk_pct", -999)) == tier[0]
and int(run["meta"].get("hp_pct", -999)) == tier[1]]
if policy is not None:
runs = [run for run in runs if run["meta"].get("policy") == policy]
stats = []
for run in runs:
res = analyze_run_core(run["rows"], run["meta"])
@@ -123,7 +127,8 @@ def analyze_run_core(rows, meta):
"""单局聚合:返回该局的总账(结果/死亡节点/造伤/承伤/回复/奖励/轮数 + 战斗级明细)。"""
out = dict(meta=meta, result="", death_node=-1, hp_left=-1,
hero_dmg=0, reward_dmg=0, taken=0, healed=0, rest_heal=0,
rounds=0, rewards_n=0, eff={}, battles_won=0, battles=0, battle_list=[])
rounds=0, rewards_n=0, eff={}, battles_won=0, battles=0, battle_list=[],
refresh_ok=0, refresh_rej=0, exits={})
eff_counts = {}
cur_b = None
for r in rows:
@@ -196,6 +201,15 @@ def analyze_run_core(rows, meta):
cur_b["taken"] += v
if k == "node" and r.get("type") == "rest":
out["rest_heal"] += int(r.get("healed", 0))
# 弃图刷新与轮出口(清图支配性对账批 2026-09-19 增补读数——此前日志有行无分析)
elif k == "action" and r.get("op") == "refresh":
if r.get("accepted", False):
out["refresh_ok"] += 1
else:
out["refresh_rej"] += 1
elif k == "ux" and r.get("ux") == "ux_round_exit":
tag = r.get("path_tag", "?")
out["exits"][tag] = out["exits"].get(tag, 0) + 1
out["eff"] = eff_counts
return out if out["rounds"] > 0 else None
@@ -234,6 +248,22 @@ def print_run_report(label, stats):
print(" 平均结算轮数 :%.1f" % avg(group, "rounds"))
print(" 平均每局奖励件数 :%.1f(%.2f 件/轮)" % (
avg(group, "rewards_n"), avg(group, "rewards_n") / max(1.0, avg(group, "rounds"))))
# 弃图刷新面(清图支配性对账批 2026-09-19:刷新板数÷总板数 = 弃图率)
boards = sum(s["battles"] + s["refresh_ok"] for s in group)
refreshes = sum(s["refresh_ok"] for s in group)
print(" 平均每局弃图刷新 :%.2f 次(被拒 %.2f 次) 弃图率:%.0f%%" % (
refreshes / max(1, len(group)),
sum(s["refresh_rej"] for s in group) / max(1, len(group)),
100.0 * refreshes / max(1, boards)))
exits = {}
for s in group:
for k, v in s["exits"].items():
exits[k] = exits.get(k, 0) + v
exit_total = sum(exits.values()) or 1
exit_cn = {"cleared": "清图换板", "stopped": "主动停手", "ap_exhausted": "行动点耗尽"}
print(" 轮出口分布 :%s" % "、".join(
"%s %d(%.0f%%)" % (exit_cn.get(k, k), v, 100.0 * v / exit_total)
for k, v in sorted(exits.items(), key=lambda x: -x[1])))
print(" 地图战斗资源构成(件/轮) :%s" % eff_line(group))
if name.startswith("失败"):
dn = {}
@@ -598,12 +628,17 @@ def main():
# --tier ATK,HP:只统计该天赋档(默认 0,0 基线档——0.5 传作 50)。
if "--runs" in args:
tier = (0, 0)
policy = None
for i, a in enumerate(args):
if a == "--tier" and i + 1 < len(args):
tier = tuple(int(x) for x in args[i + 1].split(","))
elif a.startswith("--tier="):
tier = tuple(int(x) for x in a.split("=")[1].split(","))
analyze_runs(rows, os.path.basename(path), tier)
elif a == "--policy" and i + 1 < len(args):
policy = args[i + 1]
elif a.startswith("--policy="):
policy = a.split("=")[1]
analyze_runs(rows, os.path.basename(path), tier, policy)
elif "--run" in args:
# 抽单局(大日志里按 run 序号或种子挑一局)走三层维度报告
sel = None