Skip to content

Your voting system doesn't work

You and your friends are about to log into a brand new Minecraft server. But just before you start, you're about to decide where to build the first house. Your options are:

  • Desert: Warm, sunny weather all year round! Perfect for builders — endless sandstone supplies and no rain to worry about. Plus you might find some ancient treasures nearby!

  • Savanna: A warm, welcoming paradise with wide open spaces and beautiful acacia trees. Great visibility and plenty of room to expand your base as needed.

  • Snowy Slopes: Bundle up for this winter wonderland! Stunning mountain views and natural ice production. Makes for some seriously impressive cliffside builds!

Voting has begun, and the results are in:

BiomeVotes
Desert3
Savanna3
Snowy Slopes4

Snowy Slopes is the winner! You've now logged into the server and building has begun.

Not so fast

Turns out, most people actually don't like the Snowy Slopes — 60% of the players voted against it. But why did it win? Imagine that Desert was removed from the race. Desert and Savanna are both warm biomes — in fact, they were right next to each other on the map. All of the players that originally picked Desert would pick Savanna instead, making it win with a 60% majority.

What happened? The voting system used here was plurality voting (also known as first-past-the-post), where each voter can vote for a single option, and the option with the most votes wins. However, this is vulnerable to the spoiler effect, where having additional choices would cause the most similar choices to lose, leaving the less popular choice to win.

Plurality voting is used in elections in the United States, which is one of the reasons there are only 2 major political parties — any third party that gains traction would end up taking votes from the most similar major party, causing them both to lose.

Instant runoff

Let's try something new instead. Instead of leaving each player to only vote for their favorite, they would instead rank all choices from most favorite to least favorite, and leave blank any choices that they don't like at all. To find the winner:

  • Look for the candidate that has the most voters that put it as their first choice.
  • The candidate with the most first-choice voters will win if they have the majority.
  • Otherwise, eliminate the candidate with the least votes as the first choice, and try again.

The results are in:

First choiceSecond choiceThird choiceVotes
DesertSavannaSnowy Slopes4
SavannaDesert3
Snowy SlopesDesert2
Snowy SlopesSavanna3

None of the options have the majority — Savanna only has 3 votes as the first choice, and is eliminated:

First choiceSecond choiceVotes
DesertSnowy Slopes4
Desert3
Snowy SlopesDesert2
Snowy Slopes3

Desert now has 7 votes as first choice, and Snowy Slopes only has 5. Desert now has the majority, and is the winner. Seems like it worked!

Now, after the server having lot more players, a new contender wants to join the race:

  • Frozen Peaks: Like Snowy Slopes, but higher and more extreme! Jagged mountaintops pierce the clouds, offering the most dramatic views. Perfect for those who want their builds to truly stand out.

It's time to vote again to decide where to build the next house. After some discussion, the results are in:

First choiceSecond choiceThird choiceFourth choiceVotes
DesertSavannaSnowy SlopesFrozen Peaks35
SavannaSnowy SlopesFrozen PeaksDesert33
Snowy SlopesFrozen PeaksSavannaDesert15
Frozen PeaksSnowy SlopesSavannaDesert17

None of the options have a majority, so Snowy Slopes gets eliminated:

First choiceSecond choiceThird choiceVotes
DesertSavannaFrozen Peaks35
SavannaFrozen PeaksDesert33
Frozen PeaksSavannaDesert15
Frozen PeaksSavannaDesert17

Again, none of the options have a majority, so Frozen Peaks (with only 32 votes as first choice) gets eliminated:

First choiceSecond choiceVotes
DesertSavanna35
SavannaDesert33
SavannaDesert15
SavannaDesert17

Savanna has 65 votes in total, which is a majority out of the 100 total votes, and is the winner.

But after a while, some players want to switch things up — 3 players that originally voted for Savanna as first choice change their vote to Desert as first choice (since they want their home to be a bit warmer):

First choiceSecond choiceThird choiceFourth choiceVotes
DesertSavannaSnowy SlopesFrozen Peaks38 (+3)
SavannaSnowy SlopesFrozen PeaksDesert30 (-3)
Snowy SlopesFrozen PeaksSavannaDesert15
Frozen PeaksSnowy SlopesSavannaDesert17

None of the options have a majority, so Snowy Slopes gets eliminated:

First choiceSecond choiceThird choiceVotes
DesertSavannaFrozen Peaks38
SavannaFrozen PeaksDesert30
Frozen PeaksSavannaDesert15
Frozen PeaksSavannaDesert17

