2Pickの報酬期待値と損益分岐勝率をPythonで求めてみた【シャドバビヨンド】

シャドバビヨンドに2Pickが実装されたぞ!

2Pickとは、ランダムに提示される2枚のうちどちらかを選択し、選択したカードのみのデッキで戦うモード。

今作は1000ルピ払って参加できる。
前作と比べると、7勝するか2敗するまで挑戦できるようになったほか、レジェンドカードがあらかじめ提示されているようになったり、提示カードのリロールができるようになったりした。

けど、やはりプレイヤーとして一番気になるのは「報酬が旨いか」がと思う。

今作の2Pickの報酬は勝利数に応じて報酬が変わる仕様になっているのだが、その分布がなかなかに特徴的。

0勝: 600ルピ
1勝: 800ルピ
2勝:1000ルピ
3勝:1200ルピ
4勝:1350ルピ
5勝:1500ルピ
6勝:1750ルピ
7勝:2500ルピ
(1パック=500ルピとする)

0勝報酬を基準とすると、1勝するごとに
+200、+200、+200、+150、+150、+250、+750。
4勝目と5勝目の価値だけやたら低い。

なんで?

という疑問はともかく。

2勝すると1000ルピなので、2勝すればトントン、3勝以上ならプラスということになる。

というわけで、これの期待値を求めてみる。

勝率50%なら数学の問題として計算できそうだが、勝率によって期待値がどれだけ変わるかも求めたかったのでプログラムを書いた。

Python
# 勝率p
p = float(input())

# w勝l敗を通る確率
dp = {}
dp[(0,0)] = 1.0

result = [0] * 8                                        # n勝する確率
reward = [600, 800, 1000, 1200, 1350, 1500, 1750, 2500] # n勝の報酬
exp_reward = 0                                          # 報酬期待値

# 全ての状態を遷移
for w in range(8):
    for l in range(3):
        # 無い組み合わせなら処理しない
        if ((w,l) not in dp) or (dp[(w,l)]==0):
            continue

        # 7勝か2敗なら試合しない
        if w == 7:
            result[w] += dp[(w,l)]
            continue
        if l == 2:
            result[w] += dp[(w,l)]
            continue

        # 試合続行
        dp[(w+1, l)] = dp.get((w+1, l),0) + dp[(w,l)]*p
        dp[(w, l+1)] = dp.get((w, l+1),0) + dp[(w,l)]*(1-p)


# 出力
print('勝率',p,'の場合')

for i in range(8):
    print(f'{i}勝: {result[i]:.5f}')    # 確率出力
    exp_reward += result[i] * reward[i] # 期待値計算

print('期待値:', exp_reward, 'ルピ')

とりあえず勝率は50%としてみる。

勝率 0.5 の場合
0勝: 0.25000
1勝: 0.25000
2勝: 0.18750
3勝: 0.12500
4勝: 0.07812
5勝: 0.04688
6勝: 0.02734
7勝: 0.03516
期待値: 999.0234375 ルピ

「n勝」というのはn勝する確率。
つまり0勝2敗で終わる確率は25%で、1勝2敗の確率も25%で、7勝できる確率は3.5%あるということ。

7勝は「7勝以上する確率」がここにまとめられているので、6勝する確率より高くなることもある。

で、勝率50%の場合、期待値はエントリーコストと同じだった。
0勝でも600ルピは貰えるので正直やり得になると思っていたのだが、そうでもなかった。
2勝で±0ルピを基準として、-2勝で-400ルピなのに、+2勝で+350ルピしかされてないのが大きそう。
2勝でトントンにすることを意識して4勝・5勝の報酬を下げているのかもしれない。

勝率を変えて色々試してみる。

勝率 0.4 の場合
0勝: 0.36000
1勝: 0.28800
2勝: 0.17280
3勝: 0.09216
4勝: 0.04608
5勝: 0.02212
6勝: 0.01032
7勝: 0.00852
期待値: 864.54016 ルピ

勝率 0.6 の場合
0勝: 0.16000
1勝: 0.19200
2勝: 0.17280
3勝: 0.13824
4勝: 0.10368
5勝: 0.07465
6勝: 0.05225
7勝: 0.10638
期待値: 1197.6153599999998 ルピ

勝率 0.7 の場合
0勝: 0.09000
1勝: 0.12600
2勝: 0.13230
3勝: 0.12348
4勝: 0.10804
5勝: 0.09076
6勝: 0.07412
7勝: 0.25530
期待値: 1485.2272974999996 ルピ

勝率を5%ごとに区切り、勝率別に期待値をまとめたものがこれ。

勝率[%]期待値[ルピ]
0600
5621
10644
15670
20700
25733
30770
35814
40865
45925
50999
551089
601198
651329
701485
751665
801866
852075
902275
952433
1002500

60%~90%あたりの期待値伸び幅が非常に高い。
CHUNITHMの単曲レートみたいだな?どうでもいいか。

デッキ構築をしてから5マッチ程度行う必要があるので、おおむね1セット1時間かかると仮定すると、勝率6割なら大体時給200ルピになる。
イベントが開催されていない限り、デイリーやウィークリー以外で稼ぐ方法は無いはずなので、暇を持て余しているけどランクマに飽きたシャドバ狂はこれを回すのがいいかもしれない。

まとめると、

  • 2勝で参加費回収
  • 勝率5割なら期待値はトントン
  • 勝率6割なら時給200ルピ、勝率8割なら時給800ルピ

ちなみに、今のところルームマッチなど身内と対戦することはできない。
個人的には、2Pick交換戦(2Pickでデッキ構築したあとにそれを交換して戦う、つまりカスデッキを相手に押し付けるモード)が楽しかったので、Cygamesさん実装待ってます。

タイトルとURLをコピーしました