Drop7 Research
heuristic-search

Edge priority

unknownevidence: repository-verifiedpublic information

Test the two things an experienced human player actually says about this game — attack the high covered discs, and distrust the edge columns — as measurable changes to one term in the evaluator.

Test the two things an experienced human player actually says about this game — attack the high covered discs, and distrust the edge columns — as measurable changes to one term in the evaluator.

unknownevidence: repository-verifiedpublicreads only what a player can see

The intuition

Nearly every strategy in this repository was invented by someone reading code. There is one source of ideas that was not: the strategy notes of an experienced human player, who recommends prioritising high covered discs and watching the less-connected edge columns in this mode. The author explicitly warns that the advice may be wrong or luck-dependent, and the strategy catalog labels it anecdotal hypotheses, not evidence.

The two claims have a mechanism behind them that a program can express:

  • Altitude. A covered disc that is high up is close to the ceiling and has few moves left before a rise pushes it higher. The evaluator already charges for that as the square of its height — so the question is whether the true penalty is steeper than square.
  • Edges. A disc in column 0 or column 6 has only one horizontal neighbour, so there is one fewer direction from which a clearing disc can reach it. The evaluator already applies a 1.3× multiplier there — so the question is whether it should be larger.

The lab isolates exactly those two constants. Nothing else about the policy changes.

How it works, step by step

  1. Take the reference behaviour policy unchanged — a bounded expectimax with the phase-safety evaluator, the same one used as the behaviour policy in other experiments.

  2. Replace one term of its evaluator, the cover-potential term, with a parameterised version: penalty proportional to height raised to the altitude exponent, times an edge multiplier on the outer columns.

  3. Play six profiles on paired games — the same seeds for all six, so the comparison is game by game:

    ProfileAltitude exponentEdge multiplier
    baseline (the unchanged reference term)2.01.3
    edge22.02.0
    edge32.03.0
    edge42.04.0
    altitude33.01.3
    altitude3-edge33.03.0
  4. Screen on eight games, then confirm the winner on eight fresh games, reporting paired score and move differences, clears and reveals per move, board clears and search work for each profile.

The design is a clean single-variable experiment: the edge rows isolate the edge claim, the altitude row isolates the altitude claim, and one joint row tests them together.

What is known, in plain English

That the program exists, that it builds, and that it checks itself. Its self-test verifies that the baseline profile reproduces the unchanged reference potential exactly, that its action matches the reference behaviour policy's action, that decisions are deterministic and legal, and that a mirrored board produces the mirrored column. It reads only the visible board, the next disc and the rise clock.

What is not known is anything at all about the six profiles' performance.

The technical record

The experiment index records this as unknown, repository-verified: "no ledger or task-record outcome was located." Repository-verified means the source is present and its purpose can be established from reading it; it is explicitly not a claim that a run occurred.

Repository-verified from the source: edge-priority-lab.cpp defines six CoverProfile entries with the comment "Adam Saltsman's two rules are isolated by the edge-only rows, the altitude-only row, and one joint row. The reference profile is the internal control and remains unchanged outside this executable." Screen and confirmation cohorts are eight games each, from 0x3d700300… and 0x3d700400… respectively, at a 500-move cap. Profile selection prefers the larger paired mean score difference and breaks ties on paired mean move difference. Output is per-profile JSON including every game's score and move count.

Eight games is a small cohort. Even a completed run of this lab would be a screen, not a confirmation of anything.

The anecdotal source is described in the strategy catalog, which links the player's notes and labels them explicitly as hypotheses.

What this taught us, and what is still open

  • This is the cheapest unfinished experiment in the family. Sixteen games of a bounded search, two constants, a self-test that already passes. If the reader is looking for something small and real to do, this is it.
  • A negative here would be worth as much as a positive. The strategy catalog's sixth open direction is precisely to convert human strategy advice into reflection-safe public features and test them, because that is more informative than copying a human rule into a policy. Either answer settles something.
  • The related terms are scattered. An edge multiplier of 1.65 appears in the fertile evaluator inside policy comparison, and an edge-specific cover penalty appears in tunneling. Neither has been isolated to a gate. This lab is the one that would do it.

Source files

  • README.mdx
  • edge-priority-lab.cpp