As far as solving the problem, maybe we should look at how we count votes. The way it is done know tend to polarize opinions. Maybe something that would average them like Range Voting [0] would be better. That way trying to win election is more about being fit for the majority rather than trying isolate a majority of people. Gerrymandering would become a lot more difficult as people can vote, to a varying degree, for or against you.