top | item 13670233

Rigging elections with integer linear programming

91 points| DRMacIver | 9 years ago |drmaciver.com

21 comments

order

joe_the_user|9 years ago

While there's nothing overtly political in the post, I'd mention that factors like this are much more likely to enter real world consideration when you have a situation where "right and left have broken down".

In particular, the median voter theorem states: "The median voter theorem states that 'a majority rule voting system will select the outcome most preferred by the median voter'" - IF (big if) "voters can place all election alternatives along a one-dimensional political spectrum."

https://en.wikipedia.org/wiki/Median_voter_theorem

dragonwriter|9 years ago

Neither of the two key conditions for median voter theorem tend to hold true in the real world; not only are real political alternatives not unidimensional (even in the US, which has very low dimensionality in political discourse and identity compared to most modern democracies), but distribution of political views tends not to be unimodal, which is also required for median voter theorem.

espeed|9 years ago

Not directly related to voting, but a while back someone gave a talk or there was a book/lecture that used an example that went something like this:

"Two doctors give you an independent diagnosis: One doctor says there's a 99% chance it's disease A, but there's a 1% chance it's disease B. The other doctor says there's 99% chance it's disease C, but there's a 1% chance it's disease B. Question: What's the most likely outcome? Answer: It's most likely disease B, the point where both doctors/experts agree (even though they both only give it a 1% chance of being true)."

Does anyone recall where that example comes from? I wanted to cite it the other day.

kevinwang|9 years ago

Don't you need some prior to conclude that? Or is this like a frequentist thing?

Smudge|9 years ago

The book How Not to Be Wrong: The Power of Mathematical Thinking[1] by Jordan Ellenberg has a segment on this with similar examples (minus the programming bits), tying it in to human psychology and, with surprising insight, the behavior of slime molds. Would definitely recommend reading if you find these kinds of topics interesting.

[1]: http://amzn.to/2kHiROT

kordless|9 years ago

An election is easy to rig if the roll relies on two databases for confirmation. I believe, at least in Contra Costa County, that someone tampered with one of the roll DBs, which then caused a large number of people to be given provisional ballots (deduced from noting a high number of names were highlighted in the main roll I signed during voting). If you got a provisional ballot in Contra Costa County during the election, holler at me!

dispo001|9 years ago

I came up with this one all by myself (which is probably known by some elegant name and has some sophisticated documentation that I'm not aware of) I think it shows representation cant actually work because you cant have boolean logic if multiple "yes" each have to compete with a single "no". Ill keep it simple but the effect gets more dramatical if there are more candidates.

Say, there are 3 candidates and only 1 agenda point: 1 supports the idea and 2 are against it. The later 2 get 33% of the votes each and the first gets 34%. The unpopular idea wins while 66% was against it.

It sure seems like one can get a high degree of control over the results by simply adding candidates until the unpopular idea is sufficiently under represented.

It's like, if you have 100 Bernie Sanders sharing the votes you may never get socialism.

gtt|9 years ago

btw, what integer programming solvers are you folks using? A while back I needed integer programming solver in python and options were mostly interfaces to other libraries...

Anything good and free? I understand that commercial solvers are much better, but the price is too high for me.

saosebastiao|9 years ago

CBC works reasonably well...and by reasonably I mean within an order of magnitude of (Xpress, Gurobi, Cplex) solve time most of the time.

leereeves|9 years ago

FYI, some of the < and > symbols in the code are showing up as &lt; and &gt;

q3r3qr3q|9 years ago

I can't believe you're not using Scala there.