A set of classes to easily weave AIs from for simple, deterministic games of total information. Each of these three adjectives is subject for later removal.
The idea here is that you write a set of functions that describe the rules and states of your game, plug them into a SearchNode class (that represents the current and possible future states of the game being played), add functions to guess how good a given state is for a given player (learning algorithms might be added in the future to free you from that chore), and... you're done.
Currently Bob is able to play games that are simple enough to solve (create a complete exploration of the game's possible states) before starting to play it.
- Project cleanup
- Write tests
- flake8 (or other linter)
- Improve documentation
- Packaging
- Code features
- Make search tree and search nodes use weakref dicts to let the GC prune the state tree.
- Make search tree write to disk / DB to solve games and / or build opening libraries.
- multiprocessing
- ...to let it run in the background, to not block the interface
- ...for pondering
- Algorithms
- Alpha-Beta pruning
- More human-like playing
- Given several guaranteed-win moves, choose the one leading to a win the fastest.
- Given several at-best-draw moves, choose the one allowing for the possibility of a win, as long as it doesn't allow the opponent a guaranteed-win move.
- Proof-number search
- Conspiracy number search Conspiracy Numbers An Analysis of the Conspiracy Numbers Algorithm Sibling Conspiracy Number Search
- Best-first search
- Quiescence search
- Expectiminimax
- Principal variation search NegaScout
- Monte Carlo tree search Monte Carlo Tree Search for Game AI
- AlphaGo (meaning: machine learning algorithms for expansion guidance and state evaluation)
- Games
- Nim (more variants)
- Black Hole (check license first)
- Order and Chaos (check license first)
- Nine Men's Morris
- Fanorona
- Ludus latrunculorum
- Mancala
- Checkers
- Hnefatafl
- Chess
- Go
- Arimaa
- SP.268 Coursenotes
- Chess with Different Armies (ask for permission before copying)
- Papers by Rémi Coulom
- Constructing a Kamisado playing agent
- Temporal difference learning (works well for Backgammon)