Files
SirRoboGarage/common_libs/tests/measure_ram_exhaustion_results.txt
SirStone 64e23e29d1 j162: measure whether the bot ever runs out of energy (offline, no battles)
Decisive measurement for the j160 firing floor, on the recorded closed-loop
corpus (8149 recordings / 35163 rounds / 34.46M ticks, state only):

* 61.2% of rounds end with self energy crossing 0. Energy at death: median
  0.83, p90 8.90, max 24.83 -- the bot dies BROKE, so the floor's premise is
  real. Time at energy<=0 is a median of 1 tick: the round ends on the
  crossing tick, there is no recoverable disabled window.
* Reserve that would have absorbed the killing blow: median 0.40, p75 2.00,
  p90 6.90.
* Cannot climb back out: at energy<=5 the next tick brings a landed hit 0.232%
  of the time and death 0.663% (2.9x). At <=20 recovery is 2x more likely,
  which is why a floor at 20 is the wrong value.
* Cost: floor 5 blocks 9.58% of ticks, median run 53, mean run 118, banking
  ~9.9 energy against a p75 overshoot of 2.0.
* Measured caveat: the recorded ledger closes exactly (residual -0.00 over
  35065 rounds), so these captures do NOT charge firepower cost; the cost
  column is derived from the game rules, and the landed-hit power (mode 1.0,
  mean 1.42) is what sets the bracket.

Honest read: worth an A/B, materially different in magnitude from the geometry
arm (smaller damage cost, stronger and directly measured safety claim), so NOT
the clean 'protects against nothing' negative.

docs/ram_floor_exhaustion_ab.md: replaces the draft with the measurement plus a
re-sized A/B proposal (4 arms, 42 runs/opponent/arm, 630 runs/arm for MDE 0.10
wins/run, ~2.7 h at the measured 23 battles/min). NOT RUN -- no battle, server
or GUI was started. Both knobs remain default 0.0.
2026-09-27 12:58:14 +02:00

58 lines
3.6 KiB
Plaintext

recordings=8149 rounds=35163 ticks=34461805
=== A) how each round ends ===
self reached energy<=0 : 21518 rounds ( 61.2%)
only the enemy did : 12906 rounds ( 36.7%)
both in the same round : 347 rounds ( 1.0%)
neither (truncated) : 392 rounds ( 1.1%)
=== B) SELF ENERGY AT DEATH (last value above 0 before the kill) ===
n=21865 min 0.00 p10 0.10 median 0.83 mean 2.50 p90 8.90 max 24.83
<= 0 energy: 0 ( 0.0% of self deaths, 0.00% of all rounds)
<= 1 energy: 12217 ( 55.9% of self deaths, 34.74% of all rounds)
<= 3 energy: 16793 ( 76.8% of self deaths, 47.76% of all rounds)
<= 5 energy: 18420 ( 84.2% of self deaths, 52.38% of all rounds)
<= 10 energy: 20290 ( 92.8% of self deaths, 57.70% of all rounds)
<= 20 energy: 21864 (100.0% of self deaths, 62.18% of all rounds)
crossing value: median -0.40 p10 -6.90 p90 0.00 (negative = overshoot of the killing hit)
reserve that WOULD have survived the killing blow (overshoot):
median 0.40 p75 2.00 p90 6.90 p99 15.00 max 19.50
a reserve of 3 would have absorbed it in 17301 self deaths ( 79.1%)
a reserve of 5 would have absorbed it in 18610 self deaths ( 85.1%)
a reserve of 10 would have absorbed it in 20690 self deaths ( 94.6%)
a reserve of 20 would have absorbed it in 21865 self deaths (100.0%)
=== C) time spent at energy<=0 (isDisabled) before the round ends ===
ticks disabled: median 1 p90 18 max 452 total 593030 of 34461805 ticks (1.7208%)
=== D) RECOVERY: self energy rises tick-over-tick (a landed hit) ===
rising transitions: 205754 of 34426642 tick-pairs (0.598%), i.e. ~5.85 per round
self energy just BEFORE the rise: median 45.24 p10 8.04 p90 89.00
climbs that started from a low reserve:
from <= 20: 52256 rises (25.40% of rises)
from <= 10: 25352 rises (12.32% of rises)
from <= 5: 12812 rises ( 6.23% of rises)
from <= 3: 8013 rises ( 3.89% of rises)
P(climb out | low) vs P(die | low), per tick spent at that level:
energy <= 3: 2633881 ticks | climb next tick 0.130% | killed on this tick 0.830% -> dying is 6.4x more likely than recovering
energy <= 5: 3299807 ticks | climb next tick 0.232% | killed on this tick 0.663% -> dying is 2.9x more likely than recovering
energy <= 10: 5002524 ticks | climb next tick 0.365% | killed on this tick 0.437% -> dying is 1.2x more likely than recovering
energy <= 20: 8526129 ticks | climb next tick 0.500% | killed on this tick 0.256% -> dying is 0.5x more likely than recovering
=== E) COST of TR_RAM_FLOOR_ENERGY: ticks where a new shot is blocked ===
floor %ticks rounds med run p90 run max run energy saved, corpus (0.1..3.0 p) per med run @1.0p
3 7.64% 23086 34 299 1104 25822 .. 493853 2.83
5 9.58% 23739 53 330 1104 32351 .. 618714 4.42
10 14.52% 25211 89 433 1141 49044 .. 937973 7.42
20 24.74% 27799 139 621 2059 83590 .. 1598649 11.58
energy saved over the WHOLE corpus, heat-limited: the 0.1..3.0 power
bracket, then the p=1.0 column = what one median suppressed RUN is worth
(1.0 power is the mode of the measured landed-hit histogram).
Median run lengths 34/53/89/139 ticks; one 1.0-power landed hit = 3.0.
CAVEAT, measured: the recorded energy ledger closes EXACTLY on
start + landed-gains - damage = end (residual -0.00 over 35065 rounds),
i.e. these captures DO NOT charge the firepower cost. The cost column
is therefore computed from the game rules, not read off the data.