This time, now that Savanna only has 30 votes (less than the 32 votes for Frozen Peaks), Savanna gets eliminated:

First choiceSecond choiceVotes
DesertFrozen Peaks38
Frozen PeaksDesert30
Frozen PeaksDesert15
Frozen PeaksDesert17

Frozen Peaks, with 62 votes out of the 100 total, is the winner.

What just happened? Let's look at the ballots of the 3 voters that changed their decision:

Old preferencesNew preferences
SavannaDesert
Snowy SlopesSavanna
Frozen PeaksSnowy Slopes
DesertFrozen Peaks

Their new preferences leave everything the same as before, with the only difference being that Desert is moved to the top, wanting a warmer biome. However, the winner is now Frozen Peaks, which is not only colder than before, but also their last choice. This breaks the expectation of monotonicity, since a choice gaining votes can have the opposite effect that the voters intended.

Arrow's theorem

Instant runoff, the voting system that was just used, is a form of ranked-choice voting, where each voter lists their preferences from most to least favorite. However, instant runoff isn't the only form of ranked-choice voting. Another system is the Borda method: in an election with n candidates, each voter will award their first choice n points, their second choice n1 points, up until their last choice who gets a single point. Then, the candidate with the highest amount of points wins.

However, Arrow's theorem, proved in 1950, showed that with 3 or more choices, any form of ranked-choice voting must violate at least one of these conditions:

  • Unanimity: If every voter chooses the same candidate as their favorite, then that candidate wins.
  • Non-dictatorship: No voter should have the sole power to decide the entire election — if any 2 voters switch their ballots, the election outcome should remain the same.
  • Independence of irrelevant alternatives: A candidate leaving or joining the race does not affect the relative performance of any of the other candidates.

The theorem is quite complicated to prove, so I'll leave some links here: Wikipedia, Eric Pacuit

Advent of Code

Advent of Code's leaderboard uses the Borda method, which means that a participant's performance can affect the relative rankings of other participants. Each star is equivalent to a voter, and the time to finish represents the star's "voting preference". You can see this happening in a private leaderboard — sometimes, when participants leave or join a private leaderboard, the placements of other players can switch around.

Eric Wastl left a note in the description that mentions this:

[Local Score], which awards users on this leaderboard points much like the global leaderboard. If you add or remove users, the points will be recalculated, and the order can change. For N users, the first user to get each star gets N points, the second gets N-1, and the last gets 1. This is the default.

What to do?

There's an important piece of information missing from ranked-choice voting. Although each voter can specify that they prefer a candidate over another, it's not possible to specify how much they prefer that candidate. A voter might slightly prefer a candidate over another, but might also believe that a candidate is much better than another — picking the first candidate would be a no-brainer.

Instead of using ranked-choice voting, score voting can be used instead. On each ballot, the voter gives each candidate a score (say, 1 to 10), and the candidate with the highest average wins. This satisfies all 3 conditions referenced in Arrow's theorem:

  • Unanimity: If every voter chooses the same candidate as their favorite, then that candidate will receive the highest score and become the winner.
  • Non-dictatorship: Calculating the average takes every voter into account, so there isn't a single dictator.
  • Independence of irrelevant alternatives: Adding or removing a candidate leaves the average scores of the other candidates exactly the same.

Still, this system is still susceptible to strategic voting, where a voter might want to fill a ballot that doesn't exactly match their true preferences. For example, a player could be okay with all four biomes: Desert, Savanna, Snowy Slopes, and Frozen Peaks would all work fine. However, if that player has a slight preference for Desert over the other 3 options, their true preference could be assigning a score of 9 points to Desert, and a score of 8 to the other 3 options. However, they might decide to vote strategically to amplify their vote — giving Desert a score of 10 while giving everything else a score of 1 would effectively make their vote stronger.

If every voter did this, the voting system would be approval voting. This is similar to plurality voting, with the difference being that each voter can now vote for as many candidates as they like, instead of just one — each voter gives each candidate a yes or no on the ballot, and the candidate with the most votes wins. Approval voting also passes the 3 conditions, since it isn't ranked-choice voting.

Conclusion

With this information, here is my final vote on and in voting systems:

If the voting system wasthen I would vote
Plurality votingScore voting
Ranked-choice votingScore voting, approval voting, ranked-choice voting, plurality voting
Score votingScore voting (10/10), approval voting (9/10), ranked-choice voting (6/10), plurality voting (3/10)
Approval votingScore voting (Yes), approval voting (Yes), ranked-choice voting (Yes), plurality voting (No)