# ───────────────────────────────────────────────────────────────────────────── # arms_gun_b1.txt — BATCH 1 of the GUN campaign: does ANY rack gun or gun # configuration beat the shipped `Pattern` across the frozen panel? # # Format: name | ENV=value ENV=value | label # # ONE frozen binary (tournament_run.sh builds it from `git archive HEAD`); every # arm below differs ONLY by its env dict. No per-arm rebuild. # # MOVEMENT IS PINNED IN EVERY ARM (`TR_MOVEMENT=strafe`). Reason (hard rule): # a parallel job (j120) is shipping a movement-default flip during this run, so # the default engine may change underneath us. Pinning the engine in EVERY arm # removes movement as a confound, makes all arms share one movement, and keeps # the comparison a pure GUN comparison. Because every arm declares TR_MOVEMENT, # the analyzer's liveness rule (a token must appear verbatim in the bot's own # raw-env report) is also satisfied for every arm. # # Prior data this batch is built on (taken as given; NOT re-derived): # * shipped rack = `onlyPattern` (Pattern id 5, all others off); chosen # because the selector measured NEGATIVE value at every rack size tested # (docs/selector_negative_value.md, docs/gun_rack_analysis.md). # * per-gun single-gun hit rate vs DrussGT: Pattern ~10.8%, KNN 5.6%, # Linear 3.0%, Circular 2.9%, WallBounce 2.7%, GF 2.1%. # * BitBrain == Pattern when idle (30 runs/arm 97/210 vs 97/210 wins) and is # NEUTRAL across 32 legacy opponents (-3.6 dmg/run, docs/gauntlet_bitbrain_vs_pattern.md). # Its learned-gain config was worse on DrussGT ONLY. # * lead AMPLITUDE is a dead axis (full gain sweep run, nothing beats Pattern); # lead INFORMATION is the open one. # # The question this batch answers: is `onlyPattern` CONFIRMED across 15 opponents # (rather than merely assumed from a DrussGT-heavy history), or does some gun / # small rack beat it on damage-per-run AND round wins? # ───────────────────────────────────────────────────────────────────────────── # 1. REFERENCE. The shipped `onlyPattern` rack, movement pinned. No gun env at # all, so this is what the shipped bot's gun does. pattern | TR_MOVEMENT=strafe | shipped onlyPattern rack (REFERENCE) # 2. BitBrain-only rack: the learned-gain corrector on Pattern's lead. This is # the exact config the owner most likely ran (gains 1.0..2.0, decay memory); # the 32-opponent gauntlet had it as a wash, so this is a PANEL replication at # the new (movement-pinned) standard. BitBrain computes Pattern's prediction # internally, so Pattern does not need to be in the rack. bitbrain | TR_MOVEMENT=strafe TR_RACK_PATTERN=off TR_RACK_BITBRAIN=both TR_BITBRAIN_GAINS=1.0,1.25,1.5,2.0 TR_BITBRAIN_MEM=decay | BitBrain-only, learned gain (gains 1.0..2.0, decay) # 3. TMHorizon-only rack: the horizon Tsetlin corrector on Pattern's lead. Its # own design docs PREDICT it loses (needs ~80% side accuracy to break even; # achievable ~60%). Never measured across the panel. This arm closes that. tmhorizon | TR_MOVEMENT=strafe TR_RACK_PATTERN=off TR_RACK_TMHORIZON=both | TMHorizon-only rack # 4. KNN-only rack: the best non-Pattern single gun by the old DrussGT hit-rate # table (5.6% vs Pattern 10.8%) and NEVER measured across the panel. Included # to close "the second-best single gun was never panel-tested". knn | TR_MOVEMENT=strafe TR_RACK_PATTERN=off TR_RACK_KNN=both | KNN-only rack # 5. TWO-GUN RACK, SELECTOR ON: Pattern (default both) + KNN. The selector was # measured NEGATIVE with 16 guns and a rolling hit-rate; this re-tests it at # a SMALL rack under the new panel standard, because the movement campaign # overturned two earlier single-opponent conclusions. If KNN ever wins a # matchup, the selector can hedge into it. rack_pk | TR_MOVEMENT=strafe TR_RACK_KNN=both | Pattern + KNN, selector ON # 6. TWO-GUN RACK, SELECTOR ON: Pattern (default both) + TMHorizon. Same # selector question against a CORRECTOR family (TMHorizon = Pattern +/- a # learned few-degree shift) instead of a different-family gun (KNN). rack_pt | TR_MOVEMENT=strafe TR_RACK_TMHORIZON=both | Pattern + TMHorizon, selector ON