択一ゲームの確率


前提 / モデル / 演算準備 / 演算例
/ ゲーム性がある局面 // もどる

最初に断っておくが、筆者は確率押しでゲームを進めるのが好きでない。理想としては「相手は終わった後もしばらく何をされたかわからない」ような動きこそが対人ゲームの醍醐味だと思っている。しかしゲームの中でセットプレー的な状況はよくあるわけで、その理解をしておくことも必要だとは思う。ボードゲームの世界では(ドイツゲームなんかでは遅くとも90年代から:Kniziaとか)数学(というかゲーム理論)を基にしたゲームが普通にあったが、格ゲーなどの択一を確率問題として考察した例は、2019年現在あまり見ない。

いつも断っている通り、筆者はド文系で高校程度の数学も怪しいところがたくさんあるため、計算方法や計算結果を信用しない方がよいのだが、択一を数字で考えるというアイディア(未満のものだけど)だけでも有用だろうと思う。できるなら、数学がちゃんとわかっている人にちゃんとしたモデルを作って欲しいところ(以下は、2人非零和ゲームを利得双行列で表現する手法に似通っているが、筆者の数学力の限界から、まったく厳密なものでない)。


前提になる考え方

最初に登場人物を設定しておこう。以下ではキャピタルさんとスモールさんの2人がゲームを行うものとする。この名前に数学的な意味はなにもないが、単に「攻撃側」とか「守備側」と呼んでいると混乱する場面がありそうだから、便宜上こう呼んでおく。

まずは単純に得点(ないし利得)を得る二択ゲームを考える。たとえば、キャピタルさんがAかB、スモールさんがaかbのカードを選び、Aとaの組み合わせなら2点、Bとbの組み合わせなら5点。AとbないしBとaなら無得点になるとか、そういうゲームである。キャピタルさんが得点の最大化、スモールさんが得点の最少化を目指して自分のカードを選択するとしよう。このときの最適な選択は、キャピタルさんはAとBを5:2の割合で、スモールさんもaとbを5:2の割合で選ぶことで、どちらか片方が最適な割合でかつ予測できない程度にランダムな選択を続けている限り、1回あたりの得点期待値は10/7になる。

一般化しておこう。得点mとnの2択があり、どちらか片方を阻止できるとき、得点を増やしたい側も抑えたい側もn:mが最適な選択で、得点の期待値をGとするとG=mn/(m+n)になる。mが一定でnがn≧mの範囲を動くときGは単調増加し、n=mのときG=m^2/2m=m/2、nが無限大になるときの極限はG=mになる(漸近線のあるグラフ)。とくに、m=1と定義したときG=n/(n+1)である。

議論としてはこれで十分なはず(ちゃんとしたゲーム理論でどう説明しているか筆者は知らないが、少なくとも感覚的には奇妙でないと思う)だが、得点1とmとn(ただし1≦m≦n)の3択があって、どれか1つを阻止できる場合も考えてみたい。キャピタルさんの選択{A,B,C}とスモールさんの選択{a,b,c}があり得て、結果が(A,a)のとき1点、(B,b)のときm点、(C,c)のときn点、それ以外のとき無得点になり、キャピタルさんが得点の最大化、スモールさんが得点の最少化を目指して自分のカードを選択する。最適対応はやはり1:1/m:1/n=mn:n:mで、G=mn/mn+m+nになる。m=1のときP=n/2n+1、m=2のときP=2n/3n+2、m=4のときP=4n/5n+4、m=nのときP=n^2/n^2+2n=n/n+2になる。

まとめると、択一で得点を得るときの期待値は「最小得点選択肢の点数/選択肢の数」をベースラインとして、最小得点でない選択肢の点数が上がるにつれ「最小得点選択肢の点数」に漸近する、ということがわかる。ここで重要なのは、期待値を支配的に左右するのはまず最小得点選択肢の点数であって、それ以外の選択肢の点数は高々択数倍の倍率を決めているに過ぎないという点だろう。

上記をきちんと証明するのはけっこう難しく、たしか以前東大だか京大だかの数学の2次試験に類題(グリコじゃんけんの最適解だっけか:探したら相手の得点も考慮するときの不等式の解法と自分の得点だけ考慮した図形を応用した解法があったので、気になる人は参照)が出ていたくらいのレベルで、ぶっちゃけ筆者の手には負えないのだが、まあ感覚的な理解でもそんなに不自然な話ではないし、ここを納得しないと話が進まない(数学では最適化問題とか計画問題などと呼ばれる)。また、どちらかが最適解でない割合でカードを出し続けても、相手が最適解から踏み外さなければ期待値は変わらないが、割合を偏らせるということは相手に「偏りに合わせる」チャンスを与えるということなので、ローリスクノーリターンくらいの損な行動になる。


