[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
party.
So I implemented a basic Ranked Pair algorithm, but with a tiny
modification:
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:
https://github.com/canidae/voting/blob/master/slrp.d
(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?
--
Regards,
Vidar Wahlberg
More information about the Election-Methods
mailing list