Variance Reduction

David Montgomery 著

仙石祥一郎 訳(6/30/2000)

訳注:この記事は Kit Woolsey のオンラインマガジン GammOnLine の 2000年2月号で掲載されたものを和訳したものです。オリジナルの記事は http://www.gammonline.com/members/Feb00/articles/var.htm のURLでアクセスできます。(ただし GammOnLine のメンバーのみのアクセスとなります。)
 

1.歴史

1999年初めに Fredrik Dahl と Effect Software AS が JellyFish 2.0 をリリースしました。その特徴の一つは "variance reduction" を導入したポジションのロールアウトが可能になったことで、長いロールアウトを同等の正確さを保ちながらはるかに短いロールアウトできるようにするものでした。この機能を使えば大体100ゲームぐらいでこの機能を使わない2500ゲームと同等の正確さを得ることができたのです。

これはバックギャモン・テクノロジーでは画期的なことでした。Variance reduction を使えば JellyFish のレベル 6 や Snowie の 2-ply または 3-ply などプログラムのより高いレベルを使ってロールアウトすることが可能になったのです。これらの高いレベルではプログラムはそれぞれのムーブで長い時間考え、より上手くしかしより遅くプレーしますが、この実行速度の低下は variance reduction による精度の向上でほぼ埋め合わせることができるのです。

また variance reduction は人手によるロールアウトから初めて現実的な結果を得ることを可能にしました。JellyFish のインタラクティブ・ロールアウト機能はユーザーが片方かもしくは両方のサイドをプレーして行うロールアウトで、プログラムは(variance reduction を使わないロールアウトの)結果の平均よりもはるかに正確にゲームを解析し equity を計算できるようになったのです。

(人間の)プレーヤーは長い間ポジションを手でロールアウトしてきましたが、その結果の信頼性は極めて乏しいものでした。どんなにゲーム回数を多くしても正確な結果には至りません。このことは一般によく理解されていませんでした。バックギャモン関連の文献で著者たちは100ゲームのロールアウトやプロポジションについて述べています。たしかに実際にそれだけプレーするとなると相当な数です。しかしその結果がポジションの正確な価値を示すことを期待するのならば、100ゲームというのは十分ではありません。Variance reduction を導入すればそれらの100ゲームの結果を2500ゲームの結果相当にしますので、これなら何かしらの結果が得られるはずです。

Snowie 3 が世に出て、初めて variance reduction を使用したキューブフルロールアウトができるようになりました。これはもう一つのバックギャモン・テクノロジーにおける革新です。この新しいツールを使うことで、キューブフルの解析能力は飛躍的に向上します。

しかし驚くことには、多くのユーザは依然としてまるで1995年ごろのようにロールアウトしているように見うけられます。Variance reduction に対する不信感から、多くの人は弱いレベル(JellyFish level 5 や Snowie 1-ply)でのロールアウトに固執し、わざわざ jellyFish の インタラクティブ・ロールアウトの機能を使おうとはしません。Variance reduction が実際にどのように働いているのかを十分に理解していないことから、この(variance reduction に対する)不信感が生まれています。

Fredrik Dahl はバックギャモンに variance reduction を導入したことで賞賛に値する人です。しかし Fredrik はまた人々の variance reduction に対する不信感に関して責任があるともいえます。JellyFish 2.0 がリリースされたとき、Fredrik は競争上の理由から彼のアルゴリズムの正確な計算式を秘密にしたいと思いました。そのため彼は正確に何を(このアルゴリズムが)行っているかを一般公開しませんでした。一方、彼は購買者にはこの新しい機能がどれだけすばらしいものかというのを知ってもらいたかったはずですから、彼は単にわれわれが現在知っている「等価な("equivalent")回数のゲーム」のロールアウトを見せるわけにはいかなかったのです。(もしも彼がそうしていたなら、おそらく多くの(variance reduction に対する)誤解は避けられていたでしょう。)

