錬精術式に含まれる当たりの個数の期待値(11/14リニューアル)

錬精術式に含まれる当たりの個数の期待値(11/14リニューアル)

錬精術式に含まれる当たりの個数の期待値(11/14リニューアル)

1 当たりの定義

★5チャイルド、★5ソウルカルタ(以下★5カルタ)、狙ってるコスチュームを全て等しく同じ価値の当たりだとする。

or

★5チャイルド、狙ってるコスチュームを全て等しく同じ価値の当たりだとする。

2 錬精術式に含まれる当たりの個数の期待値

Table 1: 錬精術式に含まれる当たりの個数の期待値
コスチューム全体の中で狙うコスチュームの割合 ★5カルタ含む  ★5カルタ含まない
01 0.59 0.16
0.25 1.35 0.92
0.52 2.113 1.68
0.75 2.88 2.45
14 3.64 3.21

3 錬精術式に含まれる当たりの個数の分布

Table 2: 錬精術式に含まれる当たりの個数の分布(★5カルタ含む)
コスチューム全体の中で狙うコスチュームの割合 0 1 2 3 4
0 52.0% 37.9% 9.25% 0.849% 0.0242%
0.25 19.0% 39.3% 30.1% 10.2% 1.28%
0.55 4.93% 22.1% 37.3% 27.9% 7.80%
0.75 0.583% 6.24% 24.6% 42.1% 26.5%
1 0% 0% 3.25% 29.6% 67.2%

Table 3: 錬精術式に含まれる当たりの個数の分布(★5カルタ含まない)
コスチューム全体の中で狙うコスチュームの割合 0 1 2 3 4
0 84.7% 14.6% 0.682% 0.0125% 0.0000800%
0.25 34.5% 42.7% 18.9% 3.56% 0.242%
0.5 10.5% 33.0% 36.7% 17.0% 2.78%
0.75 1.69% 13.5% 35.8% 36.5% 12.5%
15 0% 0.438% 15.4% 46.9% 37.2%

3.1 コード6

import Data.List

----------------------------------------------------------------
---- Misc.

-- 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' s1 s0 = (10 + 31.507*s' + 4*7.131*s1 + 14*2.140*s0) / 100
list2 x r1 r0 n1 n0 = (2 + x*3 + 4*13.355*r1 + 11*2.422*r0 + 3*3.333*n1 + 12*0.410*n0) / 100
list3 x r1 r0 n1 n0 = (2 + x*20 + 4*1.664*r1 + 11*0.300*r0 + 3*11.141*n1 + 12*1.383*n0) / 100

----------------------------------------------------------------

----------------------------------------------------------------
---- 計算

ps x s' s1 s0 r1 r0 n1 n0 = map (\p -> (1-p)) [list1 s' s1 s0, list2 x r1 r0 n1 n0, list3 x r1 r0 n1 n0, list3 x r1 r0 n1 n0]

inv n ps = map (\p -> (1-p)) xs ++ ys
  where
    (xs, ys) = splitAt n ps

prob i x s' s1 s0 r1 r0 n1 n0 = (ps x s' s1 s0 r1 r0 n1 n0 & permutations & fmap (inv i) & fmap product) & sum & \a -> a * 4 `c` (fromIntegral i) / fac 4

expectedValue x s' s1 s0 r1 r0 n1 n0 = list1 s' s1 s0 + list2 x r1 r0 n1 n0 + 2 * list3 x r1 r0 n1 n0

probabilityDistribution x s' s1 s0 r1 r0 n1 n0 = [ prob i x s' s1 s0 r1 r0 n1 n0 | i <- [0..4] ]

-- 欲するコスチュームの枚数を入れる
analyse 期間限定の枚数 新Sスキンの枚数 旧Sスキンの枚数 新Rスキンの枚数 旧Rスキンの枚数 新Nスキンの枚数 旧Nスキンの枚数 = do
  putStrLn "Carta = 1:"
  putStr "Expected Value = " >> print (expectedValue 1 s' s1 s0 r1 r0 n1 n0)
  putStr "Probability Distribution (from 0 to 4) = " >> print (probabilityDistribution 1 s' s1 s0 r1 r0 n1 n0)
  putStrLn ""
  putStrLn "Carta = 0:"
  putStr "Expected Value = " >> print (expectedValue 0 s' s1 s0 r1 r0 n1 n0)
  putStr "Probability Distribution (from 0 to 4) = " >> print (probabilityDistribution 0 s' s1 s0 r1 r0 n1 n0)
  where
    s' = 期間限定の枚数/1
    s1 = 新Sスキンの枚数/4
    s0 = 旧Sスキンの枚数/14
    r1 = 新Rスキンの枚数/4
    r0 = 旧Rスキンの枚数/11
    n1 = 新Nスキンの枚数/3
    n0 = 旧Nスキンの枚数/12

-- *Main> analyse 0 4 5 2 1 3 0
-- Carta = 1:
-- Expected Value = 2.11457
-- Probability Distribution (from 0 to 4) = [4.75681196502549e-2,0.22088065655753739,0.3767130279258584,0.2790894958746515,7.574869999169788e-2]
-- 
-- Carta = 0:
-- Expected Value = 1.6845700000000001
-- Probability Distribution (from 0 to 4) = [0.11103970845312854,0.3275175396530426,0.3581510458221004,0.17241645558415672,3.087525048757159e-2]

----------------------------------------------------------------

4 結論

仕組み自体はいままで通り。

Footnotes:

1

コスチュームは一つも要らない。

2

コスチュームの半分ぐらいを狙う。

3
*Main> let n = 0.5 in expectedValue 1 n n n n n n n
2.11461
4

どんなコスチュームが来ても取る。

5
*Main> let n = 0.5 in probabilityDistribution 1 n n n n n n n
[4.928843642131877e-2,0.22142455920635618,0.37269553375301884,0.27857150918961876,7.801996142968749e-2]
6

Haskellで書かれてます

Created: 2019-11-28 木 00:29

Emacs 25.2.1 (Org mode 8.2.10)

Validate

Comments