Files
SirRoboGarage/common_libs/tests/fixtures/tfil_commit_ab_results_runs7.json
T
SirStone cc11ede824 TFIL: measure the commitment A/B on 490 live DrussGT rounds - no effect
Runs the five-arm commitment A/B that 19bf461 only implemented. One frozen
binary (git archive 19bf461, sha256 46e7ce19...) vs the real DrussGT through
tools/robocode_shim/run_bridge_battle.sh: 7 runs x 7 rounds per arm against
real DrussGT in the pre-registered block, plus an independent replication
block (runs 8-14) - 70 battles, 490 rounds, 5 arms in parallel.

  A control (shipped)          B TR_TFIL_TILE_REPLAN=off
  C B + TR_TFIL_NO_REV=1       D TR_TFIL_TILE_REPLAN=enemy
  E B + TR_TFIL_COMMIT_TICKS=30   (TR_TFIL_COMMIT_LOG=1 on every arm)

RESULT: no arm improves damage/run or round wins vs the shipped mover. Pooled
(14 runs/arm, exact two-sided permutation test over all C(28,14) relabellings):

  arm  damage/run (delta, p)        round wins (delta, p)
  A    274.44                       2.79  (39/98)
  B    274.07 (-0.37, p=0.97)       3.07  (+0.29, p=0.66)
  C    257.34 (-17.10, p=0.16)      2.43  (-0.36, p=0.47)
  D    286.61 (+12.17, p=0.36)      3.29  (+0.50, p=0.35)
  E    265.29 (-9.15, p=0.56)       2.93  (+0.14, p=0.89)

The replication is what settles it: block 1 alone showed D at +20.99 damage
(p=0.26); block 2 put D at +3.36. Nothing replicates.

The PREMISE fails. Honouring the commitment does not reduce reversals - it
raises the reversal-pick rate from 33.9% (control) to 50.9% (B) / 57.0% (E);
the no-reversal arm C only claws part of it back (42.4%). The post-reversal
speed dip (~4.9 -> ~4.0 px/tick at +1..+2 calls) is identical in every arm, so
it is a property of turning around, not of the tile replan, and arm A - the
arm carrying the bug - has the LOWEST mean abs(speed) of all five.

Both premise premises are also caught by the metric the report is careful
about: arm C takes significantly FEWER hits (87.2 vs 96.5/run, p=0.0022) while
dealing the least damage and winning the fewest rounds - a movement change
alters hits taken, shots fired and round length at once, which is exactly why
damage and round wins are the primary metrics and hit rate is not.

Treatment verified per arm from the per-tick TR_TFIL_COMMIT_LOG: the pick
interval moves off ~5 calls only where the arm says it should (A 5.05 with
96.6% tile_self replans; B 14.77 with 0%; C 14.79; D 5.29 with 95.7%
tile_enemy; E 26.62), matching the offline fixture replay (5.07 / 14.65 /
14.65 / 4.94 / 27.57). Every arm ran.

Round wins are the final RESULTS firstPlaces, cross-checked against each
round's BotDeathEvent (35/35 and 35/35 runs agree). Damage is the server's
BulletHitBotEvent damage, attributed by numeric owner/victim id and verified
against the capture's own event counters.

measure_tfil_commit_ab.nim reads the raw run artifacts (JSONL states, events
sidecar, capture stdout, commit log) and prints the whole deliverable:
arm table, per-run values, the exact per-run permutation test, the exact
round-level hypergeometric test (flagged anti-conservative - rounds cluster
within a run), the treatment diagnostics, and the direct answer. It reproduces
either report offline from the committed summary:

  nim c -r --path:common_libs common_libs/tests/measure_tfil_commit_ab.nim \
      --from-summary common_libs/tests/fixtures/tfil_commit_ab_results_runs14.json

The raw ~200 MB of battle artifacts are not committed; the committed summary
holds every per-run value plus the arm-level diagnostics.
2026-09-24 20:24:34 +02:00

1662 lines
47 KiB
JSON