そのかわりに、そのアルゴリズムはごく一般的な言葉を使って表現されました。JellyFish 2.0 のユーザーズマニュアルにはそのアルゴリズムは「出目の運(luck)を補償するものと考えてよい」と説明されています。このヒントは実際の動作を明らかにするのには十分ではなく、かえって人々にそのアルゴリズムに対する不信感を植え付ける結果となりました。運に対する補償はプログラムの評価に頼らざるを得ないはずでから、Rob Maier が指摘したように「われわれはその評価が信用できないからこそロールアウトしているのではないか」と考えられていたわけです。

Variance reduction は今はもう秘密ではありません。多くの人々が独自にこのアルゴリズムがどのように動作するのかを調べ上げてきました。その基本的考え方の説明やその応用などはバックギャモンのニュースグループに投稿されてきました。Snowie はその説明を最初のリリースから行っています。そろそろ variance reduction について分かりやすく述べるべき時が来たのではないでしょうか。
 

2. Variance reduction の手順

実際に variance reduction がどのように働くのか実例使って見ていきましょう。



           +24-23-22-21-20-19-------18-17-16-15-14-13-+

           |                o |   |                   |

           |                  |   |                   |

           |                  |   |                   | 

           |                  |   |                   | 

           |                  |   |                   | 

           |                  |BAR|                   | 

           |                  |   |                   | 

           | x                |   |                   | 

           | x                |   |                   |

           | x                |   |                   |

           | x                |   |                   |

           +-1--2--3--4--5--6--------7--8--9-10-11-12-+

           Pipcount  X: 4 O: 6

        







実際に(人手で)数回のロールアウトを実行できそして正確な勝率からそのロールアウトを検証できるようにポジションを簡単にしています。(訳注:X の手番です。) X の正確な勝率は 1/6 (ゾロ目を振る)+ 5/6×1/4(X がゾロ目を振れなかったが O がベアオフに失敗する)= 9/24 = 37.5% です。

これからこのポジションで variance reduction を使い X の勝率の観点から全ての計算を行いながらロールアウトします。それぞれの試行では普通のロールアウトと同様に最後までプレーし、結果を記録します。さらに、各ダイスの目についてどの程度 X の運が良かったか(lucky であったか)を見積もり、積算していきます。そのゲームが終了した時点で X の運(luck)の積算結果をゲームの結果から差し引いて luck の効果を「相殺」し、そのゲームの variance reduction を適用した(variance reduced)結果とします。

どのようにコンピュータプログラムが運(luck)を見積もるかについてはあとで議論します。ここでは下表に示す "luck adjustments"(訳注:「運についての補正」と訳すよりは英語のままのほうが分かりやすそうですね。)を使います。"Quantified" luck (定量化された「運」)の項内の数字は「正しい」値ではなく私がでっちあげたものです。あとで正確な補正値は実質的には重要でないことをお見せします。
 
手番
事象
Xはluckyか?
どれだけ Lucky/Unlucky?
Quantified
1回目
X がゾロ目を振る
Yes
とても Lucky
+50%
1回目
X がゾロ目を振らない
No
わずかに Unlucky
-10%
2回目
O がベアオフできない
Yes
かなり Lucky
+45%
2回目
O がベアオフできる
No
いくらか Unlucky
-15%

「X が lucky だったという」ことは「そのロール後にそのロール前に比べて X のチャンスが高くなっている。」ということを意味します。逆に「unlucky なロール」では、「X はできることならもう一度ダイスを振りなおしたい」ということです。

そのロールが lucky であったかそうでなかったかの判断は各手番で独立に考えられます。O がダイスを振るときはすでに O はある程度の運を得ていますが(X がゾロ目を振らなかった)、個々の手番の運を見積もるときにはこの過去の事象は考慮しません。

これらの運の見積もりを用いて、さっそく variance reduction を適用したロールアウトをしてみましょう。

