Associate Professor, Tokai University; PhD in Economics
Official Web Site: https://sites.google.com/view/takashikurihara/
#the set of ranking vectors corresponding to linear orders
def rank_L(choice):
import itertools
rlist=list(itertools.permutations(range(1,len(choice)+1)))
ranklist=[list(rlist[i]) for i in range(len(rlist))]
return ranklist
#the set of score vectors corresponding to dichotomous orders
def dic(choice):
data=[0,1]
import itertools
dlist=list(itertools.product(data,repeat=len(choice)))
diclist=[list(dlist[i]) for i in range(len(dlist))]
return diclist
#the set of score vectors corresponding to trichotomous orders
def tri(choice):
data=[-1,0,1]
import itertools
tlist=list(itertools.product(data,repeat=len(choice)))
ticlist=[list(tlist[i]) for i in range(len(tlist))]
return ticlist
#Plurality
def pl(choice,voter,rank):
plrank=[]
for i in range(voter):
plrank.append([])
for j in range(len(choice)):
if rank[i][j]==1:plrank[i].append(1)
else:plrank[i].append(0)
import numpy as np
for i in range(voter-1):
plrank[i+1] = np.array(plrank[i]) + np.array(plrank[i+1])
plwinner=[]
for i in range(len(choice)):
if np.max(plrank[voter-1])==plrank[voter-1][i]:plwinner.append(choice[i])
return plwinner
#Anti-Plurality
def ap(choice,voter,rank):
aprank=[]
for i in range(voter):
aprank.append([])
for i in range(voter):
for j in range(len(choice)):
if rank[i][j]==len(choice):aprank[i].append(-1)
else:aprank[i].append(0)
import numpy as np
for i in range(voter-1):
aprank[i+1] = np.array(aprank[i]) + np.array(aprank[i+1])
apwinner=[]
for i in range(len(choice)):
if np.max(aprank[voter-1])==aprank[voter-1][i]:apwinner.append(choice[i])
return apwinner
#Best-worst
def bw(choice,voter,rank):
bwrank=[]
for i in range(voter):
bwrank.append([])
for i in range(voter):
for j in range(len(choice)):
if rank[i][j]==1:bwrank[i].append(1)
elif rank[i][j]==len(choice):bwrank[i].append(-1)
else:bwrank[i].append(0)
import numpy as np
for i in range(voter-1):
bwrank[i+1] = np.array(bwrank[i]) + np.array(bwrank[i+1])
bwwinner=[]
for i in range(len(choice)):
if np.max(bwrank[voter-1])==bwrank[voter-1][i]:bwwinner.append(choice[i])
return bwwinner
#Borda
def br(choice,voter,rank):
brrank=[]
for i in range(voter):
brrank.append(rank[i])
import numpy as np
for i in range(voter-1):
brrank[i+1] = np.array(brrank[i]) + np.array(brrank[i+1])
brwinner=[]
for i in range(len(choice)):
if np.min(brrank[voter-1])==brrank[voter-1][i]:brwinner.append(choice[i])
return brwinner
#approval
def av(choice,voter,drank):
avrank=[]
for i in range(voter):
avrank.append(drank[i])
import numpy as np
for i in range(voter-1):
avrank[i+1] = np.array(avrank[i]) + np.array(avrank[i+1])
avwinner=[]
for i in range(len(choice)):
if np.max(avrank[voter-1])==avrank[voter-1][i]:avwinner.append(choice[i])
return avwinner
#dis&approval
def dav(choice,voter,trank):
davrank=[]
for i in range(voter):
davrank.append(trank[i])
import numpy as np
for i in range(voter-1):
davrank[i+1] = np.array(davrank[i]) + np.array(davrank[i+1])
davwinner=[]
for i in range(len(choice)):
if np.max(davrank[voter-1])==davrank[voter-1][i]:davwinner.append(choice[i])
return davwinner
#setting
c=['A','B','C'] #choice set (you can include two or more options)
v=100 # of voters
import wo, rule, random
#preference profile
r=random.choices(wo.rank_L(c),k=v)
d=random.choices(wo.dic(c),k=v)
t=random.choices(wo.tri(c),k=v)
#results
print(rule.pl(c,v,r),
rule.ap(c,v,r),
rule.bw(c,v,r),
rule.br(c,v,r)
)
print(rule.av(c,v,d))
print(rule.dav(c,v,t))
#If you want to repeat the above operation, I recommend to use `for loops' and save data with the `sys' package.