バーバリアンクラスのd20効果 期待値計算してみた

「フォーゴトンレルム探訪」から新しいメカニズム「d20」が追加されました。20面ダイスを振りその出目によってカードの効果が変わるデザインです。もちろん出目が大きいほど良い効果が得られるようになっています。

これに伴いダイスの出目を良くする効果を持つカードが登場しました。それが「バーバリアン・クラス」と「ピクシーの案内人」です。

ダイスロールする際、これらのカード1枚につきダイスを1個追加してロールすることができ、全ての出目のうち最も良い出目を採用することができます。

これによって当然、出目が良くなることが期待できますがどの程度の効果になるのか調べてみました。

調査手法:モンテカルロ法 100万回ダイスロールした結果の出目が平均幾つであったか(期待値)を調べた。手でやると人生が終わってしまうのでpythonで実施。

結果です。

効果なし(ダイス1個):10.50878
ダイス2個:13.829624
ダイス3個:15.487217
ダイス4個: 16.483347
ダイス5個: 17.146271
ダイス6個: 17.617518
ダイス7個: 17.97015
ダイス8個: 18.244477
ダイス9個: 18.462233

効果なしからバーバリアンクラス4枚+ピクシー4枚までの各パターンで見ています。効果を重ねるたびに得られるメリットは低減していきます。

実用上はうまくいったとしてもクラスとピクシーが合わせて2〜3枚場に出てるくらいが限界でしょうか。その状態では期待値が15を超えてくるので、15を境に効果が変わるカードには特に有効そうです。よくピクシーの案内人と組み合わせられている暴走魔導士デリーナは典型的な例ですね。

一応、pythonのコードも貼っておきます。バーバリアンらしい脳筋なコード?です。

import random
n=int(input())
sum_val_1=0
sum_val_2=0
sum_val_3=0
sum_val_4=0
sum_val_5=0
sum_val_6=0
sum_val_7=0
sum_val_8=0
sum_val_9=0
d1=0
d2=0
d3=0
d4=0
d5=0
d6=0
d7=0
d8=0
d9=0
for i in range(n):
    d1=random.randint(1,20)
    d2=random.randint(1,20)
    d3=random.randint(1,20)
    d4=random.randint(1,20)
    d5=random.randint(1,20)
    d6=random.randint(1,20)
    d7=random.randint(1,20)
    d8=random.randint(1,20)
    d9=random.randint(1,20)
    
    a=d1
    b=max(d1,d2)
    c=max(d1,d2,d3)
    d=max(d1,d2,d3,d4)
    e=max(d1,d2,d3,d4,d5)
    f=max(d1,d2,d3,d4,d5,d6)
    g=max(d1,d2,d3,d4,d5,d6,d7)
    h=max(d1,d2,d3,d4,d5,d6,d7,d8)
    hh=max(d1,d2,d3,d4,d5,d6,d7,d8,d9)
    sum_val_1+=a
    sum_val_2+=b
    sum_val_3+=c
    sum_val_4+=d
    sum_val_5+=e
    sum_val_6+=f
    sum_val_7+=g
    sum_val_8+=h
    sum_val_9+=hh
print(sum_val_1/n,sum_val_2/n,sum_val_3/n,sum_val_4/n,sum_val_5/n,sum_val_6/n,sum_val_7/n,sum_val_8/n,sum_val_9/n)

自分は脳筋なので難しくてできませんでしたが、ちゃんと演繹的に期待値を求めてくれた方がいました。ダイス2個の場合で期待値13.825という事で自分の手法と一致しました。検算できてよかったです。ありがとうございました。