2/7 MIKUセミナー

MikuHatsune2011-02-08

シミュレーションと確率計算でバグを取りたい話。
 
\begin{matrix}&Simulation&Calculation\\(1)&hitting\hspace{3}probability&hitting\hspace{3}probability\\(2)&\downarrow&\downarrow\\(3)&one\hspace{3}inning\hspace{3}scores&one\hspace{3}inning\hspace{3}scores\\(4)&\downarrow&\downarrow\\(5)&N\hspace{3}innings\hspace{3}scores&N\hspace{3}innings\hspace{3}scores\\(6)&\downarrow&\downarrow\\(7)&2\hspace{3}teams\hspace{3}battle&2\hspace{3}teams\hspace{3}battle\\(8)&\downarrow&\downarrow\\(9)&pennant&pennant\end{matrix}
 
という流れが両者にはあるのだが、どこでおかしいか
ということで、まずは(0.8,0.05,0.05,0.05,0.05)という打撃確率を持つ1人で構成されるチームを(無駄だけど9つ4番を入れ替えて)闘わせると、まあ二者間対決もペナントも勝率0.5になった。
ということで、1人チームに限り、(1)〜(9)の流れは正しい。
問題は複数の人間でチームが構成されるとき。前回のセミナーから、明らかになんか狂っている。
こういうときは上からバグ取るもんだよ、とおっしゃる先生の言葉に従い、まずは(1)のチーム作りが正しいか
というところは正しい。同じteam.arrayを使っている。
プログラムの都合上、Nイニング(つまり1試合)終わった段階での得点分布がどうか調べた。
だがしかし、ぶっちゃけよくわからんかった(つまり違うんだろう)。
ということで、上流の1イニングでの得点分布を調べた。

山なりをI群、指数関数的減少をII群、二峰性をIII群と分類しよう。
すると
\begin{matrix}&Simulation&Calculation\\I&1,\hspace{3}2,\hspace{3}3&1,\hspace{3}9\\II&6,\hspace{3}7,\hspace{3}8&2,\hspace{3}3,\hspace{3}5,\hspace{3}7,\hspace{3}8\\III&4,\hspace{3}5&4,\hspace{3}6\end{matrix}
となるのだが、打順分類的にはシミュレーションしたやつのほうがそれっぽい。
なので、上の図で(2)はなんかおかしいのだろう。
ちなみに、確率計算で1試合当たりの得点分布を出して
\begin{matrix}&Simulation&&Calculation\\(1)&hitting\hspace{3}probability&&hitting\hspace{3}probability\\(2)&\downarrow&&\downarrow\\(3)&one\hspace{3}inning\hspace{3}scores&&one\hspace{3}inning\hspace{3}scores\\(4)&\downarrow&&\downarrow\\(5)&N\hspace{3}innings\hspace{3}scores&&N\hspace{3}innings\hspace{3}scores\\(6)&\downarrow&\swarrow&\downarrow\\(7)&2\hspace{3}teams\hspace{3}battle&&2\hspace{3}teams\hspace{3}battle\\(8)&\downarrow&&\downarrow\\(9)&pennant&&pennant\end{matrix}
としたものは一致したので、(7)〜(9)は大丈夫。
あとは直前の上流を同じ条件にして、バグ取りをしよう。