Skip to content

rr_tiebreaks — how Ranked Robin breaks a tie (and where engines diverge)

Ranked Robin usually just elects the Condorcet winner. This set is about the edge: what happens when Copeland scores tie, how the LH engine resolves it, and where that resolution differs from BetterVoting.

Case (page) What it shows Winner BV-backed? src
Dead heat → lot order Equal Support + ½-Copeland + the full ladder to lot Ada (by lot) No — divergent .yaml
BV2141 — all four Equal-Vote degrees a Copeland tie that survives three tiebreak degrees; only the 4th (beatpath) separates Ava (by recorded draw) Yes 3r3yf7 .yaml
BV2261 — the random tiebreak is recorded the export publishes the whole tiebreak order (perm / tieBreakOrder), stable on re-tally; two races reach the last rung by draws and by cycle Anika (both races) Yes y2fbpc draws · cycle
BV2262 — nine-way dead heat the same at 9 candidates: a nine-deep recorded order, a shuffle that really scrambles, four independent checks Boris Yes 2gvwr9 .yaml
BV2270 — rung 2, where the engines part a two-way Copeland tie broken deterministically on both sides — and to different winners: LH on total margin, BV head-to-head. No lot anywhere Birch (LH) · Alder (BV) Yes 8h4bvh .yaml

The divergence in one table:

Tiebreak ladder
LH run_ranked_robin highest Copeland score → total marginlot order (deterministic)
BetterVoting RankedRobin.ts highest Copeland scorehead-to-head (2-way only) → "random" (a seeded shuffle)

The two rungs part ways in two different situations, and the set now has one of each. In the dead-heat case the two leaders tie head-to-head as well, so BV falls through to its last rung while LH is still on its lot — the ladders differ, but both end up at a rung of last resort. In BV2270 neither engine gets that far: both stop on rung 2 with a computed answer, and the answers are different candidates. That is the sharper case — and unlike the dead heat it could be minted, because nothing about it turns on a draw. The same divergence was first caught in the wild by BV2176, the Post-it RCV example; BV2270 is the stripped-down bench version, four candidates and nine ballots.

Careful with "random", though — BV's last rung is a seeded shuffle, not a coin flip. It is deterministic on re-tally and the resulting order is published in the export as perm. BV2261 was built to confirm exactly that on a live election, and BV2141 already relies on it. What you cannot do is derive the order from the ballots — it depends on the ballot count and the race id, not on how anyone voted — which is the real reason the dead-heat case stays LH-only. Full write-up + the "cycle" wording nit: Ranked Robin tie-breaks — LH vs BetterVoting.

Concept docs: Ranked Robin (the method) · cycle resolution.

file: README.md