Hornet is a from-scratch engine for four-player Free-For-All chess (the chess.com variant: four armies on a cross-shaped 14×14 board, points for checkmates and captures, dead kings walk, last-standing and highest-scoring interests tangled together). This page explains why that game is a research problem and lists the literature the engine stands on.
It deliberately does not explain how Hornet itself works. The broad strokes are visible in the source; the engine's own architecture choices, evaluation design, parameters, and the experimental findings that shaped them are the project's contribution and stay with the project. Think of this page as the bookshelf, not the lab notebook.
Almost everything a classical chess engine relies on quietly assumes two players and zero-sum. With four independent players, those assumptions break in interesting ways:
- Minimax stops being well-founded. With two players, "I assume you'll play your best move" gives a defensible worst-case value. With four, each opponent maximizes their own utility, not your misery — and their best replies depend on each other. There is no single "best response" to defend against, and the game-theoretic guarantees of alpha-beta evaporate.
- Pruning mostly evaporates too. The deep-cutoff machinery that lets two-player engines search 20+ plies is provably unsound in general multiplayer trees; only much weaker pruning survives. Multiplayer engines therefore live or die by selectivity — choosing what to look at — rather than by raw cutoff power.
- The objective is plural. Free-For-All is not "win the game": it's points, survival, timing, and choosing whom to fight. A position can be excellent against one opponent and suicidal against another. Evaluations here are naturally per-player vectors, not one number.
- Kingmaking and coalitions are real. A losing player's choices decide which leader wins. Any model that ignores this systematically misreads late-game positions.
- The game changes regime as it shrinks. Four live players is a different game from three; and when only two remain, the game collapses back into classical zero-sum chess — at which point sixty years of two-player theory suddenly applies again. An engine has to live in both worlds and know when it crossed the border.
- Chance enters the tree. Under the dead-king-walking rule an eliminated player's king moves randomly — so parts of the tree are not adversarial at all, but stochastic, and need expectation-based rather than adversarial backup.
The literature Hornet draws on, grouped by what it's for. None of these papers is about four-player chess — the research act is picking which of them survive contact with this game.
Multiplayer game-tree search
- Luckhardt & Irani (1986), An algorithmic solution of N-person games — the Max^n algorithm: back up a utility vector, each player maximizing their own component. The foundation for vector-valued search.
- Korf (1991), Multi-player alpha-beta pruning — why deep cutoffs die in Max^n and what shallow pruning remains sound.
- Sturtevant & Korf (2000), On pruning techniques for multi-player games — the modern treatment of what you can and cannot prune, and the paranoid reduction (pretend everyone is a coalition against you — sound, but wrongly pessimistic).
- Schadd & Winands (2011), Best Reply Search for multiplayer games — a different reduction: consider only the single strongest opposing reply. Fast and sharp, but an incomplete search with real blind spots — instructive in both directions.
- Sturtevant's broader multiplayer work (opponent modeling, utility assumptions in N-player games) — the vocabulary for reasoning about what opponents will actually do.
Stochastic elements
- The expectimax family (chance nodes valued by expectation rather than min or max) — the standard treatment for random events inside a game tree, which is exactly what a randomly walking dead king is.
The two-player endgame (where classical theory switches back on)
- Shannon (1950), Programming a computer for playing chess — the founding document; quiescence and evaluation shape trace to here.
- Zobrist (1970), A new hashing method with application for game playing — position hashing, the enabler of transposition tables.
- Pearl's Scout and Marsland & Campbell's work on minimal-window search — principal variation search: prove the first move, cheaply refute the rest.
- Donninger (1993), Null move and deep search — the null-move heuristic and its famous failure mode, zugzwang, which endgames are full of. A technique being standard does not make it safe in every regime.
- Late-move reductions, iterative deepening, killer/history ordering — the accumulated craft of open-source engines (the Stockfish lineage is the reference implementation of this canon).
Evaluation learning
- Nasu (2018), Efficiently Updatable Neural Networks (NNUE, from shogi; adopted by Stockfish in 2020) — how to make a neural evaluation fast enough for full-width search by updating the first layer incrementally as moves are made and unmade. The direction Hornet's evaluation is built to grow toward.
Validation methodology
- Wald (1945), Sequential tests of statistical hypotheses — the SPRT, the statistical backbone of modern engine testing (as popularized by Stockfish's Fishtest): changes must prove themselves in paired self-play, not in the author's imagination. Hornet holds every change of its own to that standard.
Two habits from this literature shape the whole project:
- No free lunches. In an incomplete, selective, multiplayer search, nothing is "provably loss-free" — every ordering trick, every pruning idea, every evaluation term can change what the engine plays. So everything is measured, and what fails its measurement gets removed, no matter how good the story was.
- Respect the regime. A technique that is standard in one part of the game tree can be wrong in another. The literature supplies candidates; the game decides.
Implementation details, measured results, and the discoveries that make Hornet Hornet are intentionally not documented here.