ゲーム1
X はゾロ目以外を振り2チェッカーをベアオフします。上の表を参照すると、X は luck 値 -10% の「わずかに unlucky」となっています。そして O がベアオフに失敗します。つまり X は +45% だけ lucky です。X がこのゲームに勝ちましたので、最終結果は X が 100% のチャンスを得たことになります。X の積算した luck は (-10) + (+45) = +35% です。この X の luck 値を最終結果から差し引くと 100 - 35 = 65% という variance reduction 後の結果が得られます。

ゲーム2
X がゾロ目以外を振り2チェッカーをベアオフし、luck 値は -10% となります。 次ぎに O が最後のチェッカーのベアオフに成功して、(X の)luck 値は -15% となります。O がこのゲームに勝ったので X の最終結果は 0% です。X の luck の合計は (-10) + (-15) = -25% ですので、variance reduction 後の結果は 0 - (-25) = 25% となります。

ゲーム3
X がゾロ目を振りゲームに勝ちます。X の luck 値は +50%、ゲームの最終結果は 100% ですので variance reduction 後の結果は 100 - 50 = 50% となります。

以上の3ゲームに加えてさらに7ゲームを行い、その結果を下表に示します。全ての数字は X の観点でのパーセンテージです。
 
ゲーム
一回目(X)
Xのluck
二回目(O)
ベアオフ
Xのluck
ゲームの結果
Luckの合計
Variance Reduced
1
ゾロ目以外
-10
失敗
+45
100
+35
65
2
ゾロ目以外
-10
成功
-15
0
-25
25
3
ゾロ目
+50
   
100
+50
50
4
ゾロ目以外
-10
成功
-15
0
-25
25
5
ゾロ目以外
-10
成功
-15
0
-25
25
6
ゾロ目
+50
   
100
+50
50
7
ゾロ目以外
-10
成功
-15
0
-25
25
8
ゾロ目以外
-10
失敗
+45
100
+35
65
9
ゾロ目以外
-10
 成功
-15
0
-25
25
10
ゾロ目以外
-10
失敗
+45
100
+35
65
合計
       
500
 
420
平均
       
50
 
42

10 ゲームを完了して X は 5 回勝ちましたので、補正していないロールアウトでは X の勝率は 50% です。Variance reduction 後の結果では X は 10 ゲーム中 4.2 ゲーム勝ったことになりますので 42% です。 X の真の勝率は 37.5% ですので variance reduction 後の結果の方がこの真の勝率の値に近くなっています。これは variance reduction を使用したときに一般的に見られる効果です。

どのようにプログラムが運(luck)を見積もるか

各ダイスの出目について luck を見積もるために、コンピュータプログラムは実際に 36 通り全てのロール後のポジションの期待値(equity)を評価します。それらの全期待値の平均値はロール前のそのポジションの期待値と一致します。そしてロール後の期待値とロール前の期待値の差がそのロールの見積もられた luck 値となります。上の例を使って、まず2回目のロール(O のロール)からこの見積もり方法を見てみましょう。
 
2回目のロールについてのプログラムの luck の見積もり
事象(O のベアオフ)
頻度(確率)
期待値の評価
X の luck
成功
3/4
0%
-25%
失敗
1/4
100%
+75%
平均
 
25%
 

実際にはプログラムは全 36 通りのロールについて評価を実行します。全てのロールのうちの 3/4 で X はゲームに負けるのでプログラムは X の期待値を 0% とします。その他の 1/4 のロールで X はゲームに勝ち、プログラムは X の期待値を 100% とします。全てのロールの結果を一まとめにしてロール前の X の期待値は 25% であると計算します。したがって X が負ける場合には出目の運は X に対して 25% 損、一方 X が勝つ場合には出目は75%得となります。

同様に1回目のロール(X のロール)について見ると:
 
1回目のロールについてのプログラムの luck の見積もり
事象(X のロール)
頻度(確率)
期待値の評価
X の luck
ゾロ目
1/6
100%
+62.5%
ゾロ目以外
5/6
25%
-12.5%
平均
 
37.5%
 

これら二つの表の運(luck) の見積もりは正確な値を示しており、どんなコンピュータプログラムも(たとえ tiny レーシング・データベースでも)これらの数値を使用するはずです。

手順のまとめ