ゲームのモデル

次に得点の上限を設けた場合を考える。つまり、最初に示したゲームを何度も行い、合計得点が10点になったところで終了する、というルールである。結論から言えば、この場合10点を越えた得点が単に無効になる。たとえば現在の得点が8点で、1点・3点・7点の選択肢があるとき、1点・2点・2点の選択肢から選ぶのと同じ意味になる。これはつまり、オーバーキルを(プラスにもマイナスにも)評価しないということと同義である。納得しにくい場合は、現在0点の状態で1点・10点・10点の選択肢がある状況と、1点・10点・100万点の選択肢がある状況を比べてみるとよい。両者が同義であることはすぐにわかると思う。

合計得点の期待値を増減させるには個々の回で得点期待値を増減させる以外にないのだから、得点に上限を設けるということは、現在得点が上限得点に近くなったとき得点の大きな選択肢から順に実質的な得点が減っていく、ということと同じである。これも数学的に証明しようと思ったらきっと面倒なのだろうが、そういうものだと納得したことにして話を進めたい。

さらに、得点のやりとりを一方通行にせず、相互に得点を競うようにしてみたい。つまり、キャピタルさんの選択{A,B}とスモールさんの選択{a,b}があり得て、結果が(A,a)のときキャピタルさんにRAa点、(B,b)のときキャピタルさんにRBb点、(A,b)のときスモールさんにRAb点、(B,a)のときスモールさんにRBa点が与えられ、先に終了点数Rendに達した方を勝ちとする。以下では便宜上、キャピタルさんの得点をプラス、スモールさんの得点をマイナスで表記するが、これらは互いに独立していて、プラス5点とマイナス3点が合算されてプラス2点になるようなことはない(「点差」としてのみ振舞う)、ということに注意して欲しい。

具体的な数字で考えてみよう。キャピタルさんの選択{A,B}とスモールさんの選択{a,b}があり得て、結果が(A∩a)のとき+3点、(B∩b)のとき+2点、(A∩b)のとき-1点、(B∩a)のとき-2点で、累計が100ないし-100点に達したら終了とする。キャピタルさんの得点を最適化する選択肢は、A:B=2:3ないしa:b=3:2、スモールさんの得点を最適化する選択肢はAないしa:Bないしb=1:1になる。この場合キャピタルさんは有利な状況にいるので、自分の得点を最適化するよう意図した、としよう。そうするとスモールさんの得点については最適でない選択となるため、対するスモールさんは(傾向がわかってさえいれば)ずっとaを選び続けることで、自分の得点期待値を高めることができる。この条件でゲームを続けると、両者の得点期待値は、どちらも1回あたり6/5点になる。

キャピタルさんはこの結果に不満なので、スモールさんの得点期待値を最適化するためにA:B=1:1という戦術を採用した、としよう。そうすると今度はキャピタルさんの得点が最適でなくなるので、スモールさんはずっとbを選び続ける。この結果両者の得点期待値は、どちらも1回あたり1点になる。こうやって定常状態だけ比べると、有利なはずのキャピタルさんが得をしていないように思えるかもしれないが、実際には、スモールさんは最大限のリスクを取ってやっと互角の状況にあり、キャピタルさんが上の2つの戦術をランダムに切り替えながらゲームを進めれば、対応のためのラグタイムでいつか得点に差が付くはずである(確率とか期待値といったものは、求める際に「合計」が出てくることからもわかるように、積分ないし総和によって得る情報なので、時間応答と粒度にトレードオフの関係がある:おそらくハイゼンベルク型の不確定性ではなく、積分区間が窓の役割になってフーリエ変換型(標準誤差型)の不確定性を持つ、のだと思う、たぶん、なんとなく)。


演算の準備

