サイコロゲームのシミュレーション
mathtodonネタ
次の4種類のサイコロを使ったゲームを考える。
- 目がのサイコロA
- 目がのサイコロB
- 目がのサイコロC
- 目がのサイコロD
プレイヤーは4種類の中から1種類を選び対戦を行う。対戦は2人で行い、それぞれ選んだサイコロを振り、出た目が大きい方が勝ち、同じなら引き分け、小さい方が負けとなる。
このルールで多人数が対戦を繰り返すとき、どのサイコロを選ぶのが有利になるのだろうか。考え方は様々だろう。安定を望むのならサイコロBかもしれないし、最強の目を持つサイコロCを選ぶ人もいるかもしれない。あるいは、全体の使用率が公表されると戦略も変わるだろう。もちろん何をもって有利とするか、に応じても「答え」は変わる。今回は、各人がある戦略の下でサイコロを変更すると仮定してシミュレーションを行った。各種サイコロの使用率の変化について考えたい。
シミュレーションはjuliaを利用した。式を直観的に掛けるし、適当に書いても速いし、ほんと優秀。実装の都合上、次のような条件を課した。
条件
- プレイヤーの総数は200名。
- ランダムに1列に並べ、前後のプレイヤーで対戦を行う。
- プレイヤーは後述する戦略に従い、サイコロを選ぶ確率分布を決める。
- これを10回繰り返し、行われた1000試合の使用率データを記録する。
- 以上を100あるいは1000セット繰り返し、グラフにする。
注意点
- プログラム上プレイヤーは各自のデータを保持できるが、今回は一律で全体の使用率のみを使用することにした。
- 使用率データの更新はデータを記録した時点である。つまり最初の1000試合は何も情報がない状態で行われ、残りは1000試合ごとに更新されていく。
- もっと厳しい事を述べると、全員が同じ分布に従ってサイコロを選択することになる。
これを踏まえて、以下では戦略ごとにグラフを紹介していこう。
戦略1.ランダムに選ぶ
サイコロを等確率でランダムに選ぶ。当然、使用率は25%付近を揺らぐことになる。
戦略2.勝利を優先する
各サイコロに重みを付けてランダムに選ぶ。番目のサイコロの重みは
で与える。使用率が高いサイコロに勝利しやすいサイコロを選びたい。 きれいなバンドが現れる。緑が最も使われ、一方でそのメタであるはずの橙が使われない。
戦略3.敗北を避ける
重みは
で与える。使用率が高いサイコロに負けやすいサイコロを選びたくない。 こちらは橙が突出しており、他の3種類は僅かに緑が優位だがどれも一様である。なるべく負けないようにするには橙を選ぶと良い。
戦略4.敗北と引き分けを避ける
重みは
で与える。使用率が高いサイコロに負けるか引き分けやすいサイコロを選びたくない。 こちらは戦略2とほぼ同様な結果になった。ただし結構ブレが大きいようだ。
戦略5.引き分けを避ける
重みは
で与える。使用率が高いサイコロに引き分けやすいサイコロを選びたくない。 予想外に面白い結果になった。カオスの中に潜む周期性というか、ある種の可積分性が隠れているように感じる。
各自バラバラの場合
上記の5つの戦略を、それぞれ40人ずつに取らせてみた。 戦略2とそれほど変わらないが、緑と紫が拮抗しているように感じる。相変わらず橙は人気がない。
チートサイコロに変えてみる
サイコロBをというチートサイコロEにしてシミュレーションを行ってみた。
戦略2
戦略2で使用率100%にならない。
勝率+引き分け率
橙と緑の環境になったが、それでも100%にならない。
(勝率+引き分け率)÷敗北率
これでようやく100%になった。
元の問題に戻る
ということで、
という式で最初の問題のシミュレーションを行ってみた。
引き分け率を除外する。
なんとも不思議な結果である。
所感
モデルとしては簡単な部類なので、数式で厳密解が得られる可能性はある。何か良いアイディアがあったらマストドンでトゥートして頂けると助かります。