[EM] Possibly making Sainte-Lague even more STV-like

Kristofer Munsterhjelm km_elmet at t-online.de
Mon Sep 9 07:08:00 PDT 2013

On 09/05/2013 11:12 PM, Vidar Wahlberg wrote:
> On Thu, Sep 05, 2013 at 11:42:44AM +0200, Kristofer Munsterhjelm wrote:
>> So a Sainte-Laguë based on DAC or DSC is better than one based on
>> Plurality - and we know how to do the generalization - but there
>> isn't much else to be said about it. (It might also be weakly
>> monotone, which would be nice since STV isn't.)
> Will be a bit short as I've been busy lately.
> I looked briefly into DAC/DSC, I couldn't visualize how to expand that
> to a multi-seat system, though. May look more into it at a later time.

Okay, here's an example which will show the particular kind of 
vote-splitting problem that DAC/DSC itself fixes. Say A, B, C, X are 
parties, and the ballots are:

12: A>B>C>X
11: B>A>C>X
10: C>A>B>X
15: X>C>A>B

Three seats (because calculating these things manually does take some 
effort). The coalitions are:

{ABCX}: 48
{ABC}: 33
{AB}: 23
{ACX}: 15
{CX}: 15
{X}: 15
{A}: 12
{B}: 11
{AC}: 10
{C}: 10

For the first seat we first take ABCX, then intersect to ABC, then with 
AB, then XAC, which produces the initial winner of A. Okay. Now all sets 
that include A are deweighted by 2 * 1 + 1, giving:

{ABCX}: 48/3 = 16
{ABC}: 33/3 = 11
{AB}: 23/3 = 7.67
{ACX}: 15/3 = 3
{CX}: 15 (no A here, so no deweighting)
{X}: 15
{A}: 12/3 = 4
{B}: 11
{AC}: 10/3 = 3.33
{C}: 10


{ABCX}: 16
{X}: 15
{ABC}: 11

and so on. It's obvious X gets the second seat. After this, the 
weightings would be 3 for any seat that includes either X or A, and 5 
for any that includes both:

{ABCX}: 48 / 5 = 9.6
{ABC}: 33 / 3 = 11
{AB}: 23 / 3 = 7.67
{ACX}: 15 / 5 = 3
{CX}: 15 / 3 = 5
{X}: 15 / 3 = 5
{A}: 12 / 3 = 4
{B}: 11 = 11
{AC}: 10 / 3 = 3.33
{C}: 10 = 10


{ABC}: 11
{B}: 11
(and so on)

so the third seat goes to B. So this method is quite close to Plurality 
Sainte-Laguë, which is why I don't think it would make enough of a 
difference, and thus why I didn't bother to write the calculations in my 
previous post :-)

If it has any place, it would instead be in calculating the party seats 
for a single district. And even there, I don't think it solves the 
polarization problem well enough. In a sense, the coalition-type methods 
(DAC, DSC, HDSC) are "IRV without the chaos". The Yee diagrams also show 
this: IRV's can have odd disconnected areas, while the descending 
coalitions methods have polygonal connected regions, but the regions can 
be quite far from the optimal solution (Voronoi map) that Condorcet 

Its main difference from Plurality Sainte-Laguë is that if there's a 
group of uncoordinated voters, then they get a seat before the 
beneficiaries of the vote-splitting do. So it could make a difference 
with marginal seats. (E.g. imagine that the situation above happens 
after X has got a lot of seats and there's only one seat remaining; then 
it would give the final seat to the {ABC} group instead of to X}.

(Interesting side question: does D*C suffer from center squeeze in the 
single-winner case? In one respect it does: if C is everybody's second 
choice, it is retained until the single-seat sets, but then it is 
eliminated. In another, it does not: if the center gains greater 
popularity, the method doesn't decide to favor the opposing wing 
instead. Another interesting question would be whether the 
coalition-type methods are cloneproof as multiwinner methods as well, 
not just as single-winner methods.)

> However, I want to elaborate a bit more on the SL/RP system I mentioned
> earlier:
> There were two issues you pointed out. First was that in an election
> with 3 parties (L, C, R), strong support for L & R where all agreed on C
> being the preferred winner in a 1-seat election, but in a 2-seat
> election it would make more sense to let L & R to win.
> This criticism I share.
> On the other hand, when I implemented this idea I had a typical
> Norwegian parliament election in mind (for 169 seats), so my question to
> you would be; While this would not be a good system for few seats and
> parties with distinguished differences, won't that problem quickly
> diminish when you have significantly more seats and parties?

