Treadcore · LAB-REPORT-BRAIN.md section 102 · 27 October 2026

Generations of the Learned Tank

Seven nets, each the kept result of one stage of training, watched in short clips, put through nine single-decision tests, dropped into real matches, and read by the census. What each one learned, what it costs to run, and where it still falls short of the scripted brain it trains beside.

7milestone nets, untrained to map 7
9gauntlet tests, 200 seeds each
10.6 µsto sense and decide, one thread
197×real time, a 16-seat match of nets

Watch each generation

Each clip is the net on its own defining test, on the first held-out seed it passes, so it shows what the net can do; the untrained net is shown on its first seed. Blue is the learner and its drones, red the enemy, orange the shells with their landing marked, cyan the learner's interceptors. The bar over the tank is its armour.

In battle

The map 7 net duelling a scripted RuleBot that fires back
The map 7 net against a RuleBot that fires back (map 6). No net has won this duel yet: 0 of 300 held out, the scripted brain 20%.
The map 7 net in seat 9 of a 16-seat match
The map 7 net in seat 9 of a real 16-seat match, its teammates scripted, the first 30 s. Its team in blue.

The gauntlet: one decision at a time

Nine short tests, each on open grass with nothing else on the map, each asking one decision. Every brain plays the same 200 seeds. The cell is the share passed; below it, the median reaction time (the first shot, the first move, or the first interceptor, as the test times it).

Green deepens with the share passed. A dash: that reaction never came.

What the gauntlet found

  • Shortcuts. The map 7a net goes home 99.7% of the time when low on armour and shells (its training map), but only 50% when only armour is low (G5): it learned "few shells, go home". The map 4 net takes a guarded depot 98% of the time but an unguarded one 0% (G6): it learned the scene, not the depot. Neither shortcut showed on the training maps.
  • The scripted brain's blind spot. Inside a hostile pillbox's ring at 40% armour (G8), the scripted brain fights and dies every time; every trained net does better, and the map 4 net escapes on all 200.
  • No terrain yet. A depot across a strip of water (G9): the scripted brain 100%, every net 0%. No net has trained on terrain.
  • Gains traded away. The map 7 net, the best in matches, is worse than the map 5 net on several single decisions (G3 a shell, G7 a pillbox, G8 its ring): what it learned for map 7 cost it there.

In a real match: living versus fighting

Seat 9 of a dealt 16-seat match (a ranger whom nobody follows) given to each net, the scripted ranger in the same seat on the same 40 seeds, first 3 minutes.

The two measures pull apart. The untrained net lives as long as the scripted ranger because it does almost nothing (11 damage dealt). Phase 1 and 3 nets fight (54 and 49) and die three times in three minutes. The survival maps moved the map 7 net toward the corner the scripted ranger holds, to 0.82 deaths, at the cost of half its damage. The scripted ranger does both: 0.33 deaths and 63 damage.

The census

A team of five nets in one team's seats against the scripted defaults, 110 seeds, 11 maps, three matches a seed; zero is the scripted brain.

The map 7 net is the first to climb off the bottom: +3.96 ± 0.53 over the map 4 net, with four times the kills a match (3.7) and two fewer deaths (16.6 of 20). It is level with a random net, so its rule (two errors above random) fails. The census asks the most of a net: the whole game, supply, capture, building and teams, none of which a net does yet.

Method: a sandbox built on the scripted brain

The learned tank did not get a world of its own. It trains inside the one the scripted brain (the "brainz": the Commander, its team board and 110 census-tuned weights) was built and measured in, and every tool made for the scripted brain became a tool for training it:

The worldthe deterministic sim; the same Observation and Commands as any bot
→
Scenario filesthe format of the scripted brain's families; now with a [reward] and a net seat
→
Read both brainsthe scripted brain and the untrained net on the same seeds, before any training
→
Trainevolution strategies over the 16,431 weights, the courses in turn so old skills are rehearsed
→
Judgeheld-out seeds, the gauntlet, one seat in a match, then the census
  • One file, two brains. A training map is a scenario file. With its net seat swapped for a Commander it is a test of the scripted brain; with a net, a training course. Both read on identical seeds.
  • The rule first. Each map's pass bar is written down before it trains, and read on the untrained net and the scripted brain first. Twice a bar was found empty that way (an untrained net "passing" by mortar; a map no brain could survive) and changed before training.
  • Probe the bound. When the dodge stalled at 93%, an oracle playing the net's own nine drive actions forward in a copy of the world dodged 300 of 300: the actions sufficed, the senses did not. A shell contact took the net to 96%.
  • Trace the death. A net that never survived map 7 was dying to strike drones, not shells; the drone head and an air contact took it from 0 to 44%.
  • Step maps. Map 7 alone never moved; map 7a (the same without the enemy) taught "low means home" in 300 generations, and map 7 followed.

What it costs to run the tank on its AI alone

Measure (Apple M1)Result
One decision: 143 senses and the forward pass, 16,431 weights, one thread10.6 µs (94,000 a second)
Decisions a second a tank in play5 (every 0.2 s)
A one-tank training episode (drive in and kill a still enemy)2.1 ms
A 16-seat match, every seat a net: brains a seat-tick / the world a tick10.9 µs / 80 µs; 197× real time
The same match, every seat scripted13.3 µs / 69 µs; 177× real time
Phase 1, 500 generations of 1,164 episodes (8 threads)130 s, about 4,500 episodes a second
Map 7 with rehearsal, 400 generations of 2,037 episodes705 s
Every clip on this page, drawn in Rust and packed by ffmpeg8 s

The net is cheaper to think than the scripted brain, and the world's own step is most of a match's cost either way. No GPU is involved: training is as fast as the CPUs can play episodes.

The quality of the improvements

Improved, and heldNot yet
Go to a target (999 of 999); drive in and kill with the gun (999 of 999); take a guarded depot (94 to 99%); go home when low (99.7%); dodge a shell (96%); survive low and far from home (44%, scripted 53%); deaths in a match halved (1.73 to 0.82); the first census climb (+3.96)A duel won (0%); outnumbered (16%); terrain (G9 0%); the last 3% of the dodge; damage dealt in a match (27, scripted 63); the census above a random team; shortcuts (G5, G6) that each training map hid

Every gain was measured on seeds no generation trained on; every loss is in the same tables. The next stage is set by them: gauntlet items G5 and G6 become training maps against the shortcuts, map 8 and the duel get the drones, and the census is read again on the same seeds.

Run it yourself

make gauntlet                 # 9 tests x every net, 200 seeds: build/train/gauntlet.tsv
make clips                    # these GIFs: build/train/clips/
make train CHECK=nets/map7.bin MATCH=40      # one seat in 40 real matches
make train GROUND=phase1,phase3,scenarios/training/04-the-guarded-depot.toml START=nets/phase3.bin
CENSUS_NET=nets/map7.bin SEEDS=110 make census