[EM] Preliminary Droop-fit proportionality results

Kristofer Munsterhjelm km-elmet at munsterhjelm.no
Fri May 29 14:45:11 PDT 2026


So I implemented a quick version of a spatial Droop proportionality measure:

The voters are drawn from a standard normal over a 1D opinion space, and 
the candidates are drawn either from the same standard normal or a 
uniform distribution (odd iterations use one, even iterations use the 
other).[1] Each voter ranks the candidates in distance (and rates them 
according to negative distance).

The "ideal" kth candidate is the k/(s+1)th quantile of the (drawn) voter 
distribution; the error is then the square root of the sum of squares 
between each ideal kth candidate and the kth candidate actually elected 
(in order from leftmost to rightmost).

So, for instance, if it's a two-candidate election and the voters' 
quantiles are -0.43 and +0.43, and method X elects candidates who are at 
-0.27 and +0.34 respectively. Then the error for method X in that 
election is the Euclidean distance between (-0.43, 0.43) and (-0.27, 
0.34) ~= 0.184.[2]

I then calculated the VSE over this measure with 4096 voters, 10 
candidates, and different numbers of seats. Here are some results with 
some comments afterwards.

Note that a bad result (low VSE) only gives an indication that the 
method doesn't select candidates close to the Droop quantiles, but not 
*why*. It doesn't distinguish between that happening because the method 
has a different notion of proportionality, or because it has no such 
notion and is all over the place.

(I'd like to implement something that determines what that notion of 
proportionality is if there is one. But I should read Ryan's post more 
thoroughly before I do that.)

2 seats:
Name                             VSE
Log-penalty voting              -1.47
Random ballots                   0.29
Isoelastic (r=1)                 0.32
Isoelastic (r=10)                0.37
Schulze STV                      0.45
SNTV                             0.46
QPQ (0.01)                       0.47
Psi voting (delta=0)             0.52
Psi voting (Sainte-Laguë)        0.55
Psi voting (d'Hondt)             0.56
QPQ (Sainte-Laguë)               0.59
Isoelastic (r=2)                 0.64
(Bloc) Normalized 0-20 Range     0.65
(Bloc) Borda                     0.68
PSC-CLE                          0.72
QPQ (d'Hondt)                    0.79
Meek/Warren STV                  0.80
STV                              0.80
STV-ME(Schulze)                  0.80
Harmonic voting (delta=0.02)     0.80
Harmonic voting (d'Hondt)        0.87
Harmonic voting (Sainte-Laguë)   0.93

5 seats:
Name                             VSE
Log-penalty voting              -1.36
Isoelastic (r=10)               -0.30
Schulze STV                      0.21
QPQ (0.01)                       0.32
Isoelastic (r=1)                 0.36
Psi voting (delta=0)             0.39
Random ballots                   0.38
Psi voting (Sainte-Laguë)        0.40
Psi voting (d'Hondt)             0.41
(Bloc) Normalized 0-20 Range     0.44
Isoelastic (r=2)                 0.44
(Bloc) Borda                     0.49
Harmonic voting (delta=0.02)     0.59
SNTV                             0.67
Harmonic voting (d'Hondt)        0.76
PSC-CLE                          0.81
QPQ (Sainte-Laguë)               0.83
Harmonic voting (Sainte-Laguë)   0.89
STV                              0.94
QPQ (d'Hondt)                    0.94
Meek/Warren STV                  0.94
STV-ME(Schulze)                  0.96

9 seats:
Name                             VSE
Log-penalty voting              -0.70
Schulze STV                      0.00
Isoelastic (r=10)                0.10
Isoelastic (r=1)                 0.19
Random ballots                   0.41
SNTV                             0.57
Harmonic voting (delta=0.02)     0.57
QPQ (0.01)                       0.57
Isoelastic (r=2)		 0.71
(Bloc) Normalized 0-20 Range     0.71
(Bloc) Borda                     0.81
Psi voting (d'Hondt)             0.82
Psi voting (Sainte-Laguë)        0.82
Psi voting (delta=0)             0.83
Harmonic voting (d'Hondt)        0.90
QPQ (Sainte-Laguë)               0.91
PSC-CLE                          0.92
Harmonic voting (Sainte-Laguë)   0.95
STV                              0.98
STV-ME(Schulze)                  0.98
QPQ (d'Hondt)                    0.998
Meek/Warren STV                  0.998

("Random ballots" is the method where one repeatedly picks a random 
voter and elects their favorite continuing candidate.)

The most surprising part, to me, is the bad fit of Schulze STV and how 
little IRV's problems seem to generalize to STV, at least by this 
measure. It's also a bit surprising that for most tunable methods, 
d'Hondt does better than Sainte-Laguë, but for Harmonic the opposite is 
true.

Harmonic seems to do better than Psi, just as it did in the my earlier 
simulations.

In retrospect, it's not that surprising that Harmonic is beaten by 
ranked methods because it doesn't optimize the same thing (just like 
single-winner Range has a different objective than majority rule).

If I were to guess, I'd imagine that there is some kind of property 
that, if passed, leads to good performance here; and STV passes its due 
to the way it works, but Schulze STV doesn't because it was designed 
primarily to be strategy-resistant. But that's just a guess.

-km

[1] My point with doing this was to penalize methods that just make 
assumptions about the voter distribution from the candidate distribution 
or vice versa.

[2] Ideally, the error measure should be designed to generalize to 
something like the Sainte-Laguë index in the party list case, but I just 
chose something easy and broadly reasonable here.


More information about the Election-Methods mailing list