習熟を考える

AIの勝率は初級90.58%、中級73.75%、上級32.41%です*1。この数値が理想値かどうかはわかりません。AIが見えている盤面だけで計算するプレイスタイルなら理想値はもう少し上がります。何手も先まで計算しているのなら理想値だと言えます。この違いを知りたくて海外のGMにAIのプレイ動画を見たいとお願いしたのですが別の話にずらされました。翻訳ソフトを使いながらだと自分の真意を伝えにくいですね。ですが人間が出した最高記録を見る限り、人間が到達できる最高地点であると言っても過言ではないでしょう。どこまでここに近づけるかが勝負です。

さて、自分の勝率はそれぞれ何%ですか?統計のページから自分のデータを見ることができますが、おそらく安定プレイしかやってないという人はいないでしょうから表示されている数値は参考にならないかもしれません。それでは習熟の記録が勝率と関係あるでしょうか。当然勝率が高い人が低い人よりいい結果になりやすいのですが、運の要素も絡むため、勝率とイコールにはなりません。

AIのそれぞれの勝率で100万回プレイして出た習熟のシミュレーション結果です。


当然のことですが、習熟の平均値は勝率とほぼ同じになっています。私たちが習熟の記録を伸ばすときに考えるのはこのグラフの山の中央を右に動かす(論理を追及する)と同時に右端をどこまで狙いに行くか(試行回数を稼いで運をつかみにいく)ということです。

自分の勝率を考える

さて上のグラフを見てもらったらわかると思うのですが、勝率が高いほど鋭角な山に、低いほど鈍角な山になっています。AI様も上級習熟13まで落ちるときがあります。運負けが続いてもAI様も同じだと思ったらちょっと心強いですね(?)

この特徴を見ながらイメージしてください。自分の習熟の記録が山の右端あたりにあったとしたら山の中央はどのあたりにあるのでしょう?そこが自分の勝率です。

挑戦回数の逆算

自分が狙うストリークは何回でしょうか?勝率を回数で累乗計算してください。出た数値がそのストリークを達成できる確率です。

以下参考までにAIがプレイした場合の一発クリア、10回中、100回中、1000回中にクリアできる確率を書いておきます。100%になっているところは厳密には99.999…となっています


初級
ストリーク 1 10 100 1000
1 90.580% 100.000% 100.000% 100.000%
5 60.976% 99.992% 100.000% 100.000%
10 37.181% 99.043% 100.000% 100.000%
15 22.672% 92.355% 100.000% 100.000%
20 13.824% 77.414% 100.000% 100.000%
25 8.430% 58.548% 99.985% 100.000%
30 5.140% 41.003% 99.489% 100.000%
35 3.134% 27.272% 95.860% 100.000%
40 1.911% 17.549% 85.480% 100.000%
45 1.165% 11.061% 69.031% 99.999%
50 0.711% 6.883% 50.989% 99.920%
55 0.433% 4.249% 35.224% 98.699%
60 0.264% 2.611% 23.245% 92.903%
65 0.161% 1.599% 14.891% 80.058%
70 0.098% 0.978% 9.361% 62.575%
75 0.060% 0.597% 5.816% 45.074%
80 0.037% 0.365% 3.587% 30.602%
85 0.022% 0.222% 2.203% 19.968%
90 0.014% 0.136% 1.349% 12.699%
95 0.008% 0.083% 0.825% 7.947%
100 0.005% 0.050% 0.504% 4.924%
105 0.003% 0.031% 0.307% 3.032%
110 0.002% 0.019% 0.188% 1.860%
115 0.001% 0.011% 0.114% 1.138%
120 0.001% 0.007% 0.070% 0.696%
125 0.000% 0.004% 0.043% 0.425%
130 0.000% 0.003% 0.026% 0.259%
135 0.000% 0.002% 0.016% 0.158%
140 0.000% 0.001% 0.010% 0.096%
145 0.000% 0.001% 0.006% 0.059%
150 0.000% 0.000% 0.004% 0.036%




