ドミニオンマジック
ドミニオンのプレイにおいて、しばしば「よく混ぜるため」と称してディールシャッフルを使うプレイヤーがいる。
つまり状況に応じてシャッフルの種類を変えることが許されている
また、場に出したカードと、出さなかった手札のどちらが捨て札に先に入るのか、にも規定があるという話を聞いたことがない
ならばこれをゲーム上の意思決定に含めた上で最適化を掛ければ、その意思決定を行わないプレイヤーより高いパフォーマンスが発揮されるはず、という実験
ビッグマネー戦略(アクションを買わずにコインばかり買う戦略)を使うと属州4枚購入するまで平均17ターンだ、という考察があるので、これをシャッフルコントロールをしない場合のベースラインとする
シャッフルコントロールをした場合、12ターンで属州4枚を買うことができる。
買いシーケンス: 銀銀金銀金金銀金属属属属
3山と4山の全パターンのディールシャッフルについて探索したが「最初にディールした山を最初に拾うこと」さえ満たせばどの方法でも可能
当初、状況によってシャッフル方法を変更することでデッキの順番をコントロールするつもりだったが、より厳しい「状況によらずシャッフル方法は固定」であってもベースラインに勝てることがわかった
その他考察メモ
ターン1と2で買ったものはルール上6枚離れるので、3山ディールシャッフルなら重ねることができる
逆に両方アクションカードなどの場合には4山ディールで分けることができる
倫理観がどうとかいう議論を避けるために、トランプを使ったカードマジックの亜種のドミニオンカードを使ったマジックとしてデモ動画にした
----
初期配置:屋屋屋銅銅銅銅銅銅銅
シャッフルは4山シャッフル
T1: draw 銅銅屋銅銅, play 銅銅銅, buy 銀, put 屋銅 銅銅銅
T2: draw 屋銅屋銅銅, 銀が変えるけど買わずに put 屋屋銅銅銅
T3: draw 銅銅銀銅銅, play 銅銅銅銀銅, buy 金, put 銅銅銅銀銅
T4: draw 屋銅屋銅屋, 何もプレイしないで0金, buy 銅, put 屋銅銅屋屋
T5: draw 銅銅銀金銅, 属州が買える
-----
25ターンでアクションカードを買わずに属州8枚
序盤で何も購入していないが、本当にこれでいいのか?
屋屋屋銅銅銅銅銅銅銅
(3, (1, 0, 2))
銅銅屋銅銅, play 銅, buy $, put 銅銅銅屋銅
銅屋銅銅屋, play 銅銅, buy $, put 銅銅銅屋屋
銅銅銅屋銅, play 銅銅銅, buy 銀, put 銅銅銅屋銅
屋銅屋銅銅, play 銅銅銅, buy $, put 屋屋銅銅銅
銅屋屋銅銅, play 銅銅銅, buy 銀, put 銅銅銅屋屋
屋銅銀銅銅, play 銀銅, buy 銀, put 銅屋銅銀銅
銅銀銅屋銅, play 銅銅銀, buy 銀, put 銅銅銀銅屋
銅銀銅銀銅, play 銅銀銀銅, buy 金, put 銅銀銀銅銅
屋屋銅銅銅, play 銅, buy $, put 銅銅屋屋銅
銅銅銀金銀, play 銀金銀銅, buy 属, put 銀金銀銅銅
銀銅銀屋銅, play 銅銀銅銀, buy 金, put 屋銅銀銅銀
銀銅銅金銅, play 銅銅金銀銅, buy 属, put 銅銅金銀銅
銅銅屋銅銀, play 銀銅, buy 銀, put 銀銅銅銅屋
屋銅銀金銀, play 金銅銀, buy 金, put 銀屋金銅銀
属屋銅銀銅, play , buy $, put 銀屋属銅銅
銀銀銅金金, play 銅金金銀, buy 属, put 銀銅金金銀
銅銀金属銀, play 金銅銀銀, buy 属, put 属金銅銀銀
屋屋銅銅銅, play 銅銅, buy $, put 屋屋銅銅銅
銅銀金銀銅, play 銀銅金銀, buy 属, put 銀銅金銀銅
銅屋銅屋銀, play , buy $, put 銅銅屋銀屋
属金銀銅銀, play 銀金銀銅, buy 属, put 銀金銀銅属
銅屋銅属金, play 金銅銅, buy 銀, put 金銅銅屋属
属属属銅属, play , buy $, put 属属属銅属
金屋銅銀銀, play 銅銀金銀, buy 属, put 銅銀金銀屋
屋金銅銀銀, play 金銀銀銅, buy 属, put 金銀銀銅屋
T3で金貨を買うように強制したら22ターンのパターンが見つかった
屋屋屋銅銅銅銅銅銅銅
(3, (0, 1, 2))
銅銅銅屋銅, play 銅銅銅銅, buy 銀, put 銅銅銅銅屋
銅屋銅銅屋, play 銅銅銅, buy 銀, put 銅銅銅屋屋
銅銀銅銀屋, play 銀銀銅銅, buy 金, put 銀銀銅銅屋
銅銅銅屋銅, play 銅銅銅, buy 銀, put 銅銅銅銅屋
屋銅銅銀銅, play 銀銅銅銅, buy 銀, put 銀銅銅銅屋
金銅銅銅銀, play 銀銅金銅銅, buy 属, put 銀銅金銅銅
屋銅屋銀金, play 銀金銅, buy 金, put 屋屋銀金銅
属銅銀銅銀, play 銀銅銀銅, buy 金, put 属銀銅銀銅
銅銀銅銅屋, play 銅銅銀, buy 銀, put 銅銅銀銅屋
銅銀銀銅金, play 銀金銀銅, buy 属, put 銀金銀銅銅
銀金銅銅銀, play 銅金銀銅銀, buy 属, put 銅金銀銅銀
属金屋屋銅, play 金, buy 銀, put 屋屋属銅金
銅銀銅屋属, play , buy $, put 属銀銅銅屋
銀銀属銀属, play 銀, buy $, put 銀銀属属銀
銅屋銅銅銅, play , buy $, put 銅銅銅銅屋
銀金屋銀金, play 銀金金, buy 属, put 屋銀銀金金
銅金銀属銅, play 金銅, buy $, put 銀銅属金銅
銀銀銅属金, play 金銀銅銀, buy 属, put 金銀銅銀属
屋銅銅属屋, play , buy 銅, put 屋銅属屋銅
銀金銀屋銅, play 銀銀銅金, buy 属, put 銀銀銅金屋
属銀銅金銀, play 銀銅金銀, buy 属, put 銀銅金銀属
屋屋銀金金, play 銀金金, buy 属, put 銀金金屋屋
23T
銅銅銅銅銅銅銅屋屋屋
(3, (0, 2, 1))
屋銅銅銅屋, play 銅銅銅, buy 銀, put 銅銅銅屋屋
銅銅屋銅銅, play 銅銅銅, buy 銀, put 屋銅銅銅銅
銅銀銅銀銅, play 銀銀銅銅, buy 金, put 銅銀銀銅銅
銅屋銅銅屋, play 銅, buy $, put 銅銅屋屋銅
屋銅屋銅銀, play 銅銀銅, buy 銀, put 銅銀銅屋屋
金屋銅銀銅, play 銀銅金, buy 金, put 銀銅金銅屋
銅銅銅金金, play 銅金銅銅金, buy 属, put 銅金銅銅金
銅銀屋銅屋, play 銅銀, buy 銀, put 屋銅屋銅銀
銀銅銀屋銅, play 銅銀銀銅, buy 金, put 銅銀銀銅屋
銀金屋銀銅, play 銀銀銅金, buy 属, put 銀銀銅金屋
属屋銀銀銅, play , buy $, put 銅属銀銀屋
金金銅銅銅, play 金銅銅金, buy 属, put 金銅銅金銅
屋銅銅金金, play 銅金銅金, buy 属, put 屋銅金銅金
銀銅銅属銅, play 銀銅, buy 銀, put 銅属銅銀銅
属銀屋銀銅, play , buy $, put 銀銅属銀屋
銅屋属金銀, play 銅金銀, buy 金, put 屋属銅金銀
金屋銀銀銅, play 銅金銀銀, buy 属, put 銅金銀銀屋
銀金属銅金, play 銀金金, buy 属, put 銅属銀金金
属銅属金銅, play , buy $, put 銅属銅金属
銀属屋銅銀, play 銀銅, buy 銀, put 属屋銀銀銅
銅銅屋銀属, play 銀, buy $, put 銀屋属銅銅
金銅銀属銀, play 銅銀銀金, buy 属, put 銅銀銀金属
属銀銀銅金, play 銅金銀銀, buy 属, put 銅金銀銀属
ビッグマネー戦略が属州4枚購入するまで平均17ターン、という考察が出回っているので条件を揃える
属州4枚購入まで13ターン
T5以降は常に金貨が買える状況
銅銅銅銅銅銅銅屋屋屋
(4, (0, 1, 2, 3))
T1 屋銅銅屋銅(3), play 銅銅銅, buy 銀, put 屋屋銅銅銅
T2 銅銅銅屋銅(4), play 銅銅銅, buy 銀, put 屋銅銅銅銅
T3 銅銅銀銅銅(6), play 銅銅銀銅銅, buy 金, put 銅銅銀銅銅
T4 屋銅銀屋銅(4), play 銀銅, buy 銀, put 屋銅屋銀銅
T5 屋銅銅銅金(6), play 銅銅銅金, buy 金, put 屋銅銅銅金
T6 屋銅銅銀銀(6), play 銀銅銅銀, buy 金, put 屋銀銅銅銀
T7 銅銅屋銀銀(6), play 銅銀銀銅, buy 金, put 銅銀銀銅屋
T8 銅金銅金屋(8), play 金金, buy 金, put 金金銅屋銅
T9 銅金銅銀屋(7), play 金銀銅, buy 金, put 金銀銅屋銅
T10 銅屋金金銅(8), play 銅金銅金, buy 属, put 銅金銅金屋
T11 金銅金銅屋(8), play 金金銅銅, buy 属, put 金金銅銅屋
T12 銅銀屋金銀(8), play 銀銅銀金, buy 属, put 銀銅銀金屋
T13 銅銅金銀金(10), play 金金銀, buy 属, put 銅銅金金銀
T7で金貨を買うのを諦めることでT12で属州4枚
銅銅銅銅銅銅銅屋屋屋
(3, (0, 2, 1))
T1 屋銅銅銅屋(3), play 銅銅銅, buy 銀, put 銅銅銅屋屋
T2 銅銅屋銅銅(4), play 銅銅銅, buy 銀, put 屋銅銅銅銅
T3 銅銀銅銀銅(7), play 銅銀銀銅, buy 金, put 銅銀銀銅銅
T4 銅屋銅銅屋(3), play 銅銅銅, buy 銀, put 銅銅銅屋屋
T5 屋銅銅銀銀(6), play 銅銅銀銀, buy 金, put 屋銅銅銀銀
T6 金屋銅銅銀(7), play 銅銅銀金, buy 金, put 銅銅銀金屋
T7 屋銅銅銅銀(5), play 銀銅, buy 銀, put 屋銅銅銀銅
T8 金銅金屋銅(8), play 金金銅銅, buy 金, put 屋金金銅銅
T9 銀銅金銅銀(9), play 銅銀銀金, buy 属, put 銅銅銀銀金
T10 屋銀属金金(8), play 金銀金, buy 属, put 金銀金屋属
T11 銅銀金銅銅(8), play 銀金銅銅銅, buy 属, put 銀金銅銅銅
T12 金銅銅銀銅(8), play 銀金銅銅銅, buy 属, put 銀金銅銅銅
T8で属州買えるけど金貨を買ってる。属州買ったらいけないのかな?
→T11で属州買えなくて結局T12にずれ込むようだ
銀銀金銀金金銀金属属属属のパターンに限定する
deal_patternは
code::
Counter({(3, (0, 1, 2)): 4142,
(3, (0, 2, 1)): 9154,
(4, (0, 3, 2, 1)): 2090,
(4, (0, 2, 3, 1)): 1450,
(4, (0, 1, 2, 3)): 636,
(4, (0, 2, 1, 3)): 374})
というわけで、ディールシャッフルをして最初に配った山を拾うならどんなシャッフルでも実現できる
初期配置もどちらでも良い
Counter({'屋屋屋銅銅銅銅銅銅銅': 10362, '銅銅銅銅銅銅銅屋屋屋': 7484})
初手もわりとどうでも良い
code::
In 349: Counter(g.log0 for g in gg3) Counter({'銅銅銅屋銅(4), play 銅銅銅, buy 銀, put 屋銅銅銅銅': 2500,
'銅銅銅屋銅(4), play 銅銅銅, buy 銀, put 銅屋銅銅銅': 464,
'銅銅銅屋銅(4), play 銅銅銅, buy 銀, put 銅銅銅銅屋': 264,
'銅銅銅屋銅(4), play 銅銅銅, buy 銀, put 銅銅銅屋銅': 460})
これはなぜかというと、T1, T2で銀貨を買う場合、ルール上銀貨は6枚離れるので
3山シャッフルなら確実に山0に重なるからだ。
逆にいうならアクションカードを2枚買うプレイの時には3山シャッフルを避けなければ確実にアクション被りが起きる。
put 屋銅銅銅銅のパターンを掘り下げる
code::
In 352: Counter(g.log1 for g in gg4) Out352: Counter({'銅屋銅銅屋(3), play 銅銅銅, buy 銀, put 銅銅銅屋屋': 2500}) In 353: Counter(g.log2 for g in gg4) Counter({'銅銀銅銀屋(6), play 銀銅銀銅, buy 金, put 銀銅銀銅屋': 994,
'銅銀銅銀屋(6), play 銀銅銅銀, buy 金, put 銀銅銅銀屋': 1290,
'銅銀銅銀屋(6), play 銅銀銅銀, buy 金, put 銅銀銅銀屋': 216})
In 354: gg5 = [g for g in gg4 if "put 銀銅銅銀屋" in g.log2] In 356: Counter(g.log3 for g in gg5) Out356: Counter({'銅銅屋屋銅(3), play 銅銅銅, buy 銀, put 銅銅銅屋屋': 1290}) In 357: Counter(g.log4 for g in gg5) Out357: Counter({'銅銅銅銀銅(6), play 銀銅銅銅銅, buy 金, put 銀銅銅銅銅': 1290}) In 358: Counter(g.log5 for g in gg5) Out358: Counter({'金屋銅銀銀(8), play 銅金銀, buy 金, put 銅金銀屋銀': 1290}) In 359: Counter(g.log6 for g in gg5) Out359: Counter({'屋銅屋銅銀(4), play 銀銅, buy 銀, put 銀銅屋銅屋': 1290}) In 360: Counter(g.log7 for g in gg5) Out360: Counter({'金銅金屋銅(8), play 金金銅, buy 金, put 銅屋金金銅': 1290}) In 361: Counter(g.log8 for g in gg5) Counter({'銅銀銀金銅(9), play 銀金銀銅, buy 属, put 銀金銀銅銅': 600,
'銅銀銀金銅(9), play 銅銀銀金, buy 属, put 銅銅銀銀金': 460,
'銅銀銀金銅(9), play 銀銅銀銅金, buy 属, put 銀銅銀銅金': 200,
'銅銀銀金銅(9), play 銀金銅銅銀, buy 属, put 銀金銅銅銀': 30})
これはどれも2番目か5番目に金貨が来るように捨てている
ここから先は一気に分岐する
属州を買うだけで、属州を置く場所はルールで固定されていて、他のコインはだいたいどこでも良いのだろう