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」を参照してください。

この場合、コードが大きなサンプルに基づいているため、エラー メッセージが表示されます。次の2つの方法で問題を解決したい:

  1. 自分のパソコンの許す限りのケースを計算し(5年前に買ったパソコンです。当時はあまり性能が高くありませんでした)、処理時間を調べます(簡単です。手続き「proc.time」を使うだけです)。 ")

  2. モンテカルロを使って指数を近似したいのですが、この場合の処理​​時間も調べています。

さらに、way1 と way2 のインデックスと処理時間を比較したいと思います。

どうすればこれを解決できますか? (計算用メモリの制限を大きくするパッケージが見当たりません。理論的にモンテカルロの初歩レベルを知っていても、その仕組みをRコードに適用することはできません)

4

1 に答える 1

1

sample17 個すべてを列挙する代わりに、ランダムな順列を生成するために使用できます。そのうちの。

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 に答える