Skip to content

Instantly share code, notes, and snippets.

@eteq
Created May 29, 2020 18:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eteq/cbb1d9cd5271964c5dd96196c5efcd24 to your computer and use it in GitHub Desktop.
Save eteq/cbb1d9cd5271964c5dd96196c5efcd24 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import collections\n",
"import random"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [],
"source": [
"class VoteComparison:\n",
" def __init__(self, Nslots, Nvoters, Ncand):\n",
" self.Nslots = Nslots\n",
" self.Nvoters = Nvoters\n",
" self.Ncand = Ncand\n",
" \n",
" def random_votes(self):\n",
" return np.array([np.random.permutation(self.Ncand) for i in range(self.Nvoters)])\n",
" \n",
" def first_vote_winners(self, votes):\n",
" return collections.Counter(votes[:, 0]).most_common()[:self.Nslots]\n",
" \n",
" def n_vote_winners(self, votes, nstocount=None): #None means take all of the votes\n",
" all_votes = []\n",
" if nstocount is None:\n",
" for voteset in votes:\n",
" all_votes.extend(voteset)\n",
" else:\n",
" for voteset, ntocount in zip(votes, nstocount):\n",
" all_votes.extend(voteset[:ntocount])\n",
" return collections.Counter(all_votes).most_common()[:self.Nslots]\n",
" \n",
" def ranked_vote_winners(self, votes):\n",
" winners = []\n",
" losers = []\n",
" removed_cands = []\n",
" while len(winners) < self.Nslots:\n",
" cand_votes = [0 for j in range(self.Ncand)]\n",
" for vote in votes:\n",
" for v in vote:\n",
" if v not in removed_cands:\n",
" cand_votes[v] += 1\n",
" break\n",
" counts = {j:cand_votes[j] for j in range(self.Ncand)}\n",
" ranked_counts = [(j, counts[j]) for j in np.argsort(list(counts.values()))[::-1]]\n",
" if ranked_counts[0][1] != ranked_counts[0][0]:\n",
" #winner!\n",
" winners.append(ranked_counts[0])\n",
" removed_cands.append(ranked_counts[0][0])\n",
" else:\n",
" losers.append(ranked_counts[-1])\n",
" removed_cands.append(ranked_counts[-1][0])\n",
" if len(removed_cands) >= self.Nslots:\n",
" break\n",
" return winners"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Differences 1 to 2! 0\n",
"[(1, 12), (3, 11), (4, 9)]\n",
"[(1, 12), (3, 15), (0, 19)]\n",
"Differences 1 to 3! 0\n",
"[(1, 12), (3, 11), (4, 9)]\n",
"[(3, 26), (1, 23), (2, 22)]\n",
"Differences 2 to 3! 0\n",
"[(1, 12), (3, 15), (0, 19)]\n",
"[(3, 26), (1, 23), (2, 22)]\n",
"Differences 1 to 3! 1\n",
"[(0, 12), (1, 12), (4, 11)]\n",
"[(1, 27), (3, 19), (0, 18)]\n",
"Differences 2 to 3! 1\n",
"[(1, 12), (4, 14), (0, 22)]\n",
"[(1, 27), (3, 19), (0, 18)]\n",
"Differences 1 to 3! 2\n",
"[(4, 13), (2, 11), (3, 10)]\n",
"[(2, 26), (3, 24), (1, 22)]\n",
"Differences 2 to 3! 2\n",
"[(4, 13), (2, 15), (3, 20)]\n",
"[(2, 26), (3, 24), (1, 22)]\n",
"Differences 1 to 2! 3\n",
"[(3, 14), (2, 11), (4, 9)]\n",
"[(3, 14), (0, 16), (2, 19)]\n",
"Differences 1 to 3! 3\n",
"[(3, 14), (2, 11), (4, 9)]\n",
"[(3, 25), (0, 20), (2, 20)]\n",
"Differences 1 to 3! 4\n",
"[(1, 12), (0, 10), (3, 10)]\n",
"[(4, 24), (2, 24), (1, 23)]\n",
"Differences 2 to 3! 4\n",
"[(1, 12), (0, 15), (3, 19)]\n",
"[(4, 24), (2, 24), (1, 23)]\n",
"Differences 1 to 3! 5\n",
"[(0, 19), (3, 10), (1, 9)]\n",
"[(0, 24), (1, 22), (2, 21)]\n",
"Differences 2 to 3! 5\n",
"[(0, 19), (3, 15), (1, 24)]\n",
"[(0, 24), (1, 22), (2, 21)]\n",
"Differences 1 to 3! 6\n",
"[(2, 12), (4, 11), (3, 10)]\n",
"[(3, 22), (0, 19), (4, 18)]\n",
"Differences 2 to 3! 6\n",
"[(2, 12), (4, 14), (3, 20)]\n",
"[(3, 22), (0, 19), (4, 18)]\n",
"Differences 1 to 2! 7\n",
"[(1, 13), (0, 10), (3, 9)]\n",
"[(1, 13), (4, 14), (3, 18)]\n",
"Differences 1 to 3! 7\n",
"[(1, 13), (0, 10), (3, 9)]\n",
"[(0, 22), (4, 20), (1, 19)]\n",
"Differences 2 to 3! 7\n",
"[(1, 13), (4, 14), (3, 18)]\n",
"[(0, 22), (4, 20), (1, 19)]\n",
"Differences 1 to 3! 8\n",
"[(4, 13), (2, 12), (0, 11)]\n",
"[(2, 25), (3, 20), (0, 20)]\n",
"Differences 2 to 3! 8\n",
"[(4, 13), (2, 15), (0, 20)]\n",
"[(2, 25), (3, 20), (0, 20)]\n",
"Differences 1 to 2! 9\n",
"[(4, 13), (1, 12), (0, 11)]\n",
"[(4, 13), (1, 18), (3, 17)]\n",
"Differences 1 to 3! 9\n",
"[(4, 13), (1, 12), (0, 11)]\n",
"[(0, 24), (2, 22), (3, 21)]\n",
"Differences 2 to 3! 9\n",
"[(4, 13), (1, 18), (3, 17)]\n",
"[(0, 24), (2, 22), (3, 21)]\n",
"Differences 1 to 3! 10\n",
"[(4, 14), (2, 12), (1, 12)]\n",
"[(0, 23), (1, 20), (4, 20)]\n",
"Differences 2 to 3! 10\n",
"[(4, 14), (2, 14), (1, 19)]\n",
"[(0, 23), (1, 20), (4, 20)]\n",
"Differences 1 to 2! 12\n",
"[(3, 12), (1, 11), (4, 10)]\n",
"[(3, 12), (1, 15), (2, 18)]\n",
"Differences 1 to 3! 12\n",
"[(3, 12), (1, 11), (4, 10)]\n",
"[(1, 27), (0, 24), (2, 21)]\n",
"Differences 2 to 3! 12\n",
"[(3, 12), (1, 15), (2, 18)]\n",
"[(1, 27), (0, 24), (2, 21)]\n",
"Differences 1 to 2! 13\n",
"[(2, 13), (4, 12), (0, 10)]\n",
"[(2, 13), (4, 15), (3, 19)]\n",
"Differences 1 to 3! 13\n",
"[(2, 13), (4, 12), (0, 10)]\n",
"[(3, 24), (4, 22), (2, 22)]\n",
"Differences 1 to 3! 15\n",
"[(4, 15), (2, 14), (1, 9)]\n",
"[(4, 25), (3, 24), (2, 24)]\n",
"Differences 2 to 3! 15\n",
"[(4, 15), (2, 20), (1, 20)]\n",
"[(4, 25), (3, 24), (2, 24)]\n",
"Differences 1 to 2! 17\n",
"[(1, 19), (3, 10), (4, 9)]\n",
"[(1, 19), (3, 19), (2, 21)]\n",
"Differences 1 to 3! 17\n",
"[(1, 19), (3, 10), (4, 9)]\n",
"[(2, 24), (1, 22), (3, 22)]\n",
"Differences 1 to 3! 20\n",
"[(4, 13), (2, 11), (3, 10)]\n",
"[(2, 22), (3, 20), (1, 17)]\n",
"Differences 2 to 3! 20\n",
"[(4, 13), (2, 16), (3, 18)]\n",
"[(2, 22), (3, 20), (1, 17)]\n",
"Differences 1 to 3! 21\n",
"[(3, 12), (0, 11), (4, 10)]\n",
"[(4, 21), (3, 20), (1, 20)]\n",
"Differences 2 to 3! 21\n",
"[(3, 12), (0, 16), (4, 19)]\n",
"[(4, 21), (3, 20), (1, 20)]\n",
"Differences 1 to 2! 22\n",
"[(1, 13), (2, 12), (3, 10)]\n",
"[(1, 13), (2, 15), (0, 18)]\n",
"Differences 1 to 3! 22\n",
"[(1, 13), (2, 12), (3, 10)]\n",
"[(3, 20), (0, 19), (4, 19)]\n",
"Differences 2 to 3! 22\n",
"[(1, 13), (2, 15), (0, 18)]\n",
"[(3, 20), (0, 19), (4, 19)]\n",
"Differences 1 to 3! 23\n",
"[(4, 14), (1, 13), (0, 12)]\n",
"[(1, 24), (4, 21), (2, 19)]\n",
"Differences 2 to 3! 23\n",
"[(4, 14), (1, 16), (0, 21)]\n",
"[(1, 24), (4, 21), (2, 19)]\n",
"Differences 1 to 2! 24\n",
"[(1, 16), (2, 11), (3, 8)]\n",
"[(1, 16), (0, 14), (3, 20)]\n",
"Differences 1 to 3! 24\n",
"[(1, 16), (2, 11), (3, 8)]\n",
"[(1, 28), (3, 21), (0, 19)]\n",
"Differences 1 to 3! 25\n",
"[(3, 14), (0, 13), (1, 11)]\n",
"[(1, 21), (3, 20), (2, 18)]\n",
"Differences 2 to 3! 25\n",
"[(3, 14), (0, 17), (1, 19)]\n",
"[(1, 21), (3, 20), (2, 18)]\n",
"Differences 1 to 3! 26\n",
"[(1, 14), (4, 13), (0, 9)]\n",
"[(0, 25), (4, 24), (3, 22)]\n",
"Differences 2 to 3! 26\n",
"[(1, 14), (4, 15), (0, 20)]\n",
"[(0, 25), (4, 24), (3, 22)]\n",
"Differences 1 to 2! 27\n",
"[(1, 13), (2, 12), (0, 11)]\n",
"[(1, 13), (2, 17), (4, 18)]\n",
"Differences 1 to 3! 27\n",
"[(1, 13), (2, 12), (0, 11)]\n",
"[(2, 21), (4, 20), (1, 20)]\n",
"Differences 1 to 3! 29\n",
"[(1, 13), (2, 13), (3, 9)]\n",
"[(1, 21), (3, 21), (4, 19)]\n",
"Differences 2 to 3! 29\n",
"[(2, 13), (1, 19), (3, 25)]\n",
"[(1, 21), (3, 21), (4, 19)]\n",
"Differences 1 to 2! 30\n",
"[(4, 13), (3, 11), (2, 9)]\n",
"[(4, 13), (3, 16), (1, 18)]\n",
"Differences 1 to 3! 30\n",
"[(4, 13), (3, 11), (2, 9)]\n",
"[(4, 24), (3, 19), (1, 19)]\n",
"Differences 1 to 3! 31\n",
"[(0, 13), (4, 12), (2, 11)]\n",
"[(1, 21), (4, 20), (2, 20)]\n",
"Differences 2 to 3! 31\n",
"[(0, 13), (4, 16), (2, 18)]\n",
"[(1, 21), (4, 20), (2, 20)]\n",
"Differences 1 to 3! 32\n",
"[(3, 13), (2, 11), (0, 10)]\n",
"[(3, 26), (1, 22), (2, 22)]\n",
"Differences 2 to 3! 32\n",
"[(3, 13), (2, 14), (0, 18)]\n",
"[(3, 26), (1, 22), (2, 22)]\n",
"Differences 1 to 2! 33\n",
"[(0, 12), (4, 11), (3, 10)]\n",
"[(0, 12), (3, 13), (2, 18)]\n",
"Differences 1 to 3! 33\n",
"[(0, 12), (4, 11), (3, 10)]\n",
"[(3, 27), (0, 23), (2, 21)]\n",
"Differences 1 to 3! 34\n",
"[(1, 12), (4, 11), (3, 10)]\n",
"[(4, 22), (1, 19), (2, 19)]\n",
"Differences 2 to 3! 34\n",
"[(1, 12), (4, 15), (3, 20)]\n",
"[(4, 22), (1, 19), (2, 19)]\n",
"Differences 1 to 2! 35\n",
"[(3, 15), (0, 11), (2, 9)]\n",
"[(3, 15), (1, 15), (4, 17)]\n",
"Differences 1 to 3! 35\n",
"[(3, 15), (0, 11), (2, 9)]\n",
"[(3, 21), (1, 21), (2, 20)]\n",
"Differences 2 to 3! 35\n",
"[(3, 15), (1, 15), (4, 17)]\n",
"[(3, 21), (1, 21), (2, 20)]\n",
"Differences 1 to 3! 36\n",
"[(0, 14), (1, 14), (3, 9)]\n",
"[(0, 22), (4, 21), (1, 21)]\n",
"Differences 2 to 3! 36\n",
"[(1, 14), (0, 18), (3, 19)]\n",
"[(0, 22), (4, 21), (1, 21)]\n",
"Differences 1 to 2! 38\n",
"[(4, 16), (1, 11), (2, 8)]\n",
"[(4, 16), (1, 17), (0, 18)]\n",
"Differences 1 to 3! 38\n",
"[(4, 16), (1, 11), (2, 8)]\n",
"[(1, 24), (4, 23), (3, 21)]\n",
"Differences 2 to 3! 38\n",
"[(4, 16), (1, 17), (0, 18)]\n",
"[(1, 24), (4, 23), (3, 21)]\n",
"Differences 1 to 2! 39\n",
"[(1, 15), (2, 11), (0, 9)]\n",
"[(1, 15), (0, 17), (3, 19)]\n",
"Differences 2 to 3! 39\n",
"[(1, 15), (0, 17), (3, 19)]\n",
"[(1, 23), (2, 20), (0, 20)]\n",
"Differences 1 to 2! 43\n",
"[(3, 12), (1, 10), (0, 10)]\n",
"[(3, 12), (4, 13), (2, 19)]\n",
"Differences 1 to 3! 43\n",
"[(3, 12), (1, 10), (0, 10)]\n",
"[(4, 24), (2, 23), (0, 22)]\n",
"Differences 2 to 3! 43\n",
"[(3, 12), (4, 13), (2, 19)]\n",
"[(4, 24), (2, 23), (0, 22)]\n",
"Differences 1 to 2! 44\n",
"[(3, 14), (0, 12), (4, 11)]\n",
"[(3, 14), (1, 15), (2, 18)]\n",
"Differences 1 to 3! 44\n",
"[(3, 14), (0, 12), (4, 11)]\n",
"[(1, 21), (3, 21), (2, 20)]\n",
"Differences 1 to 2! 45\n",
"[(3, 16), (0, 10), (2, 9)]\n",
"[(3, 16), (1, 14), (4, 18)]\n",
"Differences 2 to 3! 45\n",
"[(3, 16), (1, 14), (4, 18)]\n",
"[(3, 30), (0, 23), (2, 20)]\n",
"Differences 1 to 3! 46\n",
"[(4, 15), (1, 14), (0, 8)]\n",
"[(3, 26), (4, 26), (0, 25)]\n",
"Differences 2 to 3! 46\n",
"[(4, 15), (1, 19), (0, 21)]\n",
"[(3, 26), (4, 26), (0, 25)]\n",
"Differences 1 to 2! 50\n",
"[(1, 11), (3, 11), (4, 11)]\n",
"[(4, 11), (0, 15), (1, 19)]\n",
"Differences 1 to 3! 50\n",
"[(1, 11), (3, 11), (4, 11)]\n",
"[(1, 25), (3, 23), (0, 23)]\n",
"Differences 2 to 3! 50\n",
"[(4, 11), (0, 15), (1, 19)]\n",
"[(1, 25), (3, 23), (0, 23)]\n",
"Differences 1 to 2! 51\n",
"[(4, 16), (3, 10), (0, 10)]\n",
"[(4, 16), (0, 16), (1, 21)]\n",
"Differences 1 to 3! 51\n",
"[(4, 16), (3, 10), (0, 10)]\n",
"[(4, 21), (0, 19), (1, 18)]\n",
"Differences 1 to 3! 52\n",
"[(0, 13), (4, 11), (2, 11)]\n",
"[(0, 28), (1, 23), (2, 23)]\n",
"Differences 2 to 3! 52\n",
"[(0, 13), (2, 15), (4, 17)]\n",
"[(0, 28), (1, 23), (2, 23)]\n",
"Differences 1 to 2! 53\n",
"[(2, 14), (1, 11), (0, 10)]\n",
"[(2, 14), (1, 16), (3, 23)]\n",
"Differences 1 to 3! 53\n",
"[(2, 14), (1, 11), (0, 10)]\n",
"[(3, 23), (1, 20), (2, 19)]\n",
"Differences 1 to 2! 54\n",
"[(2, 13), (1, 10), (0, 10)]\n",
"[(2, 13), (0, 15), (3, 18)]\n",
"Differences 2 to 3! 54\n",
"[(2, 13), (0, 15), (3, 18)]\n",
"[(2, 23), (0, 19), (1, 18)]\n",
"Differences 1 to 2! 55\n",
"[(0, 18), (2, 12), (4, 8)]\n",
"[(0, 18), (2, 15), (3, 17)]\n",
"Differences 1 to 3! 55\n",
"[(0, 18), (2, 12), (4, 8)]\n",
"[(0, 23), (1, 20), (2, 17)]\n",
"Differences 2 to 3! 55\n",
"[(0, 18), (2, 15), (3, 17)]\n",
"[(0, 23), (1, 20), (2, 17)]\n",
"Differences 1 to 2! 57\n",
"[(0, 14), (3, 12), (2, 9)]\n",
"[(0, 14), (1, 15), (3, 19)]\n",
"Differences 1 to 3! 57\n",
"[(0, 14), (3, 12), (2, 9)]\n",
"[(0, 27), (1, 22), (4, 22)]\n",
"Differences 2 to 3! 57\n",
"[(0, 14), (1, 15), (3, 19)]\n",
"[(0, 27), (1, 22), (4, 22)]\n",
"Differences 1 to 2! 58\n",
"[(3, 12), (0, 11), (1, 10)]\n",
"[(3, 12), (1, 16), (4, 18)]\n",
"Differences 2 to 3! 58\n",
"[(3, 12), (1, 16), (4, 18)]\n",
"[(3, 22), (1, 21), (0, 20)]\n",
"Differences 1 to 3! 59\n",
"[(2, 14), (3, 10), (0, 9)]\n",
"[(2, 26), (4, 23), (3, 22)]\n",
"Differences 2 to 3! 59\n",
"[(2, 14), (0, 14), (3, 20)]\n",
"[(2, 26), (4, 23), (3, 22)]\n",
"Differences 1 to 2! 61\n",
"[(1, 11), (2, 11), (0, 10)]\n",
"[(2, 11), (4, 15), (0, 21)]\n",
"Differences 1 to 3! 61\n",
"[(1, 11), (2, 11), (0, 10)]\n",
"[(0, 23), (3, 21), (4, 19)]\n",
"Differences 2 to 3! 61\n",
"[(2, 11), (4, 15), (0, 21)]\n",
"[(0, 23), (3, 21), (4, 19)]\n",
"Differences 1 to 2! 62\n",
"[(4, 12), (2, 11), (1, 9)]\n",
"[(4, 12), (0, 14), (3, 17)]\n",
"Differences 1 to 3! 62\n",
"[(4, 12), (2, 11), (1, 9)]\n",
"[(3, 22), (0, 20), (4, 19)]\n",
"Differences 1 to 3! 64\n",
"[(4, 17), (3, 11), (0, 8)]\n",
"[(3, 23), (0, 21), (2, 21)]\n",
"Differences 2 to 3! 64\n",
"[(4, 17), (3, 17), (0, 18)]\n",
"[(3, 23), (0, 21), (2, 21)]\n",
"Differences 1 to 3! 65\n",
"[(0, 13), (3, 11), (4, 9)]\n",
"[(2, 23), (0, 21), (3, 20)]\n",
"Differences 2 to 3! 65\n",
"[(0, 13), (3, 14), (4, 19)]\n",
"[(2, 23), (0, 21), (3, 20)]\n",
"Differences 1 to 2! 66\n",
"[(3, 12), (2, 10), (4, 10)]\n",
"[(3, 12), (1, 16), (0, 18)]\n",
"Differences 2 to 3! 66\n",
"[(3, 12), (1, 16), (0, 18)]\n",
"[(4, 19), (3, 18), (2, 17)]\n",
"Differences 1 to 3! 67\n",
"[(1, 12), (3, 11), (4, 10)]\n",
"[(2, 23), (4, 20), (3, 20)]\n",
"Differences 2 to 3! 67\n",
"[(1, 12), (3, 16), (4, 20)]\n",
"[(2, 23), (4, 20), (3, 20)]\n",
"Differences 1 to 2! 68\n",
"[(3, 15), (2, 11), (4, 9)]\n",
"[(3, 15), (0, 16), (4, 20)]\n",
"Differences 1 to 3! 68\n",
"[(3, 15), (2, 11), (4, 9)]\n",
"[(4, 20), (0, 18), (3, 17)]\n",
"Differences 1 to 2! 69\n",
"[(4, 16), (0, 12), (2, 8)]\n",
"[(4, 16), (0, 19), (1, 19)]\n",
"Differences 1 to 3! 69\n",
"[(4, 16), (0, 12), (2, 8)]\n",
"[(4, 26), (1, 23), (0, 20)]\n",
"Differences 1 to 2! 70\n",
"[(0, 17), (4, 12), (2, 8)]\n",
"[(0, 17), (4, 17), (1, 21)]\n",
"Differences 1 to 3! 70\n",
"[(0, 17), (4, 12), (2, 8)]\n",
"[(0, 28), (4, 22), (1, 21)]\n",
"Differences 1 to 3! 71\n",
"[(2, 12), (3, 11), (4, 9)]\n",
"[(3, 25), (2, 21), (1, 19)]\n",
"Differences 2 to 3! 71\n",
"[(2, 12), (4, 14), (3, 20)]\n",
"[(3, 25), (2, 21), (1, 19)]\n",
"Differences 1 to 2! 72\n",
"[(1, 16), (3, 10), (4, 9)]\n",
"[(1, 16), (4, 15), (2, 20)]\n",
"Differences 2 to 3! 72\n",
"[(1, 16), (4, 15), (2, 20)]\n",
"[(1, 26), (3, 23), (4, 21)]\n",
"Differences 1 to 3! 73\n",
"[(4, 14), (2, 13), (1, 11)]\n",
"[(3, 19), (4, 19), (2, 19)]\n",
"Differences 2 to 3! 73\n",
"[(4, 14), (2, 16), (1, 17)]\n",
"[(3, 19), (4, 19), (2, 19)]\n",
"Differences 1 to 2! 75\n",
"[(1, 14), (3, 12), (2, 10)]\n",
"[(1, 14), (2, 15), (4, 19)]\n",
"Differences 1 to 3! 75\n",
"[(1, 14), (3, 12), (2, 10)]\n",
"[(4, 21), (1, 21), (2, 20)]\n",
"Differences 1 to 3! 76\n",
"[(1, 12), (3, 11), (4, 11)]\n",
"[(3, 27), (2, 25), (0, 23)]\n",
"Differences 2 to 3! 76\n",
"[(1, 12), (4, 14), (3, 18)]\n",
"[(3, 27), (2, 25), (0, 23)]\n",
"Differences 1 to 2! 77\n",
"[(0, 12), (1, 11), (3, 10)]\n",
"[(0, 12), (4, 13), (1, 20)]\n",
"Differences 1 to 3! 77\n",
"[(0, 12), (1, 11), (3, 10)]\n",
"[(4, 21), (3, 20), (2, 19)]\n",
"Differences 2 to 3! 77\n",
"[(0, 12), (4, 13), (1, 20)]\n",
"[(4, 21), (3, 20), (2, 19)]\n",
"Differences 1 to 2! 78\n",
"[(4, 15), (2, 12), (3, 8)]\n",
"[(4, 15), (1, 15), (2, 19)]\n",
"Differences 1 to 3! 78\n",
"[(4, 15), (2, 12), (3, 8)]\n",
"[(2, 26), (1, 24), (4, 22)]\n",
"Differences 1 to 2! 79\n",
"[(2, 13), (1, 12), (4, 10)]\n",
"[(2, 13), (1, 14), (3, 18)]\n",
"Differences 1 to 3! 79\n",
"[(2, 13), (1, 12), (4, 10)]\n",
"[(4, 22), (2, 20), (3, 20)]\n",
"Differences 2 to 3! 79\n",
"[(2, 13), (1, 14), (3, 18)]\n",
"[(4, 22), (2, 20), (3, 20)]\n",
"Differences 1 to 2! 82\n",
"[(4, 15), (3, 10), (1, 10)]\n",
"[(4, 15), (0, 14), (3, 20)]\n",
"Differences 1 to 3! 82\n",
"[(4, 15), (3, 10), (1, 10)]\n",
"[(0, 21), (4, 21), (1, 16)]\n",
"Differences 2 to 3! 82\n",
"[(4, 15), (0, 14), (3, 20)]\n",
"[(0, 21), (4, 21), (1, 16)]\n",
"Differences 1 to 2! 83\n",
"[(2, 13), (1, 12), (0, 10)]\n",
"[(2, 13), (3, 14), (1, 21)]\n",
"Differences 1 to 3! 83\n",
"[(2, 13), (1, 12), (0, 10)]\n",
"[(1, 25), (3, 24), (2, 22)]\n",
"Differences 1 to 2! 85\n",
"[(0, 14), (1, 12), (2, 10)]\n",
"[(0, 14), (1, 14), (4, 18)]\n",
"Differences 1 to 3! 85\n",
"[(0, 14), (1, 12), (2, 10)]\n",
"[(4, 24), (2, 24), (3, 23)]\n",
"Differences 2 to 3! 85\n",
"[(0, 14), (1, 14), (4, 18)]\n",
"[(4, 24), (2, 24), (3, 23)]\n",
"Differences 1 to 2! 86\n",
"[(4, 15), (2, 13), (1, 11)]\n",
"[(4, 15), (2, 16), (3, 20)]\n",
"Differences 1 to 3! 86\n",
"[(4, 15), (2, 13), (1, 11)]\n",
"[(4, 29), (3, 23), (2, 20)]\n",
"Differences 1 to 2! 88\n",
"[(0, 13), (4, 11), (2, 10)]\n",
"[(0, 13), (2, 15), (3, 17)]\n",
"Differences 1 to 3! 88\n",
"[(0, 13), (4, 11), (2, 10)]\n",
"[(2, 28), (3, 25), (0, 22)]\n",
"Differences 1 to 3! 90\n",
"[(4, 14), (3, 12), (2, 11)]\n",
"[(4, 24), (1, 24), (3, 20)]\n",
"Differences 2 to 3! 90\n",
"[(4, 14), (2, 15), (3, 18)]\n",
"[(4, 24), (1, 24), (3, 20)]\n",
"Differences 1 to 3! 91\n",
"[(1, 20), (2, 11), (4, 8)]\n",
"[(0, 25), (1, 25), (2, 22)]\n",
"Differences 2 to 3! 91\n",
"[(1, 20), (2, 15), (4, 24)]\n",
"[(0, 25), (1, 25), (2, 22)]\n",
"Differences 1 to 2! 92\n",
"[(1, 13), (2, 12), (3, 10)]\n",
"[(1, 13), (2, 14), (4, 19)]\n",
"Differences 1 to 3! 92\n",
"[(1, 13), (2, 12), (3, 10)]\n",
"[(1, 23), (4, 22), (0, 21)]\n",
"Differences 2 to 3! 92\n",
"[(1, 13), (2, 14), (4, 19)]\n",
"[(1, 23), (4, 22), (0, 21)]\n",
"Differences 1 to 3! 93\n",
"[(2, 15), (0, 12), (3, 9)]\n",
"[(2, 22), (1, 19), (0, 17)]\n",
"Differences 2 to 3! 93\n",
"[(2, 15), (0, 15), (3, 18)]\n",
"[(2, 22), (1, 19), (0, 17)]\n",
"Differences 1 to 2! 94\n",
"[(1, 14), (2, 13), (3, 10)]\n",
"[(1, 14), (2, 16), (4, 19)]\n",
"Differences 1 to 3! 94\n",
"[(1, 14), (2, 13), (3, 10)]\n",
"[(4, 27), (1, 27), (3, 23)]\n",
"Differences 2 to 3! 94\n",
"[(1, 14), (2, 16), (4, 19)]\n",
"[(4, 27), (1, 27), (3, 23)]\n",
"Differences 1 to 3! 95\n",
"[(3, 14), (0, 11), (4, 10)]\n",
"[(4, 23), (0, 19), (1, 17)]\n",
"Differences 2 to 3! 95\n",
"[(3, 14), (0, 18), (4, 20)]\n",
"[(4, 23), (0, 19), (1, 17)]\n",
"Differences 1 to 3! 96\n",
"[(2, 14), (3, 12), (1, 12)]\n",
"[(1, 33), (3, 24), (4, 20)]\n",
"Differences 2 to 3! 96\n",
"[(2, 14), (1, 19), (3, 22)]\n",
"[(1, 33), (3, 24), (4, 20)]\n",
"Differences 1 to 2! 99\n",
"[(0, 13), (1, 10), (2, 10)]\n",
"[(0, 13), (4, 14), (1, 19)]\n",
"Differences 2 to 3! 99\n",
"[(0, 13), (4, 14), (1, 19)]\n",
"[(1, 23), (2, 22), (0, 21)]\n"
]
},
{
"data": {
"text/plain": [
"(0.44, 0.69, 0.57)"
]
},
"execution_count": 76,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ntest = 100\n",
"diffs12 = diffs23 = diffs13 = 0\n",
"\n",
"vc = VoteComparison(3, 50, 5)\n",
"\n",
"v1 = []\n",
"v2 = []\n",
"v3 = []\n",
"for i in range(ntest):\n",
" votes = vc.random_votes()\n",
" nstocount = np.random.randint(vc.Ncand, size=vc.Nvoters)\n",
" v1.append(vc.first_vote_winners(votes))\n",
" v2.append(vc.ranked_vote_winners(votes))\n",
" v3.append(vc.n_vote_winners(votes, nstocount))\n",
" winners1 = [v[0] for v in v1[-1]]\n",
" winners2 = [v[0] for v in v2[-1]]\n",
" winners3 = [v[0] for v in v3[-1]]\n",
" if set(winners1) != set(winners2):\n",
" print('Differences 1 to 2!', i)\n",
" diffs12 +=1\n",
" print(v1[-1])\n",
" print(v2[-1])\n",
" if set(winners1) != set(winners3):\n",
" print('Differences 1 to 3!', i)\n",
" diffs13 +=1\n",
" print(v1[-1])\n",
" print(v3[-1])\n",
" if set(winners2) != set(winners3):\n",
" print('Differences 2 to 3!', i)\n",
" diffs23 +=1\n",
" print(v2[-1])\n",
" print(v3[-1])\n",
" \n",
"diffs12/ntest, diffs13/ntest, diffs23/ntest"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Differences 1 to 2! 0\n",
"[(3, 13), (2, 13), (0, 12)]\n",
"[(3, 13), (0, 17), (1, 23)]\n",
"Differences 1 to 3! 0\n",
"[(3, 13), (2, 13), (0, 12)]\n",
"[(0, 21), (1, 21), (2, 19)]\n",
"Differences 2 to 3! 0\n",
"[(3, 13), (0, 17), (1, 23)]\n",
"[(0, 21), (1, 21), (2, 19)]\n",
"Differences 1 to 3! 2\n",
"[(1, 16), (2, 12), (0, 10)]\n",
"[(1, 26), (0, 25), (3, 14)]\n",
"Differences 2 to 3! 2\n",
"[(1, 16), (0, 20), (2, 23)]\n",
"[(1, 26), (0, 25), (3, 14)]\n",
"Differences 1 to 3! 3\n",
"[(0, 19), (1, 12), (2, 9)]\n",
"[(0, 22), (1, 21), (3, 12)]\n",
"Differences 2 to 3! 3\n",
"[(0, 19), (1, 20), (2, 22)]\n",
"[(0, 22), (1, 21), (3, 12)]\n",
"Differences 1 to 2! 6\n",
"[(1, 15), (2, 11), (0, 11)]\n",
"[(1, 15), (0, 18), (3, 22)]\n",
"Differences 2 to 3! 6\n",
"[(1, 15), (0, 18), (3, 22)]\n",
"[(1, 22), (2, 21), (0, 20)]\n",
"Differences 1 to 2! 7\n",
"[(0, 21), (1, 15), (3, 6)]\n",
"[(0, 21), (1, 20), (2, 27)]\n",
"Differences 1 to 3! 7\n",
"[(0, 21), (1, 15), (3, 6)]\n",
"[(0, 26), (1, 18), (2, 14)]\n",
"Differences 1 to 2! 13\n",
"[(0, 16), (2, 12), (3, 8)]\n",
"[(0, 16), (3, 13), (1, 20)]\n",
"Differences 1 to 3! 13\n",
"[(0, 16), (2, 12), (3, 8)]\n",
"[(0, 22), (2, 14), (1, 13)]\n",
"Differences 2 to 3! 13\n",
"[(0, 16), (3, 13), (1, 20)]\n",
"[(0, 22), (2, 14), (1, 13)]\n",
"Differences 1 to 2! 14\n",
"[(0, 14), (1, 13), (2, 11)]\n",
"[(0, 14), (1, 19), (3, 20)]\n",
"Differences 2 to 3! 14\n",
"[(0, 14), (1, 19), (3, 20)]\n",
"[(1, 28), (2, 19), (0, 18)]\n",
"Differences 1 to 2! 15\n",
"[(0, 19), (1, 11), (3, 9)]\n",
"[(0, 19), (2, 16), (1, 25)]\n",
"Differences 1 to 3! 15\n",
"[(0, 19), (1, 11), (3, 9)]\n",
"[(0, 27), (2, 19), (1, 16)]\n",
"Differences 1 to 2! 16\n",
"[(0, 16), (1, 13), (3, 11)]\n",
"[(0, 16), (1, 19), (2, 24)]\n",
"Differences 1 to 3! 16\n",
"[(0, 16), (1, 13), (3, 11)]\n",
"[(0, 30), (1, 28), (2, 21)]\n",
"Differences 1 to 3! 21\n",
"[(0, 19), (1, 12), (2, 10)]\n",
"[(1, 26), (0, 23), (3, 17)]\n",
"Differences 2 to 3! 21\n",
"[(0, 19), (1, 21), (2, 22)]\n",
"[(1, 26), (0, 23), (3, 17)]\n",
"Differences 1 to 2! 25\n",
"[(0, 17), (1, 15), (3, 10)]\n",
"[(0, 17), (1, 21), (2, 21)]\n",
"Differences 2 to 3! 25\n",
"[(0, 17), (1, 21), (2, 21)]\n",
"[(0, 25), (1, 22), (3, 20)]\n",
"Differences 1 to 2! 30\n",
"[(0, 18), (1, 17), (3, 6)]\n",
"[(0, 18), (1, 24), (2, 24)]\n",
"Differences 2 to 3! 30\n",
"[(0, 18), (1, 24), (2, 24)]\n",
"[(0, 28), (1, 26), (3, 16)]\n",
"Differences 1 to 2! 31\n",
"[(0, 18), (1, 16), (3, 8)]\n",
"[(0, 18), (1, 24), (2, 25)]\n",
"Differences 1 to 3! 31\n",
"[(0, 18), (1, 16), (3, 8)]\n",
"[(1, 34), (0, 24), (2, 19)]\n",
"Differences 1 to 2! 35\n",
"[(0, 21), (3, 11), (2, 8)]\n",
"[(0, 21), (1, 17), (2, 26)]\n",
"Differences 1 to 3! 35\n",
"[(0, 21), (3, 11), (2, 8)]\n",
"[(0, 33), (1, 24), (2, 21)]\n",
"Differences 1 to 2! 36\n",
"[(0, 17), (1, 12), (3, 7)]\n",
"[(0, 17), (1, 21), (2, 23)]\n",
"Differences 1 to 3! 36\n",
"[(0, 17), (1, 12), (3, 7)]\n",
"[(0, 25), (1, 19), (2, 19)]\n",
"Differences 1 to 2! 39\n",
"[(0, 15), (3, 12), (1, 11)]\n",
"[(0, 15), (1, 17), (2, 23)]\n",
"Differences 1 to 3! 39\n",
"[(0, 15), (3, 12), (1, 11)]\n",
"[(0, 27), (1, 19), (2, 18)]\n",
"Differences 1 to 2! 42\n",
"[(0, 21), (1, 15), (3, 5)]\n",
"[(0, 21), (1, 26), (2, 20)]\n",
"Differences 1 to 3! 42\n",
"[(0, 21), (1, 15), (3, 5)]\n",
"[(0, 27), (1, 23), (2, 14)]\n",
"Differences 1 to 2! 43\n",
"[(0, 18), (1, 15), (2, 7)]\n",
"[(0, 18), (1, 23), (3, 24)]\n",
"Differences 1 to 3! 43\n",
"[(0, 18), (1, 15), (2, 7)]\n",
"[(0, 21), (3, 13), (2, 11)]\n",
"Differences 2 to 3! 43\n",
"[(0, 18), (1, 23), (3, 24)]\n",
"[(0, 21), (3, 13), (2, 11)]\n",
"Differences 1 to 2! 51\n",
"[(0, 20), (2, 13), (4, 7)]\n",
"[(0, 20), (2, 21), (1, 29)]\n",
"Differences 1 to 3! 51\n",
"[(0, 20), (2, 13), (4, 7)]\n",
"[(0, 21), (1, 21), (2, 17)]\n",
"Differences 1 to 2! 52\n",
"[(0, 19), (1, 13), (2, 10)]\n",
"[(0, 19), (1, 20), (3, 22)]\n",
"Differences 2 to 3! 52\n",
"[(0, 19), (1, 20), (3, 22)]\n",
"[(0, 21), (1, 20), (2, 15)]\n",
"Differences 1 to 2! 55\n",
"[(2, 15), (1, 11), (3, 10)]\n",
"[(2, 15), (1, 17), (0, 28)]\n",
"Differences 1 to 3! 55\n",
"[(2, 15), (1, 11), (3, 10)]\n",
"[(0, 22), (2, 18), (1, 18)]\n",
"Differences 1 to 2! 57\n",
"[(0, 20), (1, 9), (3, 8)]\n",
"[(0, 20), (1, 16), (2, 23)]\n",
"Differences 1 to 3! 57\n",
"[(0, 20), (1, 9), (3, 8)]\n",
"[(0, 27), (1, 24), (2, 20)]\n",
"Differences 1 to 2! 59\n",
"[(2, 16), (0, 13), (4, 9)]\n",
"[(2, 16), (0, 22), (1, 23)]\n",
"Differences 1 to 3! 59\n",
"[(2, 16), (0, 13), (4, 9)]\n",
"[(0, 26), (2, 18), (1, 17)]\n",
"Differences 1 to 2! 68\n",
"[(0, 21), (3, 10), (2, 9)]\n",
"[(0, 21), (2, 18), (1, 23)]\n",
"Differences 1 to 3! 68\n",
"[(0, 21), (3, 10), (2, 9)]\n",
"[(0, 32), (2, 21), (1, 19)]\n",
"Differences 1 to 2! 69\n",
"[(1, 17), (0, 16), (3, 7)]\n",
"[(1, 17), (0, 27), (2, 22)]\n",
"Differences 1 to 3! 69\n",
"[(1, 17), (0, 16), (3, 7)]\n",
"[(0, 27), (1, 23), (2, 20)]\n",
"Differences 1 to 2! 70\n",
"[(0, 19), (1, 15), (3, 10)]\n",
"[(0, 19), (1, 25), (2, 21)]\n",
"Differences 2 to 3! 70\n",
"[(0, 19), (1, 25), (2, 21)]\n",
"[(1, 29), (0, 23), (3, 17)]\n",
"Differences 1 to 2! 71\n",
"[(0, 12), (2, 11), (3, 10)]\n",
"[(0, 12), (1, 16), (2, 22)]\n",
"Differences 1 to 3! 71\n",
"[(0, 12), (2, 11), (3, 10)]\n",
"[(0, 26), (1, 24), (2, 20)]\n",
"Differences 1 to 3! 72\n",
"[(0, 19), (1, 15), (3, 8)]\n",
"[(1, 30), (0, 22), (2, 15)]\n",
"Differences 2 to 3! 72\n",
"[(0, 19), (1, 24), (3, 22)]\n",
"[(1, 30), (0, 22), (2, 15)]\n",
"Differences 1 to 2! 77\n",
"[(1, 17), (0, 13), (3, 9)]\n",
"[(1, 17), (0, 22), (2, 24)]\n",
"Differences 1 to 3! 77\n",
"[(1, 17), (0, 13), (3, 9)]\n",
"[(1, 27), (0, 25), (2, 20)]\n",
"Differences 1 to 2! 82\n",
"[(2, 15), (0, 14), (3, 11)]\n",
"[(2, 15), (0, 19), (1, 28)]\n",
"Differences 1 to 3! 82\n",
"[(2, 15), (0, 14), (3, 11)]\n",
"[(0, 26), (1, 21), (2, 20)]\n",
"Differences 1 to 3! 84\n",
"[(0, 17), (1, 17), (2, 8)]\n",
"[(0, 26), (1, 25), (3, 13)]\n",
"Differences 2 to 3! 84\n",
"[(1, 17), (0, 23), (2, 22)]\n",
"[(0, 26), (1, 25), (3, 13)]\n",
"Differences 1 to 2! 91\n",
"[(0, 22), (1, 13), (3, 7)]\n",
"[(0, 22), (1, 18), (2, 26)]\n",
"Differences 1 to 3! 91\n",
"[(0, 22), (1, 13), (3, 7)]\n",
"[(0, 23), (2, 21), (1, 17)]\n",
"Differences 1 to 3! 93\n",
"[(0, 20), (1, 12), (3, 8)]\n",
"[(0, 26), (1, 18), (2, 15)]\n",
"Differences 2 to 3! 93\n",
"[(0, 20), (1, 17), (3, 22)]\n",
"[(0, 26), (1, 18), (2, 15)]\n",
"Differences 1 to 2! 95\n",
"[(0, 16), (1, 15), (3, 11)]\n",
"[(0, 16), (1, 21), (2, 23)]\n",
"Differences 1 to 3! 95\n",
"[(0, 16), (1, 15), (3, 11)]\n",
"[(1, 24), (0, 21), (2, 19)]\n",
"Differences 1 to 2! 96\n",
"[(0, 23), (1, 9), (3, 9)]\n",
"[(0, 23), (1, 20), (2, 22)]\n",
"Differences 1 to 3! 96\n",
"[(0, 23), (1, 9), (3, 9)]\n",
"[(0, 26), (1, 23), (2, 19)]\n"
]
},
{
"data": {
"text/plain": [
"(0.29, 0.29, 0.15)"
]
},
"execution_count": 77,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def weighted_votes(Ncand, Nvoters):\n",
" votes = []\n",
" for i in range(Nvoters):\n",
" w = [5, 4,3,2,1]\n",
" votes.append(np.random.choice(5, 3, replace=False, p=w/np.sum(w)))\n",
" return np.array(votes)\n",
"\n",
"ntest = 100\n",
"diffs12 = diffs23 = diffs13 = 0\n",
"\n",
"vc = VoteComparison(3, 50, 5)\n",
"\n",
"v1 = []\n",
"v2 = []\n",
"v3 = []\n",
"for i in range(ntest):\n",
" votes = weighted_votes(vc.Ncand, vc.Nvoters)\n",
" nstocount = np.random.randint(vc.Ncand, size=vc.Nvoters)\n",
" v1.append(vc.first_vote_winners(votes))\n",
" v2.append(vc.ranked_vote_winners(votes))\n",
" v3.append(vc.n_vote_winners(votes, nstocount))\n",
" winners1 = [v[0] for v in v1[-1]]\n",
" winners2 = [v[0] for v in v2[-1]]\n",
" winners3 = [v[0] for v in v3[-1]]\n",
" if set(winners1) != set(winners2):\n",
" print('Differences 1 to 2!', i)\n",
" diffs12 +=1\n",
" print(v1[-1])\n",
" print(v2[-1])\n",
" if set(winners1) != set(winners3):\n",
" print('Differences 1 to 3!', i)\n",
" diffs13 +=1\n",
" print(v1[-1])\n",
" print(v3[-1])\n",
" if set(winners2) != set(winners3):\n",
" print('Differences 2 to 3!', i)\n",
" diffs23 +=1\n",
" print(v2[-1])\n",
" print(v3[-1])\n",
" \n",
"diffs12/ntest, diffs13/ntest, diffs23/ntest"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Differences 1 to 2! 0\n",
"[(1, 20), (0, 10), (3, 9)]\n",
"[(1, 20), (0, 18), (2, 25)]\n",
"Differences 1 to 3! 0\n",
"[(1, 20), (0, 10), (3, 9)]\n",
"[(0, 44), (1, 37), (2, 34)]\n",
"Differences 1 to 2! 8\n",
"[(0, 16), (2, 13), (3, 11)]\n",
"[(0, 16), (2, 18), (1, 23)]\n",
"Differences 1 to 3! 8\n",
"[(0, 16), (2, 13), (3, 11)]\n",
"[(0, 43), (1, 39), (2, 32)]\n",
"Differences 1 to 2! 10\n",
"[(0, 27), (2, 8), (3, 7)]\n",
"[(0, 27), (1, 18), (2, 22)]\n",
"Differences 1 to 3! 10\n",
"[(0, 27), (2, 8), (3, 7)]\n",
"[(0, 47), (1, 33), (2, 31)]\n",
"Differences 1 to 2! 11\n",
"[(0, 14), (1, 12), (3, 12)]\n",
"[(0, 14), (1, 19), (2, 24)]\n",
"Differences 1 to 3! 11\n",
"[(0, 14), (1, 12), (3, 12)]\n",
"[(0, 39), (1, 39), (2, 32)]\n",
"Differences 1 to 3! 12\n",
"[(0, 21), (1, 12), (3, 8)]\n",
"[(0, 39), (1, 37), (2, 30)]\n",
"Differences 2 to 3! 12\n",
"[(0, 21), (3, 16), (1, 22)]\n",
"[(0, 39), (1, 37), (2, 30)]\n",
"Differences 1 to 2! 19\n",
"[(0, 19), (1, 12), (3, 10)]\n",
"[(0, 19), (1, 19), (2, 26)]\n",
"Differences 1 to 3! 19\n",
"[(0, 19), (1, 12), (3, 10)]\n",
"[(0, 43), (1, 37), (2, 32)]\n",
"Differences 1 to 2! 24\n",
"[(1, 19), (0, 18), (3, 7)]\n",
"[(1, 19), (0, 26), (2, 23)]\n",
"Differences 1 to 3! 24\n",
"[(1, 19), (0, 18), (3, 7)]\n",
"[(0, 43), (1, 38), (2, 30)]\n",
"Differences 1 to 2! 25\n",
"[(0, 13), (2, 11), (3, 11)]\n",
"[(0, 13), (1, 16), (2, 23)]\n",
"Differences 1 to 3! 25\n",
"[(0, 13), (2, 11), (3, 11)]\n",
"[(0, 40), (1, 35), (2, 34)]\n",
"Differences 1 to 2! 29\n",
"[(0, 17), (2, 14), (4, 9)]\n",
"[(0, 17), (2, 20), (1, 24)]\n",
"Differences 1 to 3! 29\n",
"[(0, 17), (2, 14), (4, 9)]\n",
"[(1, 45), (0, 37), (2, 33)]\n",
"Differences 1 to 3! 32\n",
"[(1, 19), (0, 11), (3, 8)]\n",
"[(0, 39), (1, 37), (2, 30)]\n",
"Differences 2 to 3! 32\n",
"[(1, 19), (0, 17), (3, 21)]\n",
"[(0, 39), (1, 37), (2, 30)]\n",
"Differences 1 to 3! 34\n",
"[(0, 18), (1, 12), (4, 8)]\n",
"[(0, 42), (1, 38), (2, 26)]\n",
"Differences 2 to 3! 34\n",
"[(0, 18), (1, 17), (4, 17)]\n",
"[(0, 42), (1, 38), (2, 26)]\n",
"Differences 1 to 2! 35\n",
"[(0, 16), (1, 14), (3, 9)]\n",
"[(0, 16), (1, 20), (2, 22)]\n",
"Differences 1 to 3! 35\n",
"[(0, 16), (1, 14), (3, 9)]\n",
"[(0, 42), (1, 37), (2, 29)]\n",
"Differences 1 to 2! 38\n",
"[(3, 17), (0, 12), (2, 12)]\n",
"[(3, 17), (0, 18), (1, 24)]\n",
"Differences 1 to 3! 38\n",
"[(3, 17), (0, 12), (2, 12)]\n",
"[(2, 40), (0, 39), (1, 34)]\n",
"Differences 2 to 3! 38\n",
"[(3, 17), (0, 18), (1, 24)]\n",
"[(2, 40), (0, 39), (1, 34)]\n",
"Differences 1 to 2! 41\n",
"[(0, 18), (1, 12), (2, 7)]\n",
"[(0, 18), (1, 21), (3, 20)]\n",
"Differences 2 to 3! 41\n",
"[(0, 18), (1, 21), (3, 20)]\n",
"[(0, 43), (1, 42), (2, 27)]\n",
"Differences 1 to 2! 45\n",
"[(0, 13), (1, 11), (3, 9)]\n",
"[(0, 13), (1, 16), (2, 19)]\n",
"Differences 1 to 3! 45\n",
"[(0, 13), (1, 11), (3, 9)]\n",
"[(0, 39), (2, 31), (1, 30)]\n",
"Differences 1 to 3! 47\n",
"[(1, 15), (0, 12), (3, 11)]\n",
"[(0, 40), (1, 36), (2, 32)]\n",
"Differences 2 to 3! 47\n",
"[(1, 15), (0, 16), (3, 21)]\n",
"[(0, 40), (1, 36), (2, 32)]\n",
"Differences 1 to 2! 55\n",
"[(0, 17), (1, 14), (3, 8)]\n",
"[(0, 17), (1, 23), (2, 26)]\n",
"Differences 1 to 3! 55\n",
"[(0, 17), (1, 14), (3, 8)]\n",
"[(0, 38), (1, 36), (2, 35)]\n",
"Differences 1 to 3! 59\n",
"[(3, 13), (0, 13), (1, 12)]\n",
"[(0, 43), (1, 37), (2, 31)]\n",
"Differences 2 to 3! 59\n",
"[(3, 13), (0, 18), (1, 26)]\n",
"[(0, 43), (1, 37), (2, 31)]\n",
"Differences 1 to 2! 63\n",
"[(0, 16), (3, 12), (1, 9)]\n",
"[(0, 16), (1, 17), (2, 20)]\n",
"Differences 1 to 3! 63\n",
"[(0, 16), (3, 12), (1, 9)]\n",
"[(0, 43), (1, 35), (2, 28)]\n",
"Differences 1 to 2! 67\n",
"[(1, 17), (0, 15), (2, 7)]\n",
"[(1, 17), (0, 24), (3, 24)]\n",
"Differences 1 to 3! 67\n",
"[(1, 17), (0, 15), (2, 7)]\n",
"[(1, 42), (0, 39), (3, 29)]\n",
"Differences 1 to 2! 68\n",
"[(1, 18), (2, 14), (3, 9)]\n",
"[(1, 18), (0, 18), (2, 26)]\n",
"Differences 1 to 3! 68\n",
"[(1, 18), (2, 14), (3, 9)]\n",
"[(0, 41), (2, 36), (1, 32)]\n",
"Differences 1 to 2! 69\n",
"[(0, 19), (1, 11), (3, 10)]\n",
"[(0, 19), (3, 17), (2, 24)]\n",
"Differences 1 to 3! 69\n",
"[(0, 19), (1, 11), (3, 10)]\n",
"[(0, 46), (2, 38), (1, 30)]\n",
"Differences 2 to 3! 69\n",
"[(0, 19), (3, 17), (2, 24)]\n",
"[(0, 46), (2, 38), (1, 30)]\n",
"Differences 1 to 3! 72\n",
"[(0, 16), (3, 11), (1, 10)]\n",
"[(0, 43), (1, 35), (2, 30)]\n",
"Differences 2 to 3! 72\n",
"[(0, 16), (1, 21), (3, 23)]\n",
"[(0, 43), (1, 35), (2, 30)]\n",
"Differences 1 to 2! 77\n",
"[(1, 15), (0, 14), (3, 12)]\n",
"[(1, 15), (0, 19), (2, 24)]\n",
"Differences 1 to 3! 77\n",
"[(1, 15), (0, 14), (3, 12)]\n",
"[(0, 43), (1, 36), (2, 33)]\n",
"Differences 1 to 2! 79\n",
"[(0, 15), (1, 11), (3, 10)]\n",
"[(0, 15), (1, 19), (2, 21)]\n",
"Differences 1 to 3! 79\n",
"[(0, 15), (1, 11), (3, 10)]\n",
"[(1, 41), (0, 38), (2, 35)]\n",
"Differences 1 to 3! 81\n",
"[(0, 19), (1, 13), (2, 8)]\n",
"[(0, 41), (1, 37), (3, 28)]\n",
"Differences 2 to 3! 81\n",
"[(0, 19), (1, 18), (2, 22)]\n",
"[(0, 41), (1, 37), (3, 28)]\n",
"Differences 1 to 2! 84\n",
"[(1, 14), (0, 12), (3, 9)]\n",
"[(1, 14), (0, 20), (2, 19)]\n",
"Differences 1 to 3! 84\n",
"[(1, 14), (0, 12), (3, 9)]\n",
"[(0, 41), (1, 38), (2, 26)]\n",
"Differences 1 to 2! 86\n",
"[(0, 17), (1, 13), (2, 11)]\n",
"[(0, 17), (1, 19), (3, 24)]\n",
"Differences 1 to 3! 86\n",
"[(0, 17), (1, 13), (2, 11)]\n",
"[(0, 43), (1, 36), (3, 33)]\n",
"Differences 1 to 2! 91\n",
"[(1, 15), (0, 14), (3, 11)]\n",
"[(1, 15), (0, 20), (2, 21)]\n",
"Differences 1 to 3! 91\n",
"[(1, 15), (0, 14), (3, 11)]\n",
"[(1, 42), (0, 37), (2, 30)]\n",
"Differences 1 to 3! 93\n",
"[(2, 16), (1, 12), (0, 11)]\n",
"[(1, 43), (0, 34), (3, 30)]\n",
"Differences 2 to 3! 93\n",
"[(2, 16), (1, 18), (0, 24)]\n",
"[(1, 43), (0, 34), (3, 30)]\n",
"Differences 1 to 2! 97\n",
"[(0, 18), (1, 12), (3, 9)]\n",
"[(0, 18), (1, 18), (2, 23)]\n",
"Differences 1 to 3! 97\n",
"[(0, 18), (1, 12), (3, 9)]\n",
"[(1, 44), (0, 42), (2, 30)]\n"
]
},
{
"data": {
"text/plain": [
"(0.23, 0.3, 0.11)"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# this differs from the above in that `nstocount` assumes everyone voted for their 3 referred one\n",
"def weighted_votes(Ncand, Nvoters):\n",
" votes = []\n",
" for i in range(Nvoters):\n",
" w = [5, 4, 3, 2, 1]\n",
" votes.append(np.random.choice(5, 3, replace=False, p=w/np.sum(w)))\n",
" return np.array(votes)\n",
"\n",
"ntest = 100\n",
"diffs12 = diffs23 = diffs13 = 0\n",
"\n",
"vc = VoteComparison(3, 50, 5)\n",
"\n",
"v1 = []\n",
"v2 = []\n",
"v3 = []\n",
"for i in range(ntest):\n",
" votes = weighted_votes(vc.Ncand, vc.Nvoters)\n",
" nstocount = None\n",
" v1.append(vc.first_vote_winners(votes))\n",
" v2.append(vc.ranked_vote_winners(votes))\n",
" v3.append(vc.n_vote_winners(votes, nstocount))\n",
" winners1 = [v[0] for v in v1[-1]]\n",
" winners2 = [v[0] for v in v2[-1]]\n",
" winners3 = [v[0] for v in v3[-1]]\n",
" if set(winners1) != set(winners2):\n",
" print('Differences 1 to 2!', i)\n",
" diffs12 +=1\n",
" print(v1[-1])\n",
" print(v2[-1])\n",
" if set(winners1) != set(winners3):\n",
" print('Differences 1 to 3!', i)\n",
" diffs13 +=1\n",
" print(v1[-1])\n",
" print(v3[-1])\n",
" if set(winners2) != set(winners3):\n",
" print('Differences 2 to 3!', i)\n",
" diffs23 +=1\n",
" print(v2[-1])\n",
" print(v3[-1])\n",
" \n",
"diffs12/ntest, diffs13/ntest, diffs23/ntest"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Conclusion: the APE0 scheme is close to STV if there's a clear break (everyone prefers the top 3 over the bottom 2, say), but closer to single-vote if it's more even."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python (astro38)",
"language": "python",
"name": "astro38"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.0"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment