択一ゲームの確率

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

いつも断っている通り、筆者はド文系で高校程度の数学も怪しいところがたくさんあるため、計算方法や計算結果を信用しない方がよいのだが、択一を数字で考えるというアイディア(未満のものだけど)だけでも有用だろうと思う。できるなら、数学がちゃんとわかっている人にちゃんとしたモデルを作って欲しいところ。


前提になる考え方

最初に登場人物を設定しておこう。以下ではキャピタルさんとスモールさんの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倍の倍率を決めているに過ぎないという点だろう。

上記をきちんと証明するのはけっこう難しく、たしか以前東大だか京大だかの数学の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)
期待値の行列SCTRが
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択シチュエーションにおいて、

といったあたりである。

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


もどる

自滅への道トップページ