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

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

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

1 当たりの定義

★5チャイルド、★5カルタ、狙ってるコスチュームを全て等しく同じ価値の当たりだとする。
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 錬精術式に含まれる当たりの数の分布

Table 1: 当たりの数の分布
  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で書かれてます
Created: 2019-02-22 金 21:06
Emacs 25.2.1 (Org mode 8.2.10)

Comments