CQB: the episode 10 attacker pair

The two attackers from episode 10 of A Million Tries ("I Gave My AI a Partner. It Shot Him."): one brain that plays both operators of a pair, against one defender in a dark house it has never seen. Started from episode 9's attacker (which, given a partner it had never trained with, shot it about once every four or five rounds), trained together (500 million decisions), then again under three crash rules (341 million more), because it kept sprinting into walls: crashes heard 15 m away, the rifle coming up over 0.3 s after running, and a hard crash stunning you for 0.5 s. It learned to trade (one falls, the other drops the defender within about half a second) and stacks beside the door before going in.

Under its rules (two flashbangs each, 30-round magazines, health with wounds, 0.3 s reaction time, the crash rules):

vs pair wins friendly-fire downs a round time runs out
episode 9's best defender (cqb-defender-ep9) 54% 0.03 21%
a defender trained against pairs (cqb-defender-ep10) 54% 0.03 21%
a defender trained under the crash rules 56% 0.06 19%
a hand-written defender watching its door 57% 0.04 15%

Crashes into walls: 2.5 a round (the same pair before training with the stun: 7.3; 32 test houses). It throws a flashbang now and then (0.1-0.2 a round); they rarely catch the defender.

  • The game (CQB, two vs one): two attackers vs one defender in a house generated from a seed (3-6 rooms, doors, cover), in the dark: each sees only inside its own weapon light (a 90° cone, 20 m) and hears footsteps, doors, shots and reloads through walls. 45 seconds; the defender wins if the clock runs out. A sighting by either attacker is shared with the other (automatic: no chosen words), friendly fire is on, and you only know an enemy is down if your team saw it fall or hit it.
  • Sees (142-144 numbers): episode 9's numbers (24 distance lasers, the nearest known enemy, sounds, itself, the two nearest doors, an 8 x 6 map of where it has looked, the clock, flashbangs, rifle, health, aim), then the other enemy's slot, its teammate (where, which way it faces, health), which one of the pair it is, and with the crash rules, how far its rifle is up and how long it's still stunned.
  • Does: move forward/sideways and turn (3 numbers) and 5 switches (fire, door, run, flashbang, reload), 10 times a second. One brain plays both attackers: each runs its own copy on its own numbers.
  • Brain: inputs -> 512 -> 512 (tanh) -> 3 + 5 (+ a value head used only in training). PPO, written from scratch in JAX; every decision of either attacker is practice, rewarded with the team's result.
  • Weights: model.safetensors, PyTorch layout; config.json has the game rules it was trained under (game, including team_sizes) and its training settings.
  • Code, as the video used it: https://github.com/backstab319/a-million-tries/tree/episode-10 (uv run games watch-cqb <brain> camper 100064 draws a round).
  • Every number below: 192 test houses it never trained in (100064-100255), not the ones used to choose this checkpoint.

From the YouTube channel A Million Tries: https://www.youtube.com/@amilliontries

Downloads last month
7
Safetensors
Model size
342k params
Tensor type
F32
·
Video Preview
loading