<HTML><BODY style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; "><DIV><DIV>On Dec 12, 2006, at 9:55 AM, <A href="mailto:raphfrk@netscape.net">raphfrk@netscape.net</A> wrote:</DIV><BR class="Apple-interchange-newline"><BLOCKQUOTE type="cite"> <DIV>From: <A href="mailto:bql@bolson.org">bql@bolson.org</A><BR>> Mostly I've independently verified the results, but I've added my<BR> > favorite pet method, Instant Runoff Normalized Ratings (<SPAN class="correction" id="">IRNR</SPAN>) into<BR> > the mix.<BR>                                                                                                                                                              <BR> When you say you average results, does that mean you mix the <SPAN class="correction" id="">colour</SPAN> ?<BR></DIV></BLOCKQUOTE><DIV><BR class="khtml-block-placeholder"></DIV><DIV>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.</DIV><BR><BLOCKQUOTE type="cite"><DIV> How do your voters vote ?<BR>                                                                                                                                                              <BR> I assume it is something like:<BR>                                                                                                                                                              <BR> Utility = 1/distance ?<BR></DIV></BLOCKQUOTE><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Yup. I've now added that to the page.</DIV><BR><BLOCKQUOTE type="cite"><DIV>Max Social Utility:  pick candidate with highest <SPAN class="correction" id="">utilty</SPAN><BR></DIV></BLOCKQUOTE><DIV><BR class="khtml-block-placeholder"></DIV><DIV>highest total global utility, yes</DIV><BR><BLOCKQUOTE type="cite"><DIV> Pick One:  Pick nearest <BR>                                                                                                                                                              <BR> <SPAN class="correction" id="">IRV</SPAN>:  Pick in order of distance<BR>                                                                                                                                                              <BR> <SPAN class="correction" id="">IRNR</SPAN>:  Pick in order of distance (do you have link to count rules?)<BR></DIV></BLOCKQUOTE><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Being a ratings method, it's based on the 1/r utility.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><A href="http://bolson.org/voting/methods.html#IRNR">http://bolson.org/voting/methods.html#IRNR</A></DIV><BR><BLOCKQUOTE type="cite"><DIV> <SPAN class="correction" id="">Condorcet</SPAN>:  Pick in order of distance<BR>                                                                                                                                                              <BR> Rating Summation:  Rating = utility ?  (Range)<BR> Are votes capped, if not then won't that give same as max utility ?<BR></DIV></BLOCKQUOTE><DIV><BR class="khtml-block-placeholder"></DIV><DIV>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.</DIV><BR><BLOCKQUOTE type="cite"><DIV> <SPAN class="correction" id="">Borda</SPAN>:  Pick in order of distance<BR>                                                                                                                                                              <BR> > This method is great because it makes behaviors of the election<BR> > method readily apparent visually. I used to claim that <SPAN class="correction" id="">IRNR</SPAN> would be<BR> > free of <SPAN class="correction" id="">IRV's</SPAN> oddities because <SPAN class="correction" id="">IRNR</SPAN> considered the whole ballot and<BR> > used continuous ratings. Someone here cleverly found a counter case,<BR> > but graphically it jumps out of the picture that <SPAN class="correction" id="">IRNR</SPAN> does have<BR> > irregularities. On the plus side, they're much smaller than <SPAN class="correction" id="">IRV's</SPAN><BR> > problems. :-)<BR>                                                                                                                                                              <BR> What would be cool would be if you re-ran the <SPAN class="correction" id="">sims</SPAN> with strategic voting.<BR></DIV></BLOCKQUOTE><DIV><BR class="khtml-block-placeholder"></DIV><DIV>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.</DIV><BR><BLOCKQUOTE type="cite"><DIV> Plurality -- run poll and then everyone votes for one of the top 2 in<BR> the poll.  I am not sure this is accurate though.<BR>                                                                                                                                                              <BR> What about<BR> 2 candidates are selected as the <SPAN class="correction" id="">favourites</SPAN> (same 2 for entire run)<BR>                                                                                                                                                              <BR> Take a poll<BR> Pick <SPAN class="correction" id="">favourite</SPAN> of the top 2 unless,<BR> the utility of both the top 2 is less than X, then pick <SPAN class="correction" id="">favourite</SPAN><BR>                                                                                                                                                              <BR> In election<BR> Vote for your <SPAN class="correction" id="">favourite</SPAN> of the top 2 candidates in the poll<BR> <BR> This models the benefit of being one of the main party nominees.<BR>                                                                                                                                                              <BR> Another option is to keep rerunning the election until the winner<BR> is stable ... but that might be cyclic.<BR>                                                                                                                                                              <BR> <SPAN class="correction" id="">IRV</SPAN> -- run poll and rank <SPAN class="correction" id="">favourite</SPAN> of top 2 first and least <SPAN class="correction" id="">favourite</SPAN> of<BR> top 2 last, rest honest.  Not sure if that is actually what is strategic<BR>                                                                                                                                                              <BR> <SPAN class="correction" id="">IRNR</SPAN>:  Not sure<BR>                                                                                                                                                              <BR> <SPAN class="correction" id="">Condorcet</SPAN>:<BR>                                                                                                                                                              <BR> Range/Rating Summation:<BR> - Rate favorite at max and least <SPAN class="correction" id="">favourite</SPAN> at win and linear interpolate rest<BR> - Use approval strategy (give max to favorite of top 2 and min to other of top 2)<BR>                                                                                                                                                              <BR> <SPAN class="correction" id="">Borda</SPAN>:<BR>                                                                                                                                                              <BR> > I understand that most of you aren't computer scientists and quick to<BR> > program up new tests, but I'm excited about this testing right now<BR> > and if you'll just implement your favorite election method in _some_<BR> > language, C, C++, java, <SPAN class="correction" id="">javascript</SPAN>, <SPAN class="correction" id="">perl</SPAN>, python, heck I'll even<BR> > accept <SPAN class="correction" id="">PHP</SPAN>, LISP or <SPAN class="correction" id="">FORTRAN</SPAN>, I'll translate it and fit it into the<BR> > test harness.<BR> ><BR>                                                                                                                                                              <BR> There aren't probably that many functions.<BR>                                                                                                                                                              <BR> You need 1 that converts a candidate/utility list to a vote and 1<BR> that converts a list of votes into a result.<BR>                                                                                                                                                              <BR> This allows people to code voting strategies (by changing the utility<BR> to vote function).<BR>                                                                                                                                                              <BR> In theory the vote would be defined by the person who submits the<BR> voting method.<BR></DIV></BLOCKQUOTE><BR></DIV><DIV><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;"><BR class="khtml-block-placeholder"></SPAN></FONT></DIV><DIV><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">This is the key part of the C++ interface for implementing a new election method in my simulation framework.</SPAN></FONT></DIV><DIV><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;"><BR class="khtml-block-placeholder"></SPAN></FONT></DIV><DIV><SPAN class="Apple-style-span"><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">/* use t</SPAN></FONT><FONT class="Apple-style-span" color="#000000"><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">h</SPAN></FONT><SPAN class="Apple-style-span" style="background-color: transparent;">ese */</SPAN></FONT></SPAN></DIV><DIV><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;"><BR class="khtml-block-placeholder"></SPAN></FONT></DIV><DIV><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">class Voter {</SPAN></FONT></DIV><DIV><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">public:</SPAN></FONT></DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">  </SPAN><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">float getPref( int candidateIndex );</SPAN></FONT></DIV><DIV><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">};</SPAN></FONT></DIV><DIV><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;"><BR class="khtml-block-placeholder"></SPAN></FONT></DIV><DIV><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">class VoterArray {</SPAN></FONT></DIV><DIV><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">public:</SPAN></FONT></DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">       </SPAN><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">Voter& operator[]( int voterIndex );</SPAN></FONT></DIV><DIV><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">};</SPAN></FONT></DIV><DIV><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;"><BR class="khtml-block-placeholder"></SPAN></FONT></DIV><DIV><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">/* Implement a subclass of this */</SPAN></FONT></DIV><DIV><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">class VotingSystem {</SPAN></FONT></DIV><DIV><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">public:</SPAN></FONT></DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">     </SPAN><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">virtual</SPAN><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;"> void init( const char** envp );</SPAN></FONT></FONT></DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">/* return winner in winnerArray[0], second place in [1], and so on */</SPAN></FONT><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;"><SPAN class="Apple-tab-span" style="white-space:pre"></SPAN></SPAN></FONT></DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">      </SPAN><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">virtual void runElection( int* winnerArary, const VoterArray& they );</SPAN></FONT></DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre"> </SPAN><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">virtual ~VotingSystem();</SPAN></FONT></DIV><DIV><FONT class="Apple-style-span" color="#000000"><SPAN class="Apple-style-span" style="background-color: transparent;">};</SPAN></FONT></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Details here:</DIV><DIV><A href="http://bolson.org/voting/sim_one_seat/Voter.h">http://bolson.org/voting/sim_one_seat/Voter.h</A></DIV><DIV><A href="http://bolson.org/voting/sim_one_seat/VotingSystem.h">http://bolson.org/voting/sim_one_seat/VotingSystem.h</A></DIV><DIV><BR class="khtml-block-placeholder"></DIV></BODY></HTML>