movement j119 Batch 3+4: pre-register the reversal/dwell and heat-field arms

This commit is contained in:
2026-09-26 01:40:03 +02:00
parent 7311aaef5a
commit 1256357f07
3 changed files with 185 additions and 0 deletions
+47
View File
@@ -0,0 +1,47 @@
# ─────────────────────────────────────────────────────────────────────────────
# arms_movement_b3.txt — BATCH 3 of the movement campaign: the REVERSAL/DWELL
# TIMING of the strafe picker, plus the picker's hedge geometry.
#
# Prior data this batch is built on (docs/movement_campaign.md §3–§5, MEASURED
# on the frozen panel across two independent sessions):
# * `TR_MOVEMENT=strafe` BEATS the shipped `tfil` on round wins (+0.33…+0.58
# wins/run, all four 95% CIs excluding 0, 9/9…11/12 decisive opponents).
# * It wins by SURVIVAL: incoming hit rate 12.1–12.5% vs tfil's 17.6–18.2%,
# ~50 less damage taken/run, with NO detectable damage cost.
# * The RANGE knob is NOT the lever (Batch 2: none/250/600 made no separable
# difference). The untouched axis is the picker ITSELF.
#
# The strafe engine flips the SIGN of `setForward` (a free reversal) and keeps
# each sign for `rand(DWELL_MIN..DWELL_MAX)` ticks. That dwell IS the reversal
# period, so it is the most likely remaining lever: the whole design premise is
# "movement is about WHEN to flip direction".
#
# REFERENCE is `strafe` (current defaults), NOT `tfil` — every delta is
# (arm − strafe). `tfil` is kept as the shipped control for cross-batch
# calibration.
#
# Format: name | ENV=value ENV=value | label
# ─────────────────────────────────────────────────────────────────────────────
# 1. the reference: current strafe defaults (dwell 6-20, spread 1, reach 144)
strafe | TR_MOVEMENT=strafe | reference — current strafe defaults
# 2. the shipped control (no env): lets this session be calibrated against
# Batches 1-2 and shows the strafe-over-tfil effect again.
tfil | | shipped control (movement engine tfil, every knob at default)
# 3. FAST FLIP: reversal every ~5 ticks (dwell 2-8) instead of ~13.
# Predicts LOWER incoming hit rate (each direction is exposed for less time)
# but a less stable perpendicular line.
fast_flip | TR_MOVEMENT=strafe TR_STRAFE_DWELL_MIN=2 TR_STRAFE_DWELL_MAX=8 | reversal every ~5 ticks
# 4. SLOW FLIP: reversal every ~26 ticks (dwell 12-40). The opposite extreme:
# predicts HIGHER incoming hit rate (a pattern gun gets a longer straight run
# to learn) and worse survival.
slow_flip | TR_MOVEMENT=strafe TR_STRAFE_DWELL_MIN=12 TR_STRAFE_DWELL_MAX=40 | reversal every ~26 ticks
# 5. WIDE SPREAD: perpendicular jitter ±2 tiles and a 216px reach (vs ±1 / 144).
wide_spread | TR_MOVEMENT=strafe TR_STRAFE_SPREAD=2 TR_STRAFE_REACH=216 | wider hedge (±2 tiles, 216px reach)
# 6. NARROW: no perpendicular jitter and a 108px reach (vs ±1 / 144).
narrow | TR_MOVEMENT=strafe TR_STRAFE_SPREAD=0 TR_STRAFE_REACH=108 | no hedge, short 108px reach
+46
View File
@@ -0,0 +1,46 @@
# ─────────────────────────────────────────────────────────────────────────────
# arms_movement_b4.txt — BATCH 4 of the movement campaign: the HEAT FIELD
# STRENGTH (how strongly the strafe picker treats danger).
#
# Prior data (docs/movement_campaign.md §3–§5, MEASURED): the strafe win is a
# SURVIVAL effect (incoming hit rate 12.1–12.5% vs 17.6–18.2%, ~50 less damage
# taken/run, no detectable damage cost). The open question is whether that
# survival comes from HOW the field ranks danger — strafe runs a RETUNE of the
# shipped field: bullet core/aura 20/10 (core ABOVE the 10px path threshold),
# corridor 10 (== threshold), wall 15/5 (outer ring only), pillar off. The
# shipped field was corridor 20 (twice threshold), wall 30/10.
#
# REFERENCE is `strafe` (current defaults) — every delta is (arm − strafe).
# `tfil` is kept as the shipped control.
#
# Every knob below is ALREADY env-overridable in strafe.nim (Task A made the
# OTHER mover's — the shipped tfil field's — consts env-overridable; strafe's
# were already knobs). One arm per knob family.
#
# Format: name | ENV=value ENV=value | label
# ─────────────────────────────────────────────────────────────────────────────
# 1. the reference: current strafe retune (bullet 20/10, corridor 10, wall 15/5)
strafe | TR_MOVEMENT=strafe | reference — current strafe heat retune
# 2. the shipped control (no env).
tfil | | shipped control (movement engine tfil, every knob at default)
# 3. BULLET STRONG: the bullet itself much more dangerous (core 30 > the 25
# danger-replan threshold; aura 15). Isolates the bullet retune.
bullet_strong | TR_MOVEMENT=strafe TR_STRAFE_BULLET_CORE=30 TR_STRAFE_BULLET_AURA=15 | stronger bullet core/aura (30/15)
# 4. FIELD STRONG: the SHIPPED corridor/wall shape (corridor 20 = 2x the path
# threshold, wall 30/10 = a 3-tile wall apron). Isolates the corridor+wall
# retune that strafe deliberately weakened.
field_strong | TR_MOVEMENT=strafe TR_STRAFE_CORRIDOR_HEAT=20 TR_STRAFE_WALL_HOTNESS=30 TR_STRAFE_WALL_RADIANCE=10 | shipped TFIL corridor/wall shape (20, 30/10)
# 5. FIELD OFF: no corridor and no wall heat at all (wall hotness 0 — do NOT
# set radiance 0, that paints a FLAT field). Does the wall logic help or
# merely occupy decisions?
field_off | TR_MOVEMENT=strafe TR_STRAFE_CORRIDOR_HEAT=0 TR_STRAFE_WALL_HOTNESS=0 | no corridors, no wall heat
# 6. WALL TIGHT: the curved-wing geometry family — bend sooner (margin 108->54),
# prefer the interior harder (bias 0.35->0.7), curve twice as hard
# (kappa 0.0025->0.005) and allow a larger wing tilt (30->45 deg).
wall_tight | TR_MOVEMENT=strafe TR_STRAFE_WALL_MARGIN=54 TR_STRAFE_WALL_BIAS=0.7 TR_STRAFE_KAPPA=0.005 TR_STRAFE_WING_MAX=45 | tighter/faster wall wings + escape