Pairwise Least Squares: Difference between revisions

Added ballot generation to implementation.
(Revised significantly. Added implementation.)
(Added ballot generation to implementation.)
 
Line 141:
pd2 = pd + (d + d.T) / 2
return [x,pd,pd2]
 
def denseFromRanking(r):
n = r.shape[1]
d = mat(zeros((n,n)))
for i in range(n):
for k in range(i):
rk = r[0,k]
ri = r[0,i]
if (ri < rk):
d[i,k] += 1
elif (rk < ri):
d[k,i] += 1
return d
 
def denseFromRankingsTallies(rankings,tally):
n = rankings.shape[1]
d = mat(zeros((n,n)))
for i in range(rankings.shape[0]):
r = rankings[i]
dense = denseFromRanking(r)
d += dense * tally[i]
return d
 
def test():
drankings = mat([[ 0.1, 5., 2., 5.3,4],
[ 5., 0., 4., 7. [3,4,1,2],
[ 8., 6., 0., 10. [4,1,2,3],
[ 5., 3., 0., 0. [3,2,1,4]])
) # dtally = dense network graph[2,3,2,3]
d = denseFromRankingsTallies(rankings,tally)
[x,pd,pd2] = solveNetDense(d)
print("Scores")
Line 154 ⟶ 177:
print(sum(d,1))
print("Preferences")
print(pd)
print("Projected Preferences")
print(pd)
Line 167 ⟶ 190:
 
</syntaxhighlight>
 
=== Test Output ===
 
<pre>
Scores
[[ 0.]
[ 1.]
[ 3.]
[-1.]]
Borda Scores
[[12.]
[16.]
[24.]
[ 8.]]
Preferences
[[ 0. 5. 2. 5.]
[ 5. 0. 4. 7.]
[ 8. 6. 0. 10.]
[ 5. 3. 0. 0.]]
Projected Preferences
[[ 0. -1. -3. 1.]
[ 1. 0. -2. 2.]
[ 3. 2. 0. 4.]
[-1. -2. -4. 0.]]
Projected Preferences Plus Pairwise Loops
[[0. 4. 2. 6.]
[6. 0. 3. 7.]
[8. 7. 0. 9.]
[4. 3. 1. 0.]]
Higher Order (>2) Loops Removed
[[ 0. 1. 0. -1.]
[-1. 0. 1. 0.]
[ 0. -1. 0. 1.]
[ 1. 0. -1. 0.]]
Borda Scores of Projected Preferences Plus Pairwise Loops
[[12.]
[16.]
[24.]
[ 8.]]
</pre>
 
=== External Links ===
8

edits