プログラムはそれぞれのゲームについてごく普通のロールアウトと同様にプレーします。それぞれの手番で全 36 通りのダイスロールの後のポジションを考え、期待値の平均を計算します。さらに各ロールの後の期待値のと前の期待値の差として luck を見積もります。そしてプレーを続行しながらそれらの luck 値を合計していきます。そのゲームが終了した時点で実際の結果から luck 値を差し引き、そのゲームの variance reduction 後の結果とします。
 

3. なぜ variance reduction 後の結果はより正確なのか

ロールアウトを行う際の最大の問題は運(luck)の要素が大きすぎるということです。われわれがゲームを誰かとプレーし勝ったとしてもその結果がそのポジションに関して何かを教えてくれるわけではありません---勝った側が単に lucky だっただけかもしれません。事実、双方が完全なプレーのみ行い、かつそのポジションですでに完全に勝敗が決まっていたのではないと仮定すれば勝った側は必ず負けた側より lucky だったはずです。

多くの試行を繰り返すことで、この運の効果を減らします。ときには片方が、またときにはもう一方が lucky となり、多くの試行繰り返せばこれらの luck は互いに打ち消し合います。

Variance reduction はさらに積極的なアプローチをとります。Luck が打ち消し合うのに頼るかわりに、luck を直接取り除く努力をします。それぞれの手番でどれだけそのプレーヤーが lucky であるかを見積もり、その luck は最後に差し引きます。もしもこの luck の見積もりがかなり正しければ、ほとんどの luck の要素を打ち消すことになります。

今度は正確な luck 値を使って上で行った10ゲームのロールアウトを見てみましょう。
 
ゲーム
一回目(X)
X の luck
二回目(O)
ベアオフ
X の luck
ゲームの結果
Luck の合計
Variance Reduced
1
ゾロ目以外
-12.5
失敗
+75
100
+62.5
37.5
2
ゾロ目以外
-12.5
成功
-25
0
-37.5
37.5
3
ゾロ目
+62.5
   
100
+62.5
37.5
4
ゾロ目以外
-12.5
成功
-25
0
-37.5
37.5
5
ゾロ目以外
-12.5
成功
-25
0
-37.5
37.5
6
ゾロ目
+62.5
   
100
+62.5
37.5
7
ゾロ目以外
-12.5
成功
-25
0
-37.5
37.5
8
ゾロ目以外
-12.5
失敗
+75
100
+62.5
37.5
9
ゾロ目以外
-12.5
成功
-25
0
-37.5
37.5
10
ゾロ目以外
-12.5
失敗
+75
100
+62.5
37.5
合計
       
500
 
375
平均
       
50
 
37.5

正確な luck 値を使用すると variance reduction は luck を完全に打ち消して、全てのゲームで X の結果は 37.5% となります。Luck の見積もりが完全ならたとえゲーム中に何が起ころうとも一回のゲームで常に正しい結果が出ます。

しかし一般にはプログラムは luck を完全に見積もることはできません。幸いにして variance reduction の効果を得るために luck を正確に見積もる必要はないのです。必要なのはどのロールがよくてどのロールが悪いのかという大体の概念です。

プログラムはレース時に 66 がいいことや 21 が悪いことは知っています。そして(多くの場合は)エンターすることはいいことでダンスすることは悪いことだということ、ヒットすることはいいことでミスすることは悪いこと、ポイントを作ることは良いことで高く積み上げることは悪いこと、などを分かっています。この大雑把なレベルの信頼度がありさえすればロールアウトである程度の luck を打ち消すことができ、そのロールアウトはより正確になるのです。

仮にプログラムがいいのか悪いのか判断できないポジションに出くわしたとしても大した問題にはなりません。そのようなポジションではプログラムは全てのロールをだいたい等価とみなしてそれぞれのロールに対して luck を足したり引いたりするのをやめます。しかし本物の joker が現れたときにはプログラムは大抵その joker を得た側は非常に lucky だということは分かり、そしてその効果を補正します。

