Reading the repo
Reading the repo
How to install on macOS
AlphaZero-style Quoridor engine trained from zero knowledge — no human games, no heuristics. 24 h of self-play on one consumer GPU, after which it beats the previous strongest public Quoridor AI with no search at all. Play it in your browser.
Saved setup from just now
Will it work on my device?
Then run bash setup.sh. It stops at the first error and is safe to run again. Servers and tests aren't started; it lists them at the end. Read it first.
Needs Git: xcode-select --install
git clone https://github.com/bartolomeo3000/SigmaQuoridor.git cd SigmaQuoridor
Python 3.x (no version pinned)
brew install python
python -m venv .venv source .venv/bin/activate pip install -r requirements.txt
flask run
bartolomeo3000.github.io/SigmaQuoridor — everything runs in your browser (ONNX Runtime Web); no data leaves your machine.
Making moves. Both move types are a plain left-click on the board:
Controls worth knowing:
| Control | What it does |
|---|---|
| Board | 7×7 (5 walls) or 9×9 (10 walls) — 9×9 is the default and the stronger net |
| Mode | H vs AI (default), AI vs H (AI moves first), H vs H, AI vs AI |
| Agent | Per side: SigmaQuoridor (net + MCTS), MCTS (pure random rollouts), Minimax (depth 2–8) |
| Checkpoint | Per side — which exported net that side plays. In AI vs AI the two sides can pick different ones, so one checkpoint can play another |
| Simulations | Per side, 1 → 5000, default 100. This is the AI's thinking budget: 1 = raw network intuition with no search, 5000 = slow and very strong |
| Temperature | Per side, default argmax (0) — always play the most-visited move. Above 0 the side samples from its visit counts instead (visits^(1/T), same convention as mcts.py and tournament_cpp.py --temp), so repeated games diverge |
| Playback delay | Minimum time a move stays on screen while a game plays out on its own — AI vs AI, and replaying the timeline. 0 → 5 s, default 0.75 s; a search that already took longer isn't held back further. It never applies to the AI's reply to your move, which always appears as soon as the search finishes |
| ◀ ▶ / scrubber | Step one ply back or forward, or drag to any position in the game. The ← / → keys do the same |
| ▶ Play / ⏸ Pause | Start or stop auto-advance (Space). Paused at the live position, ▶ plays exactly one move; parked back in the game, ▶ replays it forward from there |
| ⇅ Flip Board | Flip orientation |
Moving from a rewound position branches the game — everything after it is discarded — so the timeline doubles as undo and redo.
Try setting Simulations to 1 — that's the pure policy head, no search at all, and it still plays a respectable game.

In the shot above the network can barely separate its top three — H(6,5) 17.8%, ←(5,3)
16.6%, ↑(6,4) 16.0% — and search splits them into 41.0%, 25.0% and 16.0%. It
also pulls H(6,4) up from 2.5% to 13.0%. That gap between the prior and the visit counts
is what the policy head is trained toward.
No reports for macOS yet.
Opens a chat with this manual already filled in, for macOS. It uses your own account; gitmanual sends nothing.