From 478e7568f5eda9780d1409bb8dccc86221126281 Mon Sep 17 00:00:00 2001 From: Dylan Date: Mon, 9 Nov 2026 16:38:13 +1300 Subject: feat: Multi-threaded training; play matches every 10 generations Gradients and losses are computed on rayon's pool in fixed-size chunks summed in order, so the weights are the same on any number of threads. Self-play uses the same pool, and the output shows the training time. The matches against the earlier network and ClaudePlayer now run only every --match-every generations (default 10), against the generation that last played them, read back from its saved file. Co-Authored-By: Claude Opus 5.5 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'README.md') diff --git a/README.md b/README.md index 2d20ba5..e97a987 100644 --- a/README.md +++ b/README.md @@ -67,8 +67,8 @@ cargo run --release -- train [generations] [games per generation] [out dir] [--f ``` The defaults are 50 generations of 500 games, saved to `weights/`. Each generation, the network -plays itself, learns from how those games went, then plays matches against the previous generation -and against `ClaudePlayer`. The score against `ClaudePlayer` is the best guide to progress. +plays itself and learns from how those games went. Every 10 generations (`--match-every`) it also +plays matches against the generation it last tested (10 generations back) and against `ClaudePlayer`. The score against `ClaudePlayer` is the best guide to progress. `ClaudePlayer` is only a yardstick, never something the network learns from. Each generation is saved as `gen-NNN.bin`, and the newest as `latest.bin`. Running `train` again -- cgit v1.3.1