{
"meta": {
"source": "19bf461",
"binarySha256": "46e7ce19cc7889dacc0c5add9b29928dadb757fbc6ecbdb7765cddd7813361c0",
"rawRoot": "/tmp/tfil_ab2",
"arms": [
"",
"TR_TFIL_TILE_REPLAN=off",
"TR_TFIL_TILE_REPLAN=off TR_TFIL_NO_REV=1",
"TR_TFIL_TILE_REPLAN=enemy",
"TR_TFIL_TILE_REPLAN=off TR_TFIL_COMMIT_TICKS=30"
],
"runsPerArm": 7,
"roundsPerRun": 7,
"note": "PRE-REGISTERED PRIMARY BLOCK: runs 1-7 per arm (35 battles, 245 rounds), 5 arms in parallel, 7 runs x 7 rounds each.",
"roundWinsSource": "final RESULTS firstPlaces, cross-checked with BotDeathEvent",
"damageSource": "BulletHitBotEvent damage, attributed by numeric owner/victim id (verified against the capture's own counters)"
},
"arms": {
"A": {
"label": "A control (shipped)",
"env": "",
"runs": [
{
"run": 1,
"rounds": 7,
"wins": 2,
"winsByDeath": 2,
"perRoundWins": [
0,
1,
0,
0,
0,
1,
0
],
"score": 387,
"enemyScore": 549,
"ticks": 11166,
"damageDealt": 245.36810000000003,
"damageTaken": 218.70000000000016,
"shots": 705,
"enemyShots": 831,
"hits": 71,
"hitsTaken": 96,
"commitCalls": 11107,
"picks": 2202,
"intervalMean": 5.036330608537693,
"revPicks": 764,
"reversalPct": 34.69573115349682,
"speedMean": 4.716623843601673,
"byReason": {
"expiry": 50,
"init": 8,
"danger": 10,
"tile_self": 2134
},
"note": "id 1==ModularBot, id 2==DrussGT; of 1536 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 45.9% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 2,
"rounds": 7,
"wins": 1,
"winsByDeath": 1,
"perRoundWins": [
1,
0,
0,
0,
0,
0,
0
],
"score": 324,
"enemyScore": 640,
"ticks": 13516,
"damageDealt": 256.57630000000006,
"damageTaken": 240.5000000000001,
"shots": 828,
"enemyShots": 1027,
"hits": 84,
"hitsTaken": 101,
"commitCalls": 13421,
"picks": 2650,
"intervalMean": 5.056603773584905,
"revPicks": 871,
"reversalPct": 32.867924528301884,
"speedMean": 4.705512235900274,
"byReason": {
"expiry": 74,
"init": 11,
"danger": 16,
"tile_self": 2549
},
"note": "id 1==ModularBot, id 2==DrussGT; of 1855 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 44.6% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 3,
"rounds": 7,
"wins": 2,
"winsByDeath": 2,
"perRoundWins": [
0,
0,
0,
0,
1,
0,
1
],
"score": 423,
"enemyScore": 524,
"ticks": 12607,
"damageDealt": 283.5444,
"damageTaken": 196.9999999999999,
"shots": 788,
"enemyShots": 953,
"hits": 82,
"hitsTaken": 86,
"commitCalls": 12540,
"picks": 2476,
"intervalMean": 5.058966074313409,
"revPicks": 789,
"reversalPct": 31.865912762520193,
"speedMean": 4.750466125585626,
"byReason": {
"expiry": 68,
"init": 8,
"danger": 10,
"tile_self": 2390
},
"note": "id 1==ModularBot, id 2==DrussGT; of 1741 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 45.3% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 4,
"rounds": 7,
"wins": 3,
"winsByDeath": 3,
"perRoundWins": [
0,
0,
1,
0,
1,
1,
0
],
"score": 509,
"enemyScore": 461,
"ticks": 13146,
"damageDealt": 306.11100000000005,
"damageTaken": 198.00000000000006,
"shots": 848,
"enemyShots": 958,
"hits": 88,
"hitsTaken": 95,
"commitCalls": 13084,
"picks": 2634,
"intervalMean": 4.958238420652999,
"revPicks": 933,
"reversalPct": 35.42141230068337,
"speedMean": 4.654422770505723,
"byReason": {
"expiry": 55,
"init": 8,
"danger": 18,
"tile_self": 2553
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1806 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 47.0% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 5,
"rounds": 7,
"wins": 3,
"winsByDeath": 3,
"perRoundWins": [
1,
0,
0,
1,
0,
1,
0
],
"score": 477,
"enemyScore": 404,
"ticks": 13483,
"damageDealt": 267.5068,
"damageTaken": 147.59999999999997,
"shots": 849,
"enemyShots": 1029,
"hits": 82,
"hitsTaken": 92,
"commitCalls": 13381,
"picks": 2641,
"intervalMean": 5.054524801211662,
"revPicks": 924,
"reversalPct": 34.98674744414994,
"speedMean": 4.7057488412032455,
"byReason": {
"expiry": 59,
"init": 9,
"danger": 12,
"tile_self": 2561
},
"note": "id 1==ModularBot, id 2==DrussGT; of 1878 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 45.2% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 6,
"rounds": 7,
"wins": 4,
"winsByDeath": 4,
"perRoundWins": [
0,
1,
1,
0,
1,
1,
0
],
"score": 546,
"enemyScore": 327,
"ticks": 13895,
"damageDealt": 271.0661,
"damageTaken": 138.7999999999998,
"shots": 885,
"enemyShots": 1062,
"hits": 84,
"hitsTaken": 88,
"commitCalls": 13868,
"picks": 2721,
"intervalMean": 5.085262771040059,
"revPicks": 924,
"reversalPct": 33.95810363836825,
"speedMean": 4.69577788646468,
"byReason": {
"expiry": 70,
"init": 7,
"danger": 11,
"tile_self": 2633
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1947 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 45.5% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 7,
"rounds": 7,
"wins": 4,
"winsByDeath": 4,
"perRoundWins": [
1,
1,
0,
0,
1,
0,
1
],
"score": 559,
"enemyScore": 418,
"ticks": 14461,
"damageDealt": 332.47940000000006,
"damageTaken": 206.29999999999976,
"shots": 912,
"enemyShots": 1072,
"hits": 105,
"hitsTaken": 112,
"commitCalls": 14394,
"picks": 2861,
"intervalMean": 5.022719328905977,
"revPicks": 996,
"reversalPct": 34.813002446696956,
"speedMean": 4.643631643995206,
"byReason": {
"expiry": 77,
"init": 8,
"danger": 12,
"tile_self": 2764
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1984 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 46.0% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
}
],
"diag": {
"commitCalls": 91795,
"picks": 18185,
"intervalMean": 5.038823205938961,
"revPicks": 6201,
"reversalPct": 34.09953258179819,
"speedMean": 4.694576396866298,
"byReason": {
"expiry": 453,
"init": 59,
"danger": 89,
"tile_self": 17584
},
"revOffsets": [
-5,
-4,
-3,
-2,
-1,
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10
],
"speedProfile": [
4.674526505566802,
4.674502960200138,
4.708410221691385,
4.749505751570593,
4.836293831501396,
4.8936660685398525,
4.236950742660031,
3.996039576376638,
4.09924797796434,
4.247565615057907,
4.386909644886077,
4.517027085271333,
4.5905471910115905,
4.683215509373109,
4.79185739578183,
4.8708239990470865
],
"speedProfileN": [
6175,
6177,
6178,
6178,
6178,
6201,
6200,
6200,
6200,
6198,
6198,
6198,
6196,
6195,
6194,
6194
]
}
},
"B": {
"label": "B honour commitment",
"env": "TR_TFIL_TILE_REPLAN=off",
"runs": [
{
"run": 1,
"rounds": 7,
"wins": 2,
"winsByDeath": 2,
"perRoundWins": [
0,
1,
0,
1,
0,
0,
0
],
"score": 410,
"enemyScore": 480,
"ticks": 13267,
"damageDealt": 270.0858,
"damageTaken": 155.89999999999995,
"shots": 836,
"enemyShots": 993,
"hits": 80,
"hitsTaken": 90,
"commitCalls": 13234,
"picks": 890,
"intervalMean": 14.828089887640449,
"revPicks": 460,
"reversalPct": 51.68539325842696,
"speedMean": 5.363202735378571,
"byReason": {
"expiry": 847,
"init": 7,
"danger": 36
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1829 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 45.7% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 2,
"rounds": 7,
"wins": 1,
"winsByDeath": 1,
"perRoundWins": [
0,
0,
0,
0,
1,
0,
0
],
"score": 333,
"enemyScore": 631,
"ticks": 13861,
"damageDealt": 263.8279,
"damageTaken": 234.60000000000014,
"shots": 853,
"enemyShots": 1040,
"hits": 89,
"hitsTaken": 111,
"commitCalls": 13837,
"picks": 931,
"intervalMean": 14.793770139634802,
"revPicks": 484,
"reversalPct": 51.98711063372718,
"speedMean": 5.356598251065982,
"byReason": {
"expiry": 874,
"init": 7,
"danger": 50
},
"note": "id 1==ModularBot, id 2==DrussGT; of 1893 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 45.1% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 3,
"rounds": 7,
"wins": 5,
"winsByDeath": 5,
"perRoundWins": [
1,
0,
1,
0,
1,
1,
1
],
"score": 624,
"enemyScore": 321,
"ticks": 11326,
"damageDealt": 280.0976,
"damageTaken": 189.0,
"shots": 721,
"enemyShots": 853,
"hits": 81,
"hitsTaken": 71,
"commitCalls": 11210,
"picks": 757,
"intervalMean": 14.73447820343461,
"revPicks": 393,
"reversalPct": 51.915455746367236,
"speedMean": 5.354025423728814,
"byReason": {
"expiry": 717,
"init": 7,
"danger": 33
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1574 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 45.8% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 4,
"rounds": 7,
"wins": 6,
"winsByDeath": 6,
"perRoundWins": [
1,
1,
1,
1,
1,
1,
0
],
"score": 707,
"enemyScore": 206,
"ticks": 13196,
"damageDealt": 307.40080000000006,
"damageTaken": 139.69999999999987,
"shots": 821,
"enemyShots": 966,
"hits": 90,
"hitsTaken": 75,
"commitCalls": 13136,
"picks": 885,
"intervalMean": 14.780790960451977,
"revPicks": 469,
"reversalPct": 52.994350282485875,
"speedMean": 5.3386637865408035,
"byReason": {
"expiry": 834,
"init": 7,
"danger": 44
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1787 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 45.9% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 5,
"rounds": 7,
"wins": 2,
"winsByDeath": 2,
"perRoundWins": [
0,
0,
1,
0,
0,
0,
1
],
"score": 388,
"enemyScore": 594,
"ticks": 11626,
"damageDealt": 249.2447,
"damageTaken": 266.2000000000004,
"shots": 738,
"enemyShots": 868,
"hits": 78,
"hitsTaken": 99,
"commitCalls": 11531,
"picks": 778,
"intervalMean": 14.730077120822623,
"revPicks": 386,
"reversalPct": 49.61439588688946,
"speedMean": 5.411602419564652,
"byReason": {
"expiry": 728,
"init": 10,
"danger": 40
},
"note": "id 1==ModularBot, id 2==DrussGT; of 1606 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 46.0% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 6,
"rounds": 7,
"wins": 4,
"winsByDeath": 4,
"perRoundWins": [
1,
0,
1,
1,
0,
0,
1
],
"score": 550,
"enemyScore": 360,
"ticks": 12712,
"damageDealt": 275.9048999999999,
"damageTaken": 161.29999999999995,
"shots": 812,
"enemyShots": 947,
"hits": 87,
"hitsTaken": 87,
"commitCalls": 12681,
"picks": 856,
"intervalMean": 14.759345794392523,
"revPicks": 428,
"reversalPct": 50.0,
"speedMean": 5.4190644468101885,
"byReason": {
"expiry": 811,
"init": 7,
"danger": 38
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1759 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 46.2% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 7,
"rounds": 7,
"wins": 3,
"winsByDeath": 3,
"perRoundWins": [
1,
0,
0,
1,
1,
0,
0
],
"score": 511,
"enemyScore": 477,
"ticks": 12428,
"damageDealt": 320.8059999999999,
"damageTaken": 216.10000000000002,
"shots": 778,
"enemyShots": 901,
"hits": 89,
"hitsTaken": 97,
"commitCalls": 12234,
"picks": 823,
"intervalMean": 14.804374240583233,
"revPicks": 427,
"reversalPct": 51.88335358444714,
"speedMean": 5.3731812980219065,
"byReason": {
"expiry": 788,
"init": 10,
"danger": 25
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1679 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 46.3% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
}
],
"diag": {
"commitCalls": 87863,
"picks": 5920,
"intervalMean": 14.777533783783785,
"revPicks": 3047,
"reversalPct": 51.4695945945946,
"speedMean": 5.373126700089912,
"byReason": {
"expiry": 5599,
"init": 55,
"danger": 266
},
"revOffsets": [
-5,
-4,
-3,
-2,
-1,
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10
],
"speedProfile": [
5.946049040688059,
5.925394889182931,
5.866936817730731,
5.764555077737347,
5.576274603043334,
5.373471857564818,
4.38057925828684,
3.9541095749917954,
4.12307700196915,
4.530844888414834,
4.9562428208073515,
5.294977641942895,
5.599534378076797,
5.782399425287356,
5.870114942528736,
5.941333128078818
],
"speedProfileN": [
3023,
3023,
3023,
3023,
3023,
3047,
3047,
3047,
3047,
3047,
3047,
3047,
3047,
3045,
3045,
3045
]
}
},
"C": {
"label": "C B + no-reversal",
"env": "TR_TFIL_TILE_REPLAN=off TR_TFIL_NO_REV=1",
"runs": [
{
"run": 1,
"rounds": 7,
"wins": 3,
"winsByDeath": 3,
"perRoundWins": [
1,
0,
1,
0,
0,
1,
0
],
"score": 446,
"enemyScore": 467,
"ticks": 13019,
"damageDealt": 240.30640000000002,
"damageTaken": 200.89999999999995,
"shots": 787,
"enemyShots": 981,
"hits": 76,
"hitsTaken": 89,
"commitCalls": 12989,
"picks": 875,
"intervalMean": 14.772571428571428,
"revPicks": 362,
"reversalPct": 41.371428571428574,
"speedMean": 5.530025406112864,
"byReason": {
"expiry": 830,
"init": 8,
"danger": 37
},
"note": "id 1==ModularBot, id 2==DrussGT; of 1768 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 44.5% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 2,
"rounds": 7,
"wins": 3,
"winsByDeath": 3,
"perRoundWins": [
1,
0,
0,
0,
1,
0,
1
],
"score": 500,
"enemyScore": 398,
"ticks": 13598,
"damageDealt": 298.5099,
"damageTaken": 137.9999999999998,
"shots": 830,
"enemyShots": 1039,
"hits": 80,
"hitsTaken": 86,
"commitCalls": 13482,
"picks": 905,
"intervalMean": 14.833149171270719,
"revPicks": 368,
"reversalPct": 40.66298342541437,
"speedMean": 5.369121792018988,
"byReason": {
"expiry": 858,
"init": 7,
"danger": 40
},
"note": "id 1==ModularBot, id 2==DrussGT; of 1869 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 44.4% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 3,
"rounds": 7,
"wins": 2,
"winsByDeath": 2,
"perRoundWins": [
1,
0,
0,
1,
0,
0,
0
],
"score": 379,
"enemyScore": 545,
"ticks": 12935,
"damageDealt": 244.42980000000006,
"damageTaken": 210.29999999999998,
"shots": 803,
"enemyShots": 975,
"hits": 76,
"hitsTaken": 74,
"commitCalls": 12854,
"picks": 863,
"intervalMean": 14.797219003476245,
"revPicks": 396,
"reversalPct": 45.8864426419467,
"speedMean": 5.433398650225611,
"byReason": {
"expiry": 820,
"init": 9,
"danger": 34
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1778 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 45.2% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 4,
"rounds": 7,
"wins": 3,
"winsByDeath": 3,
"perRoundWins": [
0,
1,
1,
0,
1,
0,
0
],
"score": 434,
"enemyScore": 501,
"ticks": 12292,
"damageDealt": 235.60140000000004,
"damageTaken": 244.4,
"shots": 789,
"enemyShots": 882,
"hits": 75,
"hitsTaken": 80,
"commitCalls": 12238,
"picks": 823,
"intervalMean": 14.80801944106926,
"revPicks": 354,
"reversalPct": 43.01336573511543,
"speedMean": 5.438460124203301,
"byReason": {
"expiry": 786,
"init": 8,
"danger": 29
},
"note": "id 1==ModularBot, id 2==DrussGT; of 1671 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 47.2% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 5,
"rounds": 7,
"wins": 3,
"winsByDeath": 3,
"perRoundWins": [
1,
0,
1,
1,
0,
0,
0
],
"score": 466,
"enemyScore": 458,
"ticks": 13448,
"damageDealt": 268.72209999999995,
"damageTaken": 193.20000000000005,
"shots": 839,
"enemyShots": 992,
"hits": 85,
"hitsTaken": 93,
"commitCalls": 13415,
"picks": 902,
"intervalMean": 14.813747228381375,
"revPicks": 383,
"reversalPct": 42.46119733924612,
"speedMean": 5.333831065970928,
"byReason": {
"expiry": 851,
"init": 7,
"danger": 44
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1831 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 45.8% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 6,
"rounds": 7,
"wins": 3,
"winsByDeath": 3,
"perRoundWins": [
1,
0,
0,
0,
0,
1,
1
],
"score": 470,
"enemyScore": 440,
"ticks": 13385,
"damageDealt": 263.44499999999994,
"damageTaken": 176.99999999999994,
"shots": 828,
"enemyShots": 995,
"hits": 82,
"hitsTaken": 82,
"commitCalls": 13349,
"picks": 901,
"intervalMean": 14.755826859045506,
"revPicks": 390,
"reversalPct": 43.28523862375139,
"speedMean": 5.389551651809124,
"byReason": {
"expiry": 846,
"init": 7,
"danger": 48
},
"note": "id 1==ModularBot, id 2==DrussGT; of 1823 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 45.4% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 7,
"rounds": 7,
"wins": 0,
"winsByDeath": 0,
"perRoundWins": [
0,
0,
0,
0,
0,
0,
0
],
"score": 205,
"enemyScore": 676,
"ticks": 13037,
"damageDealt": 202.54700000000003,
"damageTaken": 214.70000000000013,
"shots": 790,
"enemyShots": 986,
"hits": 61,
"hitsTaken": 96,
"commitCalls": 13004,
"picks": 873,
"intervalMean": 14.830469644902635,
"revPicks": 350,
"reversalPct": 40.09163802978236,
"speedMean": 5.667121654875423,
"byReason": {
"expiry": 827,
"init": 7,
"danger": 39
},
"note": "id 1==ModularBot, id 2==DrussGT; of 1776 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 44.5% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
}
],
"diag": {
"commitCalls": 91331,
"picks": 6142,
"intervalMean": 14.80153044610876,
"revPicks": 2603,
"reversalPct": 42.380332139368285,
"speedMean": 5.450575379662984,
"byReason": {
"expiry": 5818,
"init": 53,
"danger": 271
},
"revOffsets": [
-5,
-4,
-3,
-2,
-1,
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10
],
"speedProfile": [
6.08455312136487,
6.023386002326483,
5.935779371849554,
5.83324447460256,
5.661145308259015,
5.3094986553976184,
4.45885756819055,
4.058512682551883,
4.205034588777863,
4.5454097809377405,
4.86863470407379,
5.229871252882398,
5.584727028066128,
5.900579104190696,
6.0355752595155705,
6.080096153846154
],
"speedProfileN": [
2579,
2579,
2579,
2579,
2579,
2603,
2603,
2602,
2602,
2602,
2602,
2602,
2601,
2601,
2601,
2600
]
}
},
"D": {
"label": "D enemy-keyed cancel",
"env": "TR_TFIL_TILE_REPLAN=enemy",
"runs": [
{
"run": 1,
"rounds": 7,
"wins": 2,
"winsByDeath": 2,
"perRoundWins": [
1,
0,
1,
0,
0,
0,
0
],
"score": 386,
"enemyScore": 544,
"ticks": 12775,
"damageDealt": 247.4326,
"damageTaken": 219.89999999999998,
"shots": 774,
"enemyShots": 965,
"hits": 79,
"hitsTaken": 94,
"commitCalls": 12715,
"picks": 2423,
"intervalMean": 5.231943871234008,
"revPicks": 891,
"reversalPct": 36.77259595542716,
"speedMean": 4.900095697748722,
"byReason": {
"expiry": 79,
"tile_enemy": 2323,
"init": 8,
"danger": 13
},
"note": "id 1==ModularBot, id 2==DrussGT; of 1739 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 44.5% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 2,
"rounds": 7,
"wins": 5,
"winsByDeath": 5,
"perRoundWins": [
1,
1,
0,
1,
1,
0,
1
],
"score": 624,
"enemyScore": 350,
"ticks": 13863,
"damageDealt": 332.7028,
"damageTaken": 202.49999999999991,
"shots": 864,
"enemyShots": 1004,
"hits": 100,
"hitsTaken": 104,
"commitCalls": 13731,
"picks": 2516,
"intervalMean": 5.4443561208267095,
"revPicks": 962,
"reversalPct": 38.23529411764706,
"speedMean": 4.989149455206,
"byReason": {
"expiry": 111,
"tile_enemy": 2380,
"init": 8,
"danger": 17
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1868 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 46.3% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 3,
"rounds": 7,
"wins": 4,
"winsByDeath": 4,
"perRoundWins": [
0,
1,
0,
1,
0,
1,
1
],
"score": 488,
"enemyScore": 422,
"ticks": 12557,
"damageDealt": 264.0757,
"damageTaken": 201.29999999999998,
"shots": 765,
"enemyShots": 915,
"hits": 81,
"hitsTaken": 78,
"commitCalls": 12456,
"picks": 2349,
"intervalMean": 5.284376330353342,
"revPicks": 863,
"reversalPct": 36.73903788846317,
"speedMean": 5.1301981981702545,
"byReason": {
"expiry": 78,
"tile_enemy": 2243,
"init": 9,
"danger": 19
},
"note": "id 1==ModularBot, id 2==DrussGT; of 1680 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 45.5% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 4,
"rounds": 7,
"wins": 1,
"winsByDeath": 1,
"perRoundWins": [
0,
0,
0,
0,
0,
1,
0
],
"score": 332,
"enemyScore": 612,
"ticks": 12857,
"damageDealt": 276.7819,
"damageTaken": 215.00000000000009,
"shots": 806,
"enemyShots": 964,
"hits": 78,
"hitsTaken": 97,
"commitCalls": 12769,
"picks": 2440,
"intervalMean": 5.2225409836065575,
"revPicks": 894,
"reversalPct": 36.63934426229508,
"speedMean": 4.9553466911593755,
"byReason": {
"expiry": 67,
"tile_enemy": 2358,
"init": 7,
"danger": 8
},
"note": "id 1==ModularBot, id 2==DrussGT; of 1770 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 45.5% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 5,
"rounds": 7,
"wins": 3,
"winsByDeath": 3,
"perRoundWins": [
1,
1,
0,
1,
0,
0,
0
],
"score": 552,
"enemyScore": 536,
"ticks": 12453,
"damageDealt": 339.1795,
"damageTaken": 259.4000000000002,
"shots": 770,
"enemyShots": 925,
"hits": 96,
"hitsTaken": 104,
"commitCalls": 12419,
"picks": 2306,
"intervalMean": 5.366001734605377,
"revPicks": 866,
"reversalPct": 37.5542064180399,
"speedMean": 4.990179280438412,
"byReason": {
"expiry": 70,
"tile_enemy": 2220,
"init": 7,
"danger": 9
},
"note": "id 1==ModularBot, id 2==DrussGT; of 1695 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 45.4% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 6,
"rounds": 7,
"wins": 4,
"winsByDeath": 4,
"perRoundWins": [
0,
0,
1,
1,
1,
0,
1
],
"score": 601,
"enemyScore": 351,
"ticks": 12585,
"damageDealt": 321.0846,
"damageTaken": 161.69999999999982,
"shots": 809,
"enemyShots": 950,
"hits": 97,
"hitsTaken": 89,
"commitCalls": 12500,
"picks": 2372,
"intervalMean": 5.259274873524452,
"revPicks": 912,
"reversalPct": 38.44856661045531,
"speedMean": 4.940378458251953,
"byReason": {
"expiry": 78,
"tile_enemy": 2275,
"init": 8,
"danger": 11
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1759 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 46.0% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 7,
"rounds": 7,
"wins": 5,
"winsByDeath": 5,
"perRoundWins": [
1,
0,
1,
1,
1,
0,
1
],
"score": 669,
"enemyScore": 360,
"ticks": 11942,
"damageDealt": 328.2956,
"damageTaken": 219.3999999999999,
"shots": 752,
"enemyShots": 903,
"hits": 91,
"hitsTaken": 87,
"commitCalls": 11802,
"picks": 2189,
"intervalMean": 5.380995888533577,
"revPicks": 811,
"reversalPct": 37.04888076747373,
"speedMean": 5.04773762451958,
"byReason": {
"expiry": 64,
"tile_enemy": 2102,
"init": 9,
"danger": 14
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1655 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 45.4% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
}
],
"diag": {
"commitCalls": 88392,
"picks": 16595,
"intervalMean": 5.312383247966255,
"revPicks": 6199,
"reversalPct": 37.35462488701416,
"speedMean": 4.992402765845614,
"byReason": {
"expiry": 547,
"tile_enemy": 15901,
"init": 56,
"danger": 91
},
"revOffsets": [
-5,
-4,
-3,
-2,
-1,
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10
],
"speedProfile": [
5.151144393091751,
5.10039595307911,
5.073186729335893,
5.061792444780798,
5.033423840168809,
4.9792196707949365,
4.416391599445617,
4.266138900458995,
4.390095869674473,
4.558906984090767,
4.7009789327937455,
4.819924749161163,
4.898692842875206,
5.0367440798852705,
5.118490710878572,
5.148879318520468
],
"speedProfileN": [
6165,
6166,
6167,
6168,
6170,
6199,
6199,
6199,
6199,
6199,
6199,
6199,
6199,
6198,
6198,
6197
]
}
},
"E": {
"label": "E commit 30 ticks",
"env": "TR_TFIL_TILE_REPLAN=off TR_TFIL_COMMIT_TICKS=30",
"runs": [
{
"run": 1,
"rounds": 7,
"wins": 3,
"winsByDeath": 3,
"perRoundWins": [
1,
1,
0,
0,
1,
0,
0
],
"score": 513,
"enemyScore": 483,
"ticks": 13347,
"damageDealt": 316.5558,
"damageTaken": 215.19999999999996,
"shots": 847,
"enemyShots": 992,
"hits": 95,
"hitsTaken": 110,
"commitCalls": 13264,
"picks": 503,
"intervalMean": 26.18886679920477,
"revPicks": 297,
"reversalPct": 59.04572564612326,
"speedMean": 4.790494948733413,
"byReason": {
"expiry": 289,
"init": 8,
"danger": 206
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1839 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 46.1% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 2,
"rounds": 7,
"wins": 3,
"winsByDeath": 3,
"perRoundWins": [
1,
1,
0,
1,
0,
0,
0
],
"score": 520,
"enemyScore": 468,
"ticks": 12588,
"damageDealt": 316.143,
"damageTaken": 205.99999999999997,
"shots": 776,
"enemyShots": 955,
"hits": 84,
"hitsTaken": 101,
"commitCalls": 12534,
"picks": 466,
"intervalMean": 26.723175965665234,
"revPicks": 261,
"reversalPct": 56.00858369098712,
"speedMean": 4.999483903781714,
"byReason": {
"expiry": 286,
"init": 9,
"danger": 171
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1731 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 44.8% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 3,
"rounds": 7,
"wins": 3,
"winsByDeath": 3,
"perRoundWins": [
0,
0,
1,
0,
1,
1,
0
],
"score": 441,
"enemyScore": 498,
"ticks": 12580,
"damageDealt": 271.4629,
"damageTaken": 206.19999999999996,
"shots": 788,
"enemyShots": 939,
"hits": 80,
"hitsTaken": 104,
"commitCalls": 12439,
"picks": 471,
"intervalMean": 26.276008492569,
"revPicks": 277,
"reversalPct": 58.81104033970276,
"speedMean": 5.030599324704558,
"byReason": {
"expiry": 268,
"init": 10,
"danger": 193
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1727 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 45.6% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 4,
"rounds": 7,
"wins": 5,
"winsByDeath": 5,
"perRoundWins": [
0,
1,
0,
1,
1,
1,
1
],
"score": 596,
"enemyScore": 352,
"ticks": 12233,
"damageDealt": 300.0652,
"damageTaken": 195.69999999999993,
"shots": 754,
"enemyShots": 893,
"hits": 82,
"hitsTaken": 87,
"commitCalls": 12204,
"picks": 450,
"intervalMean": 26.851111111111113,
"revPicks": 264,
"reversalPct": 58.666666666666664,
"speedMean": 5.114552605703048,
"byReason": {
"expiry": 271,
"init": 7,
"danger": 172
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1647 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 45.8% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 5,
"rounds": 7,
"wins": 3,
"winsByDeath": 3,
"perRoundWins": [
1,
0,
0,
1,
1,
0,
0
],
"score": 465,
"enemyScore": 452,
"ticks": 13629,
"damageDealt": 256.015,
"damageTaken": 188.79999999999993,
"shots": 828,
"enemyShots": 1020,
"hits": 84,
"hitsTaken": 94,
"commitCalls": 13572,
"picks": 501,
"intervalMean": 26.944111776447105,
"revPicks": 273,
"reversalPct": 54.49101796407186,
"speedMean": 4.909777483053345,
"byReason": {
"expiry": 321,
"init": 8,
"danger": 172
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1848 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 44.8% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 6,
"rounds": 7,
"wins": 3,
"winsByDeath": 3,
"perRoundWins": [
1,
1,
0,
1,
0,
0,
0
],
"score": 485,
"enemyScore": 457,
"ticks": 12302,
"damageDealt": 277.8316,
"damageTaken": 190.8,
"shots": 749,
"enemyShots": 908,
"hits": 82,
"hitsTaken": 90,
"commitCalls": 12269,
"picks": 460,
"intervalMean": 26.417391304347827,
"revPicks": 262,
"reversalPct": 56.95652173913044,
"speedMean": 4.772317426033092,
"byReason": {
"expiry": 265,
"init": 7,
"danger": 188
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1657 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 45.2% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
},
{
"run": 7,
"rounds": 7,
"wins": 4,
"winsByDeath": 4,
"perRoundWins": [
1,
0,
1,
1,
1,
0,
0
],
"score": 536,
"enemyScore": 374,
"ticks": 12614,
"damageDealt": 263.14140000000003,
"damageTaken": 172.89999999999998,
"shots": 809,
"enemyShots": 951,
"hits": 86,
"hitsTaken": 87,
"commitCalls": 12582,
"picks": 476,
"intervalMean": 26.222689075630253,
"revPicks": 277,
"reversalPct": 58.19327731092437,
"speedMean": 4.8070855189953905,
"byReason": {
"expiry": 290,
"init": 7,
"danger": 179
},
"note": "id 2==ModularBot, id 1==DrussGT; of 1760 fire events the bullet origin is within 60px of the firer's own recorded position for 100.0%, and 46.0% vote the same side (a 50% split would mean the mapping is noise) | WARNING: id mapping is unreliable"
}
],
"diag": {
"commitCalls": 88864,
"picks": 3327,
"intervalMean": 26.515779981965736,
"revPicks": 1911,
"reversalPct": 57.43913435527502,
"speedMean": 4.91614257460839,
"byReason": {
"expiry": 1990,
"init": 56,
"danger": 1281
},
"revOffsets": [
-5,
-4,
-3,
-2,
-1,
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10
],
"speedProfile": [
5.033945105820106,
4.9719742063492065,
4.88316798941799,
4.80760582010582,
4.660912698412698,
4.5408817373103085,
4.263016745159602,
4.174803664921466,
4.277356020942408,
4.444846204188481,
4.583535227867993,
4.756858957569408,
4.943082111052907,
5.122168019905709,
5.273097826086956,
5.351705735987428
],
"speedProfileN": [
1890,
1890,
1890,
1890,
1890,
1911,
1911,
1910,
1910,
1910,
1909,
1909,
1909,
1909,
1909,
1909
]
}
}
}
}