An implementation of Tak and a computer opponent in C
switch to returning an array of actions instead of a linked list
might as well enable size 6
f3b67ebd — tslil clingman 4 months ago
Change transposition table lookup policy


browse  log 



You can also use your local clone with git send-email.

#ctak, ctaklm, and ct1986


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.

#Building for the native platform

make native

#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.

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

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.