最初の実例で使用した luck 値は決して正確なものではありませんでした。しかしそれでもゾロ目を振ることが X にとって良いこと、O がベアオフすることが X にとって悪いことだということは分別できました。それで十分なのです。これらの luck 値をつかうことで例題のポジションでの variance reduction のロールアウトは8倍の回数の試行を行った一般の(variance reduction を適用しない)ロールアウトと同程度に正確になります。

Variance reduction は各ゲームで生じる luck をいくらかを差し引くことによってロールアウトをより正確にします。これはプログラムがロールアウト中にでてくるポジションでどのロールが良くどのロールが悪いかという大体の判断ができるかぎり有効に働くのです。
 

4. なぜ不正確な評価がずれを生じないのか

Variance reduction はプログラムの各ロールの luck を見積もる評価機能に依存します。多くの人はこれが variance reduction を信頼できないものとするのではと心配します。しかし実際には例え極めてひどい評価をもってしても variance reduction を使ったロールアウトは一般のロールアウトのよう程度の結果を出せるものです。なぜそうなのかを見るために、ここでちょっとした算数を使います。

ゼロを足すまたは引くこと

いくら多くのゼロを足し合わせても合計は単にゼロ。 0 + 0 + 0 + ... + 0 = 0

同様に全体の平均がゼロになる数を全て足し合わせても最終結果の平均はゼロになります。

平均がゼロになる数の例を挙げます。赤と緑のサイコロをふって、緑のサイコロの目から赤のサイコロの目を差し引きます。緑の目が3で、赤の目が1の場合、その差は 3 - 1 = 2 です。緑が1で赤が5なら 1 - 5 = -4となります。全ての可能な目の組み合わせでこの計算は -5 から +5 の値をとりますが、平均値はゼロです。

さらに多くの回数これらのサイコロを振れば、合計は平均的にゼロになります。正確にはゼロにはならないかもしれませんが、この試行を多数回すりかえして平均を取れば結果はきっとゼロに近い値になるはずです。

ゼロをある数から差し引いても結果は元の数から変わりません。 7 - 0 = 0

同様に、ある数から平均値がゼロとなるような数を引いても、その計算結果の平均値は元の数に戻ります。

初期値を 7 として赤と緑のサイコロの計算結果(緑の目-赤の目)を引いた場合、その結果は最低で 2 (7 - (緑6-赤1))、最高で 12 (7 - (緑1 - 赤6))となりますが平均すればその値は元の 7 に戻っていきます。つまりもとの数 7 にこの演算をしても結果の平均はまったく変わらないのです。

このように平均値がゼロになるような数を多く足してもその平均はゼロになるので、たとえば赤と緑のサイコロを50回振って、計算結果を合計してそれを 7 からひいても、その値は平均的に 7 です。それぞれの出目の平均がゼロであるということは50回の試行で得た値の合計の平均もゼロとなるということで、したがて 7 からその合計を差し引いてもやはり平均的に 7 になるということです。

平均すれば誰もラッキーにはならない

Variance reduction はロールアウト結果から見積もった運(luck)差し引いて補正します。これらの見積もり値は必ず平均すればゼロになるように計算されます。

もう一度例題のポジションでのプログラムの luck の見積もりを見てみましょう。
 
1回目のロールについてのプログラムの luck の見積もり
事象(X のロール)
頻度(確率)
期待値の評価
X の luck
ゾロ目
1/6
100%
+62.5%
ゾロ目以外
5/6
25%
-12.5%
平均
 
37.5%
 

一回目のロールでは 1/6 の頻度で X の luck が +62.5%となり、5/6 の頻度で -12.5% となります。その平均はゼロです:1/6 x 62.5 + 5/6 x (-12.5) = 0
 
2回目のロールについてのプログラムの luck の見積もり
事象(O のベアオフ)
頻度(確率)
期待値の評価
X の luck
成功
3/4
0%
-25%
失敗
1/4
100%
+75%
平均
 
25%
 

