[EM] Proportional Representation from Ratings Ballots
Brian Olson
bql at bolson.org
Thu Nov 5 05:37:12 PST 2009
There's been recent discussion of STV and multi-seat methods, and
wanted to chime in again with my contribution.
I have a pet election method which I think is the greatest thing ever
and I call it "Instant Runoff Normalized Ratings". It shows favorably
in opinion-space diagrams*, simulated expected utility, and strategic
voting resistance. (* It has runoff discontinuities, but they're much
smaller than IRV due to using ratings, floating point math, and
looking at the whole ballot at once instead of just first-choice-votes.)
IRNR can be extended to proportional elections, and the algorithm goes
like this:
0. Ballots accept ratings >=0 for all choices. Each choice gets a
global 'weight' of 1.0
1. Sum up normalized weighted ratings ballots. Normalized means that
ratings for choices a,b,c,d scaled so that sqrt(a^2 + b^2 + c^2 + d^2)
== 1. Before normalization, each rating is multiplied by the global
weight for the choice.
2. If some choices sum up over the quota, decrease the global weight
for them such that they would sum up equal to the quota. Goto 1.
3. If not enough choices sum up equal to the quota, disqualify lowest
sum choice. Set their weight to 0.0. (No vote will go to them but be
redistributed at normalization to voter's other preferences.) Goto 1.
Eventually there will be enough winning choices with sum >= quota,
seats filled, election done.
If I vote highly for a choice that gets double the needed quota, about
half of my vote is consumed by that choice and the other half can go
to my other choices.
I have some opinion-space diagrams of this that I need to post. I
think they compare favorably STV. Expected utility simulation should
be forthcoming too, but I may need to do more to extend my simulation
code for multi-seat methods to get that finished.
I think it's a good method that will give good results. On the down
side, it's kinda complicated, especially some of the implementation
details of computing with floating point numbers and allowing for some
small epsilon of roundoff error.
You can see it implemented here in C++
http://code.google.com/p/voteutil/source/browse/sim_one_seat/IRNRP.cpp
More information about the Election-Methods
mailing list