Welcome to the AlphaSettler wiki

The feature-by-feature encyclopedia of AlphaSettler, generated from commit baf5f69. 12 articles.

About AlphaSettler

AlphaSettler is a Settlers of Catan bot project that simulates the board game in Rust and uses Information-set Monte Carlo tree search to find strong moves. It is designed for researchers and bot developers who want to benchmark Catan-playing strategies and compare them against other implementations. The project decomposes into a core game engine with complete rule enforcement, a tree search subsystem that samples hidden information, and a match system that evaluates bots across multiple games with common random numbers. Python bindings and a command-line interface expose these components to the research layer. AlphaSettler includes a subsystem for dice rolls and development cards, a rules engine tracking road and army awards, and integration with Catanatron for differential testing and cross-engine validation.

(Full article...)

Project documentation is the collection of design specifications and implementation plans for AlphaSettler, a Settlers of Catan bot project decomposed into sub-projects for a Rust game engine, benchmark harness, search-based bot, and Colonist platform integration. The specifications define the architecture, correctness testing strategy, and done criteria for each sub-project, with plans documenting implementation timelines and decision rationales.

(Full article...)

Did you know...

  • ... that the rules engine tracks the longest road and largest army awards, which grant victory points only when held, and updates these awards incrementally as players build and their roads are cut by opponent settlements? (Game rules)
  • ... that it powers the arena system where AlphaSettler bots face Catanatron baselines, importing Catanatron's position into the AlphaSettler engine, asking the bot to choose, and mapping the choice back to a Catanatron action? (Oracle translation)
  • ... that property tests verify that random games finish, maintain game invariants, and detect violations of victory point rules? (Performance testing)
  • ... that the engine specification covers the fixed-size game state, a fixed action space of roughly 700 actions, randomness model with independent RNG streams for dice and steals, and three-layer correctness testing: rule unit tests, property tests, and differential testing against Catanatron? (Project documentation)
  • ... that the 3a search bot specification describes a single-observer ISMCTS tree keyed by the bot's information set, an exact belief tracker over joint hands based on public events, and a heuristic evaluator with features including victory points, production pips, hand size, and progress toward awards? (Project documentation)

Recently updated

Feature map

flowchart LR
  n0["Action space"]
  n1["Bot arena"]
  n2["CLI interface"]
  n3["Game engine"]
  n4["Game outcomes"]
  n5["Game rules"]
  n6["Oracle translation"]
  n7["Performance testing"]
  n8["Project documentation"]
  n9["Python bindings"]
  n10["Random bot"]
  n11["Search algorithm"]
  n0 --- n1
  n0 --- n11
  n0 --- n3
  n0 --- n4
  n0 --- n5
  n0 --- n7
  n1 --- n10
  n1 --- n11
  n1 --- n3
  n1 --- n4
  n1 --- n5
  n1 --- n9
  n10 --- n11
  n2 --- n6
  n3 --- n10
  n3 --- n11
  n3 --- n4
  n3 --- n5
  n3 --- n7
  n3 --- n9
  n4 --- n10
  n4 --- n11
  n4 --- n5
  n4 --- n7
  n4 --- n9
  n5 --- n11
  n5 --- n9
  n7 --- n11
  n9 --- n11
  click n0 "/wiki/alphasettler/wiki/action-space/"
  click n1 "/wiki/alphasettler/wiki/bot-arena/"
  click n2 "/wiki/alphasettler/wiki/cli-interface/"
  click n3 "/wiki/alphasettler/wiki/game-engine/"
  click n4 "/wiki/alphasettler/wiki/game-outcomes/"
  click n5 "/wiki/alphasettler/wiki/game-rules/"
  click n6 "/wiki/alphasettler/wiki/oracle-translation/"
  click n7 "/wiki/alphasettler/wiki/performance-testing/"
  click n8 "/wiki/alphasettler/wiki/project-docs/"
  click n9 "/wiki/alphasettler/wiki/python-bindings/"
  click n10 "/wiki/alphasettler/wiki/random-bot/"
  click n11 "/wiki/alphasettler/wiki/search-algorithm/"
Each box is an article; a line joins two articles when code in one calls or imports code in the other.

All articles lists every article as text.