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:
1 parent
d236d9f8e1
commit
d73508ffa9
7 files changed
+486
-7
No files matched your search
@@ -0,0 +1,57 @@
|
||||
# VERTICAL SLICE - NOT FOR PRODUCTION
|
||||
# Date: 2026-09-19
|
||||
# 棋盘板形统计探针(清图支配性对账重跑批取数工具——判式"实测板形"口径的数据源):
|
||||
# 对 board_gen.tres 每行 (L, D) 生成 N 张板,统计幸存雷数 |M| 与安全格数 |S|
|
||||
# 的均值 / 最小 / 最大("先布后删"后的落地值——名义值 density×(W×H−9) 不含删除段)。
|
||||
# 只读诊断,零游戏代码改动;装载面与 level_monte_carlo 同源(config_db.load_tables)。
|
||||
# 运行:Godot_console.exe --headless --path . --script res://smoke/board_stat_probe.gd -- [N] [seed0]
|
||||
extends SceneTree
|
||||
|
||||
|
||||
func _initialize() -> void:
|
||||
var args := OS.get_cmdline_user_args()
|
||||
var n := 200
|
||||
if args.size() >= 1 and args[0].is_valid_int():
|
||||
n = maxi(10, int(args[0]))
|
||||
var seed0 := 9000
|
||||
if args.size() >= 2 and args[1].is_valid_int():
|
||||
seed0 = int(args[1])
|
||||
var db = load("res://core/config_db.gd").new()
|
||||
if not db.load_tables("res://data/tables", false):
|
||||
print("表加载失败")
|
||||
quit(1)
|
||||
return
|
||||
var gen = load("res://core/board_generator.gd").new()
|
||||
print("=== 板形统计:N=%d/行 · 种子基 %d ===" % [n, seed0])
|
||||
print("%-4s %-4s %-8s %-8s %-10s %-10s %-10s %-10s %-10s %-10s" % ["L", "D", "宽x高", "类型", "|M|均", "|M|min", "|M|max", "|S|均", "雷密度实测", "达标率"])
|
||||
for row in db.board_gen.rows:
|
||||
var L: int = int(row.get("level_index", 0))
|
||||
var D: int = int(row.get("node_depth", -1))
|
||||
var w: int = int(row.get("board_width", 0))
|
||||
var h: int = int(row.get("board_height", 0))
|
||||
var btype := String(row.get("board_type", ""))
|
||||
var mine_counts: Array = []
|
||||
var accepts := 0
|
||||
for i in range(n):
|
||||
var rng = load("res://core/rng_service.gd").new()
|
||||
rng.set_master_seed(seed0 + L * 1000 + D * 100 + i)
|
||||
var stream: RandomNumberGenerator = rng.open_stream("board_gen")
|
||||
var board = gen.generate(L, D, stream, db)
|
||||
if board == null:
|
||||
continue
|
||||
mine_counts.append(board.mines.size())
|
||||
if not board.illegal_product:
|
||||
accepts += 1
|
||||
if mine_counts.is_empty():
|
||||
print("%-4d %-4d 生成全败" % [L, D])
|
||||
continue
|
||||
mine_counts.sort()
|
||||
var total := 0
|
||||
for m in mine_counts:
|
||||
total += int(m)
|
||||
var mean_m := float(total) / float(mine_counts.size())
|
||||
var mean_s := float(w * h) - mean_m
|
||||
print("%-4d %-4d %-8s %-8s %-10.2f %-10d %-10d %-10.2f %-10.4f %-10.3f" % [
|
||||
L, D, "%dx%d" % [w, h], btype, mean_m, int(mine_counts[0]), int(mine_counts[mine_counts.size() - 1]),
|
||||
mean_s, mean_m / float(w * h), float(accepts) / float(mine_counts.size())])
|
||||
quit(0)
|
||||
@@ -0,0 +1 @@
|
||||
uid://b4bmmnuwpld77
|
||||
Reference in new issue
Block a user