aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
authortslil <tslil@posteo.de>2026-08-30 19:46:07 +0100
committertslil <tslil@posteo.de>2026-09-02 12:13:01 +0100
commit241156da6f35cb888253e6b8814e7b61a76b4fc7 (patch)
treee562029445b1473cc89590793f32c561540d621c /README.md
parent696c3808220ea9d8c604939894a2d509f05cc4c6 (diff)
TD(lambda), and a big rework
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
Diffstat (limited to 'README.md')
-rw-r--r--README.md34
1 files changed, 7 insertions, 27 deletions
diff --git a/README.md b/README.md
index 8d1b437..3daa539 100644
--- a/README.md
+++ b/README.md
@@ -2,13 +2,11 @@
## Overview
-Details forthcoming, but at a glance:
-
1. ctak is a C library for the game of Tak
-2. ctaklm is a line-mode interface to ctak and a computer opponent
- (for 5x5)
-3. ct1986 is a similar interface, but designed for a Raspberry Pi Zero
- running buildroot and displaying output on a character LCD.
+2. ctaklm is a line-mode interface to ctak and a computer opponent (for 5x5)
+3. ct1986 is a similar interface, but designed for a Raspberry Pi Zero running buildroot and displaying output on a character LCD.
+4. cttei is a TEI-speaking game engine for use wherever TEI is accepted.
+5. geminict is a special adaptation of ctak for use in a gemini CGI web-server.
## Building for the native platform
@@ -16,33 +14,15 @@ Details forthcoming, but at a glance:
## Building for the Raspberry Pi Zero
-Download and extract a recent version of buildroot into the working
-directory. Edit `BUILDROOT_DIR=buildroot-2020.11.1` in `Makefile` to
-point to the extracted directory.
+Download and extract a recent version of buildroot into the working directory. Edit `BUILDROOT_DIR=buildroot-2020.11.1` in `Makefile` to point to the extracted directory.
make pi
## The computer opponent
-Standard adversarial tree search (α-β negamax) with iterative deepening, using a neural network evaluation function for leaves and also transposition tables implemented using Zobrist hasing and a chaining hash table.
-
-The architecture of the neural network is a standard, two-layer dense classification network
-```
-_________________________________________________________________
- Layer (type) Output Shape Param #
-=================================================================
- input_1 (InputLayer) [(None, 28)] 0
-
- dense (Dense) (None, 64) 1856
-
- dense_1 (Dense) (None, 2) 130
+Standard adversarial tree search (α-β negamax) with iterative deepening, using a neural network evaluation function for leaves and also a transposition table keyed on the Zobrist hash.
-=================================================================
-Total params: 1,986
-Trainable params: 1,986
-Non-trainable params: 0
-```
-which was trained on the binary classification problem of predicting the winner from a given board state. As input the network is fed the top layer of the board only (see nn1986.c for details) as well as `flats used/flats remaining` fractions for both players and a single float indicating the parity of the board. At the time of training, on the dataset given by `resources/extract.sh`, this achieves ~75% accuracy on the validation set.
+The architecture of the neural network is a standard, two-layer dense network which is trained exclusively through self-play using td-leaf (see `src/nn_train.py`). As input the network is fed the top layer of the board only as well as `flats used/flats remaining` fractions for both players and a single float indicating the parity of the board.
## License