arXiv探訪

興味の赴くままに数学するだけ

サイコロゲームのシミュレーション

mathtodonネタ

次の4種類のサイコロを使ったゲームを考える。

  • 目が{ ( 0, 0, 4, 4, 4, 4 ) }のサイコロA
  • 目が{ ( 3, 3, 3, 3, 3, 3 ) }のサイコロB
  • 目が{ ( 2, 2, 2, 2, 6, 6 ) }のサイコロC
  • 目が{ ( 1, 1, 1, 5, 5, 5 ) }のサイコロD

プレイヤーは4種類の中から1種類を選び対戦を行う。対戦は2人で行い、それぞれ選んだサイコロを振り、出た目が大きい方が勝ち、同じなら引き分け、小さい方が負けとなる。

このルールで多人数が対戦を繰り返すとき、どのサイコロを選ぶのが有利になるのだろうか。考え方は様々だろう。安定を望むのならサイコロBかもしれないし、最強の目を持つサイコロCを選ぶ人もいるかもしれない。あるいは、全体の使用率が公表されると戦略も変わるだろう。もちろん何をもって有利とするか、に応じても「答え」は変わる。今回は、各人がある戦略の下でサイコロを変更すると仮定してシミュレーションを行った。各種サイコロの使用率の変化について考えたい。

シミュレーションはjuliaを利用した。式を直観的に掛けるし、適当に書いても速いし、ほんと優秀。実装の都合上、次のような条件を課した。

条件

  • プレイヤーの総数は200名。
  • ランダムに1列に並べ、前後のプレイヤーで対戦を行う。
  • プレイヤーは後述する戦略に従い、サイコロを選ぶ確率分布を決める。
  • これを10回繰り返し、行われた1000試合の使用率データを記録する。
  • 以上を100あるいは1000セット繰り返し、グラフにする。

注意点

  • プログラム上プレイヤーは各自のデータを保持できるが、今回は一律で全体の使用率のみを使用することにした。
  • 使用率データの更新はデータを記録した時点である。つまり最初の1000試合は何も情報がない状態で行われ、残りは1000試合ごとに更新されていく。
  • もっと厳しい事を述べると、全員が同じ分布に従ってサイコロを選択することになる。

これを踏まえて、以下では戦略ごとにグラフを紹介していこう。

戦略1.ランダムに選ぶ

サイコロを等確率でランダムに選ぶ。当然、使用率は25%付近を揺らぐことになる。 f:id:mathmathniconico:20180718221507p:plain f:id:mathmathniconico:20180718221516p:plain

戦略2.勝利を優先する

各サイコロに重みを付けてランダムに選ぶ。{ i }番目のサイコロの重み{ w_{i} }

{ \displaystyle w_{i}=\sum_{j} ( i\text{の}j\text{に対する勝率} )\times( j\text{の使用率}\times 100+1 ) }

で与える。使用率が高いサイコロに勝利しやすいサイコロを選びたい。 f:id:mathmathniconico:20180718221935p:plain f:id:mathmathniconico:20180718222105p:plain きれいなバンドが現れる。緑が最も使われ、一方でそのメタであるはずの橙が使われない。

戦略3.敗北を避ける

重み{ w_{i} }

{ \displaystyle \frac{1}{w_{i}}=\sum_{j} ( i\text{の}j\text{に対する敗北率} )\times( j\text{の使用率}\times 100+1 ) }

で与える。使用率が高いサイコロに負けやすいサイコロを選びたくない。 f:id:mathmathniconico:20180718222158p:plain f:id:mathmathniconico:20180718222205p:plain こちらは橙が突出しており、他の3種類は僅かに緑が優位だがどれも一様である。なるべく負けないようにするには橙を選ぶと良い。

戦略4.敗北と引き分けを避ける

重み{ w_{i} }

{ \displaystyle \frac{1}{w_{i}}=\sum_{j} ( i\text{の}j\text{に対する敗北率}+\text{引き分け率} )\times( j\text{の使用率}\times 100+1 ) }

で与える。使用率が高いサイコロに負けるか引き分けやすいサイコロを選びたくない。 f:id:mathmathniconico:20180718222250p:plainf:id:mathmathniconico:20180718222255p:plain こちらは戦略2とほぼ同様な結果になった。ただし結構ブレが大きいようだ。

戦略5.引き分けを避ける

重み{ w_{i} }

{ \displaystyle \frac{1}{w_{i}}=\sum_{j} ( i\text{の}j\text{に対する引き分け率} )\times( j\text{の使用率}\times 100+1 ) }

で与える。使用率が高いサイコロに引き分けやすいサイコロを選びたくない。 f:id:mathmathniconico:20180718222129p:plain f:id:mathmathniconico:20180718222139p:plain 予想外に面白い結果になった。カオスの中に潜む周期性というか、ある種の可積分性が隠れているように感じる。

各自バラバラの場合

上記の5つの戦略を、それぞれ40人ずつに取らせてみた。 f:id:mathmathniconico:20180718222313p:plain 戦略2とそれほど変わらないが、緑と紫が拮抗しているように感じる。相変わらず橙は人気がない。

チートサイコロに変えてみる

サイコロBを{ ( 6, 6, 6, 6, 6, 6 ) }というチートサイコロEにしてシミュレーションを行ってみた。

戦略2

戦略2で使用率100%にならない。 f:id:mathmathniconico:20180718222348p:plain

勝率+引き分け率

{ \displaystyle w_{i}=\sum_{j} ( i\text{の}j\text{に対する勝率}+\text{引き分け率} )\times( j\text{の使用率}\times 100+1 ) }

f:id:mathmathniconico:20180718222748p:plain 橙と緑の環境になったが、それでも100%にならない。

(勝率+引き分け率)÷敗北率

{ \displaystyle w_{i}= \frac{\sum_{j} ( i\text{の}j\text{に対する勝率}+\text{引き分け率} )\times( j\text{の使用率}\times 100+1 )}{\sum_{j} ( i\text{の}j\text{に対する敗北率} )\times( j\text{の使用率}\times 100+1 )} }

f:id:mathmathniconico:20180718222955p:plain これでようやく100%になった。

元の問題に戻る

ということで、

{ \displaystyle w_{i}= \frac{\sum_{j} ( i\text{の}j\text{に対する勝率}+\text{引き分け率} )\times( j\text{の使用率}\times 100+1 )}{\sum_{j} ( i\text{の}j\text{に対する敗北率} )\times( j\text{の使用率}\times 100+1 )} }

という式で最初の問題のシミュレーションを行ってみた。 f:id:mathmathniconico:20180718223942p:plain

引き分け率を除外する。

{ \displaystyle w_{i}= \frac{\sum_{j} ( i\text{の}j\text{に対する勝率} )\times( j\text{の使用率}\times 100+1 )}{\sum_{j} ( i\text{の}j\text{に対する敗北率} )\times( j\text{の使用率}\times 100+1 )} }

f:id:mathmathniconico:20180718224055p:plain

なんとも不思議な結果である。

所感

モデルとしては簡単な部類なので、数式で厳密解が得られる可能性はある。何か良いアイディアがあったらマストドンでトゥートして頂けると助かります。