投票/排名排名对方法

Dre*_*rey 5 implementation r ranking voting-system

目前我尝试了解Ranked Pairs方法.从维基百科条目我不知道如何创建成对比较矩阵.这个解释帮助我理解了比较两对的一种方法 - 但是,我不确定这是否与wiki中说的完全相同.第一个问题是,对在比较是否2根据是有效的1

我设法将2中的解释改编为R代码:

在下面的(不切实际的)例子中,候选人(行)比选民(列)更多,但所有选民都给每个候选人排名(完整排名)

# some random example
random.example <- matrix(rnorm(50), ncol = 5, 
                         dimnames = list(candidates = paste("c", 1:10, sep=""), 
                                         voters = paste("v", 1:5, sep="")))
rmat <- apply(random.example, MARGIN = 2, rank, ties.method = "f")
Run Code Online (Sandbox Code Playgroud)

然后使用Ranked Pairs方法对秩矩阵进行排序

pm <- apply(rmat , MARGIN=1, function(x) {
  return(apply(rmat , MARGIN=1, function(y) {
    return(sum(x > y) - sum(x < y))
  }))
})

sorted <- apply(pm , MARGIN=1, function(x, numberOfVoters) {
  return(c(like    = sum(x > 0), 
           dislike = numberOfVoters - sum(x < 0), 
           ties    = numberOfVoters - (sum(x == 0) - 1))) 
}, numberOfVoters = ncol(rmat)))
Run Code Online (Sandbox Code Playgroud)

评论sorted:如果我理解这个权利,那么我们需要先由订购like,然后dislike,再由ties.我重新分配了disliketies(numberOfVoters)的值,以便我可以将它用作"数字".这导致我的下一个问题:排序和确定胜利者.我想,但我不确定,在哪里我可以按照|候选人|的基数来排序:

scores <- apply(sorted  * (ncol(sorted) ^ c(2,1,0)), MARGIN=2, sum)
Run Code Online (Sandbox Code Playgroud)

所以排名scores(越高越好)给我们排名.对?

第三个问题涉及确定候选人排名的相互关系.按分数排名为我们提供了候选人的排名列表.但维基百科1告诉我们,对于真正的排名,应该通过从列表中删除获胜者来重新计算整个过程,以确定下一个获胜者.我不明白为什么这可能会返回不同的排名.有人举个简单的例子吗?

非常感谢!