[EM] Simulation of political identity space in voting

Brian Olson bolson at bolson.org
Tue Dec 12 12:41:55 PST 2006


On Dec 12, 2006, at 9:55 AM, raphfrk at netscape.net wrote:

> From: bql at bolson.org
> > Mostly I've independently verified the results, but I've added my
> > favorite pet method, Instant Runoff Normalized Ratings (IRNR) into
> > the mix.
>
> When you say you average results, does that mean you mix the colour ?

Yes. If the elections at one pixel don't all go the same way the  
colors of the winning choices are mixed proportionally to their  
number of wins.

> How do your voters vote ?
>
> I assume it is something like:
>
> Utility = 1/distance ?

Yup. I've now added that to the page.

> Max Social Utility:  pick candidate with highest utilty

highest total global utility, yes

> Pick One:  Pick nearest
>
> IRV:  Pick in order of distance
>
> IRNR:  Pick in order of distance (do you have link to count rules?)

Being a ratings method, it's based on the 1/r utility.

http://bolson.org/voting/methods.html#IRNR

> Condorcet:  Pick in order of distance
>
> Rating Summation:  Rating = utility ?  (Range)
> Are votes capped, if not then won't that give same as max utility ?

Yeah, given that everyone's voting honestly it's effectively the same  
summation as finding the global utility. But it's separately  
implemented code. I think it's worth running as a check.

> Borda:  Pick in order of distance
>
> > This method is great because it makes behaviors of the election
> > method readily apparent visually. I used to claim that IRNR would be
> > free of IRV's oddities because IRNR considered the whole ballot and
> > used continuous ratings. Someone here cleverly found a counter case,
> > but graphically it jumps out of the picture that IRNR does have
> > irregularities. On the plus side, they're much smaller than IRV's
> > problems. :-)
>
> What would be cool would be if you re-ran the sims with strategic  
> voting.

Simulating polling and what voters do about that is hard and I  
haven't settled on a method that seems entirely right to me. Some of  
what you say will probably be like what it should be.

> Plurality -- run poll and then everyone votes for one of the top 2 in
> the poll.  I am not sure this is accurate though.
>
> What about
> 2 candidates are selected as the favourites (same 2 for entire run)
>
> Take a poll
> Pick favourite of the top 2 unless,
> the utility of both the top 2 is less than X, then pick favourite
>
> In election
> Vote for your favourite of the top 2 candidates in the poll
>
> This models the benefit of being one of the main party nominees.
>
> Another option is to keep rerunning the election until the winner
> is stable ... but that might be cyclic.
>
> IRV -- run poll and rank favourite of top 2 first and least  
> favourite of
> top 2 last, rest honest.  Not sure if that is actually what is  
> strategic
>
> IRNR:  Not sure
>
> Condorcet:
>
> Range/Rating Summation:
> - Rate favorite at max and least favourite at win and linear  
> interpolate rest
> - Use approval strategy (give max to favorite of top 2 and min to  
> other of top 2)
>
> Borda:
>
> > I understand that most of you aren't computer scientists and  
> quick to
> > program up new tests, but I'm excited about this testing right now
> > and if you'll just implement your favorite election method in _some_
> > language, C, C++, java, javascript, perl, python, heck I'll even
> > accept PHP, LISP or FORTRAN, I'll translate it and fit it into the
> > test harness.
> >
>
> There aren't probably that many functions.
>
> You need 1 that converts a candidate/utility list to a vote and 1
> that converts a list of votes into a result.
>
> This allows people to code voting strategies (by changing the utility
> to vote function).
>
> In theory the vote would be defined by the person who submits the
> voting method.


This is the key part of the C++ interface for implementing a new  
election method in my simulation framework.

/* use these */

class Voter {
public:
	float getPref( int candidateIndex );
};

class VoterArray {
public:
	Voter& operator[]( int voterIndex );
};

/* Implement a subclass of this */
class VotingSystem {
public:
	virtual void init( const char** envp );
	/* return winner in winnerArray[0], second place in [1], and so on */
	virtual void runElection( int* winnerArary, const VoterArray& they );
	virtual ~VotingSystem();
};

Details here:
http://bolson.org/voting/sim_one_seat/Voter.h
http://bolson.org/voting/sim_one_seat/VotingSystem.h

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.electorama.com/pipermail/election-methods-electorama.com/attachments/20061212/8c73f86d/attachment-0003.htm>


More information about the Election-Methods mailing list