# ───────────────────────────────────────────────────────────────────────────── # 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