39c90fd930
The picker scored candidates on pathMaxHeat alone and then drew uniformly among the survivors, so a mirror-side tile was as likely as a straight-ahead one. Added a continuous turn cost as a DRAW WEIGHT applied only after the hard heat filter: w = max(1, round(1 + TR_TFIL_TURN_BIAS * (1 - max(0,|turn| - REF)/180))) - TR_TFIL_TURN_BIAS (default 0) is the odds ratio straight-ahead vs 180 deg; TR_TFIL_TURN_REF_DEG (default 45) is where the penalty starts. Both default-off-effect: the default-path golden in test_tfil_commit_env.nim is unchanged and still passes. - Turn cost is NEVER folded into the heat score. The filter stays hard. - The draw stays random (j51 measured an argmin worse); every weight is floored at 1, so the pool can never be emptied and bias 0 is exactly the shipped uniform draw. - |turn| now travels on the ScoredTile, and the commit log gained turn / minturn / promote so a caller can measure the regret of the draw. Guards: 51 -> 66 checks (an absurd 99:1 bias never rescues an over-threshold tile; mean |turn|, draw regret, >90 and mirror-side shares all fall; path heat does not rise). env_report + .env.example updated.
36 lines
2.3 KiB
Plaintext
36 lines
2.3 KiB
Plaintext
# ─────────────────────────────────────────────────────────────────────────────
|
|
# arms_tfil_turn.txt — j145: the TFIL TURN-COST TIEBREAK, four arms on the
|
|
# frozen movement panel (tools/ab/panel_movement.txt), all with TR_MOVEMENT=tfil
|
|
# pinned EXPLICITLY.
|
|
#
|
|
# WHAT THE KNOB IS. Among the tiles that already passed the HARD heat filter
|
|
# (pathMaxHeat <= PathDangerThreshold), the draw is weighted by
|
|
#
|
|
# w = max(1, round(1 + TR_TFIL_TURN_BIAS * (1 - max(0,|turn| - REF) / 180)))
|
|
#
|
|
# so a straight-ahead safe tile is drawn `1 + bias` times as often as a 180 deg
|
|
# one. The heat score is NOT touched: a tile over the threshold still loses, at
|
|
# any bias (guard: test_tfil_commit_env.nim, "j145: with an absurd turn bias...").
|
|
# The draw stays RANDOM (job j51, 3142b70: a deterministic argmin measured worse).
|
|
#
|
|
# Pre-registered in docs/movement_campaign.md ("TFIL turn-cost tiebreak") BEFORE
|
|
# any of these battles ran. Reference is `tfil_shipped`.
|
|
#
|
|
# Format: name | ENV=value ENV=value | label
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
# 1. THE ARM TO BEAT — the shipped tfil defaults, explicitly selected.
|
|
tfil_shipped | TR_MOVEMENT=tfil | shipped tfil defaults (control / reference)
|
|
|
|
# 2. the two knobs job j144 recommends, unchanged.
|
|
arrive_norev | TR_MOVEMENT=tfil TR_TFIL_COMMIT_ARRIVAL=1 TR_TFIL_NOREV_SPEED=4 | j144's recommended .env
|
|
|
|
# 3. j144's knobs PLUS the turn tiebreak, at the value the offline ruler picked
|
|
# (the knee of the bias curve: bias 9 ref 0 cuts mean |turn| 11% and opposite
|
|
# picks 22% with no path-heat cost; bias 39 buys almost nothing more).
|
|
arrive_norev_turn | TR_MOVEMENT=tfil TR_TFIL_COMMIT_ARRIVAL=1 TR_TFIL_NOREV_SPEED=4 TR_TFIL_TURN_BIAS=9 TR_TFIL_TURN_REF_DEG=0 | j144 + the turn tiebreak
|
|
|
|
# 4. THE TURN FIX ALONE — isolates the tiebreak with no j144 knob set, which is
|
|
# the only arm that can say whether it is worth anything by itself.
|
|
turn_only | TR_MOVEMENT=tfil TR_TFIL_TURN_BIAS=9 TR_TFIL_TURN_REF_DEG=0 | the turn tiebreak alone
|