Champion brain
Fitness per generation
Fitness per decision = utilization − 0.5 × queueing delay (in base RTTs) − 4 × loss rate, averaged over 3 random links per generation.
neuroevolution · networking · live in your browser
A population of 40 tiny neural networks learns to send data over a congested link, with no knowledge of TCP. Each agent only sees latency and packet loss, and evolves generation after generation. Then it faces the classics.
Fitness per decision = utilization − 0.5 × queueing delay (in base RTTs) − 4 × loss rate, averaged over 3 random links per generation.
A fluid model of one bottleneck link, stepped every simulated millisecond. Senders push packets into a FIFO router queue in front of a link of capacity C. Whatever does not fit in the buffer is dropped. Training links vary capacity (6 to 36 Mbps), base RTT (20 to 80 ms) and buffer size (0.3 to 2 BDP), and 60% of them change capacity midway.
Once per RTT, each agent sees three signals from its last three intervals: latency gradient, RTT over minimum RTT, and loss rate. A 9-8-1 network outputs a in [−2, 2] and the sending rate becomes rate × (1 + 0.05a), or rate ÷ (1 − 0.05a) when a is negative. The formulation follows Aurora (Jay et al., ICML 2019).
No gradients. All 40 networks run the same 3 random links each generation. The top 4 survive unchanged, and the rest are children of tournament winners, with uniform crossover and Gaussian mutation. A fixed seed reproduces the whole run.
This is a teaching simulator, not a production congestion controller. Feedback reaches the sender without the extra RTT of real ACKs, there is a single bottleneck, and training only uses one flow, so fairness is never rewarded. The two-flow scenario shows what that costs.