0
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)
  • 此代码需要“Deducer”包。请在输入代码之前输入消息“install.packages("Deducer")”。

如果您需要更多关于 Shapley Shubik 功率指数的信息,请访问此处“ http://en.wikipedia.org/wiki/Shapley%E2%80%93Shubik_power_index

在这种情况下,我收到一条错误消息,因为代码基于大型样本。我想通过以下两种方式解决问题:

  1. 计算我的个人电脑允许的情况(我 5 年前买了我的电脑。当时性能不高)并检查处理时间(很容易。我只是使用程序“proc.time ")

  2. 通过使用 MonteCarlo,我想近似索引,并且在这种情况下我还检查了处理时间。

此外,我想比较 way1 和 way2 之间的索引和处理时间。

我该如何解决这个问题?(我找不到扩大计算内存限制的包。即使我在理论上知道蒙特卡洛的初级水平,我也无法将该机制应用于R代码)

4

1 回答 1

1

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

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)
于 2013-03-28T10:40:01.030 回答