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.
- deterministic, except for tie-breaking (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 droop-quota (voters/(N+1)) reaches at least rank N
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 tie-breaking 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.
The following versions implement an old version of the algorithm:
- 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
I'd appreciate feedback on this idea (see Kontakt).
(published 2013-03-14, updated 2013-03-17)
Back to main page