パワーヒッターをチーム内で打順最適化

MikuHatsune2011-01-27

打順を変える続き。
パワーヒッターの打順をチーム内でいろいろ変えたときの得点分布を作成する。
プログラムの概要。
パワーヒッターの効果が出やすいように、パワーヒッターは必ずHRを打つように設定する。
2010年の阪神のデータから、パワーヒッターが1番、2番、…、9番の仮想チームアレイを作成する。
1イニング中に打席に立ちうる打者人数を、累積確率がcutを超えるまで考える。
アウトとヒットパターンをすべて地味に発生させる。
これで1イニングあたりに取れる得点の確率が得られる。
これを、仮想チーム内のすべての打者を先頭打者にしたときについて行う。
次に、1イニングに立ちうる打者人数の確率から、誰があるイニングで先頭打者になるかの確率を計算する。
これをもとに、あるイニングでの先頭打者の比重をつけた、1イニングあたりの得点確率推移行列アレイを作成する。
これを決められたイニング繰り返し、1試合の得点とする。
 
こんな感じでいこう。

# 上のリンクで、cut<- 0.99としたうえで…
# でもこれを不用意にやると2時間かかった。
xg<- max(unlist(lapply(data,length)))
xg<- 25
yg<- max(unlist(lapply(data,max)))
xx<- 0:(xg-1)
color<- c("black","red","orange","yellow","green","blue","skyblue","purple","violet")
lty<- c(2,2,2,2,2,1,1,1,1)
lwd<- c(4,4,4,4,5,3,3,3,3)
for(pl in people:1){
  plot(xx,data[[pl]][1:xg],type="l",lwd=lwd[pl],frame=F,lty=lty[pl],
       xlim=c(0,xg),ylim=c(0,yg),col=color[pl],
       xlab="score",ylab="probability",main="One Game Score Probability"
      )
  par(new=T)
}
axis(1:2)
legend(20,yg,c("1st","2nd","3rd","4th","5th","6th","7th","8th","9th"),
       col=color,lty=1,lwd=3)


うおぃ…あんまり差がないのか…?

# どの順番が同じ計算結果か調べる。
library(gtools)
cmb<- combinations(9,2)
Iden<- rep(0,nrow(cmb))
for(i in 1:nrow(cmb)){
  Iden[i]<- sum(data[[cmb[i,1]]] == data[[cmb[i,2]]])
}
cmb[(Iden!=0),]
     [,1] [,2]
[1,]    1    9
[2,]    2    5
[3,]    2    8
[4,]    3    7
[5,]    4    6
[6,]    5    8

こいつらはかぶっているらしい…
統計推定量を使ってみようか。

library(e1071)
analy<- function(vec){
  DATA<- rep(0,5)
  DATA[1]<- mean(vec)
  DATA[2]<- sd(vec)
  DATA[3]<- median(vec)
  DATA[4]<- skewness(vec)
  DATA[5]<- kurtosis(vec)
  names(DATA)<- c("mean","sd","median","skewness","kurtosis")
  return(DATA)
}

しまったこれでは確率の最大値とかそういうの出してる…
まあまたなんか違うやつで評価しよう。
 
いやあやっぱ山を見ても勝ちやすいのかよくわからん。
対戦シミュレーションをしてみよう…かな?