---
title: Weighting the worst outcomes at the root
family: fair-expectimax
summary: Instead of judging a column by its average outcome, judge it partly by its worst outcomes, and find that the resulting policy dies much sooner.
status: rejected
evidence: ledger-recorded
reads: public
kind: strategy
technique: risk-survival
featured: true
---
## The problem
Drop7 scores are [heavy-tailed](/learn/concepts/heavy-tails) and every game ends.
A policy that maximises the average can be buying a big average with a small
chance of dying at once, and dying at once costs everything that would have come
after. So it is natural to ask the search to be a little afraid, and to value a
column by more than the plain average over the futures it examines. What had
never been measured is what happens to the
[reference search](/approach/fair-expectimax/reference) when it is asked to be
afraid in a fixed, declared way.
## Proposed solution
Replace the average at the root with a blend of the average and the worst
outcomes. The statistician's name for "the average of the worst slice" is
conditional value at risk; this experiment used the worst 25%. With seven sampled
outcomes that slice gives full weight to the worst outcome and three-quarters
weight to the second worst, then divides by the 1.75 outcomes of tail mass. The
blend was fixed at three parts average to one part worst slice before any game
was played, and neither the coefficient nor the scenario count was retuned
afterwards.
The bet has an obvious way to fail. Being afraid of the worst sampled future is
also being afraid of building anything, because chain structure is fragile in the
moves before it fires, and a player who never builds clears less.
Everything the search reads is public. Each of the seven scenarios is
constructed from a hash of the canonical visible position, and no later decision
sees a scenario tape, the game's seed, the score, the level or the move count.
## How it works
1. At the root, take every legal column.
2. For each, construct exactly seven scenarios from a hash of the public
position. A scenario fixes only the immediate chance outcome: the next disc
and any reveal.
3. Once that outcome is on the board it is observable, so from there the
unchanged fair search completes two more of the player's moves with the
normal five chance samples at every chance point.
4. Combine the seven scenario values as `0.75 × mean + 0.25 × worst-25%` in
place of the plain mean.
5. Play the column with the best blended value. The output at every position is
one column.
## What happened
On the eight fresh games of its screen, the cautious policy lost 89,707.75 points
and 52.625 moves per game to the unchanged fair depth-3 search, and won one game
of the eight on each measure (rejected, ledger-recorded,
[ledger](/docs/research/history) section "Fair root CVaR ablation"; historical
7,000-point scoring, archival).
The flow numbers say the same thing from the other side. Clears per move, reveals
per move and the average longest chain all fell, which is what a player that
stops assembling anything looks like. The policy switched away from the ordinary
fair recommendation on 28.25% of its trajectory decisions, so the change in
behaviour was real rather than a rounding difference. Both admission means had to
improve before the confirmation cohort could open; both regressed, and it was
never read.
## What we learned
What is rejected is exact: a fixed 75/25 blend of mean and worst-25%, applied at
the root only, over seven immediate-outcome scenarios, on top of the depth-3 fair
search. Eight games is a screen and cannot resolve a small effect, but this
effect was large, it went the same way on both admission measures, and it is
legible in the flow numbers, so the configuration is closed.
What the run does not settle is whether the reference search is already cautious
in a way nobody chose. An audit of that search points out that its penalty for a
modelled game over is a flat −1,000,000, which the audit prices at 58.82 row
rises of survival ([audit 02](/docs/exploratory/audit-02-fair-d4), H2). One
modelled death among five samples therefore swamps the differences between the
options that survive, so the search minimises modelled death probability first
and maximises the board evaluation second. If that reading holds, adding explicit
downside weighting on top was pushing an already-cautious search further in the
direction it was leaning. The open question is what that one constant should be,
and calibrating it has not been run.
<AgentContext summary="Records and provenance">
Records: [experiment index](/docs/research/experiment-index) row "Root CVaR",
rejected, ledger-recorded, "score, survival, and flow all regressed";
[ledger](/docs/research/history) section "Fair root CVaR ablation".
Fresh screen cohort `0x3e9d0000...007`, eight games; confirmation cohort
`0x3e9e0000...00f`, not read. The comparator is the confirmed fair depth-3 search
with five chance samples. The single preregistered root utility is
`0.75 * mean + 0.25 * CVaR25`.
</AgentContext>
<AgentContext summary="Full results table">
Eight-game fresh screen, historical 7,000-point Sequence scoring, archival:
| Arm | Mean score | Mean moves | Clears / move | Reveals / move | Mean max chain |
| --- | ---: | ---: | ---: | ---: | ---: |
| Fair depth 3 (reference) | 176,819.75 | 114.125 | 2.043 | 1.141 | 7.875 |
| Root risk blend | 87,112 | 61.5 | 1.730 | 0.945 | 5.125 |
Paired change −89,707.75 points and −52.625 moves; one win and seven losses on
both measures; neither cohort censored. The policy switched away from the local
fair recommendation on 28.25% of trajectory decisions. Policy work 53,423 units
per move against 55,674 for the reference; the optional switch audit added
another 50,333 units per move and is not part of the deployable policy. Peak
resident memory 3,948,544 bytes; 30.7 wall seconds.
</AgentContext>
<AgentContext summary="Validity, gates and limitations">
The admission gate required both means to improve. Both regressed by a wide
margin, so `0x3e9e0000...00f` was not read, and the coefficient and scenario
count were left as preregistered. Eight games is a screen: it can catch a
regression this size and it certifies nothing about a small one.
Verification: strict `-Werror`, ASan/UBSan, frozen fair-search parity,
deterministic scenario values, fractional-tail arithmetic, reflection, metadata
blindness, game-seed exclusion, legality, and resource-bound tests all passed.
The [audit 02](/docs/exploratory/audit-02-fair-d4) H2 arithmetic behind the open
question: `terminalUtility` is −1,000,000, equal to 58.82 row rises, 294.1 moves
of survival, and 3.24× the entire 64-game mean of 308,295.578 recorded for the
reference search.
</AgentContext>
<AgentContext summary="Scoring mode">
The screen ran under historical 7,000-point Sequence scoring, archival, so its
absolute point totals are not corrected 17,000-point Hardcore evidence and are
not compared with corrected figures elsewhere on this site. Both admission means
regressed in the same direction, so this is one of the ledger rejections that a
rescoring to corrected Hardcore rules would strengthen rather than reverse:
[audit 03](/docs/exploratory/audit-03-claim-arithmetic) checked every 7,000-point
paired comparison for a sign change and found only two, and this is not one of
them.
</AgentContext>