中級
ストリーク 1 10 100 1000
1 73.750% 100.000% 100.000% 100.000%
2 54.391% 99.961% 100.000% 100.000%
4 29.583% 97.003% 100.000% 100.000%
6 16.091% 82.698% 100.000% 100.000%
8 8.752% 59.983% 99.989% 100.000%
10 4.760% 38.597% 99.238% 100.000%
12 2.589% 23.073% 92.743% 100.000%
14 1.408% 13.222% 75.786% 100.000%
16 0.766% 7.401% 53.647% 99.954%
18 0.417% 4.089% 34.129% 98.462%
20 0.227% 2.243% 20.296% 89.653%
22 0.123% 1.226% 11.602% 70.864%
24 0.067% 0.668% 6.486% 48.858%
26 0.036% 0.364% 3.581% 30.557%
28 0.020% 0.198% 1.964% 17.990%
30 0.011% 0.108% 1.073% 10.225%
32 0.006% 0.059% 0.585% 5.698%
34 0.003% 0.032% 0.319% 3.141%
36 0.002% 0.017% 0.173% 1.721%
38 0.001% 0.009% 0.094% 0.940%
40 0.001% 0.005% 0.051% 0.512%
42 0.000% 0.003% 0.028% 0.279%
44 0.000% 0.002% 0.015% 0.152%
46 0.000% 0.001% 0.008% 0.083%
48 0.000% 0.000% 0.004% 0.045%
50 0.000% 0.000% 0.002% 0.024%




上級
ストリーク 1 10 100 1000
1 32.410% 98.010% 100.000% 100.000%
2 10.504% 67.037% 99.998% 100.000%
3 3.404% 29.275% 96.869% 100.000%
4 1.103% 10.502% 67.027% 99.998%
5 0.358% 3.519% 30.109% 97.219%
6 0.116% 1.153% 10.949% 68.640%
7 0.038% 0.375% 3.687% 31.319%
8 0.012% 0.122% 1.210% 11.463%
9 0.004% 0.039% 0.394% 3.869%
10 0.001% 0.013% 0.128% 1.271%
11 0.000% 0.004% 0.041% 0.414%
12 0.000% 0.001% 0.013% 0.134%
13 0.000% 0.000% 0.004% 0.044%
14 0.000% 0.000% 0.001% 0.014%
15 0.000% 0.000% 0.000% 0.005%
16 0.000% 0.000% 0.000% 0.001%


本当なら

時間があれば、自分の勝率、自分の速度、目指すストリークの回数を打ち込むと、達成確率、達成までの回数目安、想定時間が算出されるみたいなやつを作ろうかと思ってたのですが断念。

misc.

上の表は「『M連勝チャレンジ(負けたら終了)』をN回やったとき、M連勝を達成できる確率」、つまり「N回負けるまでやり続けたときどこかでM連勝する確率」なので、「N回の挑戦回数で」という言葉からイメージするものとはちょっと違う。
特に初級だと「10回の挑戦で」といいつつ100盤面くらいプレイする必要がある。

そうではなく、「N盤面プレイしたときにどこかでM連勝する確率」が求めたいならこれ。
参考:https://wandbox.org/permlink/FtoKI2BbvoGgYOlM
この確率はN<Mなら当然0になる。Nがプレイ時間に比例するので目安として使いやすい。
この確率は1-(1-p^M)^(N*(1-p))で近似できる。1回負けるまでのプレイ回数の期待値が1/(1-p)なので、「M連勝チャレンジ」をN*(1-p)回やるとみなせるため。

misc. 2

無限に等しい回数のゲームをした時にn連勝がいくつ現れるかという観点から
n連勝するのに必要な時間の期待値を求める。
言い換えれば、n連勝を複数回達成することが目的の時の1回分達成の所要時間である。

1敗するのに掛かるゲーム数の期待値は次式で表される。
Ml = 1/(1-p)
また、きっかりk連勝する確率は
P(k) = p^k*(1-p)
で与えられる。
k連勝の内n連勝した回数を floor(k/n) (floorは正数なら小数点切り捨て)とカウントすると、1敗する間、つまり1/(1-p)ゲーム数の間にきっかりk連勝したストリーク内のn連勝数は、
N(n, k) = P(k) * floor(k/n) = p^k*(1-p) * floor(k/n)
となる。
N(n, k) を k に関してn~∞ まで総和を取ることで Ml 戦中にn連勝した回数N'(n)が求まる。
N'(n) = ΣN(n, k) k = 1 → ∞
ここで、1戦当たりのn連勝数は N'(n)/Mlであるから、その逆数がn連勝に必要なゲーム数の期待値となる。
A(n) = Ml / N'(n)

