Skip to content

Exercise 8 — a small runoff reversal (sample solution, three candidates)

Generated from ex08_minimal_reversal_3c.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: A

Scenario

A second sample solution to the construction exercise ex08_build_a_reversal.md, with a third candidate so the finalist selection is non-trivial. Five voters: B leads the scoring round 22-15-2 on the strength of two maximal ballots plus three friendly 4s — but those three 4-givers all score A higher, so A wins the automatic runoff 3-2. The recipe visible in the ballots: give the score leader BREADTH (many mid-high scores) and the runoff winner DEPTH (a majority that ranks them on top).

Ballots

The ballots as marked — the filled bubble is the score given, and the score is the number in its column:

# Ballot as marked A B C
1 A 0–5 STAR ballot — three voters: A first, B a friendly 4: A 5, B 4, C 0. 5 4 0
2 A 0–5 STAR ballot — Voter 2: A 5, B 4, C 0. 5 4 0
3 A 0–5 STAR ballot — Voter 3: A 5, B 4, C 0. 5 4 0
4 A 0–5 STAR ballot — two voters: B first, a token point to C: A 0, B 5, C 1. 0 5 1
5 A 0–5 STAR ballot — Voter 5: A 0, B 5, C 1. 0 5 1

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).

A,B,C
5,4,0 # three voters: A first, B a friendly 4
5,4,0
5,4,0
0,5,1 # two voters: B first, a token point to C
0,5,1

What the engine says

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

[Divergence from STAR]
  STAR     = A
  Approval = B   (differs from STAR)

[Runoff Reversal]
 - Score Round Winner(s) = (B)
 - Runoff Round Winner   = (A)
  Candidate B earned the highest total score, but
  Candidate A 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 5 ballots.
Count × A,B,C
    3 × 5,4,0
    2 × 0,5,1

[STAR Voting: Scoring Round]
 The two highest-scoring candidates advance to the next round.
   B             -- 22 -- First place
   A             -- 15 -- Second place
   C             --  2
 B and A advance.

[STAR Voting: Automatic Runoff Round]
 The candidate preferred in the most head-to-head matchups wins.
   A             -- 3 -- First place
   B             -- 2
   Equal Support -- 0
 A wins.
   Runoff math:
     5  ballots cast
   − 0  Equal Support (no preference between the two finalists)
     ─
     5  voters with a preference  (majority = 3)
           A 3 (60%)  ·  B 2 (40%)

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

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
               |    * A     |   * B     |     C     |
-----------------------------------------------------
         * A > |    ---     |3 - 0 - 2  |3 - 0 - 2  |
         * B > | 2 - 0 - 3  |   ---     |5 - 0 - 0  |
           C > | 2 - 0 - 3  |0 - 0 - 5  |   ---     |

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

[Condorcet Loser]
  Condorcet Loser: C — loses every head-to-head matchup

[Score Distribution] (how many ballots gave each star rating)
                Score
Candidate  5  4  3  2  1  0  | Total   Avg
A          3  0  0  0  0  2  |    15   3.0
B          2  3  0  0  0  0  |    22   4.4
C          0  0  0  0  2  3  |     2   0.4

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/ex08_minimal_reversal_3c.yaml

See also

More cases in this set: ex01_district_combined · 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 · 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