来自R中大样本的Shapley-Shubik幂指数 库(演绎器) n、 玩家

来自R中大样本的Shapley-Shubik幂指数 库(演绎器) n、 玩家,r,permutation,R,Permutation,您可以使用sample生成随机排列,而不是枚举所有17个!是的 library(Deducer) n.players <- 17 weight <- c(84,92,22,12,12,15,11,22,16,1,12,15,26,20,9,29,4) quota <- sum(weight)/2+1 p <-n.players n.cases <-factorial(p) tab <- perm(1:p) critical <- rep(0,n.case

您可以使用
sample
生成随机排列,而不是枚举所有17个!是的

library(Deducer)
n.players <- 17
weight <- c(84,92,22,12,12,15,11,22,16,1,12,15,26,20,9,29,4)
quota <- sum(weight)/2+1
p <-n.players
n.cases <-factorial(p)
tab <- perm(1:p)
critical <- rep(0,n.cases)
for (i in 1:n.cases){
weight.sum <- cumsum(weight[tab[i,]])
critical[i] <- tab[i,which.max(weight.sum >= quota)]
}
table(critical)
power <- table(critical)/n.cases
round(power,3)

n.当我需要shapley-shubik索引的实际值时,如何在R中扩大计算内存?在这种情况下,我最好使用“apply”而不是“for loop”。在这个网站上,计算一秒钟索引的实际值。尽管我使用“蒙特卡罗”作为索引,但我花的时间比使用前一个站点要多。很抱歉打扰您,如何使用“应用”转换代码以实现更快的计算?
Rprof
显示大部分时间都花在
sample
函数上:删除循环不会使代码更快。相反,您可以尝试减少样本数量,例如从1000000减少到100000(但第三个数字并不总是正确的)。非常感谢。从你所说的,为了更快的计算,我最好找到允许R使用比依赖“Montecarlo”更多内存的包,对吗?在这种情况下,获取所有案例比“采样”快得多,因为随机数生成时间相对较长。
n.cases <- 1e6
critical <- rep(0,n.cases)
for (i in 1:n.cases){
  random_permutation <- sample( 1:n.players )
  weight.sum <- cumsum( weight[ random_permutation ] )
  critical[i] <- random_permutation[ which.max(weight.sum >= quota) ]
}
table(critical)
power <- table(critical) / n.cases
round(power, 3)