This is a review of the technical details of Single Transferable Vote. For an overview, see Benefits.
If you want to learn more about the generic (non-Santa Clara specific) system, you can read the Wiki page. Alternatively, CPG Grey has a good video visualizing the system.
Single Transferable Vote starts with using a single, multi-winner election to select your representatives. In the case of Santa Clara, this means all six council-members will be selected out of a single election every four years.
Ranked Choice Balloting is used, which allows voters to rank candidates in order of preference. Voters may rank as many or as few candidates as they like.
For the sake of simplicity, our proposal also uses the Ranked Choice Balloting for other elections in the city, such as Mayor or Chief of Police, but in those elections only a single winner is selected.
Once all cast ballots have been collected, they go through a simple iterative counting algorithm.
Each candidate starts a 'keep percentage' or keep weight of 100%, which means they keep all of the first-choice votes assigned to them.
The ballots are counted, and a 'Winning Vote Quota' is established. If enough candidates have met the quota, the election is over.
Otherwise, Overvoting is handled by iteratively reducing winning candidates keep so they have just enough votes to win. If enough candidates have met the quota, the election is over.
Otherwise, Split Voting is handled by eliminating the lowest performing candidate (setting their keep percentage to 0) and recounting.
Both handling Overvoting and Split Voting might result in Exhausted Votes, which are accounted for by adjusting the Winning Vote Quota
Simply put, how many votes are needed to win. To find this, we use the following definition:
The least number of votes where, in as many candidates got that many votes as there are open seats, it is impossible for another candidate to get to that many votes.
For a 24,000 voter election, to a council of six seats, this number is 3,429. If six candidates reach 3,429, there is not enough votes left for a seventh to reach the quota. Those six are elected.
The formula is:
VoteQuota = floor(ValidVotes / Seats + 1) + 1
Overvoting can cause less than the required number of candidates meeting the vote quota. This can be illustrated by imaging a candidate in a six member 24,000 voter city, that manages to get half (12,000) of the votes. While the candidate clearly wins, his supporters have only selected a single candidate even though they control half of the votes. Further, there is now no way for five additional candidates to get to 3,429.
This is solved by allowing the candidate to keep just the number of votes she needs to win (3,429) and let the rest of the votes (8,571) flow to those voters second choice candidate.
Calculating the number of excess votes is easy: Simply subtract a the Quota from a winning candidates votes.
Since each voter may have a different second choice vote, the winning candidate keeps a fraction of each vote cast for her.
IncomingVotes * Weight= Quota
or
WinningWeight = Quota / IncomingVotes
In the above example, you get:
WinningWeight = 3429 / 12000
WinningWeight = .285
This means that .285 votes (28.5%) of each vote for the winning candidate is kept with that candidate, and the remaining .715 votes is forwarded to that voters second choice.
Overvoting can cause less than the required number of candidates meeting the vote quota. This can be illustrated by imaging ten candidate in a six member 24,000 voter city, each getting roughly 2,400 votes. No candidate is going to get to 3,429
In this case, the vote is handled in an instant runoff fashion: The candidate with the fewest votes is eliminated, and voters for that candidate have their votes flow to the next choice on their ballot. There is no real math in this: Ballots are treated as if the eliminated candidate is not on it.
When adjusting for Overvoting or Split Voting, you can end up with exhausted votes. An exhausted vote can happen if a voter does not rank all candidates on the ballot. Should everyone a voter has ranked either been elected or eliminated, the remainder of their vote is exhausted and has no impact on deciding between the candidates you did not rank.
Exhausted Votes are handled by adjusting the Winning Vote Quota, reducing the number of ValidVotes by the number of Exhausted votes.
NumberOfSeats = 6
//Each Candidate starts with Candidate.keepWeight = 1 and Candidate.Status = Status.Hopeful
Candidates = {list of all candidates}
while true:
VoteTally = countVotes(Candidates)
RoundValidVotes = VoteTally.TotalVotes - VoteTally.ExhaustedVotes
WinningVoteQuota = floor ( RoundValidVotes / (NumberOfSeats + 1)) + 1
for each Candidates with Status.Hopeful:
if VoteTally.total(Candidate) > WinningVoteQuota:
Candidate.Status = Status.Elected
if count(Candidates with Status.Elected) < NumberOfSeats:
exit;
// If not enough winners, handle Overvoting
MovedVotes = 0
for each Candidate with Status.Elected:
OldVotes = Candidate.keepWeight * VoteTally.total(Candidate)
Candidate.keepWeight *= WinningVoteQuota / VoteTally.total(Candidate)
NewVotes = Candidate.keepWeight * VoteTally.total(Candidate)
MovedVotes += OldVotes - NewVotes
// If handling Overvoting is not making a significant change in the count, handle split voting
if MovedVotes < 1:
Find Candidate with Status.Hopeful with least VoteTally.total(Candidate):
Candidate.Status = Status.Eliminated
Candidate.keepWeight = 0
This is best illustrated by following a single vote through the counting process.
Imagine a city with 24,000 votes in the municipal election. There are 10 candidates running for the six seats.
ValidVotes = 24000
Then, a quota is established. This is the minimum number of votes needed where, if six candidates achieved that number of votes, it would be impossible for a seventh to do so. To do this, you divide the total number of valid votes by 7 and add 1.
VoteQuota = ( ValidVotes / 7 ) + 1 or
VoteQuota = 3429
We then look at the first round tally. If someone is above the vote quota, then are declared a winner, excess votes are redistributed, and we continue onto the second round. If no-one is above the quota, the lowest vote getter is eliminated and their votes redistributed.
Round 1 Count.
As you can see, both Dolphin and Cheetah have enough votes to win. Thus, we leave them with enough votes to pass the quota and let the rest flow to their next choice
Dolphin and Cheetah are both reduced to the quota, with their additional votes flowing to the next choice. Note that because some of Dolphin's votes picked Cheetah as their second choice, Cheetah remains above the quota, this will be handled in Round 2.
Since both Dolphin and Cheetah have won, they are considered elected using 3,429 votes each. The remaining votes flow to their next choice candidate. However, since the voters have different candidates as their second choice, we cannot merely consume some of the votes. Instead, we weigh the votes.
We plug this into the algorithm:
Candidate Votes * x = Quota
For Dolphin, who has 16,000 votes but only needs 3,429, that is:
16000 * x = 3429
x = 3429 / 1600
x = .214
Thus, 21.4% of each vote for Dolphin is retained to elect Dolphin, while the remaining 78.6% of each vote flows to their second choice candidate.
If Dolphin's voters second choice candidate are: 50% Wolf, 30% Horse, 10% Centaur, 10% Cheetah, that means wolf gets an additional 6288 votes, Horse gets an additional 3772.8 votes, and Cheetah and Centaur get an additional 1257.6 Votes
Cheetah didn't have as many overvotes, so they retain 85.7% of all votes cast. The rest of their votes flow to their second choice candidate. Conveniently, Cheetah and Tiger Campaigned together, so all of Cheetah's voters put Tiger as their second choice. Tiger gains 571 Votes
y = 3429/ 4000
y = 85.7%
In Round 2, Wolf and Horse have passed the Quota. Further, Cheetah, who has already won, picked up additional votes when voters for the other winning candidate Dolphin. Wolf and Horse are declared elected, and excess votes from Wolf, Horse, and Cheetah are passed to their next choice candidate.
Tiger and Unicorn have passed the quota, and are elected, giving us 6 members. All remaining votes put together could never reach the quota of 3,429.
Since the excess votes on Dolphin put both Wolf and Horse over, excess votes on them has to move to the voters next choice.
Wolf has 6,788 votes but only needs 3,429 votes. As before, we calculate:
6788 * x = 3429
x = .5052
So 50.52% of each vote to Wolf are kept on wolf and the rest are moved forward. That means each of Wolf's original 500 voters moves leaves .505 votes with Wolf and gives .495 to their second choice candidate. For this, we assume all of wolf's voters vote Unicorn, so 247.42 votes move to Unicorn
Wolf also has 6,288 votes that originally voted for Dolphin (8,000 voters who each provided .786 votes to Wolf). Those voters leave 50.52% with wolf, and the rest flow to their third choice vote, meaning they have 21.4% of their vote used for Dolphin (Their first choice vote), 39.7% of their vote used for Wolf (Their second choice), and 38.9% going to their third choice.
If their third choice was all also Unicorn, Unicorn gains 3,112.56 votes from voters who voted Dolphin - Wolf - Unicorn, for a total gain of 3360.06
Horse plays out in a similar fashion, but all of her voters 2nd choice (for those who voted for her first) or third choice (for those who voted Dolphin - Horse) went to Centaur, giving Centaur 743.8 additional votes.
Cheetah, who has already won, ended up with more votes by being the next choice for someone else who won. This means they need less votes from each voter to maintain their quota. This can be done easily by:
First, reduce the new votes for Cheetah by the existing weight: Current Cheetah voters kept 85.7% for Cheetah, so keep 85.7% of the 1257.6 Dolphin-Cheetah votes for Cheetah (1,077.76) and pass the remaining (179.8) votes to their third choice (in this case Tiger).
Then all votes for Cheetah are weighted the same (85.7%). This gives Cheetah 4,506.7 votes, yet they only need 3,429 to win. So Cheetah's weigh is adjusted downward (by 24%, to 65.20%) so they return to 3,429, allowing the remaining votes to flow to their next choice (In this case, also Tiger)
Sound Great? Sign your name so we can get it done! Feedback? Contact Us!