Hand-built heuristics and shallow search
Scores visible board traits, adds them together, and plays the highest-valued column.
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.
The intuition, on real boards
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.
"Open the board"
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.
The 5 lands beside another 5 and completes a row-run of exactly five. Two waves follow: three numbered discs clear, three gray discs give up their numbers (one of them is then cleared as well), and one more gray is cracked. 53 points, and the covered count falls from 23 to 20.
The same disc in the leftmost column. Nothing clears, nothing is revealed, no points, and the tallest stack grows from five rows to six, with the rise still coming. A feature-scoring policy is exactly a rule for preferring the first board to this one.
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.
"Prepare useful chains"
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.
Five waves from one drop: five numbered discs cleared, two gray discs opened, and 770 points scored. Columns 2, 4, and 5 each fall by one or two rows. The arrangement was built several moves earlier, which is why 'chain readiness' is a feature and not just a lucky outcome.
Where the idea starts to strain
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.
Column 5: three waves, 155 points, three numbered discs cleared, and two gray discs opened. One of them is in the bottom row. Column 5 empties completely, but the tallest stack is still five rows high.
Column 4: one wave, 14 points, two numbered discs cleared, and one gray disc opened. The tallest stack falls from five rows to four before the rise. The repository's one-ply hand evaluator picks this move over the 155-point one.
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.
How a policy in this family works, step by step
- Read the public position. The visible board, the visible next disc, and the rise clock. Nothing else, not the seed, not the hidden gray numbers, not the score. (One member of the family breaks this and is flagged where it appears: see gray throughput.)
- Simulate each legal column with the real rules engine. Every disc that clears, every gray disc that cracks or reveals, every wave of the chain.
- Measure the resulting board. The hand evaluator counts open columns, a squared height load, solid and cracked gray cells, numbered cells, discs that are one addition away from clearing, latent chain potential, gray discs exposed to a future clear, and clogging patterns such as adjacent 1s and triples of 2s.
- Add it up with fixed weights. Positive for open columns, ready structure and exposed covers; negative for height, buried gray discs and clogs; a flat large penalty for a modelled game over. What such a leaf evaluator can and cannot see is its own subject.
- Optionally look further. Members of this family extend step 4 in four different directions: average over the possible next discs (sparse expectimax); play the position forward with a quick policy (rollout); commit to a whole sequence of columns before seeing the discs (open loop); or weight the bad outcomes more heavily than the good ones (risk sensitive).
- Play the winning column. Ties are broken by a fixed order, so the same visible position always produces the same move.
Everything the searching members do at chance points, including averaging rather than hoping — is explained on the choice-and-chance concept page.
What happened
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.
The technical record
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:
- Engineered-feature evolution — three families of evolved one-step action scorers, all rejected. The small nonlinear network fitted 96.86% of 255 training actions but only 43.40% of 235 disjoint teacher actions, then lost its four-game screen 148,349.25 to 307,222.75 points. The phase-weight vector lost its eight-game screen 105,534.875 to 107,709.75. Both are historical 7,000-point Sequence-scored runs.
- Evolved public policy — corrected 17,000-point scoring, and the only member of this family measured under it. It improved its 128-game fitting tournament from 136,169.15 to 157,528.50 points, did not improve lower-quartile survival at all, and its best selective-search wrapper reached 272,605.13 points on eight reused fitting games. Rejected before the probe cohort was opened.
- Exact search: a three-member root-quadrature ensemble passed a four-game screen and then lost its eight-game confirmation 117,066.5 to 162,492.125 while using about three times the work per move; a fully completed extra ply with the older leaf lost its screen 124,172.25 to 149,621.25 at about 24 times the cost. Both historical 7,000-point Sequence-scored runs.
What this taught us, and what is still open
- Interpretable features earned their place as ingredients, not as policies. Height danger, reveal flow, build readiness and the timing of a rise all matter, and all of them survive inside the reference search's leaf. The strategy catalog's recommendation is to keep them as diagnostics and leaf inputs, and not to treat a higher fitting score from another weight sweep as a result without a fresh, paired gate.
- Fitting a weight vector on games is the failure mode, not the method. Every evolution run in this family found plausible directions and then lost them on games it had not been fitted to. That is the same sibling-ranking problem that later defeated much larger learned models, arriving early and cheaply.
- A whole line of this family is unfinished, not refuted. Two labs — edge priority and critical risk — are complete, gated programs with no located outcome at all. The correct label is unknown, and running them is cheap.
- Human strategy advice has never been tested properly here. The strategy catalog's sixth open direction is to turn plausible human rules — high covered discs first, watch the weakly connected edge columns, build simple three- and four-wave chains — into reflection-safe public features and test them on preserved sibling panels before letting any of them control a move. The edge-priority lab is that experiment, waiting to be run.
Approaches in this family
Play normally on a healthy board, then switch to worst-case thinking when height, crowding, or covered discs put the game at risk.
Choose one of five plans for the whole five-drop cycle, then let a model decide which plan fits the board.
Turn two claims from an experienced player into measurable evaluator changes by attacking high covered discs and distrusting edge columns.
Let a search tune board-feature weights by playing thousands of games, keeping the best weights, and repeating.
Give the weight search a larger phase-aware evaluator and optimise complete games directly, without imitation or proxy labels.
Three attempts add independent chance estimates, depth, and voters to a search. None repairs a biased board evaluation.
Clear numbered discs and open covered ones fast enough to keep the board from filling.
Decide a whole short sequence of columns in advance, judge it against many imagined disc streams at once, and play only its first move before planning again.
Judge a board by how it will look when the next row rises. The same board is more dangerous one drop from a rise than five drops away.
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.
Ranks columns partly by their worst imagined futures. Every tested risk setting trails the baseline.
Judge a column by playing twenty-five more moves under several imagined disc streams instead of scoring only the resulting board.
Look several moves ahead, but instead of considering every disc the game might deal, take a small fixed handful of representative ones, and always finish the depth you promised.
Dig a channel down beside the tall side of the board so that the dangerous gray discs high up can actually be reached and opened.
Before choosing a column, imagine dropping a few imaginary discs onto the board to see which arrangements would go off like a firework, and prefer the boards that would.