初始展开收窄批T0-T4(迭代14①):甲=剃雷域收窄(切比雪夫≤1+r 参数化 shave_ring_radius,r=1→5×5=25格,全域flood剃雷退役——零RNG消费变化同种子布雷逐位一致)+乙=R₀重掷闸(合法性闸序列 r0_cap_exceeded+同流重试+耗尽走三分出口accept_worst诚实降级+metrics r0_cap_rejected)+参数面(schema两列域校验[0,2]/[9,半板]加载期致命+19行投值)+calibrate扩r0方差/分位/闸触发列+参数透传;S1停机呈报已裁(用户方案A:10×10 cap 30→45——r=1自然R₀均值39>30锚结构性倒挂94%拒绝常态非法板,P1预案字面上调;12×12/13×13 43/51健康侧维持);断言面=+12(R₀≤cap结构/r0_cap_rejected在位/ring_removed≤剃雷域候选/cap压线9诚实降级/确定性两遍逐位)+夹具复核3处(relic候选身份kind|tier|relic_id按TP0 v2.2、商店购买笔数推导防GP流漂移);闸=冒烟767/0(755+12)
This commit is contained in:
1 parent
3e2c564b59
commit
30cabbdf52
5 files changed
+160
-32
No files matched your search
@@ -30,6 +30,10 @@ func generate(L: int, D: int, rng_stream: RandomNumberGenerator, db) -> BoardDat
|
||||
"min_safe": int(row.min_safe_count),
|
||||
"max_attempts": int(row.max_gen_attempts),
|
||||
"board_type": String(row.board_type),
|
||||
# 初始展开收窄批(迭代14① T1——两新参数;.get 缺省=legacy 调用方防御口径:shave_r=1 现行投值、
|
||||
# r0_cap=0 闸关。正式表行全行投值,加载期校验在 BoardGenTable.validate)
|
||||
"shave_r": int(row.get("shave_ring_radius", 1)),
|
||||
"r0_cap": int(row.get("r0_max_cap", 0)),
|
||||
}
|
||||
var best_legal: BoardData = null
|
||||
var best_legal_score := -1.0
|
||||
@@ -38,6 +42,7 @@ func generate(L: int, D: int, rng_stream: RandomNumberGenerator, db) -> BoardDat
|
||||
var attempts_used := 0
|
||||
var accepted: BoardData = null
|
||||
var accept_mode := ""
|
||||
var r0_cap_rejected := 0
|
||||
for k in range(1, params.max_attempts + 1):
|
||||
attempts_used = k
|
||||
var b := _attempt(params, rng_stream, db)
|
||||
@@ -45,6 +50,9 @@ func generate(L: int, D: int, rng_stream: RandomNumberGenerator, db) -> BoardDat
|
||||
if best_bad == null or _lex_less(badness, best_badness):
|
||||
best_bad = b
|
||||
best_badness = badness
|
||||
# R₀≤cap 重掷闸触发计数(迭代14① T3——尝试事实,与合法性判定独立记录;占比=T5 闸触发率读数)
|
||||
if int(params.r0_cap) > 0 and b.compute_r0().size() > int(params.r0_cap):
|
||||
r0_cap_rejected += 1
|
||||
if legality(b, params, db):
|
||||
var m: Dictionary = measure_inferability(b) # 求解器每合法板恰一次(O3 收口——此前重复调用两次)
|
||||
var inf: float = m["inferability"]
|
||||
@@ -66,7 +74,7 @@ func generate(L: int, D: int, rng_stream: RandomNumberGenerator, db) -> BoardDat
|
||||
accept_mode = "accept_worst"
|
||||
accepted.illegal_product = true
|
||||
push_error("[棋盘生成] attempts 耗尽零合法——接受最不坏出图 + 非法产物标记(玩家永不卡死)")
|
||||
_finalize(accepted, params, attempts_used, accept_mode, db)
|
||||
_finalize(accepted, params, attempts_used, accept_mode, db, r0_cap_rejected)
|
||||
return accepted
|
||||
|
||||
|
||||
@@ -99,12 +107,16 @@ func _attempt(params: Dictionary, rng_stream: RandomNumberGenerator, db) -> Boar
|
||||
for i in range(0, mini(n_mines, domain.size())):
|
||||
b.mines[domain[i]] = true
|
||||
_compute_digits(b)
|
||||
# 先布后删:0 格闭包(布后基准)外扩 1 环内的雷移除(只减不增、无迭代)
|
||||
# 先布后删:剃雷域 = 距 spawn_center 切比雪夫距离 ≤1+r 的格(迭代14①收窄批 T2——原「R₀ flood 域∪
|
||||
# 外扩 1 环」全域剃雷=开局开阔地巨大根因〔10×10 板 R₀ 均值 68.6=板面 68.6%〕;收窄后开阔地=
|
||||
# 出生邻域外的自然 flood。r 读表 shave_ring_radius(r=1 → 5×5=25 格;r=0 即只剃出生 3×3)。
|
||||
# 只减不增、无迭代语义不变;ring_removed 指标语义不变(现值变小=预期);零 RNG 消费变化——
|
||||
# 同种子布雷序列逐位一致,仅移除域收窄。
|
||||
var shave_r: int = int(params.get("shave_r", 1))
|
||||
var ring := {}
|
||||
for c in b.compute_r0():
|
||||
for n in b.neighbors8(c):
|
||||
if not ring.has(n):
|
||||
ring[n] = true
|
||||
for c in b.all_cells():
|
||||
if maxi(absi(c.x - b.spawn_center.x), absi(c.y - b.spawn_center.y)) <= 1 + shave_r:
|
||||
ring[c] = true
|
||||
var removed := 0
|
||||
for c in ring.keys():
|
||||
if b.mines.has(c):
|
||||
@@ -300,6 +312,12 @@ func _legality_faults(b: BoardData, params: Dictionary) -> Array:
|
||||
var min_safe: int = int(params.get("min_safe", params.get("min_safe_count", 0)))
|
||||
if b.safe_cells().size() < min_safe:
|
||||
faults.append("min_safe_short")
|
||||
# ⑤ R₀≤cap 重掷闸(迭代14①收窄批 T3——合法性先于质量评分,同 inv4 白给板先例;超阈整板作废
|
||||
# 同流重试〔重试共用 board_gen 流,attempt 边界非 scope 事件〕;全部尝试超阈 → 既有三分出口
|
||||
# accept_worst 诚实降级+非法产物标记(玩家永不卡死)。cap=0 = 闸关(legacy 调用方防御口径)
|
||||
var r0_cap: int = int(params.get("r0_cap", 0))
|
||||
if r0_cap > 0 and r0.size() > r0_cap:
|
||||
faults.append("r0_cap_exceeded")
|
||||
return faults
|
||||
|
||||
|
||||
@@ -313,7 +331,7 @@ func _neighbor_mine_count(b: BoardData, c: Vector2i) -> int:
|
||||
|
||||
# ==================== 产出上报(生成期指标集) ====================
|
||||
|
||||
func _finalize(b: BoardData, params: Dictionary, attempts_used: int, accept_mode: String, _db) -> void:
|
||||
func _finalize(b: BoardData, params: Dictionary, attempts_used: int, accept_mode: String, _db, r0_cap_rejected: int = 0) -> void:
|
||||
var m := measure_inferability(b)
|
||||
# 产物断言(棋盘生成 出生区安全与反退化布雷):实际雷数 ≤ 目标雷数 N——先布后删只减不增,失败即致命
|
||||
var n_target: int = int(round(float(params.density) * float(params.w * params.h - BoardData.SPAWN_AREA_CELLS)))
|
||||
@@ -332,6 +350,8 @@ func _finalize(b: BoardData, params: Dictionary, attempts_used: int, accept_mode
|
||||
"illegal_product": accept_mode == "accept_worst",
|
||||
"ring_removed": attempt_facts.get("ring_removed", 0),
|
||||
"r0_count": m["r0"],
|
||||
# R₀≤cap 重掷闸尝试事实(迭代14① T3——占比=T5 闸触发率读数,过高=甲乙配比失衡信号)
|
||||
"r0_cap_rejected": r0_cap_rejected,
|
||||
}
|
||||
b.illegal_product = accept_mode == "accept_worst"
|
||||
b.degraded_product = accept_mode == "accept_best"
|
||||
|
||||
Reference in new issue
Block a user