条件から結果を演算するために、定型化をしておきたい。キャピタルさんの選択{A,B,C}とスモールさんの選択{a,b,c}について、その頻度C={P(A),P(B),P(C)}とS={P(a),P(b),P(c)}をそれぞれ縦ベクトルとするなら、あり得る状況それぞれの確率は両者の直積として与えられる。これと状況別に得られる結果の行列のアダマール積の成分の総和を(プラスの要素とマイナスの要素で別々に)とってやると、キャピタルさんとスモールさんの1回あたりの得点期待値がわかる(はず)。以下ではhtmlでの表現上ベクトルや行列を表組みで表すことにする。また当然ながらすべての確率は0以上1以下であり合計も1、P(A∩a)=P(A)*P(a)となる。

ベクトルCを

P(A)
P(B)
P(C)
ベクトルSを
P(a)
P(b)
P(c)
とするとその直積SCT
P(A∩a)P(A∩b)P(A∩c)
P(B∩a)P(B∩b)P(B∩c)
P(C∩a)P(C∩b)P(C∩c)
ここに結果行列であるRを用意すると、
R(A∩a)R(A∩b)R(A∩c)
R(B∩a)R(B∩b)R(B∩c)
R(C∩a)R(C∩b)R(C∩c)
期待値の行列(SCT)R(CとSの直積と結果行列のアダマール積)が
P(A∩a)*R(A∩a)P(A∩b)*R(A∩b)P(A∩c)*R(A∩c)
P(B∩a)*R(B∩a)P(B∩b)*R(B∩b)P(B∩c)*R(B∩c)
P(C∩a)*R(C∩a)P(C∩b)*R(C∩b)P(C∩c)*R(C∩c)
のように得られる。

最終的に得られた行列(SCT)Rの成分の総和を(プラス領域とマイナス領域で別々に)取ると、キャピタルさんとスモールさんの得点の期待値がわかる。

プラス領域とマイナス領域で別々に、というのは実はちょっと手抜きした計算方法で、キャピタルさんの得点とスモールさんの得点を別の行列にして、それを積み重ねたもの(上記より1階大きなテンソルか、双行列)を用意してやれば、両方に得点が入るような選択肢も自然に計算できる(以下では簡略化のため行列で演算する)。


演算の例

すでに考察したパターンをもう一度。結果行列Rを、

R(A∩a)=+3R(A∩b)=-1
R(B∩a)=-2R(B∩b)=+2
として考えてみる。

主導権を握っているキャピタルさんが、自分の選択肢ベクトルC={P(A),P(B)}を{2/5,3/5}と定めると、期待値の行列は以下のようになる。

+3*(2/5)*P(a)R(A∩b)=-1*(2/5)*P(b)
-2*(3/5)*P(a)R(B∩b)=+2*(3/5)*P(b)
ここでスモールさんの選択肢ベクトルS={P(a),P(b)}を{x,x-1}とすると、キャピタルさんの得点期待値は3*(2/5)*x + 2*(3/5)*(x-1) = (12/5)*x-(6/5)、スモールさんの得点期待値は1*(2/5)*(x-1) + 2*(3/5)*x = (8/5)x-(2/5)となる。

3択だとかなり計算が面倒なのだろうが、少なくとも二択の場合は単なる直線2本なので、定義域の範囲で後者と前者の差がもっとも小さくなるところを探せばよく、直線であれば当然両端どちらかがスモールさんの選択するべき戦術を示している。

これはたとえば格ゲーで、キャピタルさんがスモールさんに投げと打撃の二択を仕掛けて、打撃が入って30点与ダメージ、ガードリバーサルが入って10点被ダメージ、投げが入って20点与ダメージ、投げ返しが入って20点被ダメージ、それ以外の結果は無視できる、なんて場合に適用できる(相手の体力をゼロにすることを、相手の体力分の点数を得ることに置き換えている)。

なおこのとき、仕掛ける側の行動が一定の確率でバラけている(どちらなのか確率的にしか予想できない)ことが問題なのであって、操作している人が自分の行動を意図的に制御できているかどうかは問題にならない。つまり、仕掛けている本人もどの選択肢になるかわからない、いわゆる天然二択であっても、自分の意思で行動を選んでいるのであっても、最初の仕掛けが成功するか否かには関係がない。天然二択の場合でも、選択の割合をコントロールできる幅が狭くなるとか、出た結果に対して反応するのに必要な時間が伸びるとか、そういった影響が出るのみである。


ゲーム性がある局面

同じ方法で「損な選択肢」がある場合も考えてみたい。たとえば結果行列が

