Lesson of the day: don't reinvent the wheel.
I've had a strong interest in different voting systems for a few years now. A while back I decided that it would be interesting to write a voting simulator, to compare the empirical results of different voting systems. I considered several ways of doing this.
Ultimately, I ended up generating an arbitrary number of voters, issues, and candidates. Each voter and candidate object had a particular position on each issue. Each voter would then cast its vote according to whatever voting system was being simulated. I primarily tested four systems: plurality, IRV, Condorcet (no cycle breaker), and random. Ties were not considered in the final statistical analysis. I introduced variables for voter ignorance. It was a nice start, but had a lot of work to do.
Well, someone beat me to it. I recently read Gaming the Vote, by William Poundstone. Brilliant book, great analysis of why plurality voting is the root of all political evil, and what better alternatives are out there. Everyone interested should read this. I will buy you a copy. (While supplies last.) Seriously. It's that world-changingly good.
Towards the end, he mentions an academic paper wherein one Warren D. Smith ran the simulations I was interested in, but vastly better than I ever could. His conclusion: range voting leads to the least voter regret, with approval voting close behind. Plurality voting (AKA what we use now) was way at the bottom, with instant-runoff not far ahead.
Based on this, I decided to throw my support behind approval voting, for use in all elections, at all levels of government, everywhere. Why not range voting? Because it's harder to explain, and harder to implement. Complex explanations kill many political ideas. "Instead of voting for one person and none others, vote for all the candidates you like." Done. Approval voting can be adopted without new machines or complex explanations, starting locally. It can fix everything.