Cycle resolution, counted — where the Condorcet family stops agreeing¶
The tabulatable evidence behind Cycle Resolution — why Minimax, Ranked Pairs, and Schulze exist. When a Condorcet winner exists, every Condorcet method elects them and there is nothing to argue about. When majority preference cycles, the family splits — and these elections are the split, made runnable.
All are LH-only: the LH engine's Ranked Robin is Copeland, and in a cycle Copeland usually ties. LH breaks that tie by Ranked Robin's published degrees of ties — 1st Degree (margins among the finalists), then 2nd Degree (margins over the field), then lot — while BetterVoting has a rung only for a two-way tie and sends anything larger to a seeded shuffle nobody can derive from the ballots. A tie decided that way can't be frozen on BV, so these cases stay in the library.
Two of the Ranked Robin winners on this page changed on 2026-08-19, when the engine gained the 1st Degree rung it had been missing; both were two-way ties in which the old engine elected the candidate who had lost the finalists' own match. The rows below are current.
The last two rows are one election counted twice — 999 ballots converted from an outside engine's published cast vote record, which is why they break this folder's usual keep-it-small rule. See RCV Lab for where the data came from and what was verified against it.
| Case (source) | Ballots | What it shows |
|---|---|---|
page · cycle_copeland_ties_c4_b21.yaml |
21 | Copeland ties Alder, Birch, Cedar at 2–1 each — the simple count can't pick. All four refined rules then agree on Alder, whose only defeat (margin 1) is the mildest in the cycle. |
page · cycle_schulze_vs_ranked_pairs_c4_b40.yaml |
40 | The two "serious" cycle-resolvers disagree outright: Schulze elects Ana, Ranked Pairs elects Bruno, on identical ballots. Split Cycle returns both, on the grounds that the ballots don't separate them. Copeland ties Ana and Bruno too; Ranked Robin's 1st Degree reads their own match — Bruno by 4 — and sides with Ranked Pairs. (It said Ana until 2026-08-19.) |
page · cycle_family_splits_c5_b77.yaml |
77 | Five candidates, Smith set = everyone, no Condorcet winner. Minimax, Schulze and Stable Voting pick Ava; Ranked Pairs picks Ben, and so does Ranked Robin — Copeland ties the two at three wins, and the 1st Degree reads the match they played, which Ben won 40–37. Split Cycle returns both. (Ranked Robin said Ava until 2026-08-19: Ava's whole-field margin is +76 to Ben's +24, which is the 2nd Degree question and not the one the protocol asks first.) Replaces an earlier unsourced "Heitzig" profile — this one is search-built and pref_voting-verified. |
page · cycle_vote_on_the_rule_rr_c5_b999.yaml |
999 | The candidates are the cycle-breaking rules, and the ballots cycle. Minimax, Ranked Pairs, Schulze, Split Cycle, Stable Voting and RCV-IRV are unanimous for Ranked Pairs — Schulze and Minimax each voting for a rival over itself. Only Copeland's Rule can't decide (all three go 3–1), so Ranked Robin's 1st Degree tiebreak lands on Schulze Method instead (+103 among the three finalists). Converted from RCV Lab's published CVR. |
page · cycle_vote_on_the_rule_irv_c5_b999.yaml |
999 | The same ballots as an RCV-IRV count, kept as the fidelity check: every tally reproduces RCV Lab's published report. Winner Ranked Pairs on 492 — a majority of the 886 ballots still live, and 49.2% of the 999 cast. |
Running them¶
The LH engine tabulates the Copeland/Ranked Robin column and writes the _tabulated mirror:
python STARVote_LH_tabulation_engine/starvote_larry_hastings.py method_comparisons/cycle_resolution/cases/cycle_schulze_vs_ranked_pairs_c4_b40.yaml
The other five rules have no LH implementation. This repo tool prints them all at once, via pref_voting:
uv run STARVote_LH_tabulation_engine/tools_adam/pref_voting_tabulation_engine/cycle_resolution_report.py method_comparisons/cycle_resolution/cases/cycle_schulze_vs_ranked_pairs_c4_b40.yaml
Pairwise margins (winner's margin over loser):
Bruno beats Ana by 4
Ana beats Chloe by 18
Ana beats Diego by 12
Bruno beats Chloe by 18
Diego beats Bruno by 10
Chloe beats Diego by 12
Condorcet winner: NONE — majority preference cycles.
Smith set: Ana, Bruno, Chloe, Diego
Winners by method:
Copeland (= Ranked Robin) [C1] Ana, Bruno
Minimax [C2] Ana
Ranked Pairs [C2] Bruno
Schulze (beat path) [C2] Ana
Split Cycle [C2] Ana, Bruno
Stable Voting [C2] Ana
The [C1] / [C2] tags are Fishburn's classification: C1 rules read only who-beat-whom, C2 rules read the margins too.
Concept pages: cycle resolution · Split Cycle, claim-checked · Ranked Robin · Smith set · up: method_comparisons