二回目のロールでは 3/4 の頻度で X の luck が -25% となり、1/4 の頻度で +75% となります。Luck の平均はゼロになります:3/4 x (-25) + 1/4 x 75 = 0

この例題だけでこうなるというわけではありません。プログラムが luck を評価する方法により luck の平均は常にゼロになるのです。あるロールの luck とはそのロール後の期待値と全 36 通りのロール後の期待値の平均の差です。その平均値とある値の差の平均はゼロになります。このように「平均」は働くのです。

あるゲームのトータルの luck の平均もまたゼロになります。平均がゼロとなる一連の数値を足し合わせると、その合計の平均もまたゼロになるわけです。

しかし(luck の)評価が本当に悪かったらどうなるのか

悪い見積もりにより偏った結果を生じるわけではありません。Variance reduction は見積もった(平均すればゼロになる)luck の合計を差し引いているだけです。ゼロを差し引いてもロールアウトの期待値は変わりません。プログラムがどれだけでたらめにポジションを理解していたとしても、luck の算出方法から luck の評価の平均値は依然としてゼロです。したがって、variance reduction を適用したロールアウトは平均すれば一般のロールアウトと同じ結果を出すことになります。

以下の極端にひどい luck の見積もりを使って variance reduction を適用したロールアウトを実行してみましょう:
 
手番
事象
Xはluckyか?
どれだけ Lucky/Unlucky?
極端にひどい見積もり
1回目
X がゾロ目を振る
Yes
とても Lucky
-62.5%
1回目
X がゾロ目を振らない
No
わずかに Unlucky
+12.5%
2回目
O がベアオフできない
Yes
かなり Lucky
-75%
2回目
O がベアオフできる
No
いくらか Unlucky
+25%

これでは X がゾロ目を振ったときに、見積もった luck は 62.5% も期待値を落とした、またO が2回目のロールでベアオフできた場合に、X の期待値が 25% あがったとしています。実際、この見積もりはまったく正反対です。つまり X が lucky であるときに unlucky であるといって、また unlucky であるときに lucky であると言っているのです。

しかし注意してほしいのは、luck の平均値は各ロールについて依然としてゼロであるということです。1回目のロールでは 1/6 の頻度で X の luck が -62.5% に、5/6 の頻度で +12.5% になるとしているので、平均はゼロです。同様に2回目のロールでは 3/4 の頻度で X の luck は +25% に、1/4 の頻度で -75% になるとしているので、やはり平均はゼロです。Luck の平均がゼロなのでこれらの値をしようした variance reduction を適用したロールアウトは恐ろしくなるほどでたらめな見積もりであるにもかかわらず依然として正しい結果を出します。

さて、これらの luck の見積もりをつかって先に実施した10回のロールアウトがどうなるか見てみましょう:
 
ゲーム
一回目(X)
X の luck
二回目(O)
ベアオフ
X の luck
ゲームの結果
Luck の合計
Variance Reduced
1
ゾロ目以外
+12.5
失敗
-75
100
-62.5
162.5
2
ゾロ目以外
+12.5
成功
+25
0
+37.5
-37.5
3
ゾロ目
-62.5
   
100
-62.5
162.5
4
ゾロ目以外
+12.5
成功
+25
0
+37.5
-37.5
5
ゾロ目以外
+12.5
成功
+25
0
+37.5
-37.5
6
ゾロ目
-62.5
   
100
-62.5
162.5
7
ゾロ目以外
+12.5
成功
+25
0
+37.5
-37.5
8
ゾロ目以外
+12.5
失敗
-75
100
-62.5
-37.5
9
ゾロ目以外
+12.5
成功
+25
0
+37.5
-37.5
10
ゾロ目以外
+12.5
失敗
-75
100
-62.5
162.5
合計
       
500
 
625
平均
       
50
 
62.5%

10ゲーム行ったところで variance reduction を適用したロールアウトの結果は 62.5% となり実際のゲーム結果の 50% よりも不正確になっています。さらに20ゲームロールアウトを繰り返してみましょう。
 
