Attention conservation note: This is very much a stamp collecting post. Even I’m not sure it’s that interesting, but I thought I might as well write it up.
Single Transferable Vote is often referred to as a voting system, but it’s not really: It’s instead a very large family of voting systems, with a near infinite number of dials to turn to get different behaviours.
I’ve never really had much intuition for what the different dials do, so I thought I’d have a bit of play and construct some small elections that get different answers.
The two things I wanted to compare are the Droop quota vs the Hare quota, and the effect of the restart rule in the Wright system (in this system whenever a candidate is disqualified you start the whole process again from scratch with that candidate removed, resetting any candidates who have already been elected).
Droop vs Hare
Suppose we have three candidates, labelled 0, 1 and 2, and are trying to elect two of them. We have the following votes:
- 6 votes for 0, 1, 2
- 2 votes for 2, 0, 1
- 1 vote for 0, 2, 1
Then the Hare quota elects candidates 0 and 2 while the Droop quota elects candidates 0 and 1.
The election plays out like this: In the first round, we elect candidate 0 as the clear winner, as it exceeds both the Hare and Droop quota. Then in the second round, neither remaining candidate has enough votes to clear the quota so one must drop out. With the Droop quota, candidate 2 drops out and candidate 1 is subsequently elected, with the Hare quota the reverse happens.
The reason this happens is that the Droop quota is slightly lower than the Hare quota (4 vs 4.5), and as a result the voters who voted for 0 retain slightly more of their score for the next round. Because of the strong block voting 0, 1, 2 this means that under the Droop quota 1 beats out 2 in the next round, whileas under the Hare quota it’s reversed.
This seems broadly consistent with the descriptions I’ve seen about the Hare quota favouring smaller parties. I don’t know whether this shifts my opinion of it or not.
Aside note: One thing I hadn’t noticed before is that even with complete votes, the Droop quota need not actually produce a complete result. If you’re trying to elect two out of three candidates and you have three electors, then the droop quota is 2. This means that you “spend” 2 votes electing the first candidate and no longer have enough to elect the second. I ended up excluding this case from the elections I considered.
Running with the Droop quota, the following election changes results if you restart it every time someone is disqualified (retaining the set of previously disqualified candidates):
We’re now electing two candidates out of four, once again with nine voters. The votes go as follows:
- 6 votes for 0, 1, 2, 3
- 2 votes for 2, 0, 1, 3
- 1 vote for 3, 0, 2, 1
Without the Wright restarting this elects 0 and 2. With it it elects 0 and 1.
Without restarts the election plays out as follows: We elect 0, then 3 drops out, then 1 drops out, then we elect 2 and are finished.
With restarts what happens is that after 3 drops out, we rerun from scratch and then 2 drops out instead of 1.
I think what’s happening here is that the vote “3, 0, 2, 1” has a higher weight at that point without the Wright restart: With the restart it got counted as a vote for 0 in the initial round, and so got down-weighted along with the other votes for 0. This means that when it came time to design between 1 and 2 dropping out, the decision goes the other way.
I feel like this makes sense as a tactical voting mitigation step: Without the restart, I can just put a no-hoper candidate as my first vote, wait out the rounds it takes for them to drop out and then have a stronger vote.
I wrote some code implementing STV with a couple of flags and asked Hypothesis to compare them. You can see the implementation here, but it’s very hacky.
A couple things to note about it:
- Despite using Hypothesis, it’s not very well tested, so it might be wrong.
- There are still a lot of variations and elided details about what sort of STV this is. I implemented what I think of as “vanilla” STV but I’ve no idea if that’s an accurate depiction of the status quo for it.
- One design choice I made was to throw out all elections that caused any ambiguous behaviour, for either choice of the flag. The reasoning for this is that these small elections are really proxies for large elections where each voter is thousands of real voters, so the ties would end up being broken by small random variation in almost all practical cases.
- I was actually surprised how good a job Hypothesis did at generating and minimizing these. I thought I might have to write a custom shrinker but I didn’t.
I don’t know. This was less enlightening than I hoped it would be.
I feel like I’m slightly more in favour of Wright restarts than I was, but I was already modestly in favour of them, and I don’t really feel like I’ve shifted my opinion about Hare vs Droop one way or the other.
It might be interesting to expand this to other STV variations (e.g. Meek’s method) but they differ more in implementation than these simple flags did, so I didn’t feel like implementing that right now.