Skip to content

The cure — score your ally, and STAR's split disappears

Generated from 05b_residual_split_expressive-fix.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: Ada

Scenario

Same three candidates and the same factions as 05a, with one change: the Ada/Ben side actually USES the score ballot. Ada-fans still favor Ada but give ally Ben a 3; Ben-fans favor Ben but give Ada a 3. They sincerely prefer either ally to Cara.

Scores now: Ada 250, Ben 230, Cara 200. The two finalists are Ada and Ben — the opponent Cara is shut out — and the runoff keeps the seat on the majority side. Nothing about the electorate's true preferences changed between 05a and 05b; only whether voters expressed support for their ally. That is the whole point: STAR removes FORCED vote-splitting, and hands voters the tool to avoid the self- inflicted kind.

Note the [Divergence from STAR] block: Choose-One (Plurality) still elects Cara on first-choices (Ada 35, Ben 25, Cara 40) — STAR diverges and fixes the split. Deep dive: 07_Concepts/residual_vote_splitting.md

Parameters (from the YAML)

blocs:
  Allies: [Ada, Ben]

Ballots

Row 1 = candidate names; each later row is one voter's 0–5 scores (a N × prefix = N identical ballots).

Count:Ada,Ben,Cara
35:5,3,0   # Ada-fans — favorite Ada, but honestly score ally Ben a 3
25:3,5,0   # Ben-fans — favorite Ben, but honestly score ally Ada a 3
40:0,0,5   # Cara bloc (the minority side)

What the engine says

The count, step by step — the rounds and how the winner is reached:

[Divergence from STAR]
  STAR                   = Ada
  Choose-One (Plurality) = Cara   (differs from STAR)

[Vote-splitting check]
  Choose-One first choices: Cara 40, Ada 35, Ben 25
  Plurality winner: Cara (40, 40.0%)
  Bloc 'Allies' = Ada, Ben: combined 60 (60.0%); winner Cara is OUTSIDE it.
  => VOTE SPLITTING: the 'Allies' bloc is an outright majority (60 vs Cara's
     40) but split across 2 candidates, so Cara won Choose-One. STAR elected
     Ada.

--- STAR Voting Method (single winner) ---

[STAR Voting]
 Tabulating 100 ballots.
Count × Ada,Ben,Cara
   40 ×   0,  0,   5
   35 ×   5,  3,   0
   25 ×   3,  5,   0

[STAR Voting: Scoring Round]
 The two highest-scoring candidates advance to the next round.
   Ada           -- 250 -- First place
   Ben           -- 230 -- Second place
   Cara          -- 200
 Ada and Ben advance.

[STAR Voting: Automatic Runoff Round]
 The candidate preferred in the most head-to-head matchups wins.
   Ada           -- 35 -- First place
   Ben           -- 25
   Equal Support -- 40
 Ada wins.
   Runoff math:
     100  ballots cast
   −  40  Equal Support (no preference between the two finalists)
     ───
      60  voters with a preference  (majority = 31)
           Ada 35 (58%)  ·  Ben 25 (42%)

[STAR Voting: Winner — STAR Voting Method (single winner)]
 Ada

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
                 |    * Ada     |   * Ben     |     Cara    |
-------------------------------------------------------------
         * Ada > |     ---      |35 - 40 - 25 |60 -  0 - 40 |
         * Ben > | 25 - 40 - 35 |    ---      |60 -  0 - 40 |
          Cara > | 40 -  0 - 60 |40 -  0 - 60 |    ---      |

[Condorcet Winner]
  Condorcet Winner: Ada — matches the STAR winner

[Condorcet Loser]
  Condorcet Loser: Cara — 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
Ada        35   0  25   0   0  40  |   250   2.5
Ben        25   0  35   0   0  40  |   230   2.3
Cara       40   0   0   0   0  60  |   200   2.0

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 method_comparisons/split_voting/_main/05b_residual_split_expressive-fix.yaml

See also

More cases in this set: 00_plurality_vs_majority · 01_political_left_split · 02_icecream_chocolate_split · 03_lunch_veggie_vs_meat · 04_star_wars_vote_split · 05a_residual_split_bullet-voting · 06_sub_majority_not_spoiled