Skip to content

Range / Score Voting

Every voter grades each candidate on a fixed scale — canonically 0–9; the candidate with the highest total score wins. No runoff, no elimination — just add up the grades. Range is the most expressive single-mark method: Approval with more than one bit, and STAR without the runoff.

Run it: the canonical 0–9 case range_101_0to9_c3_b5.yaml (page) · the same election on STAR's 0–5 scale range_101_c3_b5.yaml (tabulated) · the Black Curtain, read as RangeThe Black Curtain, read as Range / Score voting · Engine: the Range engine (pref_voting). · Family: Approval · STAR · Majority Judgment (the same ballot, counted by the median) · fidelity ladder.

Non-EVC method. Range is what STAR improves on, so this library teaches about it rather than promoting it — it lives in other methods, not the numbered root folders. The honest comparison is the point.


How it works

The ballot is a score grid — grade every candidate independently. Here is the canonical one, from the 0–9 case: five neighbours picking a tree for Main Street, each ballot beside the numbers the file records.

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

# Ballot as marked Ash Birch Cedar
1 A 0–9 score ballot — Ash's camp — Birch a strong second: Ash 9, Birch 7, Cedar 0. 9 7 0
2 A 0–9 score ballot — Ash's camp — Cedar barely registers: Ash 9, Birch 6, Cedar 1. 9 6 1
3 A 0–9 score ballot — Cedar's camp — Birch close behind: Ash 0, Birch 8, Cedar 9. 0 8 9
4 A 0–9 score ballot — Birch edges Cedar out: Ash 1, Birch 9, Cedar 8. 1 9 8
5 A 0–9 score ballot — Birch clearly ahead of Cedar: Ash 0, Birch 9, Cedar 7. 0 9 7

Counting is a single sum: Birch 39, Cedar 25, Ash 19 → Birch wins, though nobody made it their favourite. No finalists, no rounds.

It is not a STAR ballot — two differences worth naming

A STAR ballot is a score grid too, and the two get confused constantly. What separates them on paper:

Range / Score STAR
Scale 0–9 0–5
The rungs are drawn as plain circled digits stars

