Minneapolis 2017 — the big real election where RCV-IRV got it right¶
Level: 201 · for debaters
The honest counterweight to Burlington 2009. Same investigation, opposite verdict: 105,928 real ballots, 18 candidates plus write-ins, and every count in this library names the same mayor.
| Count | Winner |
|---|---|
| Choose-One Plurality (= round 1 first choices) | Jacob Frey — 26,104 |
| RCV-IRV (the rule actually in force) | Jacob Frey — won the final 46,704–34,970 |
| Any Condorcet count (Ranked Robin here) | Jacob Frey — beats all eighteen rivals head-to-head, 18–0 |
There is no center squeeze here, no cycle anywhere in the tournament, and no argument about who should have won. A repo that reproduces Burlington and Alaska 2022 has to reproduce this too, or it is prosecuting rather than teaching — the rarity of the failure cases is part of the evidence, and this is what the ordinary case looks like at full scale.
What happened under RCV-IRV¶
ROUND 1 PENULTIMATE FINAL
Frey 26104 Frey 39356 Frey 46704 Elected
Hoch 20122 Dehn 27357 Dehn 34970
Hodges 18905 Hodges 26865 out
Dehn 18100
Levy-Pounds 15715 Blank Votes 10906 Blank 22810
(+ 14 others)
Frey leads from the first count and is never headed. Plurality would have named the same winner — worth saying plainly in a library that criticises Plurality, because on this electorate the ranking changed nothing about the outcome.
The number that still deserves an asterisk¶
Frey finishes on 46,704 of the 81,674 ballots still live — 57.2% of those, and 44.1% of the 105,928 people who actually voted. By the last round 24,254 ballots are out of the count (22,847 exhausted, 1,369 blank, 38 truncated).
That is not apathy, it is arithmetic: Minneapolis allowed three rankings against eighteen candidates, so a voter who ranked three of the also-rans had no legal way to reach the final pair. Cite the 57.2% and the 44.1% together or neither — see exhausted ballots.
Where the count and the electorate do come apart¶
RCV-IRV got the winner right and the runner-up wrong.
by head-to-head strength Frey > Hodges > Hoch > Dehn > Levy-Pounds
IRV's last one standing Frey, then ... Raymond Dehn
Dehn is the fourth-strongest of the five, yet he is the one left in the final pair — Hodges and Hoch were eliminated before him on first-choice counts, though both beat him head-to-head:
| Head-to-head | ||
|---|---|---|
| Betsy Hodges beats Raymond Dehn | 37,513 | 35,133 |
| Tom Hoch beats Raymond Dehn | 40,644 | 36,737 |
So "runner-up" under RCV-IRV means last one eliminated, not second-strongest, and the reported final margin overstates Frey's lead over his strongest challenger: he beats Hodges by 8,122 but Dehn by 11,734. This costs the method nothing on the winner and should not be inflated into a scandal — it is the ordinary consequence of eliminating on first choices, and it is exactly what a round-robin table is for.
The full tournament is a perfect transitive staircase — 18–0, 17–1, 16–2, all the way to 0–18, with the Smith set a single name. Real electorates are not obliged to be this tidy; this one was.
The cases¶
| Case (source) | Ballots | What it shows |
|---|---|---|
page · minneapolis_2017_irv.yaml |
105,928 | The instant runoff as it was actually counted, reproduced from the city's CVR. Frey elected; the exhaustion and the moving majority bar are the lesson. |
page · minneapolis_2017_ranked_robin.yaml |
105,928 | The same ballots head-to-head. Frey is the Condorcet winner 18–0 — and the runner-up gap above is visible on sight. |
Provenance, and how the ballots were converted¶
The CVR comes from RCV Lab, which publishes it with the city's RCTab rules file:
curl -O https://rcv-lab.org/sample-data/minneapolis-mayor-2017/2017_minneapolis_mayor_cvr.xlsx
It is an ESS export — precinct, then three rank columns, then a count — with undervote, overvote and UWI labels. The conversion applies the published rules exactly: an overvote skips to the next rank rather than killing the ballot (269 ballots), a repeated candidate is ignored rather than exhausting (4,213), and a second consecutive skipped rank truncates the ballot there. That last rule sounds brutal and almost never is — of 13,456 ballots that hit it, 13,418 were trailing blanks with nothing after them, and only 38 actually discarded a later choice.
Four independent numbers confirm the conversion, none of them used to build it: the five leading first-choice tallies, the 1,369 blank ballots, that 38, and the final pair 46,704 / 34,970 — all match the published report. pref_voting separately confirms Frey as the unique Copeland winner (AGREE ✓).
Two honest discrepancies, both bookkeeping rather than result:
- Round numbering. The source reports six rounds, clearing write-ins alone and then thirteen candidates at once; this engine batch-eliminates on its own schedule and takes more rounds to get there. Every tally that appears in both reports is identical, including all four of the last rounds.
- Exhausted totals differ by 37 out of 105,928 (0.03%) — an accounting boundary about which ballots count as exhausted and when. It was not chased down, and it moves no margin here: the smallest gap at stake is 1,196 votes.
Running them¶
python STARVote_LH_tabulation_engine/starvote_larry_hastings.py method_comparisons/minneapolis_2017/cases/minneapolis_2017_ranked_robin.yaml
uv run STARVote_LH_tabulation_engine/tools_adam/pref_voting_tabulation_engine/ranked_robin_report.py method_comparisons/minneapolis_2017/cases/minneapolis_2017_ranked_robin.yaml
Related: Burlington 2009 · Alaska 2022 · exhausted ballots · Condorcet efficiency · RCV Lab · up: method_comparisons.