aboutsummaryrefslogtreecommitdiff
path: root/Makefile
AgeCommit message (Collapse)Author
2026-09-18working towards hybrid rootstraptslil
2026-09-13move data generation into the epoch looptslil
Previously we would spend all of the training epochs on making the network a better predictor of the *initial* TD-leaf values that we computed before the start of the first epoch. There's definitely something stale about this, given that the TD-leaf training targets involved the net evaluation at PVs. I'm not overly confident that this makes sense, but as a kind of compromise between fully on-line TD-leaf and the fully stale version we had before, we now recompute the TD-leaf values in each epoch with the fine-tuned net instead of the epoch 0 net. Perhaps we were just lucky, but this seems to train a strong network under the default setting. More experimentation is required.
2026-09-12flood fill for roads, fix dragon, memoise leaf eval, enable diagonal in ↵tslil
nn_train.py
2026-09-11move from single candidate td-leaf with gating to tournament of a populationtslil
The goal in this change was to overcome the rock-paper-scissors phenomenon that was happening in capability space by having on a single candidate learn to beat the most recent version of itself. In some sense this lead to rotating around in capability space instead of chasing monotonic improvements. I hope that flipping to a system in which many (N=5) candidates play each other and learn from their own set of diverse games in this pool, combined with --replay-iters, will lead to a given network having to have a much more comprehensive understanding of the space of tactics. I haven't yet had time to train this thorougly, will run those experiments on my desktop computer.
2026-09-05training rework, best weights so far*tslil
After quite a bit of experimentation it would appear that a far better way to train on self-play data in this setup is to randomise not the moves but the opening. The new selfplay and match binaries have lost the epsilon parameter and now play a random opening of some length before switching to pure, deterministic engine inference. This also resulted in a cleanup of nn_train.py. As an added bonus, in this configuration it makes sense to harvest training data from both sides in self-play and consequently the two sides are given distinct game ids (this was almost surely an oversight in the original version of TD(lambda) that i had). I also noticed that rand32 was not using the top 32bits of xorshitf*. *Under default settings nn_train.py produces a 5x5 weight set that doesn't lose a single game to any other cttei that i cared to look at, when measured using `racetrack` (which has a diverse balanced opening book).
2026-09-04TD-leaf and another negamax bugtslil
TD-lambda and TD-leaf are separated by the observation that minimax with a parameterised leaf heuristic is differentiable* in the parameters. "All" that had to be done was to extract the "principal variation": which one position survived all of the pruning to become the reported value. This was a bit fiddly and uncovered a subtle bug (again) in negamax.c: we were not being complete in our overriding of the TT entry and by omitting key it was possible that later searches would find incorrect values. The more interesting question to me was: how do we introduce enough variety while not corrupting the PV chain? I settled on having selfplay have one of the players be epsilon-random but the other greedy (minimax) and simply report only the greedy portion PV chain. This appears to work well enough in practice and doesn't introduce nonsense training data for the net (we don't force its actions to be nonsensical). I also deciced, perhaps in a departure from tradition, that we had good supervised labels for PVs that happened to be winning states, so the training overrides the targets in that case. Finally rolled back some of the ambition in nn_train.py default arguments. *almost always
2026-09-02TD(lambda), and a big reworktslil
NOTE: 6x6 weights are as-yet untrained On the performance side: * switch from linked-list chaining hash table to direct mapping * cache check_win by hash * persist transposition tables across plies (this was a big deal and difficult to puzzle out) * add align directives to the network floats * prepare_nn_input gained a small LUT to avoid branching (i suppose you might call this 1D embedding) * apply mtune=native for the native builds On the correctness side: * Zobrist has now includes the ply parity * the network now predicts something in [-1, 1] using tanh (approximated by polynomials) * the training object is now MSE because we're learning a value estimate * use .clangd instead of compile_commands.json On the training side: * completely forgo human-derived data set * implement td(lambda), self-play, tournaments
2023-01-15new neural network arch (faster + better) & minor changes + fixestslil clingman
Gone is the convolutional neural network, for it turns out not only is it more difficult to train, but all of the extra information about board layers didn't make much of a difference at this size. So cnn1986 has been replaced by nn1986, a standard, two-layer, dense nn configured as a binary classifier and (mis)used in that capacity. Note: total number of parameters is unchanged. HARK: this new nn exposes a bug somewhere in ctak. Run ctlm with self-play to see the completely borked board state at the end.
2021-10-22--fast-math seems saves some timetslil clingman
That i can tell at a glance, the largest relevant change this introduces is flush-to-zero for floats. Some testing is required to ensure that the CNN isn't too sensitive to this. Preferable to that option is to simply train it without relying on subnormal floats in the first place.
2021-10-05Welcome geminict!tslil clingman
This is a special interface to negamax_cnn1986 which is designed to generate output for use in a CGI tak interface to be used over gemini. Also in this commit is a reformating of the various source files to use the traditional tab width of 8 spaces.
2021-02-05Renamed binariestslil clingman
2021-02-05TEI interface working!tslil clingman
2021-01-31Fairly important bug fixes to lcdlib, LCD now echoes input!tslil clingman
Input polling without line-buffering is done using ncurses, so the buildroot configuration had to change accordingly to include that library. The Makefile changed to accommodate stand-alone building of ct1986 and to include -lcurses where appropriate. There were also some typos about copying ct1986 and ctaklm to the correct directories.
2021-01-30Try to squeeze out a little more performancetslil clingman
``Common wisdom'' dictates that placements are often better than stack moves, so we bias the generated move list in this fashion. Seems to be a little faster.
2021-01-29Purged uninteresting statisticstslil
2021-01-29Cleaned up build systemtslil clingman
2021-01-28Added license information!tslil clingman
2021-01-25Stripping debug stufftslil clingman
2021-01-24This is the basic idea, there's ≥ 1 bug (generates illegals...)tslil clingman
2021-01-24Working on action lists to refactortslil clingman
2021-01-24Still tryingtslil clingman
|
2021-01-23Hash collisionstslil clingman
2021-01-23Attempting Zobrist hashingtslil clingman
2021-01-23Not correct usage, need to try hashingtslil clingman
2021-01-21Finally (?) fixed winning avoidancetslil clingman
2021-01-20Infrastructure more or less set up!tslil clingman
It remains to tweak ct1986.c and add a .login file to autorun stuff!
2021-01-20In-lined as much as a i daretslil clingman
2021-01-20Closing in on lcd!tslil clingman
2021-01-19Slight bugtslil clingman
2021-01-18First steps towards character LCDtslil clingman
2021-01-18Multiplatform builds!tslil clingman
2021-01-18Cross-compilation!tslil clingman
2021-01-18Shed dependency of linenoisetslil clingman
2021-01-17Revert "Starting work on MCU port"tslil clingman
This reverts commit 43eec01361eb6174142180c29afef960e041514e.
2021-01-17It works, but it's too slowtslil
2021-01-17Starting work on MCU porttslil clingman
2021-01-16Quick sketch of non-determinismtslil
2021-01-15Dragon is not separate, fixed concession, allowing playing as b/wtslil
2021-01-14So after a small tweak, it actually plays well!tslil
2021-01-14Trying alpha-beta pruning. There's a bug somewhere ...tslil
2021-01-13Fixed minimax (!), fixed bugs in tak.ctslil
With minimax of depth 1 the evaluation function seems alright with the current method of training and generating weights
2021-01-13Trying various things to teach titslil
2021-01-12New weightstslil
2021-01-12Train on data that is close to the end of the game onlytslil
2021-01-11Close in principle, but there;s a bug in ct1997 &/ pptdb!tslil
2021-01-10Starting on importing network!tslil
2021-01-05Gotta go fasttslil
2021-01-04Fixed indentation and some bugs, stats programmetslil
2021-01-03Set dialect to C99tslil
2021-01-01extract games from playtak.com/games databasetslil