Vote splitting — two chocolates split the majority¶
Generated from vote_splitting2.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: DarkChoco
Scenario¶
Election: pick ONE dessert for the party. 360 voters.
220 of the 360 are chocolate lovers — a clear 61% majority. But there are TWO chocolates on the menu, DarkChoco and MilkChoco, and 140 voters prefer Vanilla.
Under Choose-One Plurality each voter may name only one flavor, so the chocolate majority splits its vote — 120 for DarkChoco, 100 for MilkChoco — and Vanilla wins with just 140 of 360 (38.9%), a dessert a 61% majority actively dislikes. That is vote splitting / the spoiler effect.
STAR fixes it without asking chocolate to drop a flavor: every voter scores all three 0–5, so a chocolate lover can give BOTH chocolates a high score instead of choosing between them. The two highest totals advance to an automatic runoff, and the winner has majority support head-to-head.
Parameters (from the YAML)¶
blocs:
Chocolate: [DarkChoco, MilkChoco]
Ballots¶
The ballots as marked — the filled bubble is the score given, and the score is the number in its column:
| # | Ballot as marked | DarkChoco | MilkChoco | Vanilla |
|---|---|---|---|---|
| 1 | ![]() |
5 | 4 | 0 |
| 2 | ![]() |
4 | 5 | 0 |
| 3 | ![]() |
2 | 1 | 5 |
The same ballots as the file records them:
Row 1 = candidate names; each later row is one voter's 0–5 scores (a N × prefix = N identical ballots).
Count:DarkChoco,MilkChoco,Vanilla
120:5,4,0 # love dark, like milk, no vanilla
100:4,5,0 # love milk, like dark, no vanilla
140:2,1,5 # love vanilla, mild on chocolate
What the engine says¶
The count, step by step — the rounds and how the winner is reached:
[Divergence from STAR]
STAR = DarkChoco
Choose-One (Plurality) = Vanilla (differs from STAR)
[Vote-splitting check]
Choose-One first choices: Vanilla 140, DarkChoco 120, MilkChoco 100
Plurality winner: Vanilla (140, 38.9%)
Bloc 'Chocolate' = DarkChoco, MilkChoco: combined 220 (61.1%); winner Vanilla is OUTSIDE it.
=> VOTE SPLITTING: the 'Chocolate' bloc is an outright majority (220 vs
Vanilla's 140) but split across 2 candidates, so Vanilla won Choose-
One. STAR elected DarkChoco.
--- STAR Voting Method (single winner) ---
[STAR Voting]
Tabulating 360 ballots.
Count × DarkChoco,MilkChoco,Vanilla
140 × 2, 1, 5
120 × 5, 4, 0
100 × 4, 5, 0
[STAR Voting: Scoring Round]
The two highest-scoring candidates advance to the next round.
DarkChoco -- 1280 -- First place
MilkChoco -- 1120 -- Second place
Vanilla -- 700
DarkChoco and MilkChoco advance.
[STAR Voting: Automatic Runoff Round]
The candidate preferred in the most head-to-head matchups wins.
DarkChoco -- 260 -- First place
MilkChoco -- 100
Equal Support -- 0
DarkChoco wins.
Runoff math:
360 ballots cast
− 0 Equal Support (no preference between the two finalists)
───
360 voters with a preference (majority = 181)
DarkChoco 260 (72%) · MilkChoco 100 (28%)
[STAR Voting: Winner — STAR Voting Method (single winner)]
DarkChoco
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
| * DarkChoco | * MilkChoco | Vanilla |
-------------------------------------------------------------------------
* DarkChoco > | --- |260 - 0 - 100 |220 - 0 - 140 |
* MilkChoco > | 100 - 0 - 260 | --- |220 - 0 - 140 |
Vanilla > | 140 - 0 - 220 |140 - 0 - 220 | --- |
[Condorcet Winner]
Condorcet Winner: DarkChoco — matches the STAR winner
[Condorcet Loser]
Condorcet Loser: Vanilla — loses every head-to-head matchup — elected by Choose-One (Plurality)!
[Score Distribution] (how many ballots gave each star rating)
Score
Candidate 5 4 3 2 1 0 | Total Avg
DarkChoco 120 100 0 140 0 0 | 1280 3.6
MilkChoco 100 120 0 0 140 0 | 1120 3.1
Vanilla 140 0 0 0 0 220 | 700 1.9
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/02_Examples/cases/vote_splitting2.yaml
See also¶
More cases in this set: 02a_c3_b1_three-candidates · 02b_c3_b2_three-candidates · 03a_c3_b3_style-bullet-vote · 03b_c3_b3_1_style-protest-vote · 03b_c3_b3_2_expand_style-protest-vote · 03c_c6_b8_style-gallery · 03d_c5_b5_style-gallery-five-more · 04b_c4_b3_display-options-all · 05a_c5_b3_unanimous-ballots · 06a_c9_b3_large-field-equal-support · 06b_c9_runoff-overturns-leader · 09_c4_b100_tennessee-capital · abstentions · bv2182_tg4779_faq_runoff_reversal · bv2184_fyy886_lunch_vote · bv2187_qrw6wb_ann-bob-cal · bv2256_c8h3tb_traditional_style · bv2263_xw23m9_over_50_percent · csv_ambiguity_ex1_c4_b8 · display_options_demo · equal_support_runoff_demo · quorum_demo_c3_b6 · quorum_fail_demo_c3_b6 · same_mean_different_spread_c2_b5 · star_ala_approval · three_winners_cw_score_runoff · vote_splitting · vote_splitting3 · vote_splitting_scenario1_spoiler · vote_splitting_scenario2_bloc_leads · vote_splitting_scenario3_outsider_wins


