Proportional Runoff Algorithm
On this page, I want to present an idea for a simple vote counting system producing proportional rankings. It is also possible to use the system as a replacement for STV (single transferrable vote), by using the first ranks up to the number of seats.
Design criteria
 deterministic, except for tiebreaking (no random drawing of ballots)
 easy to understand (only basic knowledge of mathematics is needed)
 invulnerability to Woodall Free Riding (it doesn't help to rank a hopeless candidate first)
 creation of an ordered list with ranks, allowing to fill vacancies later
 droop proportionality: a candidate voted by more voters than the droopquota (voters/(N+1)) reaches at least rank N
Definition
Each ballot contains an ordered list of candidates. We only consider candidates, which are stated at least on one ballot.
Let Q be a big integer constant, e.g. 1000000. Proceed as follows:
 All candidates, except those which are not stated at least on one ballot, are marked as unseated.
 All unseated candidates are marked as remaining.
 The score of all candidates is set to zero.
 For each ballot: Determine the first remaining candidate on the ballot and increase its score by one.
Ignore those ballots, which do not contain any remaining candidate.
 Repeat step 4, until at least one candidate has a score greater than or equal to Q.
 Remove all candidates with a score greater than or equal to Q from the remaining candidates.
 Repeat steps 4 through 6, as long as there is more than one remaining candidate.
 If there is one remaining candidate, then this candidate is seated, starting from the worst rank.
If there is no remaining candidate, then tiebreaking is needed between those candidates which have been removed during the last application of step 6.
 Steps 2 through 8 are repeated until all candidates but one have been seated.
 The last unseated candidate gets the seat with the best rank.
Software implementation
The following versions implement an old version of the algorithm:
Example case

Voters:
 Ballot #1: A;B
 Ballot #2: A;B
 Ballot #3: B;A
 Ballot #4: B;A
 Ballot #5: C;B
 Ballot #6: C;B
 Ballot #7: C;B
Log of counting:
No candidates without votes.
Unseated candidates: A; B; C
Scoring: A (0+333334*2=666668); B (0+333334*2=666668); C (0+333334*3=1000002>=1000000)
Remaining candidates: A; B
Scoring: A (666668+66667*2=800002); B (666668+66667*5=1000003>=1000000)
Remaining loser: A
Assigned rank #3 to: A
Unseated candidates: B; C
Scoring: B (0+250000*4=1000000>=1000000); C (0+250000*3=750000)
Remaining loser: C
Assigned rank #2 to: C
Assigned rank #1 to: B
Feedback wanted
I'd appreciate feedback on this idea (see Kontakt).
(published 20130314, updated 20130317)
Back to main page
Kontakt