Configuration Parsing Warning:Invalid JSON for config file config.json

Parallax-Chess-Preview

A chess engine trained from scratch on a single laptop GPU (RTX 5060). Uses a 25.9M parameter transformer with Monte Carlo Tree Search (MCTS) for move selection.

What's Inside

  • 25.9M param transformer trained on 200K+ positions with Stockfish evaluations
  • Policy network: predicts best move from board state (4352-class output covering all possible moves)
  • Value network: evaluates positions in centipawns (trained on Stockfish depth-10 evaluations)
  • MCTS search: looks ahead multiple moves using the neural network for evaluation
  • Custom chess tokenizer: no external tokenizer needed โ€” pure chess-aware encoding
  • Tkinter GUI: interactive chess board with click-to-move interface

Performance

Metric Value
Parameters 25.9M
Training data 200K Stockfish-evaluated positions + 143K puzzles
Training time ~2 hours on RTX 5060
Policy loss 8.47 โ†’ 2.50 (4352-class prediction)
Speed (greedy) ~19 moves/sec
Speed (MCTS 200 sims) ~2 moves/sec
Estimated ELO ~800-1000 (greedy), ~1200-1500 (MCTS)
Opens with e2e4, Nf3, Ruy Lopez โ€” real chess openings

Quick Start

Greedy (fast, weaker)

from train_v3 import ParallaxChessV3
import chess

model = ParallaxChessV3.load("model.pt")
board = chess.Board()
move = model.predict_move(board)
print(move.uci())  # e.g. "e2e4"

MCTS Search (slower, stronger)

from mcts_engine import ParallaxChessMCTS

engine = ParallaxChessMCTS("model.safetensors")
board = chess.Board()
move = engine.choose_move(board, n_simulations=200)
print(move.uci())

Interactive GUI

python play_gui.py

Click pieces to select, click again to move. Legal moves shown as dots.

Architecture

ParallaxChessV3(
  board_encoder: Embedding(402, 512),
  backbone: SmallLM(8 layers, 512 dim, 8 heads, GQA 4:2),
  policy_head: Linear(512, 4352),  # from_sq * 64 + to_sq
  value_head: Linear(512, 256) โ†’ Linear(256, 1) โ†’ Tanh
)

Training Details

  1. Data: 200K positions from Stockfish self-play (depth 10) + 143K Lichess puzzles
  2. Policy target: Stockfish best move as move index (from_square ร— 64 + to_square)
  3. Value target: Stockfish centipawn evaluation (scaled to [-1, 1])
  4. Optimizer: AdamW (lr=1e-3, weight_decay=0.01, cosine schedule)
  5. Augmentation: 50% horizontal board flip

What This Proves

  • A 25.9M param model can learn real chess openings from scratch
  • Policy + value heads can be trained simultaneously on a single GPU
  • MCTS search can boost a weak neural player to competitive play
  • Custom chess encoding (no tokenizer dependency) works well

Limitations

  • ~1000-1500 ELO (intermediate club player)
  • Weak in endgames (training data biased toward openings/middlegame)
  • No opening book โ€” learns openings from training data only
  • MCTS adds ~10x latency per move

License

CC BY-NC 4.0 (weights), AGPL-3.0 (code)

Downloads last month
-
Safetensors
Model size
4.43M params
Tensor type
F32
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support