Continuing on from here into a signal poll.
I would like to add ranked choice voting as an option for governance polls to prevent situations like what is currently happening in the DSR Spread reduction thread with multiple winners. The issue comes up that if we add a poll to the governance portal that has more than 2 options then we run the risk that a minority option ends up winning out over the majority-preferred options. For example, if we were to vote on a DSR Spread reduction poll with 3 options and get the following results:
- Status Quo (4k MKR)
- 2 weeks (3.9k MKR)
- 1 month (3.5k MKR)
In this case the status quo wins, but perhaps the majority wants either 2 weeks or 1 month. There is currently no way to express this in a single poll.
What I propose is adding an option to run polls as ranked choice polls with the ability to select your 1st, 2nd, 3rd, etc favorite choices in order. See https://en.wikipedia.org/wiki/Ranked_voting for a more detailed explanation. As @LongForWisdom said in the previous thread there are multiple ways to determine a winner with ranked choice.
The main options are:
Ballots are initially counted for each voter’s top choice. If a candidate has more than half of the vote based on first-choices, that candidate wins. If not, then the candidate with the fewest votes is eliminated. The voters who selected the defeated candidate as a first choice then have their votes added to the totals of their next choice. This process continues until a candidate has more than half of the votes.
- Simple to implement
- Simple to reason about to the user
- May skip over 2nd, 3rd choice if they are eliminated before your first choice. Condorcet fixes this.
- Spoiler effect is present. See https://en.wikipedia.org/wiki/Instant-runoff_voting#Spoiler_effect
A Condorcet method is one of several election methods that elects the candidate that wins a majority of the vote in every pairing of head-to-head elections against each of the other candidates, that is, a candidate preferred by more voters than any others, whenever there is such a candidate. A candidate with this property, the pairwise champion or beats-all winner, is formally called the Condorcet winner.
- Similar to IVF, but doesn’t ignore 2nd, 3rd choices when they are eliminated before your 1st choice. See https://en.wikipedia.org/wiki/Condorcet_method#Comparison_with_instant_runoff_and_first-past-the-post_(plurality)
- Algorithm is more complex to implement
- Not obvious to the end user why a candidate is winning
This is a generalized version of Borda Count where each ballot gets some weight. Due to the constraints of the data this will not fit in the 32-bit integer implementation I wrote below.
The Borda count is a family of single-winner election methods in which voters rank options or candidates in order of preference. The Borda count determines the outcome of a debate or the winner of an election by giving each candidate, for each ballot, a number of points corresponding to the number of candidates ranked lower. Once all votes have been counted the option or candidate with the most points is the winner. The Borda count is intended to elect broadly acceptable options or candidates, rather than those preferred by a majority, and so is often described as a consensus-based voting system rather than a majoritarian one.
- Easy to implement
- Easy to reason about to the end user
- Susceptible to tactical voting. See https://en.wikipedia.org/wiki/Borda_count#Potential_for_tactical_manipulation
I’ve looked over the Governance Portal code, and this looks to be a pretty straightforward change (the devs can correct me here if I’m wrong). We are already using an integer (256 bits on-chain and 32-bits in the JS code) to store the vote number. If we only want to use the 32-bits then we can encode 4 bits per option (max 15 options on a poll + no vote) and give you 32 / 4 = 8 choices available. The bitwise position in the integer can give you the rank choice. IE the lowest 4 bits indicate first choice.
The nice thing about this implementation is that it is backwards compatible with the current first-past-the-post system.
- Do not add support for ranked choice voting
- Add support for ranked choice voting with the Instant-runoff method to determine the winner
- Add support for ranked choice voting with the Condorcet method to determine the winner
- Add support for ranked choice voting with the Positional method to determine the winner
- Add support for ranked choice voting with the Borda Count method to determine the winner
- Abstain (I want to see results)
- Abstain (I have no opinion)
- Abstain (I don’t feel I am knowledgable on the subject)
- Abstain (I disagree with the poll options)
- Abstain (I have a different objection)
This is a multiple choice poll, vote for everything you are willing to vote for in an on-chain vote. Poll will close on February 27th, 2020 at 11:00 AM EST to be reviewed during the weekly governance call.