Evolution
Let a search tune board-feature weights by playing thousands of games, keeping the best weights, and repeating.
rejectedrecordedScores visible board traits, adds them together, and plays the highest-valued column.
14 approaches, featured pages first. The label above each title is the technique the approach uses; the same pages appear under that technique on the approaches index.
These play no game of their own: engines run the games and diagnostics measure them. They are listed here because they live alongside the approaches above; the full sets are under Engines and Diagnostics.
The shared harness that makes two hand-built policies play the same games, so that a difference between them is about the policies and not about which one got luckier discs.
Give points to the things about a board that a human would notice — low stacks, open columns, gray discs you can reach, numbers that are nearly ready to clear — add them up, and play the column with the best total.
That is the whole family. It is the oldest idea in the repository, the easiest to explain, and the one that everything else is built on top of: these weighted sums are the leaf evaluators at the bottom of every deeper search and the quick continuation policies inside every rollout. When a large learned system fails here, the post-mortem almost always ends with a sentence about features.
Every figure below is the repository's own rules engine playing a scripted game: the boards, the points, the clears and the reveals are engine output, not drawings. Each one shows a real position and what two of its seven legal columns actually do.
Twenty-eight of the forty-nine cells are occupied and twenty-three of those are covered gray discs whose numbers nobody can see. Five drops remain before the next rise adds seven more.
Two features do that work: how tall the stacks are, and how many gray discs
are still closed. Both are things a human notices in a second, and both are
literal terms in the hand evaluator in src/core/typescript/heuristic.ts.
Sometimes only one column does anything at all. Here the engine reports that six of the seven legal columns score zero, and the seventh scores 770.
The three jobs (stay alive, open the board, prepare chains) pull against each other, and a weighted sum has to settle the argument with fixed numbers. Here is a position where they disagree. It is three drops from a rise.
Which is right? Nobody in this repository knows. The evaluator traded 141 points and one extra reveal for one row of height, because that is what its fixed weights say height is worth. Deciding such trades correctly is the entire research problem, and it is the reason the family's later members stop being pure feature sums and start looking one, two, or several moves ahead.
Everything the searching members do at chance points, including averaging rather than hoping — is explained on the choice-and-chance concept page.
These policies were fast, they were easy to reason about, and several of their features survive today inside the reference search's leaf. As complete policies they were brittle. Weight-fitting runs repeatedly improved the games they were fitted on and then gave the gain back on fresh games, and no hand-built policy tested here displaced the depth-4 reference search (research status, §2 and the compact evidence map in the strategy catalog).
The single most useful thing the family produced is not a policy at all. It is
the observation that immediate score is a poor guide: in this mode
score is very nearly survival time, and
what a long game needs is a steady rate of clearing numbered discs and opening
covered ones.
Two evaluators in src/core/typescript encode the arithmetic directly — five
drops arrive per cycle, a rise adds seven covered discs, so a board that never
fills needs about 2.4 numbered clears and 1.4 covered reveals per move.
What is in this family, and how strong the evidence is. Statuses and evidence labels are copied from the experiment index ("Heuristic and rollout search") and, where marked, the experiment history.
| Approach | Status | Evidence |
|---|---|---|
| Sparse expectimax | completed | task-record only |
| Open loop | support-only | repository-verified |
| Phase horizon | rejected | task-record only |
| Tunneling | completed | task-record only |
| Virtual ignition | rejected | task-record only |
| Risk sensitive | rejected | task-record only |
| Policy comparison | support-only | repository-verified |
| Gray throughput | rejected | task-record only |
| Rollout | rejected (planner) / completed (teacher) | task-record only |
| Cycle abstraction | rejected | task-record only |
| Edge priority | unknown | repository-verified |
| Critical risk | unknown | repository-verified |
| Evolution | rejected | ledger-recorded |
| Evolved public policy | rejected | ledger-recorded |
| Exact search | rejected (quadrature, historical D4) / completed (ensemble) | ledger-recorded / task-record only |
A scoring caveat that applies to most of the older numbers. A 2026-08-15
audit found that several early experiments had used the 7,000-point level
award from the 30-drop Classic/Sequence rules instead of the 17,000-point
award of the five-drop Hardcore mode studied here. Runs that record
levelBonus: 7000 remain valid evidence that one policy beat another on the
same games, and valid evidence about cost, but their absolute scores are not
evidence for the Hardcore million-point target
(mode-specific scoring correction). Every page in
this family says which of its numbers are affected.
The ledger-recorded results in this family, in one place: