140fe2519a
2 arms x 15 runs x 7 rounds, one frozen binary from HEAD a82c864, real DrussGT,
server-side events sidecar. Shipped rack is onlyPattern, so control=Pattern-only
and headon=HeadOn-only (TR_RACK_PATTERN=off TR_RACK_HEADON=both).
arm dmg/run dmgtk/run round wins shots/run
control 279 211 48/105 785
headon 14 228 0/105 580
Round wins and dmg/run both separate at p<0.0001 (MC permutation, se 0.0000),
~7x the damage MDE (35.8). Per range band (pooled, 15 runs):
300-450: Pattern 12.3% (4590 shots) vs HeadOn 0.6% (3701) p<0.0001, MDE 2.0pp
450+ : Pattern 9.2% (6671) vs HeadOn 0.4% (4177) p<0.0001, MDE 1.1pp
HeadOn loses EVERY long-range band by 20-23x, so the whole-battle loss is not a
close-range artefact.
The offline ruler (prediction_quality_results.txt) predicted the opposite: HeadOn
meanAbs 14.61 vs Pattern 17.53 at 300-450 and 12.33 vs 16.19 at 450+, hitProxy
.105/.104 and .098/.077 (+27%). That is an open-loop replay of a FIXED enemy
track, so it cannot see that a different bullet makes the surfer dodge
differently; live, the static gun does not lead at all.
TR_PATTERN_RAD_SCALE arms were skipped: applyRadial scales aim DISTANCE along an
unchanged bearing, so it cannot express 'less lead' (bearing is what firing uses).
HeadOn confirmed to ignore bulletSpeed (head_on.nim:9), liveness OK 15/15.
Adds the range-band analyzer tools/ab/ab_range_bands.py (reuses the lead-capture
Run alignment) and the captured fixtures. Does not touch bitbrain_gun.nim /
bitbrain_campaign.md (job-100).
43 lines
2.2 KiB
Plaintext
43 lines
2.2 KiB
Plaintext
====================================================================================================
|
|
HIT RATE BY RANGE BAND (our shots; band = shooter->target distance px at the fire tick)
|
|
session: /tmp/ab_headon arms: control, headon reference: control
|
|
====================================================================================================
|
|
band control headon
|
|
--------------------------------------------------------------
|
|
0-100 3 2 66.7% 1 0 0.0%
|
|
100-200 28 4 14.3% 97 8 8.2%
|
|
200-300 211 26 12.3% 469 12 2.6%
|
|
300-450 4590 565 12.3% 3701 21 0.6%
|
|
450+ 6671 616 9.2% 4177 15 0.4%
|
|
ALL 11503 1213 10.5% 8445 56 0.7%
|
|
|
|
PER-RUN BAND RATES (shows the spread behind the pooled numbers)
|
|
band 0-100
|
|
control n= 2 50 100
|
|
headon n= 1 0
|
|
band 100-200
|
|
control n=11 0 0 0 20 0 0 0 0 30 0 0
|
|
headon n=15 0 30 0 0 0 0 0 0 0 14 11 0 17 25 0
|
|
band 200-300
|
|
control n=15 8 17 40 0 40 17 20 10 9 14 15 0 5 12 11
|
|
headon n=15 3 4 6 0 4 0 4 3 0 4 4 3 3 0 0
|
|
band 300-450
|
|
control n=15 14 11 15 13 13 10 11 15 15 10 10 11 14 11 13
|
|
headon n=15 0 0 1 1 0 0 0 0 0 1 0 1 1 1 0
|
|
band 450+
|
|
control n=15 9 11 7 8 9 10 9 10 10 8 11 9 10 9 9
|
|
headon n=15 0 0 0 0 1 1 1 0 0 0 0 0 1 0 0
|
|
band ALL
|
|
control n=15 10 11 9 10 11 10 10 12 12 9 11 10 12 10 11
|
|
headon n=15 0 1 1 0 1 1 1 1 0 1 1 1 1 1 0
|
|
|
|
PER-BAND PERMUTATION TEST vs `control` (per-run rates, two-sided)
|
|
band arm d(pp) p method MCse MDE(pp)
|
|
------------------------------------------------------------------
|
|
0-100 headon -75.00 0.6667 exact 0.0000 99.05
|
|
100-200 headon +1.93 0.6609 exact 0.0000 12.37
|
|
200-300 headon -12.12 0.0000 MC/B=200,000 0.0000 12.07
|
|
300-450 headon -11.84 0.0000 MC/B=200,000 0.0000 1.96
|
|
450+ headon -8.89 0.0000 MC/B=200,000 0.0000 1.14
|
|
ALL headon -9.90 0.0000 MC/B=200,000 0.0000 1.02
|