# ───────────────────────────────────────────────────────────────────────────── # arms_movement_learned.txt — the LEARNED-MOVEMENT arms (state-conditional # counted-SBC wave danger), on the FROZEN panel tools/ab/panel_movement.txt. # # Pre-registered in docs/movement_campaign.md, "Learned movement (SBC)", BEFORE # any battle. REFERENCE is `strafe` — the SHIPPED champion. Every delta is # (arm − strafe). # # Offline gate (common_libs/tests/learned_surfer_gate.py) says: the # state-conditional model beats the global histogram and chance on held-out # log-loss in 63/63 battles (sign-flip p = 5e-5) but the effect is TINY # (top-1 3.93% vs global 3.96% vs chance 3.23%). So the live panel decides. # # Format: name | ENV=value ENV=value | label # ───────────────────────────────────────────────────────────────────────────── # 1. THE CHAMPION — the arm a challenger has to beat (round wins + hit rate). strafe | TR_MOVEMENT=strafe | champion/reference — shipped strafe defaults # 2. THE MODULE — state-conditional counted SBC, decay 128 learns / shift 1. learned | TR_MOVEMENT=learned | state-conditional learned danger (decay on) # 3. FORGETTING CONTROL — the same learner with decay disabled: isolates the # counted+decay memory mechanism. (Offline this arm is the BEST top-1 arm, # which is itself a prediction: the corpus is stationary, the live opponent # is not.) learned_nodecay | TR_MOVEMENT=learned TR_LEARNED_DECAY_SHIFT=0 | same, no forgetting # 4. INFORMATION CONTROL — the same mover, the same geometry, the same counted # SBC, but the state is forced to a single cell, i.e. the OLD global # histogram. This separates "the learned state conditioning" from "the wave # geometry + counted prior" and is the arm that answers "is the failure in # the information or in the learner?". learned_global | TR_MOVEMENT=learned TR_LEARNED_GLOBAL=1 | same mover, state conditioning OFF