civs icon indicating copy to clipboard operation
civs copied to clipboard

proportional representation sometimes creates very non proportional results

Open michaelni opened this issue 7 years ago • 6 comments

We where evaluating civs as a potential vote system for selecting committee members. And while testing I found some rather bad looking case(s): For example: (all cases use a committee of 3 members, proportional representation turned on) 23x9 8 7 1 1 1 1 1 1 1 1 1 24x1 1 1 9 8 7 1 1 1 1 1 1 24x1 1 1 1 1 1 9 8 7 1 1 1 28x1 1 1 1 1 1 1 1 1 9 8 7 https://civs.cs.cornell.edu/cgi-bin/results.pl?id=E_f280dc947fde9c2c Here the group of voters representing 28% get all 3 seats, the other groups of 24 and 23 voters get no seat. The same occurs with smaller groups: 10x9 1 1 1 1 1 1 1 1 1 1 1 10x1 9 1 1 1 1 1 1 1 1 1 1 10x1 1 9 1 1 1 1 1 1 1 1 1 10x1 1 1 9 1 1 1 1 1 1 1 1 10x1 1 1 1 9 1 1 1 1 1 1 1 10x1 1 1 1 1 9 1 1 1 1 1 1 10x1 1 1 1 1 1 9 1 1 1 1 1 11x1 1 1 1 1 1 1 9 1 1 1 1 11x1 1 1 1 1 1 1 1 9 1 1 1 12x1 1 1 1 1 1 1 1 1 9 8 7 https://civs.cs.cornell.edu/cgi-bin/results.pl?id=E_0068ae45e0a5b08f

12% of the voters get all 3 seats here, the other 2 groups who have 11% are not receiving any seat.

I have not tested it but i suspect that schulze STV and CPO STV would not have this problem. So was wondering if there are plans to implement these ? Thanks

michaelni avatar Oct 22 '18 08:10 michaelni

Another failure happens in a 2 party case if there is a candidate that is liked by both sides. 50X 4,3,2,1 49X 4,1,2,3

and 3 seats Here the candidate liked by all gets a seat while the 2 remaining seats are given to the same party This is maybe a better example as 2 parties is a much more common scenario. having 2 seats for party A and 0 for party B when it should have and could have been 1 and 1 is really bad. https://civs.cs.cornell.edu/cgi-bin/results.pl?id=E_7d306ae9b6f333b9

michaelni avatar May 16 '20 16:05 michaelni

Thanks for the interesting test cases. I'll have to think about them more.

I am happy for people to add additional voting algorithms but I don't have time to implement them myself at present.

andrewcmyers avatar May 16 '20 16:05 andrewcmyers

Thilo wanted to look into connecting CIVS with https://github.com/bradbeattie/python-vote-core so votes can be feed into it for schulze STV support. I hope that turns out to be as simple as it sounds.

michaelni avatar May 17 '20 19:05 michaelni

Probably easier just to add it to CIVS.

~In any case it looks like there may be a bug in the implementation. In your latest example I think the 50 group should get 2 candidates and 49 should get one. I'll track it down when I have time.~

Nope, this is what the algorithm is supposed to do. The rationale is that the 49, being less than one half, have to be satisfied with only 1/3 representation under the Droop quota (which is also used by other proportional methods for reasons I discuss on the PR page). They got their top choice, so they are considered to be represented.

andrewcmyers avatar May 18 '20 05:05 andrewcmyers

I think other proportional methods will have similar issues with your examples.

andrewcmyers avatar May 20 '20 19:05 andrewcmyers

The 49 have their top choice, yes, which is the same top choice of the other 50 voters. After that 2/3 of their voting power remains though. Everyone who had L1 as top choice (which is everyone in this example) would loose the corresponding amount of voting power. Theres alot of voting power left and no logical reason why one group should have 100% and the other 0% after that first selection.

Schulze STV if i understand it correctly uses a matrix to optimally distribute this with no arbitrary thresholds or tuneable things. The method had a strange beauty in that it works without the wide range of knobs other classic STV methods have and need. And if thilo didnt make a mistake https://modernballots.com/elections/87xncirh/view/ also works with this actual case. (modernballots IIUC uses schulze STV but its not fully open source so its not an option really for us)

michaelni avatar May 20 '20 22:05 michaelni