Exercise 1 — Two districts, one mayor: the COMBINED city¶
Generated from ex01_district_combined.yaml — do not edit by hand. Regenerate: python STARVote_LH_tabulation_engine/tools_adam/scripts/build_yaml_pages.py.
Method: STAR (single winner) · 1 seat · Expected winner: Carmen
▶ Live on BetterVoting: vote · results ↗ (election 923q3d · test BV2190).
Scenario¶
All 18 ballots — West and East together. Both districts separately elect Avery, but combined the runner-ups change: Blake (33) only exists in West and Diego (33) only in East, while Carmen scores 32 in BOTH — so citywide it is Avery 70 vs Carmen 64 in the runoff, and Carmen wins it 10-8 head-to-head. STAR fails the CONSISTENCY criterion: winning every district does not guarantee winning the whole. (Note this is NOT a summability failure — score totals and the preference matrix still add across precincts; what you cannot add is each district's declared winner.) Part 3 of 3 of the consistency exercise (ex01_two_districts.md). Ballots adapted from a RangeVoting.org example, posed as an exercise in Brendan W. Sullivan, "An Introduction to the Math of Voting Methods" (2022), ch. 5. Live on BetterVoting (Test ID BV2190): https://bettervoting.com/923q3d/results — the election carries a second, Ranked Robin race on the same opinions (equal ranks allowed): Elena, the citywide Condorcet winner, wins it 4-0.
Ballots¶
Row 1 = candidate names; each later row is one voter's 0–5 scores (a N × prefix = N identical ballots).
Avery,Blake,Carmen,Diego,Elena
3,3,4,0,5 # 5 West voters: Elena first, Carmen second, Avery = Blake
3,3,4,0,5
3,3,4,0,5
3,3,4,0,5
3,3,4,0,5
5,5,3,0,0 # 3 West voters: Avery = Blake at the top, Carmen third
5,5,3,0,0
5,5,3,0,0
5,3,3,0,0 # 1 West voter: Avery over Blake
3,0,4,3,5 # 5 East voters: Elena first, Carmen second, Avery = Diego
3,0,4,3,5
3,0,4,3,5
3,0,4,3,5
3,0,4,3,5
5,0,3,5,0 # 3 East voters: Avery = Diego at the top, Carmen third
5,0,3,5,0
5,0,3,5,0
5,0,3,3,0 # 1 East voter: Avery over Diego
What the engine says¶
The count, step by step — the rounds and how the winner is reached:
[Divergence from STAR]
STAR = Carmen
Choose-One (Plurality) = Elena (differs from STAR)
RCV-IRV = Elena (differs from STAR)
Approval = Avery (differs from STAR)
RCV-RR (Condorcet) = Elena (differs from STAR)
Note: 18 of 18 ballots (100%) had equal non-zero scores, so their ranks
were decided by candidate priority order. The RCV-IRV result may be
an artifact of score-to-rank tie-breaking rather than a deep
difference.
Note: Ranked Robin (RCV-RR) sides with RCV-IRV, so STAR is the outlier
here — STAR need not elect the Condorcet candidate.
Full round-by-round reports (generated for review):
RCV-IRV rounds: cases_tabulated/ex01_district_combined_RCV-IRV_tabulated.txt
RCV-RR round-robin: cases_tabulated/ex01_district_combined_RCV-RR_tabulated.txt
[Runoff Reversal]
- Score Round Winner(s) = (Avery)
- Runoff Round Winner = (Carmen)
Candidate Avery earned the highest total score, but
Candidate Carmen won the automatic runoff — not a malfunction,
STAR working as designed: the runoff elects the finalist preferred
by the majority (of voters with a preference).
--- STAR Voting Method (single winner) ---
[STAR Voting]
Tabulating 18 ballots.
Count × Avery,Blake,Carmen,Diego,Elena
5 × 3, 3, 4, 0, 5
5 × 3, 0, 4, 3, 5
3 × 5, 5, 3, 0, 0
3 × 5, 0, 3, 5, 0
1 × 5, 3, 3, 0, 0
1 × 5, 0, 3, 3, 0
[STAR Voting: Scoring Round]
The two highest-scoring candidates advance to the next round.
Avery -- 70 -- First place
Carmen -- 64 -- Second place
Elena -- 50
Blake -- 33
Diego -- 33
Avery and Carmen advance.
[STAR Voting: Automatic Runoff Round]
The candidate preferred in the most head-to-head matchups wins.
Carmen -- 10 -- First place
Avery -- 8
Equal Support -- 0
Carmen wins.
Runoff math:
18 ballots cast
− 0 Equal Support (no preference between the two finalists)
──
18 voters with a preference (majority = 10)
Carmen 10 (56%) · Avery 8 (44%)
[STAR Voting: Winner — STAR Voting Method (single winner)]
Carmen
Full audit — preference matrix, Condorcet, and score distribution¶
--- Runoff (Preference) Matrix ---
Head-to-head / pairwise comparison
Legend: For - Equal Support - Against
* indicates Top 2 Finalist
| * Avery | Blake | * Carmen | Diego | Elena |
-----------------------------------------------------------------------------------------
* Avery > | --- |10 - 8 - 0 | 8 - 0 - 10 |10 - 8 - 0 | 8 - 0 - 10 |
Blake > | 0 - 8 - 10 | --- | 3 - 1 - 14 | 9 - 0 - 9 | 4 - 4 - 10 |
* Carmen > | 10 - 0 - 8 |14 - 1 - 3 | --- |14 - 1 - 3 | 8 - 0 - 10 |
Diego > | 0 - 8 - 10 | 9 - 0 - 9 | 3 - 1 - 14 | --- | 4 - 4 - 10 |
Elena > | 10 - 0 - 8 |10 - 4 - 4 |10 - 0 - 8 |10 - 4 - 4 | --- |
[Condorcet Winner]
Condorcet Winner: Elena — STAR elected Carmen instead (Elena was eliminated in the scoring round)
[Condorcet Loser]
No strict Condorcet loser; jointly weak Condorcet losers: Blake, Diego (winless — pairwise ties)
[Score Distribution] (how many ballots gave each star rating)
Score
Candidate 5 4 3 2 1 0 | Total Avg
Avery 8 0 10 0 0 0 | 70 3.9
Blake 3 0 6 0 0 9 | 33 1.8
Carmen 0 10 8 0 0 0 | 64 3.6
Diego 3 0 6 0 0 9 | 33 1.8
Elena 10 0 0 0 0 8 | 50 2.8
Everything in one file: the _tabulated mirror (regenerated on every run; every analysis forced on).
Run it yourself:
python STARVote_LH_tabulation_engine/starvote_larry_hastings.py 01_STAR/05_Practice/cases/ex01_district_combined.yaml
See also¶
- Methods disagree on this election — its entry in the divergence review ledger
- Summability (topic hub)
- Condorcet efficiency (topic hub)
- Runoff reversal (worked set)
- Glossary · all cases by method
More cases in this set: ex01_district_east · ex01_district_west · ex02_bella_exits · ex02_nine_ballots · ex02_tenth_ballot · ex03_five_verdicts · ex04_olympics_1994 · ex05_center_squeeze · ex06_bullet_backfire · ex06_bullet_honest · ex07_vanishing_votes · ex08_minimal_reversal_2c · ex08_minimal_reversal_3c · ex09_game_night_cycle · ex10_generous · ex10_reticent · ex11_spoiler_added · ex11_two_way_base · ex12_bloc_sweep · ex12_proportional_share · ex13_approve3 · ex13_approve4 · ex13_bullet · ex13_opinions · ex14_two_novels · ex14_two_novels_fullranks · ex15_approval_pairwise · ex15_approval_yes_no · ex15_score_profile