Skip to content

Catan, searched 700k times a second

AlphaSettler

Sep 2026 – Present

RustPythonPyO3

AlphaSettler simulates Settlers of Catan in Rust with every rule enforced, then searches it with information-set Monte Carlo tree search. Catan hides information, from opponents' hands to the development-card deck, so each decision samples worlds consistent with what the bot has actually seen and searches across them. A seat-rotating arena over common random numbers compares bots without seat luck, and PyO3 bindings expose the engine to Python.

the engine takes 68 ns per step with trades off, against Catanatron's 20,691 ns on the same machine

ISMCTS that samples hidden hands consistent with each player's observations, at about 700,000 simulations a second

an arena that rotates each bot through all four seats over common random numbers, so a comparison is not decided by seat order

what i built

  • a Rust Catan engine with full rule enforcement and every legal move encoded as an integer from 0 to 664
  • ISMCTS with belief-state sampling, PUCT selection and batched leaf evaluation
  • a bot arena with seat rotation, common random numbers and multi-threaded matches
  • PyO3 bindings and a CLI for matches, statistical comparisons and self-play
  • an adapter to Catanatron 3.3, so both engines can be tested against each other