Skip to content

Equal-vote balance — where RCV-IRV fails and Ranked Robin doesn't

Runnable proof that RCV-IRV fails the Equal Vote "Test of Balance": two exactly-opposite ballots don't reliably cancel under sequential elimination. The concept and the full write-up: RCV-IRV Fails the Equal Vote Criterion. The mirror image — where opposite score ballots do cancel — is equal & opposite (STAR).

Three candidates on a line: Ada (left), Bruno (center), Cyrus (right).

File Ballots RCV-IRV Condorcet / Ranked Robin
page · balance_base_irv_c3_b9.yaml 9 Bruno (6–3) Bruno (beats Ada 6–3, Cyrus 7–2)
page · balance_plus_opposite_c3_b15.yaml 15 Ada (10–5) still Bruno (9–6, 10–5)

The only difference between the two files is three exact-opposite ballot pairs (Ada>Bruno>Cyrus + its reverse Cyrus>Bruno>Ada). Those pairs are perfectly balanced — they cancel under Condorcet/Ranked Robin/STAR, leaving Bruno the winner. But RCV-IRV counts only first-choices, so they pile onto the two extremes and none onto the center: Bruno is squeezed out and Ada wins. Balanced ballots, flipped winner — the Test of Balance failing, via center squeeze.

# see the same ballots stay Bruno under the pairwise count:
python3 STARVote_LH_tabulation_engine/starvote_larry_hastings.py 06_Other/RCV_IRV/equal_vote_balance/cases/balance_plus_opposite_c3_b15.yaml   # RCV-IRV -> Ada
# (edit voting_method to RankedRobin to see Ranked Robin -> Bruno, the Condorcet winner)