Neither difference is cosmetic-only, and neither is part of the arithmetic. The stars are STAR Voting's house styleWikipedia's score-voting article uses star glyphs only for STAR and for consumer ratings (IMDb, Amazon), never for score voting generally. And 0–9 is Range's own default: that article's sample ballot runs 0–9 as circled digits with the instruction "0 is worst; 9 is best", and rangevoting.org prints rows as Andrews [0 1 2 3 4 5 6 7 8 9 NO OPINION]. (Warren Smith prefers 0–99 for expressiveness but says outright that "simpler is 0 to 9" and does not insist. rangevoting.org is advocacy-adjacent, so it is cited here for the ballot's form, not for a verdict — see how this repo sources claims.)

One thing our ballots leave off deliberately: rangevoting.org's NO OPINION column. It is genuinely canonical, but it means "leave me out of this candidate's average" — and this library's engines count a blank as a 0, which is a different rule. Drawing a column whose semantics we don't tabulate would be the same class of error as the stars, so the cases here use blank = 0 and say so.

The same election on STAR's scale

Because the difference is the paper and not the count, the same election reads fine at 0–5 — this is the 101 case, and these are exactly the marks a STAR ballot would have collected, minus the stars:

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

# Ballot as marked Amy Beth Cole
1 A 0–5 score ballot — Amy's camp — Beth a solid second: Amy 5, Beth 4, Cole 0. 5 4 0
2 A 0–5 score ballot — Amy's camp — Cole barely registers: Amy 5, Beth 3, Cole 1. 5 3 1
3 A 0–5 score ballot — Cole's camp — Beth a solid second: Amy 0, Beth 4, Cole 5. 0 4 5
4 A 0–5 score ballot — Cole's camp — Beth edges Cole out: Amy 1, Beth 5, Cole 4. 1 5 4
5 A 0–5 score ballot — Cole's camp — Beth and Cole tied at the top: Amy 0, Beth 5, Cole 5. 0 5 5

Same rule, same shape of result: Beth 21, Cole 15, Amy 11 → Beth wins. What the coarser scale costs is resolution — on 0–9 a voter can separate a 7 from a 6, and on 0–5 they cannot. That is not always harmless: compressing a 0–9 ballot to 0–5 can change who reaches STAR's runoff, and through that who wins — see scale granularity can flip the winner. Wider scales still (0–10, 0–99) work exactly the same way; our Sullivan case runs 0–10.

Where it sits in the scored family

  • Approval is Range at 1-bit resolution — grades restricted to {0, max}.
  • STAR is Range's score round + an automatic runoff. The runoff exists precisely to blunt Range's strategy problem (below).
  • So the three are one family at increasing resolution/robustness: Approval → Range → STAR. See the fidelity ladder.

Pros and cons

Pros Cons
Maximally expressive — say how much you like each candidate, independently. ⚠️ Strategy-exposed. A voter's rational play is often to give only max/min (exaggerate), which collapses Range toward Approval.
No vote-splitting / spoiler in the choose-one sense — scoring a new candidate never lowers another's score. ⚠️ Not majoritarian. A candidate a slim majority strongly prefers can lose to one a broad group mildly likes. Range fails the Majority Criterion — pushed to the extreme in Range Voting's paradoxes, where one enthusiastic grade overrules three majorities.
Precinct-summable & simple to tally — just add columns; none of RCV-IRV's round-by-round machinery. ⚠️ The scale / normalization problem. Honest voters using the scale differently — or a shifted "where's my line" — changes results (the approval-line issue, one notch up).
Monotone — more support never hurts a candidate (unlike IRV). ⚠️ Fails Later-No-Harm — grading a compromise can cost your favorite.
Passes the Equal Vote / balance test and elects the utilitarian/consensus winner. ⚠️ Scale granularity can flip the winner — see the 301 case.

The one-line summary: Range asks the richest question, but rewards exaggeration; STAR keeps Range's expressive ballot and adds a runoff to make honesty safer. Which trade-off you want is the whole debate.

A worked comparison — one electorate, four cardinal methods

Ballot data adapted, with attribution, from Brendan W. Sullivan, An Introduction to the Math of Voting Methods (2022, ISBN 978-1-958469-03-3), Examples 5.1–5.3. The numbers are reused for method comparison; all commentary below is original.

Ten voters grade four candidates A, B, C, D on a 0–10 scale. Range just sums the grades:

Total score (sum of all grades):
  C              70  ← winner
  A              61
  D              58
  B              47

C wins with 70 — not because C is everyone's favorite, but because C collected many 10s: support that's both broad and strong. Now hold those exact ballots fixed and change only the method:

Method (same ballots) Winner Why
Range / Score (mean) C — 70 pts highest total
Score, median variant (greatest-median) C — median 8.5 half the electorate gave C 8.5 or higher
STAR (score + automatic runoff) C C leads scoring at 70, then wins the runoff over A, 6–3
Approval (a 1-bit score) A in Sullivan's companion Example 5.1, A has 8 approvals to C's 7

The lesson: the cardinal ballot's resolution can change the winner. Collapse the 0–10 scale down to a single approve / don't-approve bit and A — with more approvers but fewer enthusiasts — overtakes C. Give voters room to say how much, and C's wall of 10s wins under Range, median-Range, and STAR alike. (Mean and median happen to agree here, but they needn't — some Score variants use the median precisely because a few extreme scores can't drag it the way they drag an average. Medians: A 7.0, B 5.0, C 8.5, D 5.5. For an election where they don't agree — the same ballots, Score electing one candidate and the median electing another — see MJ vs Score.)

Run it: range_sullivan_score_c4_b10.yaml (tabulated) — the range engine (pref_voting score_voting) confirms C by both the hand sum and the median cross-check. STAR on the same ballots also elects C — worked, with the how-to for running LH on a non-standard scale, in Unorthodox STAR — a scale wider than 0–5.

Ballot examples

Tabulation (the details)

Range files here are tabulated by Range / Score voting tabulation engine, which wraps pref_voting's score_voting and cross-checks it against a hand sum. Full report for the 101 case: range_101_c3_b5_RANGE_tabulated.txt.

Abridged for the lesson — not verbatim engine output
--- Range / Score Voting (single winner) ---
  Range / Score Voting 101 — highest total score wins
 Tabulating 5 ballots on a 0–5 scale (range/score: highest total wins, no runoff).

Total score (sum of all grades):
  Beth           21  ← winner
  Cole           15
  Amy            11

Cross-check — pref_voting score_voting: Beth  (✓ agrees with the hand count)

Winner — Range / Score Voting (single winner)
  Beth

file: range_voting.md