Geometrically speaking, you could consider a house-monotone method one 
that picks the median/consensus points for (n+1) seats by adding a point 
to the ones for n seats. As n increases, the worst case error (compared 
to a method that can pick all n points from scratch) should decrease 
because there are more points. If there are many dimensions to political 
opinion space, the error may decrease more slowly, but yes, in general 
you are right.

The geometrical interpretation also shows two ways in which problems 
could present themselves. First, in the LCR situation, the point for n=1 
is simply far away from the points for n=2, period. This kind of error 
could be amplified in kingmaker settings: e.g. imagine 49 seats to L, 50 
to R, but one of them should have been C. But apart from that, the error 
should diminish. There would also be a greater chance of imbalance if 
you increase the number of parties - e.g. consider parties on the 
vertices of a pentagon in 2D space with a compromise party at the center 
of this pentagon: then the house-monotone method will be biased until at 
least 5 seats have been given.

Second, a poorly constructed house-monotone method could perform 
insufficient lookahead and get into trouble later on, since the 
distribution for n depends on the distribution for n-1. So the demands 
are greater on such a method, though I don't know how to measure this.

Ultimately, though, Schneier's statement about crypto can be rephrased 
to apply to electoral methods too. 169 seats do solve a lot of ills. 
About the only thing needed is that the method properly converges - i.e. 
that it can reduce its bias however far one would like given enough seats.

> The second issue you raised was that an A>B>C>* preference, where A had
> won some seats while B had not would not weight down the B>C preference
> as it should. Again you're absolutely correct so I've changed the
> implementation. Currently I've set it to be that with the same
> preference, A having 2 seats and B having 3 seats and C having no seats
> the weight for A>(B>C>*) would be 1/(2 * 2 + 1), the weight for B>(C>*)
> would be 1/11 (2 * (2 + 3) + 1) and the weight for C>* would also be
> 1/11 (vote weight is the SL divisor for the accumulated amount of
> seats). It's a small task to change the deweighting if it should be
> more/less, or if the weight should be fixed (to 1/11 in this case) for
> all preferences in the vote. I've not pondered much on either of these
> aspects yet.
> I've done some quick tests, and I do see some peculiar artifacts, like
> not getting the exact same result when each vote only got one preference
> as when using plain Sainte-Laguë. There are smaller changes, such as
> some parties winning an extra seat while others losing one. I can only
> imagine that this is because I'm currently using floating points rather
> than rational number and thus get rounding errors, the algorithm is too
> slow for rational numbers with the data sets I'm using. I will fix this
> later.

Not getting the same result may indicate either that the subtleties of 
Condorcet need to be adjusted or that there's a bug. What we have when 
everybody bullet votes is in essence (for different favored parties A):

x: A > B = C = D

and this in turn means that the voter has a preference that says "I'd 
like to have A, but if I can't have A, it doesn't matter who I get". So 
the contest should weight A>(everybody else) by x.

Say that A and B are elected. Then the method should act as if the above 
ballot is in fact

x/3: A > B = C = D.

So there may be one of two problems here. Either there's a subtlety 
about the postprocessing (wv, margins, etc) interacting with how you 
reweight so that what is supposed to be a tie (the B = C = D part) ends 
up not looking like a tie (e.g. A>B is weighted at x/3 but B = C is 
weighted as B>C and C>B at x/5). I don't think that's likely, but I 
don't remember how the postprocessing is done, at the moment, so that 
might be what's throwing the method off. The other possibility is that 
there's a bug: that even after an A and B have been elected, your 
program is supposed to only change x/3 into x/5 for A>B, but it somehow 
alters the B vs C contest as well.

I would suggest setting up some test cases. Try an election with only 
two kinds of voters, something like:

x: A > B = C = ... = n
y: B > A = C = ... = n

and see if the results are as expected by ordinary Sainte-Laguë. If not, 
see why not. With only two blocs of voters, it should be easier to track 
down the quirk or bug.

More information about the Election-Methods mailing list