N'(n)の式を求める。
N(n, k)内のfloor(k/n)はkがn増える毎に1増える定数であることから、N'(n) - p^n*N'(n) を求めることで単純な形になる。
ここで、p^n*P(k) = p^(k+n)*(1-p) = P(k+n) であることから、
N'(n) - p^n*N'(n) = (P(n) + P(n+1) + … + 2*P(2n) + 2*P(2n+1) + …) - (P(2n) + P(2n+1) + … + 2*P(3n) + 2*P(3n+1) + …)
右辺初項のP(n)はn番目の項ではなく、N'(n)右辺式にあるkに関する総和における初項である。上式を整理すると、
(1-p^n) * N'(n) = P(n) + P(n+1) + … + P(j) - floor(j/n)*(P(j) + P(j+1) + … + P(2j-1)) j → ∞
であり、0 < p < 1 の時 P(∞) = 0 は明らかであるから、
(1-p^n) * N'(n) = P(n) + P(n+1) + … + P(∞)
となる。
右辺式のP(n) + P(n+1) + … + P(∞) はΣp^k (k = 0 → ∞)を求めれば順番に求まる。
Σp^k - p*Σp^k = p^0 - p^∞ = 1
∴Σp^k = 1 / (1 - p)
P(k) = p^k*(1-p) であるから、
P(n) + P(n+1) + … + P(∞) = Σp^k * p^n * (1 - p) = p^n
(1-p^n) * N'(n) = p^n
以上から、
N'(n) = p^n / (1 - p^n)
と求まる。これはPTTACGfans氏が公開している計算シートで使われている式である。

N(n, k) を P(k)*(k/n) と定義した場合は N'(n) = n/p という単純な式となる。
一方で、N(n, k) を P(k)*(k - n + 1) と定義した場合は N'(n) = Ml * p^n となる。
後者は、k連勝中のn連勝の個数を k - n + 1とカウントした場合(例えば8連勝中の3連勝を6回とした時)は
単純にn連勝以上する確率(=p^n)を求め、その確率の逆数で試合数の期待値を求めた場合と同じことを意味する。

ここで、勝利時のクリア時間twと敗戦時のクリア時間tlの関係を以下のように定義する。
tw = r * tl
r は定数であり、現実的には0.1~0.5の間の数字を取ると思われる。
ただし、tw 及び tl にはゲーム更新時間や放心時間などを含んでいるものとする。
1敗する間(Ml戦)にかかる時間は (Ml - 1 + r) * tw であるから、
1戦当たりの平均所要時間は次式となる。
T = (Ml - 1 + r) * tw / Ml
これにより、n連勝にかかる時間の期待値 Tstreak(n) は、
Tstreak(n) = A(n) * T = (Ml - 1 + r) * tw / N'(n)
∴Tstreak(n) = (Ml - 1 + r) * tw * (1 - p^n) / p^n
となる。

Tstreak(n)には、単勝率 p を除くと1ゲーム時間と連勝数という2変数が存在する。
そこで、1ゲーム時間は後からかけてもらうとして、
n連勝のための所要ゲーム数 A(n) = Ml / N'(n) の計算結果を参考として以下に示す。

試合数
A(n)
ゲーム勝率p
連勝数n 90% 85% 80% 70% 60% 50% 30% 25% 20%
1 1.11 1.17 1.25 1.42 1.66 2 3.33 4 5
2 2.34 2.56 2.81 3.46 4.44 6 14.44 20 30
3 3.71 4.18 4.76 6.38 9.07 14 51.48 84 155
4 5.24 6.1 7.2 10.54 16.79 30 174.93 340 780
5 6.93 8.35 10.25 16.49 29.65 62 586.46 1364 3905
6 8.81 11 14.07 24.99 51.08 126 1958.2 5460 19530
7 10.9 14.12 18.84 37.14 86.8 254 6530.67 21844 97654.99
8 13.23 17.79 24.8 54.48 146.34 510 21772.25 87380 488280
9 15.81 22.11 32.25 79.26 245.57 1022 72577.51 349524 2441405
10 18.67 27.19 41.56 114.67 410.95 2046 241928.39
15 38.56 69.65 137.1 698.78 5314.55 65534
20 72.25 165.33 428.68 4174.18 68375.28 2097150
25 129.29 380.97 1318.48 24852.46 879341.38
30 225.89 866.99 4033.96 147886.23
35 389.49 1962.33 12320.95 879925.08
40 666.54 4430.96 37610.81
45 1135.74 9994.64 114789.37
50 1930.32 22533.77 350319.61
55 3275.95 50793.81 1069100.88
60 5554.79 114484.82

タグ:

+ タグ編集
  • タグ:
最終更新:2022年09月27日 07:32

*1 その他のAIによる勝率としては、初級10万盤面91.78%、中級10万盤面77.84%、上級1万盤面38.84%が達成されている。『TeddySweeper: A Minesweeper Solver(2013)』