Multi-Winner 3-2-1 Voting
My favorite voting method is 3-2-1 voting[1], my second favorite is approval voting. Both are methods for selecting one winner. Approval voting has variations for choosing multiple winners, but 3-2-1 voting doesn’t—until now.
I’m going to explain approval voting, sequential proportional approval voting, 3-2-1 voting, and proportional sequential 3-2-1 voting—which is my multi-winner version of 3-2-1 voting.
Note: I think it works well, but I’m no professional, and I haven’t proved anything about it. There’s also one detail I’m still not sure about. If you can help me test it better or prove certain properties about it, I’d much appreciate it.
Approval voting
Approval voting is simple—each voter can vote for as many candidates as they want, and the one that got the most votes is elected. It’s good because it’s simple, there’s relatively little incentive for strategic voting, and it leads to relatively high voter satisfaction.
Sequential Proportional Approval Voting
Like approval voting, each voter can vote for as many candidates as they want, and the first winner is the one that got the most votes. Then all the ballots are reweighed, such that each vote is equal , where X is the amount of elected candidates voted for on the ballot, and another candidate is elected. Repeat until all the seats are filled.
So if I voted for the first candidate that was elected, in the second round my vote would be worth 1⁄2. If I also voted for the second candidate elected, then in the third round my vote will be worth 1⁄3, and if didn’t vote for the second candidate elected, my vote would still be worth 1⁄2 in the third round.
This is good because it achieves proportional representation[2] in a relatively simple way, and with little incentive for strategic voting. Without reweighing the ballots, the more similar you are to the winning candidate the more likely you are to win, which will create a situation where a parliament of clones is elected.
3-2-1 voting
In 3-2-1 voting you rate as many candidates as you want as either “bad”, “ok”, or “good”. Then the winner is selected in 3 steps:
The three candidates who got the most “good” ratings are selected.
Of them, the one with the most “bad” ratings is cast out.
Of the two remaining, the one that is ranked higher than the other on more ballots is elected.
This is more complicated than approval voting, but it pays for that complexity by disincentivizing candidates from being polarizing, and preventing the most polarizing candidate from being elected, even if they are the most popular.
Proportional Sequential 3-2-1 voting
I like 3-2-1 voting, so I created this method based on sequential proportional approval voting to make 3-2-1 voting multi-winner.
The initial voting phase is the same, you rate as many candidates as you want as either “bad”, “ok”, or “good”. The first winner is selected in the same 3 steps as in the single-winner case:
The three candidates who got the most “good” ratings are selected.
Of them, the one with the most “bad” ratings is cast out.
Of the two remaining, the one that is ranked higher than the other on more ballots is elected.
The candidate that is cast out in step 2, the “rejected candidate”, is completely removed from the candidate list and cannot be elected anymore. This is a detail I’m uncertain about, and it should be tested whether it’s better with or without it.
Then after each round the ballots are reweighed—each ballot’s weight becomes , where X is the amount of elected candidates rated “good” on the ballot, and Y is the amount of rejected candidates rated “bad” on the ballot.
I hope this carries over the benefits of 3-2-1 voting from single-winner elections to multi-winner elections.
I have written a python implementation of this voting method, but it doesn’t properly simulate voter preferences and doesn’t measure voter satisfaction. Also, I don’t know how to prove any properties about it. So though this method seems good to me, I don’t actually know if it is. I would very much like help with both of these things. If you think you can help please leave a comment or send me a message.
And just one last note about parties—It’s not clear to me how Proportional Sequential Approval Voting or other multi-winner voting methods are supposed to be used when voting for parties instead of individual candidates. My idea is each round you pick a party like you would pick a candidate, and the top unelected member of that party gets elected (the parties need to come to the elections with a sorting), the ballots reweighed, and importantly, the elected and rejected parties aren’t removed from the list, and are selected from again. I don’t currently have an implementation of this, but if I do I’ll post it here and add a link in the text.
Thank you Justis from the LessWrong feedback team for your feedback on the article.
This is not a proportional voting method.
First issue: Suppose there are two opposing factions, one comprising 55% of voters and the other 45%, in a three-winner election. The smaller faction fields only one candidate. Let’s suppose the 45% of voters marking this candidate as “good” is enough to get her into the top 3. Then this candidate has the most “bad” ratings and is permanently eliminated, leaving the smaller faction without representation. This issue can be addressed by not having the rejected candidate permanently eliminated.
Second issue: Suppose the same factions for a three-winner election, but suppose each faction fields many candidates. In the first round, three candidates from the larger faction have the most “good” ratings. Suppose the vast majority of voters in the smaller faction gave each of these candidates a “bad” rating and a bit over 45% of voters (who are in the larger faction) gave the elected candidate a “good” rating. For the next round, voters in the majority faction and those in the minority faction will have lost roughly the same amount of ballot weight. This again allows the majority faction to win all three seats. To fix this issue you’d have to have ballot weigh only depend on support for candidates who were elected.
With both of these changes, I think you’d be left with something that at least comes close to being proportional, though you’d still have some issues. It would be possible for a majority faction to prevent any one candidate from being elected by marking that candidate as the only “bad” candidate and by having hardly anyone mark a candidate as “good”. (This strategy is terrible in practice and can be countered by having the minority faction run a “clone” of this candidate, but it still makes the voting method fall short of proportionality.)
I tried to run your second case with six candidates for each faction (A1-A6, and B1-B6), and have 11 ballots that rate all A candidates ‘Good’ and all B candidates ‘Bad’, plus 9 ballots that rate all A candidates ‘Bad’ and all B candidates ‘Good’. The results are indeed like you said:
And if I make both changes (make rejections non-final and reweigh only based on support for elected candidates) I get:
Which is closer to proportionality, but It’s hard to know with only 3 seats, so I increased it to 10 and got:
Which seems close to proportionality.
I also thought that perhaps in the first step of each round the ballots should be reweighed based only on support for elected candidates, in the second step based only on resistance to rejected candidates, and in the third step based on either both or again based only on support for elected candidates. I’ll test that next and return with results.
Either way, I think a case like this where you have two completely polarized groups is not very realistic in a place where multiple candidate/parties are elected (not a single-winner two-party system), and a voting method like this exists. Even in Israel that is very polarized and doesn’t have a system like this you still won’t get anything that looks like this ballot arrangement. But It’s still good to know what happens in edge cases, so thanks pointing this out :)
P.S, I’m putting the data for the candidates and ballots in a reply for anyone who wants to replicate the results.
candidates = {‘A1’: [0, 0, 0], ‘A2’: [0, 0, 0], ‘A3’: [0, 0, 0], ‘A4’: [0, 0, 0], ‘A5’: [0, 0, 0], ‘A6’: [0, 0, 0],
‘B1’: [0, 0, 0], ‘B2’: [0, 0, 0], ‘B3’: [0, 0, 0], ‘B4’: [0, 0, 0], ‘B5’: [0, 0, 0], ‘B6’: [0, 0, 0]
}
ballots = [
[1, {‘A1’: 2, ‘A2’: 2, ‘A3’: 2, ‘A4’: 2, ‘A5’: 2, ‘A6’: 2, ‘B1’: 0, ‘B2’: 0, ‘B3’: 0, ‘B4’: 0, ‘B5’: 0, ‘B6’: 0}],
[1, {‘A1’: 2, ‘A2’: 2, ‘A3’: 2, ‘A4’: 2, ‘A5’: 2, ‘A6’: 2, ‘B1’: 0, ‘B2’: 0, ‘B3’: 0, ‘B4’: 0, ‘B5’: 0, ‘B6’: 0}],
[1, {‘A1’: 2, ‘A2’: 2, ‘A3’: 2, ‘A4’: 2, ‘A5’: 2, ‘A6’: 2, ‘B1’: 0, ‘B2’: 0, ‘B3’: 0, ‘B4’: 0, ‘B5’: 0, ‘B6’: 0}],
[1, {‘A1’: 2, ‘A2’: 2, ‘A3’: 2, ‘A4’: 2, ‘A5’: 2, ‘A6’: 2, ‘B1’: 0, ‘B2’: 0, ‘B3’: 0, ‘B4’: 0, ‘B5’: 0, ‘B6’: 0}],
[1, {‘A1’: 2, ‘A2’: 2, ‘A3’: 2, ‘A4’: 2, ‘A5’: 2, ‘A6’: 2, ‘B1’: 0, ‘B2’: 0, ‘B3’: 0, ‘B4’: 0, ‘B5’: 0, ‘B6’: 0}],
[1, {‘A1’: 2, ‘A2’: 2, ‘A3’: 2, ‘A4’: 2, ‘A5’: 2, ‘A6’: 2, ‘B1’: 0, ‘B2’: 0, ‘B3’: 0, ‘B4’: 0, ‘B5’: 0, ‘B6’: 0}],
[1, {‘A1’: 2, ‘A2’: 2, ‘A3’: 2, ‘A4’: 2, ‘A5’: 2, ‘A6’: 2, ‘B1’: 0, ‘B2’: 0, ‘B3’: 0, ‘B4’: 0, ‘B5’: 0, ‘B6’: 0}],
[1, {‘A1’: 2, ‘A2’: 2, ‘A3’: 2, ‘A4’: 2, ‘A5’: 2, ‘A6’: 2, ‘B1’: 0, ‘B2’: 0, ‘B3’: 0, ‘B4’: 0, ‘B5’: 0, ‘B6’: 0}],
[1, {‘A1’: 2, ‘A2’: 2, ‘A3’: 2, ‘A4’: 2, ‘A5’: 2, ‘A6’: 2, ‘B1’: 0, ‘B2’: 0, ‘B3’: 0, ‘B4’: 0, ‘B5’: 0, ‘B6’: 0}],
[1, {‘A1’: 2, ‘A2’: 2, ‘A3’: 2, ‘A4’: 2, ‘A5’: 2, ‘A6’: 2, ‘B1’: 0, ‘B2’: 0, ‘B3’: 0, ‘B4’: 0, ‘B5’: 0, ‘B6’: 0}],
[1, {‘A1’: 2, ‘A2’: 2, ‘A3’: 2, ‘A4’: 2, ‘A5’: 2, ‘A6’: 2, ‘B1’: 0, ‘B2’: 0, ‘B3’: 0, ‘B4’: 0, ‘B5’: 0, ‘B6’: 0}],
[1, {‘A1’: 0, ‘A2’: 0, ‘A3’: 2, ‘A4’: 0, ‘A5’: 0, ‘A6’: 0, ‘B1’: 2, ‘B2’: 2, ‘B3’: 2, ‘B4’: 2, ‘B5’: 2, ‘B6’: 2}],
[1, {‘A1’: 0, ‘A2’: 0, ‘A3’: 2, ‘A4’: 0, ‘A5’: 0, ‘A6’: 0, ‘B1’: 2, ‘B2’: 2, ‘B3’: 2, ‘B4’: 2, ‘B5’: 2, ‘B6’: 2}],
[1, {‘A1’: 0, ‘A2’: 0, ‘A3’: 2, ‘A4’: 0, ‘A5’: 0, ‘A6’: 0, ‘B1’: 2, ‘B2’: 2, ‘B3’: 2, ‘B4’: 2, ‘B5’: 2, ‘B6’: 2}],
[1, {‘A1’: 0, ‘A2’: 0, ‘A3’: 2, ‘A4’: 0, ‘A5’: 0, ‘A6’: 0, ‘B1’: 2, ‘B2’: 2, ‘B3’: 2, ‘B4’: 2, ‘B5’: 2, ‘B6’: 2}],
[1, {‘A1’: 0, ‘A2’: 0, ‘A3’: 2, ‘A4’: 0, ‘A5’: 0, ‘A6’: 0, ‘B1’: 2, ‘B2’: 2, ‘B3’: 2, ‘B4’: 2, ‘B5’: 2, ‘B6’: 2}],
[1, {‘A1’: 0, ‘A2’: 0, ‘A3’: 2, ‘A4’: 0, ‘A5’: 0, ‘A6’: 0, ‘B1’: 2, ‘B2’: 2, ‘B3’: 2, ‘B4’: 2, ‘B5’: 2, ‘B6’: 2}],
[1, {‘A1’: 0, ‘A2’: 0, ‘A3’: 2, ‘A4’: 0, ‘A5’: 0, ‘A6’: 0, ‘B1’: 2, ‘B2’: 2, ‘B3’: 2, ‘B4’: 2, ‘B5’: 2, ‘B6’: 2}],
[1, {‘A1’: 0, ‘A2’: 0, ‘A3’: 2, ‘A4’: 0, ‘A5’: 0, ‘A6’: 0, ‘B1’: 2, ‘B2’: 2, ‘B3’: 2, ‘B4’: 2, ‘B5’: 2, ‘B6’: 2}],
[1, {‘A1’: 0, ‘A2’: 0, ‘A3’: 2, ‘A4’: 0, ‘A5’: 0, ‘A6’: 0, ‘B1’: 2, ‘B2’: 2, ‘B3’: 2, ‘B4’: 2, ‘B5’: 2, ‘B6’: 2}],
[1, {‘A1’: 0, ‘A2’: 0, ‘A3’: 2, ‘A4’: 0, ‘A5’: 0, ‘A6’: 0, ‘B1’: 2, ‘B2’: 2, ‘B3’: 2, ‘B4’: 2, ‘B5’: 2, ‘B6’: 2}],
]
I’d just like to take a moment to point out that seq-PAV isn’t a voting method so much as a greedy approximation algorithm.
It might make sense for a hand count, but not otherwise; sticking PAV into your favorite mixed integer linear programming solver Pareto-dominates seq-SPAV.
I don’t see why you say Sequential Proportional Approval Voting gives little incentive for strategic voting. If I am confident a candidate I support is going to be elected in the first round, it’s in my interest not to vote for them so that my votes for other candidates I support will count for more. Of course, if a lot of people think like this then a popular candidate could actually lose, so there is a bit of a brinksmanship dynamic going on here. I don’t think that is a good thing.
You have to be careful with this argument because it’s valid for any candidate-based proportional voting method. All such voting methods rely on the influence of voters who strongly support candidates who get elected being reduced with regard to other candidates, so all of them have such an incentive. (It takes different forms in different voting methods; in STV the incentive isn’t to forgo ranking such a candidate altogether, it’s to rank such a candidate second or third.) This does not mean the incentive for free-riding is equally strong under all candidate-based proportional voting methods, however, and I do think that strategy is more important under SPAV than under some forms of STV.