錬精術式に含まれる当たりの数の期待値
錬精術式に含まれる当たりの数の期待値 改訂
Table of Contents
1 当たりの定義
★5チャイルド、★5カルタ、狙ってるコスチュームを全て等しく同じ価値の当たりだとする。
s def= コスチュームSのうちで狙ってるコスチュームが含まれる割合
r def= コスチュームRのうちで狙ってるコスチュームが含まれる割合
n def= コスチュームNのうちで狙ってるコスチュームが含まれる割合
s def= コスチュームSのうちで狙ってるコスチュームが含まれる割合
r def= コスチュームRのうちで狙ってるコスチュームが含まれる割合
n def= コスチュームNのうちで狙ってるコスチュームが含まれる割合
2 錬精術式に含まれる当たりの数の期待値
(0.5 + 0.5s) + (0.015 + 0.03 + 0.015 + 0.4n + 0.27r) + 2(0.015 + 0.05 + 0.015 + 0.05) + 4*3(0.015) = 0.4 n + 0.27 r + 0.5 s + 1
2.1 s = n = r = 0の時(コスチュームは一つも要らない)
1
2.2 s = n = r = 0.5の時(コスチュームの半分ぐらいを狙う)
1.585
2.3 s = n = r = 1の時(どんなコスチュームが来ても取る)
2.17
3 錬精術式に含まれる当たりの数の分布
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | |
| s = n = r = 0 | 33.5% | 45.6% | 13.5% | 3.47% | 2.83% | 0.824% | 0.134% |
| s = n = r = 0.5 | 10.8% | 42.6% | 33.1% | 7.84% | 3.07% | 2.02% | 0.453% |
| s = n = r = 1 | 0% | 19.2% | 57.8% | 16.0% | 2.33% | 3.52% | 0.973% |
3.1 コード1
import Data.List
-- import Data.Function
(&) = flip ($)
fac 0 = 1
fac n = n * fac (n - 1)
p `c` q = fac p / fac q / fac (p - q)
list1 s = 0.5 + 0.5*s
list2 n r = 0.015 + 0.03 + 0.015 + 0.4*n + 0.27*r
list3 = 0.015 + 0.05 + 0.015 + 0.05
list4 = 0.015 -- 3x
ps s n r = map (\p -> (1-p)) [list1 s, list2 n r, list3, list3]
inv n ps = map (\p -> (1-p)) xs ++ ys
where
(xs, ys) = splitAt n ps
prob s n r k = (ps s n r & permutations & fmap (inv k) & fmap product) & sum & \x -> x * 4 `c` (fromIntegral k) / fac 4
-- sum [ prob 0 0 0 i | i <- [0..4] ] ~= 1
prob3 j = 4 `c` (fromIntegral j) * (1-list4)^(4-j) * list4^j
run s n r k
| k < 3 = prob s n r k * prob3 0
| k == 3 = prob s n r 3 * prob3 0 + prob s n r 0 * prob3 1
| k == 4 = prob s n r 4 * prob3 0 + prob s n r 1 * prob3 1
| k == 5 = prob s n r 2 * prob3 1
| k == 6 = prob s n r 3 * prob3 1 + prob s n r 0 * prob3 2
4 結論
期待値をだいたい1以上下回れば、それが最悪の術式。その時は変更すべき(当たり前)。それ以上は、錬精術式変更券の配られるペースがはっきりしないので、なんともいえない。
5 改訂点
- 複数箇所あるリスト3、リスト4を一箇所しかないように考えてたので修正
- 分布を追加
Footnotes:
1
Haskellで書かれてます
Comments
Post a Comment