R(A∩a)=+8R(A∩b)=-5
R(B∩a)=-4R(B∩b)=+3
だった場合である。上の例と同じく格ゲーに当てはめれば、キャピタルさんがスモールさんに投げと打撃の二択を仕掛けて、打撃が入って80点与ダメージ、ガードリバーサルが入って50点被ダメージ、投げが入って30点与ダメージ、投げ返しが入って40点被ダメージ、みたいな場合である。投げ合いは相手の方が期待ダメージが高く、狙うのは損に見えるがそうではない。

キャピタルさんにとってはあくまでも、与ダメージを最適化できるC={3/11,8/11}と被ダメージを最適化できるC={4/9,5/9}が安定した行動になり、行動を偏らせたことがバレれば大きな損をする可能性がある(バレるまでにどれだけの回数をこなせるかというのは、ベイズ推定とか駆使してガンガン計算しないとわからないので、ここではとりあえずパス)。

結果は省くが、実際に計算してみると、かなり「相手次第の要素」が強い微妙な数字が出てくる。これはつまり「安定行動で押し切る」ことができない状況であって、格ゲーにとって「ゲーム性がある局面」というのはこういう場面なのだろうと思われる。反対に、どうやっても収支をプラスにできない(ダメージ期待値が被ダメージ期待値を下回らないようにできるCがない)行動が相手にあるなら、その局面が繰り返し出現するだけで収支はどんどん悪化する。

とくに強調しておきたいのは、格ゲーのn択シチュエーションにおいて、

といったあたりである。リターンの期待値が「一番弱い選択肢のリターン/(1~択数)」の範囲にあることはしっかり認識しておきたい。

もちろん、ここまでに紹介した計算方法はごく簡易なものであり、すでに触れた行動の偏りが相手にバレるまでの時間や、状況が移ったあとの有利不利(上では結果をダメージだけ見て評価しているが、たとえばガードリバーサルをくらった後自分が有利な択一を迫れるなら、その期待値も再帰的に評価しないと正確でないし、残り体力が減ることにより次の択一で結果行列が変化する分なども本来なら考慮すべき)、操作ミスの可能性(当然あるよね?)などを考慮していない。計算結果がカオス的な振る舞いをしない範囲でもっともよく近似できるポイントがどこにあるのか、筆者に見当はつかないが、しかし上記のような簡易な計算だけでも、ある程度の知見は得られるし、それを活用できる方法もあるのではないかと思う。


オマケ1(極端値による説明)

ダイス系の運ゲーでたまに話題にされる偏りについて説明してみたい。たとえば「あるサイコロを3回振って3回とも5の目が出たとき、次に5が出る確率は6分の1より高いか低いか」みたいな例である。正解を先に言えば6分の1より高い(「6分の1ちょうどである」という主張はまったく不可能ではないが、「6分の1より低い」とするのは明らかな誤りで「ギャンブラーの誤謬」と総称される)。

理由を数学的に説明するにはベイズ推定なんかを持ち出さなければならないので素朴にアプローチしてみよう。回数を増やしてやれば簡単にわかる。あるサイコロを300万回振って300万回とも5の目が出たとき、次に5が出る確率は6分の1より高いか低いか。高くないわけがない。このように数字を極端にすることで直観的な理解を得るのは、モンティホール問題や3囚人問題の説明なんかにも有効な手法で、このページでも「100万点」なんていう数字を挙げて利用している。

なお冒頭で触れた「偏り」というのは、たいていは逆正弦法則(ざっくりいうと、たとえばコインゲームで最初に10連敗したら「たとえイカサマコインでなかったとしても」五分五分のバクチを続けて取り返せる確率は低い=二項分布(を近似した正規分布)の標準偏差がn^(1/2)のオーダーで増大するにつれ「取り返せない負け」or「安泰な勝ち」を得るプレイヤーが増えていく、という話:10連敗してから取り返すのと45勝55敗から取り返すのがまったく同様に難しい、というのがミソなのだが、数式とかは詳しそうな人の解説を参照)を曲解したものである。


オマケ2(どれだけ勝ったら相手より強いのか)

一番シンプルなのは適合度検定を用いる方法で、たとえばピアソンのカイ二乗検定であれば、有意水準0.05のとき期待勝率1/2の帰無仮説は60勝40敗(ないし40勝60敗)で棄却される。つまり、100回勝負して60勝以上(ないし60敗以上)したなら、95%以上の確率で「真の勝率は半々ではない」と推定できる。もちろん期待勝率が1/2でないときにも同様の計算ができ、有意水準0.05のとき、期待勝率3/5(60%)なら70勝30敗、期待勝率2/3(66.67%)なら76勝24敗で帰無仮説を棄却できる。

