<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family:trebuchet ms,sans-serif;font-size:small"><span style="font-family:Arial,Helvetica,sans-serif">On Tue, Jan 11, 2022 at 4:44 PM Kristofer Munsterhjelm <<a href="mailto:km_elmet@t-online.de">km_elmet@t-online.de</a>> wrote:</span><br></div></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 11.01.2022 21:32, Daniel Carrera wrote:<br>
> On Mon, Jan 10, 2022 at 11:27 AM Kristofer Munsterhjelm<br>
> <<a href="mailto:km_elmet@t-online.de" target="_blank">km_elmet@t-online.de</a> <mailto:<a href="mailto:km_elmet@t-online.de" target="_blank">km_elmet@t-online.de</a>>> wrote:<br>
> <br>
>     On 10.01.2022 01:14, Daniel Carrera wrote:<br>
<br>
> No, I understood that part. However, looking at your pseudocode again, I<br>
> just realized that you choose the random ballot once per strategy_iters<br>
> and reuse that ballot for every single voter that did not prefer w_A:<br>
> <br>
> <span class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small"></span>for 1...<span class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small"></span>strategy_iters:<br>
>         e_B = e_A<br>
>         b_B = random preference order<br>
>         for every ballot B in e_B:<br>
>                 if B ranks c_k ahead of w_A:<br>
>                         B = b_B<br>
>         w_B = winner of e_B according to method M<br>
<span class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small"></span><span class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small"></span>>                 if w_B = c_k:<br>
>                         then strategy successful<br>
> <br>
> That makes a lot more sense now. Now I see what the paper means when it<br>
> says that it gets every voter in the strategic coalition to cast the<br>
> same ballot. When I read your first pseudocode I thought it meant that<br>
> every single voter with c_k > w_A would draw a different random<br>
> permutation. So you see why I was confused and why it didn't work. So I<br>
> fixed this, and fixed other bugs. I also followed your advice and<br>
> switched to "impartial culture".<br>
<br>
Oh, I don't do that; I make each strategic voter's ballot a different<br>
random permutation. I was just saying that if you would like to be more<br>
true to JGA's results, then he chose one common ballot for every<br>
strategist, and you should do the same.<br></blockquote><div><br></div><div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small">Gotcha. Since I want to compare with the paper, I'll do it the way JGA did it. I also realized that for JGA's method you can use a combinatorics package, so instead of running the "strategy_iters" loop you can literally test every possible ballot. For V=99,C = 3 it's really fast, and for C = 6 it takes me 30min for 10,000 elections.<br></div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">My impartial culture results are slightly higher than JGA's, which I am<br>
guessing comes from that I don't restrict the strategic voters in that way.<br></blockquote><div><br></div><div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small">Your method sounds expensive. My intuition is that it must take a great deal of luck to find a random assignment of ballots for each voter that changes the election result. I mean... it's an enormous parameter space:</div></div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small">(num candidates) x (num voters that prefer c_k > w_A)^( (num candidates)! )</div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small"><br></div><div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small">What value do you use for `strategy_iters`? One obvious optimization is to first check if JGA's method works before doing the expensive loop.</div></div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">(In addition, impartial culture is not particularly realistic, but it<br>
makes for a good test case for reproducibility.)<br>
</blockquote></div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small">Yeah. I ignored impartial culture at first for that reason, but for the purpose of testing the code I think it was helpful.</div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small">Cheers,</div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><font face="trebuchet ms, sans-serif">Dr. Daniel Carrera</font></div><div dir="ltr"><font face="trebuchet ms, sans-serif">Postdoctoral Research Associate</font></div><div><font face="trebuchet ms, sans-serif">Iowa State University</font></div></div></div></div></div></div></div></div></div></div></div>