ドミニオンのシミュレーション2

ドミニオンのシミュレーションの続編。

30分ほど電車で座って移動することになったので昨日のコードに手を加えてみた。礼拝堂が手札にある場合に昨日のコードでは「屋敷を捨てられるだけ捨てる」という戦略だったが、それに加えて「銀貨や金貨を買うのにあまる量の銅貨があればそれも捨てる」に変更。

この結果、初手で銀貨と礼拝堂を買った場合の期待値は2.06, SD 0.2。礼拝堂2つを買った場合の期待値は1.73, SD 0.45となった。

前回の結果と比較しよう。

初手で礼拝堂と銀貨を買った場合、平均1.72、SD 0.1。銀貨だけを買った場合、平均1.62, SD 0.05。初手のコインが3-4に別れて銀貨を2枚買えた場合で平均1.68, SD 0.05。礼拝堂2枚を買った場合、平均1.60, SD 0.08。堀と銀貨を買った場合、平均1.59, SD 0.05、となった。つまり、「礼拝堂+銀貨」は「銀貨+銀貨」、「礼拝堂+礼拝堂」、「銀貨+堀」のいずれよりも優れている。なお、この実験では礼拝堂を屋敷を捨てるためだけに使っているが実戦では銅貨を捨てることに使ってもよいので「礼拝堂+銀貨」と「礼拝堂+礼拝堂」はより高い値になりうる。

結局、「礼拝堂+銀貨 2.06」>「礼拝堂+礼拝堂 1.73」>「銀貨+銀貨 1.68」>「銀貨 1.62」と礼拝堂を買うプレイが頭一つ飛び抜けている。重要なポイントはこのどれの戦略でも12ターン目にはデッキ1枚あたりの貨幣価値が1.60を超えているので、各ターンにドローされるコインの期待値が8を超えている点だ。つまりこのころには2回に1回くらい属州を買えていると考えていい。コイン戦略はアクションのチャンスをほとんど無駄にしているけども、それでもこれくらい足が速い。アクションを使う戦略では速度の上でこれに負けないようにすることが重要だな。

おぼえたての頃は毎ターンのようにアクションカードを買っていたけど、基本はコインで、毎ターン1回のアクションフェーズを無駄にしない程度にアクションを買うのがいいのかな〜。まだどんなカードが選択肢にあるのかを覚えていない。今度チートシートを作ろう。+1アクション+2ドローの研究所カードとかアクションを消費しないし、カード単価が1.5以上の状態では実質的に金貨以上の働きをするからお得だなーとか思った。

if "C" in hand:
    while "E" in hand:
        hand.remove("E")

    if "1" in hand:
        money = count_money(hand)
        if money > 6:
            while money > 6 and "1" in hand:
                hand.remove("1")
        elif money > 3:
            while money > 3 and "1" in hand:
                hand.remove("1")


バグで「3枚以上銅貨があるときに銅貨を全部捨てる」になっていた。(thanks id:flag-boy)

if "1" in hand:
    money = count_money(hand)
    if money > 6:
        while money > 6 and "1" in hand:
            hand.remove("1")
            money -= 1
    elif money > 3:
        while money > 3 and "1" in hand:
            hand.remove("1")
            money -= 1

ふむふむ。銀貨+礼拝堂で 1.91, SD 0.15、2礼拝堂で 1.85, SD 0.14 だなぁ。銅貨も捨てた方が効率がいいんだろうか。

while "E" in hand:
    hand.remove("E")
while "1" in hand:
    hand.remove("1")

銅貨も全部捨てるバージョンの結果:銀貨+礼拝堂で 2.21, SD 0.25になった。これが今のところ一番大きい。ちなみに礼拝堂2枚だと捨てるのが早すぎて破滅する。