この場合に重要なのは試行回数で、有意水準0.05でも20勝10敗や31勝19敗では期待勝率1/2の帰無仮説を棄却できない(そのくらいの偏りなら偶然かもしれない)し、もし1000番勝負を行えるなら531勝以上で帰無仮説を棄却できる(ただし、その1000回の経験で強さが変化していても無視される)。有意差がつくまで延長し続ける決着マッチみたいなものをデザインするなら、9勝1敗、15勝5敗、21勝9敗、27勝13敗、32勝18敗、38勝22敗、44勝26敗、49勝31敗、55勝35敗、60勝40敗を決着ラインとするような案があり得る(7連勝でも計算上は棄却可能だが、検定の精度自体が落ちるので、普通は含めない)。

いっぽうイロレーティングの考え方を使うと、二者間ではなく多者間で(得意不得意を均した)相対的な強さを数値化できる。細かい計算は省くが、おおよそ、レート差200で勝率76%(3倍勝ち=3勝1敗)、レート差400なら勝率90%(9倍勝ち=9勝1敗)相当の実力差になる。こちらの計算方法だと5勝1敗、6勝2敗、9勝3敗、10勝4敗、13勝5敗、14勝6敗、15勝7敗、16勝8敗、19勝9敗、20勝10敗、26勝14敗、32勝18敗、37勝23敗、43勝27敗、49勝31敗、54勝36敗、60勝40敗が95%信頼区間にちょうど入る(当然ながら、二者間だけで考えるなら適合度検定を用いた方がよい)。なお計算手法に固有の誤差もあり、現在のレートを基準に、プラス16点~マイナス16点(同レートで1回勝負したときのレート変動である8点の2倍)の間で、真のレートが存在する累積確率が95%程度と考えればよいようだ。

強さの指標としてより有用なのはと考えると・・・やはり多者間で適用できるイロレーティングの方が使いやすいのではないか。だいたい、実力が似通った相手と100戦もするとしたら、たとえどちらが勝ったとしても、元々強かったのか100戦するうちに強くなったのか相手のクセを読んで勝つタイプだっただけなのか、数字だけでは区別がつかない(積分区間を長く取らないと精度が出ないが、短く取らないとコヒーレンシーが担保できない、ということなのだと思う、多分)。元の力に開きがある場合は、帰無仮説を棄却できるorできないの二択である適合度検定よりも、間隔尺度であるイロレーティングの方がずっと優れている。

ただ明快さでいえばタイマンの繰り返し反復がやはりわかりやすく、またイロレーティングは(計算方法自体も平均値を1500にする(参加者全員を平均した仮想プレイヤーを1500点と考え、そこからどのくらい差があるかで評価する)あたりが鈍くさいような気がしてならないが)実施に注意点が多くノイズが入りやすい(新規参加者やリタイア者やスポット参加者の扱いとか、対戦相手をどう決めるかとか)。


オマケ3(タイミングは量子化できる、たぶん)

ここまでとまったく異なる話題だが、コンピューターゲームでボタンを押すタイミング(いわゆる目押しの難度)を評価するとき、時間がデジタルに区切られ、結果は統計的な分布としてしか把握できないわけだから、これはタイミングを量子化していることになる(はず、だと思う)。

たとえば、ヴァンパイアハンターの攻略記事で設定した鉄人君近似モデル(標準偏差1.29の正規分布にパーセント点をプラマイ3で取り、内側累積確率である98%を「3フレームのうちどこかでボタンを押せる確率」だと解釈したもの:任意の連続2フレームのどこかなら87.9%、任意の1フレームなら56.2%の確率でタイミングを合わせられる)なんかでもそうだが、狙うタイミングを厳密に(実用上は1/2フレーム単位で)設定できるなら(という仮定がそもそも危ういのはひとまず措くとして)、結果として現れる確率分布の「直感とはかなり異なる振る舞い」を把握できるはず。

さらに、ゲームシステムによっては時間区切りの不確定性(フレーム区切りの場所が確定的な場合と確定しない場合がある)もあって、数学を持ち込む場所としてけっこう面白いんじゃないかと思う。


もどる

自滅への道トップページ