ゲーム
一回目(X)
二回目(O)
ベアオフ
ゲームの結果
累積
Variance
Reduced
Variance Reduced
の累積
1-10       500   625
11
ゾロ目以外
成功
0
 
-37.5
587.5
12
ゾロ目以外
失敗
100
600
162.5
750
13
ゾロ目以外
 失敗 100 
700
162.5
912.5
14
ゾロ目
 
100
800
162.5
1075
15
ゾロ目以外
成功
0
 
-37.5
1037.5
16
ゾロ目以外
成功  
-37.5
1000
17
ゾロ目以外
成功
0
 
-37.5
962.5
18
ゾロ目以外
成功
0
 
-37.5
925
19
ゾロ目以外
成功
0
 
-37.5
887.5
20
ゾロ目以外
成功
0
 
-37.5
850
21 ゾロ目以外 成功 0   -37.5 812.5
22 ゾロ目以外 成功 0   -37.5 775
23 ゾロ目   100 900 162.5 937.5
24 ゾロ目以外 成功 0   -37.5 900
25 ゾロ目以外 成功 0   -37.5 862.5
26 ゾロ目   100 1000 162.5 1025
27 ゾロ目以外 成功 0   -37.5 987.5
28 ゾロ目以外 成功 0   -37.5 950
29 ゾロ目以外 成功 0   -37.5 912.5
30 ゾロ目以外 失敗 100 1100 162.5 1075
合計
     
1100
 
1075
平均
     
36.67%
 
35.83%

双方のロールアウトはだんだん真の値の 37.5% に近づいていっています。正しい見積もりとまったく正反対の値を使用したにもかかわらず variance reduction を適用した結果はそんなに外れてはいません。十分な回数の試行を繰り返せば、両方のロールアウトはより真の値に近づこうとします。疑い深い読者には実際にもう数百回延長してこのロールアウトを試してみることをお勧めします。(二つの値は早く真の値に収束します。)

これほどひどい評価値を使用したので variance reduction は実際には variance(食い違い)を reduction(減少)するかわりに増加しています。これが普通のロールアウトの結果のほうが variance reduction を使用した場合よりも真の値に近くなっている理由です。この場合は variance reduction を使用しなかったほうが良かったわけですが、それは謝った結果になってしまうからではなく正しい結果が得られるのにもっと時間がかかるようになるからです。

実際には(プログラムの)見積もりがこれほど悪くなることは絶対にありません。プログラムはほとんど全てのタイプのポジションについて最低でもゲーム中のどのロールがよくてどのロールが悪いかという大まかな判断はできます。そして万が一この手の問題が起こるのであればそれは容易に検出できます。Variance reduction が効果的に働かなかった場合のロールアウトは(JellyFish なら)大きな standard deviation (標準偏差)または(Snowie なら)confidence interval として現れます。どんな種類のロールアウトをするときもわれわれはこれらの数値に常に注意を払うべきでしょう。 JellyFish を使うのなら標準偏差の2倍未満に仮に永遠にロールアウトをできた場合の結果が実際のロールアウトの結果が収まっていると確信でき、同様に Snowie を使うのなら有限回数のロールアウトの結果を confidence interval の範囲で確信できるわけです。無限回のロールアウトにに比べた信頼度をもっと高くする必要があるなら variance reduction を使用しているかいないかにはかかわらずもっと多くの回数の試行をおこなわなければいけません。
 

5. まとめ

プログラムの見積もりが良ければ variance reduction はかなりの luck を打ち消し、その結果は補正をしていないロールアウトに比べれてはるかに正確になります。完全な見積もりができた場合、一回のゲームで無限回のロールアウトと同じ結果を得ることができます。一般的に variance reduction は各ゲームを variance reduction を使用しない場合の約25ゲーム相当にします。

Variance reduction が行っているのは平均がゼロになる数値を差し引いているだけなので、正しく使用することによって variance reduction が決してロールアウトの期待値を変えることはしません。Variance reduction を使ったロールアウトは普通のロールアウトと同じ結果を与えます。単に結果を得るまでの速度が速くなるというだけです。