Ring mover heat retune (author: the user) - dodge bullets, ignore walls/centre,

re-plan 3x more often

Uncommitted working-tree change in `the_floor_is_lava_ring.nim`, confirmed by the
user as theirs. Committing it so it stops appearing in every job's `git status`.

WHAT IT DOES - a coherent "be far more afraid of bullets" strategy:
- BULLETS 2x hotter: BulletCore 10 -> 20, BulletAura 5 -> 10.
- Walls weaker and thinner: WallRadiance 10 -> 5; the `WallHotness` default
  10 -> 15 (so the heat falls off over ~3 tiles instead of 1, with a higher peak).
- CENTRE PILLAR DISABLED: PillarHotness 30 -> 0, PillarRadiance 10 -> 0, so the
  bot may now use the middle of the arena instead of treating it as a no-go zone.
- MUCH more reactive: CommitTicks 15 -> 5 and MinCommitTicks 5 -> 0, i.e. the
  dodge target is re-chosen 3x more often and a replan is allowed immediately.
- `CorridorHeat` default 5 -> 10.

This applies ONLY to the ring mover, which is NOT the shipped movement (the default
is `tfil`), so the shipped bot is unaffected.

TWO FACTS RECORDED, not objections - it is the user's call:
1. `CorridorHeat = 10` now EQUALS `PathDangerThreshold = 10`. The earlier measured
   taming set it to 5 precisely so a single corridor could no longer poison a path
   on its own (a corridor at 10 puts every tile along it at/over the threshold).
   That is part of what lifted the "band-weightable" fraction from 10.8% to 26.5%.
   At 10 the range weighting gets less to work with.
2. UNMEASURED: this retune has not been A/B'd. The ring mover it modifies was
   itself measured as a glass cannon (best offline hit rate, but round wins
   16/49 -> 6/49, p=0.012). The two changes push in the same direction - hotter
   bullets and more frequent replanning mean MORE dodging and LESS time spent
   closing to the 100-200px band where our hit rate peaks (27% vs 5% at 450px).
   Worth an A/B before drawing conclusions, but it is an experiment, not a
   shipped change.
This commit is contained in:
2026-09-23 00:30:52 +02:00
parent 69debbe347
commit 7f6ccfb015
@@ -80,8 +80,8 @@ const BulletCoreRadiusMax = 54.0 ## core radius at power 3.0
const BulletAuraExtMin = 36.0 ## aura extension at power 3.0 (slow) const BulletAuraExtMin = 36.0 ## aura extension at power 3.0 (slow)
const BulletAuraExtMax = 54.0 ## aura extension at power 0.1 (fast) const BulletAuraExtMax = 54.0 ## aura extension at power 0.1 (fast)
const BulletCore = 10.0 ## lava accumulation per bullet-overlapping tile const BulletCore = 20.0 ## lava accumulation per bullet-overlapping tile
const BulletAura = 5.0 ## lava accumulation for aura ring tiles const BulletAura = 10.0 ## lava accumulation for aura ring tiles
const EnemyCoreRadius = 18.0 ## half of 36px body const EnemyCoreRadius = 18.0 ## half of 36px body
const EnemyAuraRadius = 54.0 ## 18 + 36 const EnemyAuraRadius = 54.0 ## 18 + 36
@@ -92,13 +92,13 @@ const EnemyAura = 10.0 ## lava per tile in enemy aura ring
## NOTE: CorridorHeat and WallHotness are NOT const here (unlike the original ## NOTE: CorridorHeat and WallHotness are NOT const here (unlike the original
## `the_floor_is_lava.nim`): they are env-overridable and read at module init, ## `the_floor_is_lava.nim`): they are env-overridable and read at module init,
## below, in the same style as the range-weighting knobs. ## below, in the same style as the range-weighting knobs.
const WallRadiance = 10.0 const WallRadiance = 5.0
const PillarHotness = 30.0 const PillarHotness = 0.0
const PillarRadiance = 10.0 const PillarRadiance = 0.0
const CommitTicks = 15 ## ticks to commit to a dodge point const CommitTicks = 5 ## ticks to commit to a dodge point
const MinCommitTicks = 5 ## must commit for this many ticks before danger replan allowed const MinCommitTicks = 0 ## must commit for this many ticks before danger replan allowed
const DangerReplanThreshold = 25.0 ## replan on serious threats only (bullet core), not corridors/auras const DangerReplanThreshold = 25.0 ## replan on serious threats only (bullet core), not corridors/auras
const CoolestLevels = 2 ## how many distinct lava values count as "cool" const CoolestLevels = 2 ## how many distinct lava values count as "cool"
const MaxTrackedBullets = 20 ## hard cap on tracked bullets const MaxTrackedBullets = 20 ## hard cap on tracked bullets
@@ -129,8 +129,8 @@ let RangeK* = getEnvFloat("TR_TFIL_RANGE_K", DefaultRangeK)
let MovementLog* = existsEnv("TR_MOVEMENT_LOG") let MovementLog* = existsEnv("TR_MOVEMENT_LOG")
# ── Heat-field knobs (see the rationale in the file header) ────────────────── # ── Heat-field knobs (see the rationale in the file header) ──────────────────
let CorridorHeat* = getEnvFloat("TR_TFIL_CORRIDOR_HEAT", 5.0) let CorridorHeat* = getEnvFloat("TR_TFIL_CORRIDOR_HEAT", 10.0)
let WallHotness* = getEnvFloat("TR_TFIL_WALL_HOTNESS", 10.0) let WallHotness* = getEnvFloat("TR_TFIL_WALL_HOTNESS", 15.0)
proc rangeWeight*(d, lo, hi, k: float): float = proc rangeWeight*(d, lo, hi, k: float): float =
## Flat-topped range weight. Exactly 1.0 for d inside [lo, hi]; Gaussian ## Flat-topped range weight. Exactly 1.0 for d inside [lo, hi]; Gaussian