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

Vidar Wahlberg canidae at exent.net
Tue Sep 3 14:07:27 PDT 2013

On Mon, Sep 02, 2013 at 10:18:36AM +0200, Kristofer Munsterhjelm wrote:
> Here's a short post (since I don't have as much time as I would
> like) with an idea of how to make Sainte-Lague even more like STV. I
> started thinking about it as part of my thinking that "perhaps
> pairwise multiwinner methods will always be too complex"; and so I
> tried to include some Condorcet compliance here as well.

I hope I'm not misunderstanding you, but since you're mentioning
"pairwise multiwinner methods" and parties I'll write a bit about an
idea I've been playing with recently.

I'm a fan of Condorcet methods, and notably Ranked Pairs. I wanted to
try modifying RP in a way so it could be used for party-list elections,
giving a result where the party most people agree on being the best
party wins the most seats, rather than the party that have the most
first preference votes. Party having the most first preference votes may
of course also be the party that most people agree on being the best

So I implemented a basic Ranked Pair algorithm, but with a tiny
When you compare two parties against each other, you divide the amount
of votes that prefer party A over party B with the Sainte-Laguë divisor
(2 * seats + 1), and do the same for votes that prefer party B over
party A.
In other words, if 30000 votes prefer party A over party B, 20000 votes
prefer party B over party A and neither parties have won any seats, then
you'll just compare 30000 vs. 20000. If party A won one seat already
while party B won no seats so far then it'll be 30000 / 3 vs. 20000.

When I feed the algorithm with the result from the Norwegian 2005
election (where all votes have only one preference and consider all
other parties equally bad), then as expected, the result will be as if
only using normal Sainte-Laguë. This was the result:
   A: 56 seats
  SV: 15 seats
  RV:  2 seats
  SP: 11 seats
 KRF: 12 seats
   V: 10 seats
   H: 24 seats
 FRP: 37 seats
KYST:  1 seat
  PP:  1 seat

Now the idea was that if some voters expressed a second preference, that
should cause the second preference to win more seats, but not at the
expense of the first priority, only at the expense of the other parties.
So I made every vote for FRP have H as second preference, while leaving
all other votes have no second preference. This gave me _almost_ the
result I expected:
   A: 46 seats
  SV: 12 seats
  RV:  2 seats
  SP:  9 seats
 KRF:  9 seats
   V:  8 seats
   H: 40 seats
 FRP: 41 seats
KYST:  1 seat
  PP:  1 seat

As expected, H won seats from the other parties, but to my surprise,
FRP also won more seats, even though no votes ranked FRP higher than in
the previous run, and it was the exact same amount of votes.
I haven't dug deep down into the code yet to figure out why it benefited
FRP to add H as second preference.

For those especially interested, the code (still using the D language)
is located here:
(Rough code, minimalistic RP, likely buggy, etc.)

Any thoughts? And is it something like this you're talking about,
Kristofer, or did I misunderstand you?

Vidar Wahlberg

More information about the Election-Methods mailing list