錬精術式に含まれる当たりの数の期待値(5/16リニューアル)
錬精術式に含まれる当たりの数の期待値(5/16リニューアル)
Table of Contents
1 当たりの定義
★5チャイルド、★5ソウルカルタ、狙ってるコスチュームを全て等しく同じ価値の当たりだとする。
b def= ボタンのコスチュームを狙ってるなら1、そうでないなら0
s1 def= 新コスチュームSのうちで狙ってるコスチュームが含まれる割合
s0 def= 旧コスチュームSのうちで狙ってるコスチュームが含まれる割合
r1 def= 新コスチュームRのうちで狙ってるコスチュームが含まれる割合
r0 def= 旧コスチュームRのうちで狙ってるコスチュームが含まれる割合
n1 def= 新コスチュームNのうちで狙ってるコスチュームが含まれる割合
n0 def= 旧コスチュームNのうちで狙ってるコスチュームが含まれる割合
2 錬精術式に含まれる当たりの数の期待値
0.1 + 0.31503 b + 3 0.09511 s1 + 7 0.04280 s0
+ 0.05 + 3 0.17791 r1 + 4 0.06664 r0 + 5 0.02001 n1 + 4 0.01240 n0
+ 2(0.22 + 3 0.02221 r1 + 4 0.00830 r0 + 5 0.06673 n1 + 4 0.04162 n0)
= 0.31503 b + 0.38256 n0 + 0.76735 n1 + 0.33296 r0 + 0.66699 r1 + 0.2996 s0 + 0.28533 s1 + 0.59
2.1 b = s0 = s1 = r0 = r1 = n0 = n1 = 0 (コスチュームは一つも要らない)
0.59
2.2 b = s0 = s1 = r0 = r1 = n0 = n1 = 0.5 (コスチュームの半分ぐらいを狙う)
2.115
2.3 b = s0 = s1 = r0 = r1 = n0 = n1 = 1 (どんなコスチュームが来ても取る)
3.64
3 錬精術式に含まれる当たりの数の分布
| 0 | 1 | 2 | 3 | 4 | |
| b = s0 = … = n1 = 0 | 52.0% | 37.1% | 9.25% | 0.849% | 0.0242% |
| b = s0 = … = n1 = 0.51 | 4.95% | 22.2% | 37.3% | 27.8% | 7.77% |
| b = s0 = … = n1 = 1 | 0% | 0% | 3.36% | 29.7% | 66.9% |
3.1 コード2
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 b s1 s0 = (10 + 31.053*b + 9.511*3*s1 + 4.280*7*s0) / 100
list2 r1 r0 n1 n0 = (5 + 17.791*3*r1 + 6.664*4*r0 + 2.001*5*n1 + 1.240*4*n0) / 100
list3 r1 r0 n1 n0 = (22 + 2.221*3*r1 + 0.830*4*r0 + 6.673*5*n1 + 4.162*4*n0) / 100
-- list1 1 1 1 ~= 1
-- list2 1 1 1 1 ~= 1
-- list3 1 1 1 1 ~= 0.82
ps b s1 s0 r1 r0 n1 n0 = map (\p -> (1-p)) [list1 b s1 s0, list2 r1 r0 n1 n0, list3 r1 r0 n1 n0, list3 r1 r0 n1 n0]
inv n ps = map (\p -> (1-p)) xs ++ ys
where
(xs, ys) = splitAt n ps
prob k b s1 s0 r1 r0 n1 n0 = (ps b s1 s0 r1 r0 n1 n0 & permutations & fmap (inv k) & fmap product) & sum & \x -> x * 4 `c` (fromIntegral k) / fac 4
expectedValue b s1 s0 r1 r0 n1 n0 = list1 b s1 s0 + list2 r1 r0 n1 n0 + 2 * list3 r1 r0 n1 n0
probabilityDistribution b s1 s0 r1 r0 n1 n0 = [ prob i b s1 s0 r1 r0 n1 n0 | i <- [0..4] ]
analyse ボタンの枚数 新Sスキンの枚数 旧Sスキンの枚数 新Rスキンの枚数 旧Rスキンの枚数 新Nスキンの枚数 旧Nスキンの枚数 = do
putStr "Expected Value = " >> print (expectedValue b s1 s0 r1 r0 n1 n0)
putStr "Probability Distribution (from 0 to 4) = " >> print (probabilityDistribution b s1 s0 r1 r0 n1 n0)
where
b = ボタンの枚数/1
s1 = 新Sスキンの枚数/3
s0 = 旧Sスキンの枚数/7
r1 = 新Rスキンの枚数/3
r0 = 旧Rスキンの枚数/4
n1 = 新Nスキンの枚数/5
n0 = 旧Nスキンの枚数/4
-- *Main> analyse 0 2 6 1 1 1 1
-- Expected Value = 1.5917
-- Probability Distribution (from 0 to 4) = [0.1253215186656322,0.35250966481603957,0.3503489779580888,0.14878697497317536,2.303286358706413e-2]
4 感想
リニューアルでリスト4の☆5ソウルカルタがなくなってしまったのが大きな変更点。
あと思いの外、式が繁雑になってしまったのが不満である。
Comments
Post a Comment