概要
このページは、オセロを打つ人が勉強に使う知見をまとめたものである。強化学習とは関係ない。ただし、レーティングの尺度と Edax の作りの詳しい説明は、強化学習の資料 オセロの強化学習 にあり、このページはその節へリンクする。読むと次のことが分かる。
- 評価値は、その手を打ったあと双方が最善を尽くしたときの最終石差である。最善の手の値がその局面の値なので、不利な局面では最善の手でもマイナスになる。
- 「隅を取る」「X を避ける」「開放度」「置けるマスの差」などの単純な規則で打つ打ち手を総当たりで対局させると、レーティングは隅と X の規則で約 300 上がり、そこに一般の開放度や置けるマスの差を足すと、さらに 32〜56 上がる(著者の定義の開放度を足した差 14 は、差があるとは言えない)。
- 全体のレーティングの順と、2 人の直接対決の勝ち越しは食い違うことがある。
- オセロのプログラム Edax の評価関数は、盤の上の 46 個のマスの組(形)ごとの点数表の値と定数の和で、隅・X の規則はその一部を人の手で単純にしたものと解釈できる(解釈であり、確かめた事実ではない)。
- 手元で作った勉強用の対局画面(以下 勉強盤)で、評価値と判定を見ながら対局と復習ができる。
数値は、手元で打ち手どうしを対局させた記録(2026-10-23)、手元の Edax の速さと誤差の測定(2026-10-22)、Edax 4.7 のソース、それらとランダムに作った局面からの計算(2026-10-24)のどれかで、本文に出どころを書く。記録や計算で確かめた事実と、推測(「推測」と書く)と、確かめていないこと(「確かめていない」と書く)を分けて書く。
読む順路
この節では、章の並びと各章で扱うことを示す。 抽象から具体へ、上から順に読む。各章の終わりに確かめ問題を置き、解答は折りたたみに入れた。
| 章 | 扱うこと |
|---|---|
| 盤の呼び方 | マスと側の呼び方、終局 |
| 第1章 評価値 | 評価値の定義、読み切りと見込み、損と判定、不利な局面の値 |
| 第2章 単純な規則で打つ打ち手 | 隅・X・開放度(2 つの定義)・置けるマスの差・返す数で打つ打ち手の定義 |
| 第3章 打ち手どうしの総当たり | 対局の条件、全員のレーティング、直接対決、全体のレーティングと直接対決の食い違い |
| 第4章 開放度の上乗せが小さかった理由の考察 | 事実と 4 つの推測、データでの確かめ、まだ確かめていない方法 |
| 第5章 Edax の評価関数の形 | 46 個の形、対称でまとめた点数表の数、隅・X の規則との関係 |
| 第6章 Edax の深さ | Edax(深さ 1・2・4)が何をしているか、読み切りに入る空きの数 |
| 第7章 定石の本(book) | book が記録するもの、手元の book の中身 |
| 第8章 手元の勉強盤 | 評価の盤、判定、本番と練習、サーバーの有無で違うこと |
| 確認できていない点 | 確かめていない事項 |
盤の呼び方
この節では、以下で使うマスと側の呼び方を決める。マスは、列を左から a〜h、行を上から 1〜8 として「d3」のように呼ぶ。4 つの角のマス a1・h1・a8・h8 を隅、隅と斜めに接する b2・g2・b7・g7 を X(X マス)、隅と縦か横に接する b1・a2・g1・h2・a7・b8・h7・g8 を C マスと呼ぶ。打つ番の側を手番、その反対を相手と呼ぶ。先手は黒、後手は白である。双方とも打てるマスが無い局面を終局と呼ぶ。石の差は「手番の石の数 − 相手の石の数」で数える。
第1章 評価値
この章では、評価値が何の数かを式で定め、読み切りの値と探索の見込みの違い、損と判定、不利な局面で最善の手もマイナスになる理由を示す。
評価値の定義
この節では、局面の値と手の値(評価値)を定義する。局面 は盤面と手番の組とする。局面 で手番が打てるマスの集合を 、手 を打った後の局面を 、 が空のときにパスして手番が替わった局面を と書く。
終局の局面 で、 の手番(終局では打つ手は無いが、手番は局面の一部として決まっている)の石の数を 、相手の石の数を 、空きマスの数を とする。終局の石差 を、空きマスを勝った側の石に数えて次で定義する( は正なら 1、0 なら 0、負なら −1)。
例えば 40 対 20 で空き 4 で終われば で、44 対 20 と同じに数える。空きを勝った側に数えるのは、Edax の終局の計算(endgame.c の solve)と同じである。
局面 の値 を、双方が最善を尽くしたときの終局の石差として、次で定義する。
符号を反転するのは、 は の手番、つまり の相手から見た値だからである。手 の評価値 を、 を打った後の局面の値を の手番から見たものとして定義する。
式(2) の 3 行目に 式(3) を入れると、打てる手がある局面では、局面の値は評価値の最大である。
評価値 は「この手を打ち、そのあと双方が最善を尽くすと、34 対 30(空きを数えた後)で勝つ」という意味である。
オンラインオセロ教室の一人打ちの評価値表示(2011-08-19 のお知らせ)は、「評価値を見るにはゼブラ等のソフトもあります」と書いている。そのお知らせには評価値の単位が書かれていない。Zebra(オセロのプログラム)の評価値は最終石差の単位だと見られる(推測。Zebra のソースや説明で確かめていない)。
読み切りの値と探索の見込み
この節では、評価値が正確に分かる場合と、見込みしか分からない場合を分ける。式(2) を終局までたどって求めた値を読み切りの値と呼ぶ。読み切りの値は、式(1) の数え方で求めるなら、どのプログラムで求めても同じになる。終盤の空きが少ない局面でしか求められない(手元の Edax が 1 局面の全部の手を読み切るのにかかった時間の平均は、空き 22 で 1.33 秒と 1.80 秒(別の局面の組で 2 回測った)、空き 24 で 9 秒。16 スレッド、2026-10-22 の測定)。
空きが多い局面では、何手か先まで読み、その先の局面に評価関数(局面に値を付ける関数。Edax の評価関数は 第5章)の値を 式(2) の代わりに使う。評価関数の値を 、読む手数(以下 読む深さ)を として、 手先まで読んだ値 を次で定義する。
手 について を、式(3) の評価値の探索の見込みと呼ぶ。 が空きの数以上なら、末端はすべて終局なので 式(5) は 式(2) と同じ値になり、見込みは読み切りの値に一致する。見込みは、評価関数と読む深さによって変わり、読み切りの値とずれる。手元の測定(空き 23 の 6 局面と空き 24 の 5 局面、全部の手)では、10 手先まで読んだ見込みと読み切りの値の差の平均は 3.6 石と 2.0 石、最大は 9 石と 7 石だった。Edax は 式(5) を αβ 探索で求める。αβ 探索は、結果を変えない枝を読まずに省き、式(5) と同じ値を少ない計算で求める探索である(説明は オセロの強化学習の「αβ 探索」)。Edax の値は 式(5) の近似で、次の点で違うことがある。
- ProbCut(浅く読んだ値から、深く読んでも結果が変わらないと確率で見込める枝を省く方法。下で述べる)を使う設定では、結果を変えうる枝も省く。
- 末端で評価関数の値を −63〜63 に収めて使う(
midgame.cのsearch_eval_0のEVAL_MIN・EVAL_MAX)。 - 終局の扱いや、最善と見込む手順だけを先へ延ばして読む処理(
get_pv_extension)など、細かな違いがある(第6章 と オセロの強化学習の「このページの対局での Edax の条件」)。
以下、見込みで求めた手の値も評価値と呼び、読み切りの値か見込みかを添える。
勉強盤(第8章)は、Edax で次のように値を求める。表の「深さの設定」は Edax に渡す設定の値(Edax の level)である。空きが多いうちは読む深さ が設定と同じで、空きが少なくなると Edax は終局まで読む。設定と の対応は 第6章 で示す。
| 空きマスの数 | 求め方 | 値の種類 |
|---|---|---|
| 22 以下 | 終局まで読み切る | 読み切りの値 |
| 23〜24 | 深さの設定 10 の探索 | 見込み |
| 25〜27 | 深さの設定 12 の探索 | 見込み |
| 28 以上 | 深さの設定 18 の探索 | 見込み |
ProbCut で省いた枝は、深く読めば結果を変えたかもしれないので、値は読み切りと一致するとは限らない。ProbCut の「確からしさ」は、省いた枝が深く読んでも結果を変えないと見込む度合いを Edax が百分率で示した値で、Edax の表 selectivity_table(search.c)の値である(73%・87%・95%・98%・99% の 5 段階。小さいほど多くの枝を省く。第6章)。Edax 4.7 の表 LEVEL(search.c)では、深さの設定 12 と 18 は、終局まで読まない探索でも、いちばん多く枝を省く段階(確からしさ 73%)の ProbCut を使う。
空き 23〜27 で設定を下げているのは、深さの設定 18 のままだと、Edax がそこで「ProbCut を使いながら終局まで読む」探索に入り、遅くなるからである(空き 27 で平均 20 秒、最大 58 秒だった。空き 22 の読み切りは平均 1.33〜1.80 秒)。空き 23・24 で(局面は 6 個と 5 個。深さの設定 10 の時間とは別の局面の組で測った)、ProbCut 付きの終盤の読みを測ると、読み切りの値との差の平均は 0.06 石と 0.00 石で小さかったが、時間の平均は 2.1 秒と 3.0 秒で、深さの設定 10 の探索(0.05〜0.06 秒)の 40〜50 倍だった。勉強盤は速さをとり、空き 23・24 では見込みの差(平均 2.0〜3.6 石)を受け入れている。空き 25〜27 の深さの設定 12 の見込みの差は測っていない。
損と判定
この節では、実際に打った手がどれだけ悪かったかを 1 つの数にする。手 の損 を、最善の手の評価値との差として定義する。
式(6) の第 1 項は最大なので、どの手でも で、最善の手では 0 である。手元の勉強盤は、損で手を 4 段階に分ける。
| 判定 | 損(石) |
|---|---|
| 最善 | 0 |
| 損 1〜2 | 1〜2 |
| 損 3〜5 | 3〜5 |
| 悪手 | 6 以上 |
損は評価値の差なので、評価値が見込み(読み切りでない)なら、損も見込みである。
不利な局面の値
この節では、不利な局面ではどの手の評価値もマイナスになることを示す。式(4) から、どの手 についても次が成り立つ(最大はどの要素以上だから)。
したがって局面の値 がマイナス(双方が最善を尽くすと手番が負ける)なら、式(7) から全部の手の評価値がマイナスになる。(最善を尽くせば引き分け)なら、最善の手が 0 で、ほかの手は 0 かマイナスになる。
オンラインオセロ教室の一人打ちの画面で、ある局面の盤上の評価値が 0 とマイナスだけだったことがある(著者が見た画面。このページには載せていない。2011 年のお知らせの Flash 版の機能と同じ画面かは確かめていない)。その評価値が 式(3) と同じ最終石差の単位なら(単位は確かめていない)、この場合にあたる。その局面の値が 0 で、0 の手が最善、マイナスの手はそれだけ損をする手である。評価値がプラスの手が出るのは、手番が有利な局面だけである。
第1章の確かめ問題
ある局面で、打てる手が 4 つあり、評価値が b3:、g4:、c6:、f7: だった。この局面の値と、各手の損と判定を求めよ。
解答(局面の値と損)
式(4) から、局面の値は評価値の最大で である。式(6) から、損は から各手の評価値を引いた値になる。
| 手 | 評価値 | 損 | 判定 |
|---|---|---|---|
| b3 | +2 | 0 | 最善 |
| g4 | 0 | 2 | 損 1〜2 |
| c6 | −3 | 5 | 損 3〜5 |
| f7 | −8 | 10 | 悪手 |
g4 は評価値が 0 でマイナスではないが、最善の b3 より 2 石悪いので損 2 である。評価値の符号ではなく、最善との差で判定する。
第2章 単純な規則で打つ打ち手
この章では、第3章の総当たりで比べる打ち手を定義する。どの打ち手も、打てる手ごとに同じ量(隅か、X か、開放度、置けるマスの差、返す数)を計算し、打ち手ごとの点を付け、点が最大の手を打つ。点が同じ手が複数あれば、その中から等確率に選ぶ。
記号
この節では、打ち手の定義に使う量を定義する。局面 で手番が手 を打つとする。
- : を打ったときに返る石のマスの集合。
- :マス の周り 8 マス(盤の端では 8 未満)の集合。
- : を打った後の空きマスの集合。
- : と同じ盤面で、手番だけを入れかえた局面。 は「打つ前の盤で、仮に相手の番だったら相手が打てたマス」の集合である。
- :X マスの集合。
- :集合 の要素の数。
を打った後、 の手番は相手なので、 は打った後に相手が打てるマス、 は打った後に仮に自分の番だったら自分が打てるマスである。打てるマスを「置けるマス」とも呼ぶ(置けるマスの差の名前に使う)。
返る石に接する空きマスの集合 を次で定義する。
自身は打った後は空きでないので、 に入らない。 の周りのマスは、返る石の周りにも入るものだけが に入る。
開放度の 2 つの定義
この節では、開放度を 2 通りに定義する。1 つはこの wiki の著者が決めた定義(以下 著者の定義)、もう 1 つは返る石に接する空きマスの数を数える定義(以下 一般の定義。オセロの解説で使われる言い方だが、出典は確かめていない)である。以下、著者の定義の開放度を青、一般の定義の開放度を橙で書く。
著者の定義の開放度 は、 のうち、打つ前には相手が打てなかったが打った後は相手が打てるマスの数で、X は数えない。
一般の定義の開放度 は、返る石に接する空きマスの数である(重なりは 1 回、X も数える)。
式(9) の集合は の部分集合なので、どの手でも である。一般の定義は、相手が打てるようになるかを問わず、返した石の周りの空きの数だけを数える。著者の定義は、そのうち実際に相手に新しい打ち場所を与えたマスだけを数える。打った後に相手がパスになる手では が空なので、 である。
例の局面
この節では、同じ局面の同じ手で、2 つの開放度が数えるマスを比べ、同じ局面のすべての手の値を示す。この局面は、置けるマスの差の節と、第2章・第4章の確かめ問題でも使う。黒番の次の局面で、黒が b3 に打つ(* は黒が打てるマス)。
a b c d e f g h
1 . . . . . . . .
2 . * . * ● ● . .
3 . * ○ ○ ● ○ * .
4 . . * ● ○ * * .
5 . ○ ○ ○ ○ ○ . .
6 . * . * ● ● . .
7 . . . . ● . . .
8 . . . . . . . .
(● が黒、○ が白。)b3 に打つと c3・d3 が返る()。c3 と d3 の周りの空きマスは b2・c2・d2・b4・c4 の 5 つで、これが である(式(8))。白が打てるマスは、打つ前は d1・e1・f1・g1・c4・d7・f7・g7・e8、打った後はこれに b2・c2・d2・a3 が加わる。
| マス | 返る石に接する空き | 打つ前に白が打てた | 打った後に白が打てる | X | 著者の定義で数えるか | 一般の定義で数えるか |
|---|---|---|---|---|---|---|
| b2 | はい | いいえ | はい | はい | 数えない(X) | 数える |
| c2 | はい | いいえ | はい | 数える | 数える | |
| d2 | はい | いいえ | はい | 数える | 数える | |
| b4 | はい | いいえ | いいえ | 数えない(白は打てない) | 数える | |
| c4 | はい | はい | はい | 数えない(前から打てた) | 数える | |
| a3 | いいえ | いいえ | はい | 数えない(返る石に接していない) | 数えない |
したがって 、 である。a3 は打った後に白が新しく打てるマスだが、返る石 c3・d3 に接していないので、どちらの定義でも数えない。
図1 上の局面で黒が b3 に打った後の盤。緑の地が返った石 c3・d3、赤い点が打った b3。左は著者の定義(式(9))で数えた 2 マス(青の枠)、右は一般の定義(式(10))で数えた 5 マス(橙の枠)。右で枠があり左で枠が無い b2・b4・c4 が、著者の定義で外れたマスで、外れた理由は上の表の右から 2 列目にある。
同じ局面の 9 つの手の値は次のとおり(手元の players.py で計算した)。
| 手 | 著者の定義の開放度 | 一般の定義の開放度 | 返す数 | 打った後の自分の置けるマス | 打った後の相手の置けるマス |
|---|---|---|---|---|---|
| b2 | 1 | 5 | 1 | 7 | 11 |
| d2 | 1 | 2 | 1 | 10 | 10 |
| b3 | 2 | 5 | 2 | 7 | 13 |
| g3 | 0 | 3 | 1 | 9 | 10 |
| c4 | 2 | 4 | 2 | 13 | 11 |
| f4 | 3 | 5 | 3 | 9 | 10 |
| g4 | 3 | 5 | 2 | 10 | 11 |
| b6 | 0 | 4 | 1 | 11 | 9 |
| d6 | 1 | 2 | 1 | 12 | 12 |
著者の定義で最小なのは g3・b6(0)、一般の定義で最小なのは d2・d6(2)で、2 つの定義は別の手を選ぶ。
置けるマスの差
この節では、置けるマスの差を定義する。手 の置けるマスの差 を、打った後の自分の置けるマスの数から相手の置けるマスの数を引いた数とする。
置けるマスの差の打ち手は、 が最大の手を打つ。この wiki の著者の当初の言い方は「自分の置けるマス − 相手の置けるマスを最小化」だったが、そのままでは相手に多く打たせる手を選ぶので、「相手 − 自分を最小化」と解釈した。これは の最小化、つまり の最大化と同じである。上の局面では、 が最大なのは b6()と c4()である。
打ち手の一覧
この節では、第3章で比べる 12 の打ち手を、上で定義した量で書く。表の「点」は、大きいほど良い。「隅と X の扱い」が「隅を先に、X を後に」の打ち手は、隅に打てれば隅に打ち(隅が複数あれば、残りの手の点を見ずに、その中から等確率に選ぶ)、打てなければ X 以外の手から選び、X しか打てなければ X の中から選ぶ。
| 打ち手 | 隅と X の扱い | 残りの手の点 |
|---|---|---|
| ランダム | 扱わない | すべて同じ(等確率) |
| 隅を必ず取る | 隅を先に | すべて同じ |
| X を必ず避ける | X を後に | すべて同じ |
| 隅を取り X を避ける | 隅を先に、X を後に | すべて同じ |
| 開放度が最小 | 扱わない | 著者の定義の開放度の符号を反転した値 |
| 隅・X 回避・開放度 | 隅を先に、X を後に | 著者の定義の開放度の符号を反転した値 |
| 一般の開放度が最小 | 扱わない | 一般の定義の開放度の符号を反転した値 |
| 隅・X 回避・一般の開放度 | 隅を先に、X を後に | 一般の定義の開放度の符号を反転した値 |
| 置けるマスの差 | 扱わない | 置けるマスの差 |
| 隅・X 回避・置けるマスの差 | 隅を先に、X を後に | 置けるマスの差 |
| 多く返す | 扱わない | 返す数 |
| 少なく返す | 扱わない | 返す数の符号を反転した値 |
点の式は 式(9)・式(10)・式(11) と返す数 である。プログラム(players.py)では「隅を先に、X を後に」を、隅の点を 1000 にし、X の点を「−1000 + 残りの手の点」にして書いている(「隅を取り X を避ける」は隅 1、X −1、ほか 0)。
第2章の確かめ問題
上の局面で、黒が c4 に打つと d3・d5 が返る。c4 の 2 つの開放度を求め、数えたマスを挙げよ。白が打てるマスは、打つ前は d1・e1・f1・g1・c4・d7・f7・g7・e8、c4 に打った後は d1・e1・f1・g1・c2・b4・c6・d7・f7・g7・e8 である。
解答(c4 の開放度)
まず 式(8) の を求める。d3 の周り 8 マスは c2・d2・e2・c3・e3・c4・d4・e4 で、打った後に空いているのは c2・d2 である(e2・e3・c4・d4 は黒、c3・e4 は白)。d5 の周り 8 マスは c4・d4・e4・c5・e5・c6・d6・e6 で、空いているのは c6・d6 である。よって で、式(10) から である。
次に 式(9) で、 のうち打った後に白が打てて、打つ前には打てなかったマスを残す。
| マス | 打つ前に白が打てた | 打った後に白が打てる | 数えるか |
|---|---|---|---|
| c2 | いいえ | はい | 数える |
| d2 | いいえ | いいえ | 数えない |
| c6 | いいえ | はい | 数える |
| d6 | いいえ | いいえ | 数えない |
X は含まれないので、(c2・c6)である。b4 は打った後に白が新しく打てるが、返る石 d3・d5 に接していないので数えない。
第3章 打ち手どうしの総当たり
この章では、第2章の 12 の打ち手と、Edax(深さ 1・2・4)の 15 人を総当たりで対局させ、強さを 1 つの数(レーティング)にした結果を示す。全体のレーティングと 2 人の直接対決が食い違う例とその理由も示す。
レーティングの式
この節では、レーティングが何を表すかを決める。打ち手 のレーティングを とし、 が に勝つ確率 を次で定義する(引き分けは 0.5 勝と数える)。
は、引き分けを 0.5 勝と数えたときの、 の 1 局あたりの得点の期待値として読む。この形は Bradley–Terry モデルと呼ばれ、チェスの Elo レーティングと同じ形である。差が 200 なら強い側が勝つ確率は 0.760、400 なら 0.909 である(四捨五入)。全対局の結果から最尤推定で を求める方法、勝つ確率から差を求める式、区間の求め方は オセロの強化学習の「尺度の定義」 とその次の節にある。
条件
この節では、対局と推定の条件を示す。
- 対局:15 人の総当たり、各組 400 局(先手・後手を 200 局ずつ)。合計 42,000 局(2026-10-23)。
- 序盤:最初の 4 手(黒白合わせて)は双方が打てる手から等確率に選ぶ。序盤の乱数が 0 手だと、Edax どうしの対局が毎回同じ棋譜になるからである(乱数 0 手の総当たりでは、Edax(深さ 2)対 Edax(深さ 4)の 400 局は、すべて後手が勝ち、手数はすべて 60 だった)。
- Edax:Edax 4.7 を深さの設定 1・2・4 で使う(深さの設定の意味は 第6章)。定石の本は使わない。以下、深さの設定 の Edax を「Edax(深さ )」と書く。
- 推定:全員の を 式(12) の最尤推定で求める。全勝・全敗の組でも値が無限大にならないよう、組ごとに両者へ 0.5 勝ずつ足す。
- 基準:Edax(深さ 1)を 1010 とする。式(12) は差だけで決まるので、どこかを固定する必要がある。1010 は、オセロの強化学習 の別の総当たりの尺度(Pgx の学習済みモデル = 1000)で Edax(深さ 1)がほぼ 1010 だったことによる。その尺度には 人間の段位の換算 がある。ただし 2 つの総当たりでそろえたのは Edax(深さ 1)の 1 点だけで、その 1 点の値も向こうでは 99 局から求めた値(95% 区間 916〜1102)である。ほかの値は 2 つの総当たりでずれる。Edax(深さ 2)は向こうで 1217.4、ここで 1338.8(121.4 の差)、Edax(深さ 4)は向こうで 1614.0、ここで 1598.2(15.8 の差)だった。2 つの総当たりは、顔ぶれ、局数(向こうは 1 組 32 局が基本)、Edax のスレッド数(向こうは 2 本、こちらは 1 本)も違う。そのため、このページの値を人間の段位と比べるときは、少なくともこの程度のずれがありうる。
- 95% 区間:組ごとに、勝ち・引き分け・負けの割合で 400 局を引き直して推定し直すことを 200 回くり返し、その 2.5% 点と 97.5% 点をとった。
全員の結果
この節では、15 人のレーティングを示す。勝・負・分は、その打ち手が打った 5,600 局(14 人と 400 局ずつ)の数である。95% 区間は、基準の Edax(深さ 1)からの差の区間なので、2 人の区間が重なるかどうかでは 2 人の差を判断できない。2 人の差の区間は表の後に示す。
| 打ち手 | レーティング | 95% 区間 | 勝 | 負 | 分 |
|---|---|---|---|---|---|
| Edax(深さ 4) | 1598.2 | 1562.5〜1636.7 | 5514 | 85 | 1 |
| Edax(深さ 2) | 1338.8 | 1301.8〜1369.8 | 5195 | 392 | 13 |
| Edax(深さ 1) | 1010.0 | 基準 | 4697 | 881 | 22 |
| 隅・X 回避・置けるマスの差 | 576.9 | 551.4〜600.1 | 3292 | 2216 | 92 |
| 隅・X 回避・一般の開放度 | 553.5 | 528.6〜579.0 | 3175 | 2344 | 81 |
| 隅・X 回避・開放度 | 534.8 | 512.0〜558.8 | 3070 | 2441 | 89 |
| 隅を取り X を避ける | 521.2 | 497.5〜543.1 | 2981 | 2503 | 116 |
| 隅を必ず取る | 397.1 | 373.2〜420.3 | 2242 | 3236 | 122 |
| 置けるマスの差 | 393.0 | 371.4〜416.6 | 2224 | 3269 | 107 |
| X を必ず避ける | 338.4 | 316.1〜361.4 | 1872 | 3584 | 144 |
| 多く返す | 327.3 | 302.4〜352.9 | 1825 | 3672 | 103 |
| 開放度が最小 | 313.9 | 291.3〜339.5 | 1743 | 3751 | 106 |
| 一般の開放度が最小 | 234.2 | 211.7〜258.5 | 1284 | 4204 | 112 |
| ランダム | 226.3 | 204.8〜253.3 | 1234 | 4239 | 127 |
| 少なく返す | 174.7 | 149.4〜204.0 | 980 | 4511 | 109 |
この表から言えること:
- 隅と X の規則だけで、ランダムの 226 から 521 へ約 300 上がる。そこに開放度・一般の開放度・置けるマスの差を足すと 535・554・577 で、上がるのは 14〜56 である(14 は下の差の区間が 0 を含む)。
- 規則の打ち手と Edax(深さ 1)の間は 400 以上あく。最も強い規則の打ち手(隅・X 回避・置けるマスの差)も、Edax(深さ 1)には 400 局で 12 勝 1 分 387 敗だった。
- 開放度だけ(隅・X を扱わない)の打ち手は、著者の定義で 314、一般の定義で 234 だった。
2 人の値の差の 95% 区間は次のとおり。上と同じ引き直しを 200 回行い、各回で 2 人の値の差を計算して、その 2.5% 点と 97.5% 点をとった。
| 比べる 2 人 | 差 | 差の 95% 区間 |
|---|---|---|
| 隅・X 回避・開放度 − 隅を取り X を避ける | 13.6 | −1.5〜29.1 |
| 隅・X 回避・一般の開放度 − 隅を取り X を避ける | 32.3 | 16.7〜46.2 |
| 隅・X 回避・置けるマスの差 − 隅を取り X を避ける | 55.7 | 40.7〜69.3 |
| 隅・X 回避・一般の開放度 − 隅・X 回避・開放度 | 18.7 | 4.4〜33.8 |
| 開放度が最小 − ランダム | 87.6 | 71.3〜102.5 |
| 一般の開放度が最小 − ランダム | 7.9 | −5.3〜22.3 |
| 置けるマスの差 − ランダム | 166.7 | 151.9〜182.8 |
区間が 0 を含む 2 組(著者の定義の開放度を隅・X に足したもの、一般の開放度だけの打ち手とランダム)は、全体のレーティングの上でも差があるとは言えない。
主な直接対決
この節では、2 人の間の 400 局の結果を示す。「得点の割合」は、左の打ち手の(勝ち+0.5 × 引き分け)÷ 400、「平均の石差」は左の打ち手から見た 1 局あたりの終局の石の数の差の平均である。この石差は、式(1) と違い、空きマスを勝った側に足さずに数えた(総当たりのプログラム roundrobin.py の数え方)。
| 左の打ち手 | 右の打ち手 | 勝 | 負 | 分 | 得点の割合 | 平均の石差 |
|---|---|---|---|---|---|---|
| 隅・X 回避・置けるマスの差 | 隅を取り X を避ける | 214 | 178 | 8 | 54.5% | +2.29 |
| 隅・X 回避・開放度 | 隅を取り X を避ける | 189 | 198 | 13 | 48.9% | −0.25 |
| 隅・X 回避・一般の開放度 | 隅を取り X を避ける | 180 | 212 | 8 | 46.0% | −2.49 |
| 隅・X 回避・一般の開放度 | 隅・X 回避・開放度 | 196 | 194 | 10 | 50.3% | −0.02 |
| 隅・X 回避・置けるマスの差 | 隅・X 回避・一般の開放度 | 208 | 183 | 9 | 53.1% | +2.17 |
| 開放度が最小 | ランダム | 227 | 162 | 11 | 58.1% | +6.36 |
| 一般の開放度が最小 | ランダム | 197 | 191 | 12 | 50.8% | +1.20 |
| 開放度が最小 | 一般の開放度が最小 | 227 | 167 | 6 | 57.5% | +4.58 |
| 置けるマスの差 | ランダム | 291 | 99 | 10 | 74.0% | +14.18 |
| 隅を必ず取る | ランダム | 304 | 81 | 15 | 77.9% | +10.12 |
| 一般の開放度が最小 | 少なく返す | 266 | 122 | 12 | 68.0% | +9.87 |
| 多く返す | Edax(深さ 1) | 113 | 286 | 1 | 28.4% | −25.96 |
| Edax(深さ 1) | Edax(深さ 2) | 63 | 326 | 11 | 17.1% | −19.73 |
| Edax(深さ 2) | Edax(深さ 4) | 79 | 320 | 1 | 19.9% | −22.73 |
「多く返す」は全体では 327 だが、Edax(深さ 1)から 113 勝した。ほかの規則の打ち手は Edax(深さ 1)に 0〜12 勝である。序盤の乱数を 0 手にして 11 人で行った別の総当たりでも 102 勝だった。総当たりと同じ乱数の種でこの組の 400 局を打ち直すと、勝敗は記録と一致し、113 勝のうち 110 局は、終局で Edax の石が 0 個(全部返された)だった。Edax(深さ 1)は自分の 1 手の後の局面だけに値を付け、その後の相手の手で全部返されることを見ないので、返す石が最も多い手を打つ相手に全部返される、と見られる(推測)。
打ち手を足したときの値の動き
この節では、同じ打ち手でも、総当たりに参加した打ち手によってレーティングが数十動くことを示す。上の 42,000 局から、一般の開放度の 2 人(一般の開放度が最小、隅・X 回避・一般の開放度)が入った組を除き、残り 13 人で推定し直した(区間は求めていない)。表の「差」は 15 人での値 − 13 人での値である。
| 打ち手 | 15 人での値 | 13 人での値 | 差 |
|---|---|---|---|
| 隅・X 回避・置けるマスの差 | 576.9 | 601.2 | −24.3 |
| 隅・X 回避・開放度 | 534.8 | 556.9 | −22.1 |
| 隅を取り X を避ける | 521.2 | 540.5 | −19.3 |
| 隅を必ず取る | 397.1 | 431.5 | −34.4 |
| 置けるマスの差 | 393.0 | 431.7 | −38.7 |
| X を必ず避ける | 338.4 | 369.0 | −30.6 |
| 多く返す | 327.3 | 361.1 | −33.8 |
| 開放度が最小 | 313.9 | 352.4 | −38.5 |
| ランダム | 226.3 | 264.6 | −38.3 |
| 少なく返す | 174.7 | 217.1 | −42.4 |
| Edax(深さ 2) | 1338.8 | 1341.1 | −2.3 |
| Edax(深さ 4) | 1598.2 | 1601.4 | −3.2 |
規則の打ち手の値は 19〜42 動き、Edax どうしの差はほとんど動かない。規則の打ち手と Edax の差は、規則の打ち手が Edax(深さ 1)からとった勝ち(「多く返す」を除き 400 局で 0〜12 勝)と、規則の打ち手どうしの対局の両方から決まる。式(12) はすべての組に合うわけではない(次の節の図2)ので、組を足すと、合わない組の得点をどの打ち手の値の差で説明するかが変わり、値が動くと見られる(推測。仕組みは確かめていない)。そのため、値は同じ総当たりの中どうしで比べる。
全体のレーティングと直接対決の食い違い
この節では、全体のレーティングでは上の打ち手が、直接対決では負け越している例を示し、その理由を述べる。
全体のレーティングでは「隅・X 回避・一般の開放度」(554)が「隅を取り X を避ける」(521)より 32.3 高く、差の 95% 区間(16.7〜46.2)は 0 を含まない。式(12) で差 32.3 は、上の側が勝つ確率 0.546 にあたる。ところが直接対決は 180 勝 212 敗 8 分で、得点の割合は 46.0% だった。
図2 全 105 組の直接対決。横軸は 15 人での全体のレーティングの差(強い側 − 弱い側)、縦軸は強い側の得点の割合(400 局)、青の曲線は 式(12) の勝つ確率。点が曲線の近くにあれば、全体のレーティングがその組の結果をよく表している。橙の点が「隅・X 回避・一般の開放度」と「隅を取り X を避ける」の組で、曲線より 8.6 ポイント下、0.5 の線の下にある。0.5 の線の下にある点は 105 組のうち 3 組で、どれも差が 40 未満である(ほかの 2 組は「X を必ず避ける」対「開放度が最小」(差 24.5、44.5%)と「隅・X 回避・開放度」対「隅を取り X を避ける」(差 13.6、48.9%))。差 190〜240 で曲線の下にある 5 組のうち 3 組は、X を必ず避ける打ち手が弱い側の組である。差 680 付近で曲線から大きく外れた点は「Edax(深さ 1)」と「多く返す」の組(71.6%)である。
理由は次の 3 つである。
レーティングの式の仮定から外れる組
式(12) は、勝つ確率がレーティングの差だけで決まると仮定する。この仮定のもとでは、打ち手 が第 3 の打ち手 に、打ち手 より多く勝つなら、 は にも勝ち越すはずである。式(12) は について増えるので、 なら で、そのとき だからである。
実際には、この仮定から外れる組が多い。各組で、得点の割合と 式(12) の予測 の差を、400 局の割合の標準偏差 で割った値(以下 ずれ)を計算すると、ずれの絶対値が 2 以上の組が 105 組のうち 43 組、3.46 以上の組が 17 組あった。仮定が正しく、ずれが正規分布に従い、組どうしが独立なら、2 以上は 組、3.46 以上は 組ほどしか出ないはずである(0.046 と 0.00054 は、正規分布で絶対値がそれ以上になる確率)。実際にはレーティングを同じ対局から当てはめているので、ずれは独立ではなく、仮定が正しければ偶然のずれはこの計算より小さく出る。したがって、仮定から外れる組が多いことは偶然では説明できない。ずれが大きい組は、Edax(深さ 1)と多く返す(38.5)、X を必ず避けると、隅・X 回避に一般の開放度・開放度・置けるマスの差を足した 3 人(それぞれ 7.1・6.1・5.8。X を必ず避ける側が予測より多く得点した)などである。「隅・X 回避・一般の開放度」と「隅を取り X を避ける」の組のずれは −3.469()で、この 17 組の 1 つである。
14 人との成績の集約
全体のレーティングは、14 人との対局を 1 つの数にまとめた値で、直接対決の 400 局は、それぞれの打ち手の 5,600 局のうちの 400 局でしかない。2 人がほかの 13 人からとった得点の割合を比べると、「隅・X 回避・一般の開放度」は、置けるマスの差・開放度が最小・隅を必ず取る・ランダムなど、多くの打ち手からより多く得点している(逆なのは X を必ず避ける(−5.5)、多く返す(−1.4)、隅・X 回避・開放度(−0.9)、Edax(深さ 1)(−0.6))。差は、四捨五入する前の割合から計算した。
| 対戦相手 | 隅・X 回避・一般の開放度の得点の割合 | 隅を取り X を避けるの得点の割合 | 差(ポイント) |
|---|---|---|---|
| 置けるマスの差 | 77.4% | 62.1% | +15.3 |
| 開放度が最小 | 83.6% | 71.0% | +12.6 |
| 隅を必ず取る | 80.5% | 69.6% | +10.9 |
| ランダム | 92.5% | 83.4% | +9.1 |
| 少なく返す | 88.9% | 82.5% | +6.4 |
| 一般の開放度が最小 | 92.9% | 88.0% | +4.9 |
| 隅・X 回避・置けるマスの差 | 46.9% | 45.5% | +1.4 |
| Edax(深さ 4) | 0.0% | 0.0% | 0.0 |
| Edax(深さ 2) | 0.3% | 0.3% | 0.0 |
| Edax(深さ 1) | 1.8% | 2.4% | −0.6 |
| 隅・X 回避・開放度 | 50.3% | 51.1% | −0.9 |
| 多く返す | 80.3% | 81.6% | −1.4 |
| X を必ず避ける | 62.8% | 68.3% | −5.5 |
400 局のばらつき
得点の割合が 0.5 のとき、400 局の割合の標準偏差は である。46.0% は 0.5 から標準偏差の 1.6 倍しか離れていないので、この 400 局だけからは「隅を取り X を避ける方が強い」とは言えない(5% の両側検定で 1.96 倍に届かない)。
以上から、全体のレーティングで上の打ち手が、ある相手との直接対決で勝ち越さないことはありうる。2 人を比べるときは、全体のレーティングの差と、直接対決の結果を分けて書く。
第3章の確かめ問題
「隅・X 回避・一般の開放度」(553.5)と「隅を取り X を避ける」(521.2)について、式(12) で前者が勝つ確率を求めよ。400 局で予測どおりなら、前者の得点はおよそ何点になるか。
解答(差から勝つ確率)
差は である。式(12) に入れると、指数は で、(四捨五入)だから、
である(四捨五入)。400 局では、四捨五入する前の を使って 得点は ほどになる。実際は 180 勝 8 分で 点(46.0%)だったので、予測より 34.5 点少ない。
第4章 開放度の上乗せが小さかった理由の考察
この章では、第3章の結果で、開放度を隅・X の規則に足したときの上乗せ(13.6・32.3)が置けるマスの差(55.7)より小さく、直接対決では勝ち越さなかったことについて、事実と推測を分けて書き、推測の 1 つをデータで確かめる。
事実
この節では、第3章の結果のうち開放度に関わるものを並べる。
- 「隅・X 回避・開放度」は「隅を取り X を避ける」に 48.9%(平均の石差 −0.25)、「隅・X 回避・一般の開放度」は 46.0%(−2.49)で、どちらも勝ち越していない。全体のレーティングでは 13.6・32.3 高く、差の 95% 区間は −1.5〜29.1(0 を含む)と 16.7〜46.2 である。
- 「隅・X 回避・置けるマスの差」は「隅を取り X を避ける」に 54.5%(+2.29)で勝ち越した。
- 隅・X を扱わない打ち手では、「開放度が最小」はランダムに 58.1%、「一般の開放度が最小」は 50.8% だった。「置けるマスの差」は 74.0% だった。
- 置けるマスの差は、隅・X を扱わなくてもランダムより 166.7、隅・X に足しても 55.7 上がる。どちらも、同じ条件で開放度(2 つの定義)を使ったときの上がり方(87.6・7.9、13.6・32.3)より大きい(2 つの上がり方の差の区間は求めていない)。
推測
この節では、開放度の上乗せが小さかった理由の候補を 4 つ挙げる。1・2・4 は確かめていない推測で、3 は次の節でデータと照らす。
- 推測 1(隅で勝負が決まる水準で測っている):どの打ち手も隅に打てれば打つか、隅を気にしない。この水準では、開放度の違いで動く終局の石差は、隅を相手に与えたかどうかで動く石差より小さい、と見られる。隅を取るだけでランダムから +171、X を避けるのを足して +295 上がる一方、開放度を足して +14〜+32 だった(第3章の表)ことは、この推測と合う。ただし同じ水準で、置けるマスの差は +56 上がっているので、この推測だけでは、開放度が置けるマスの差より効かない理由は説明できない。
- 推測 2(1 手だけで使っている):開放度を小さくする狙いは、相手に打てるマスを与えないことで、数手先に相手を悪い手しか打てない局面に追い込むことだと考えられる。打ち手は打つ手の 1 手だけで開放度を比べ、その先を読まないので、その効き方が出ない、と見られる。
- 推測 3(定義の違い):一般の開放度(式(10))は返る石の周りの空きの数なので、返す石が少ない手ほど小さくなりやすい。一般の開放度を最小にすると、返す数が少ない手(第3章で最も弱い打ち手)に近くなる、と見られる。
- 推測 4(終盤では意味が薄い):空きが少なくなると、打てるマスを相手に与えるかどうかより、どの空きがどちらの石で埋まるかと、最後の 1 手をどちらが打つかで石差が決まる、と見られる。
一般の開放度と返す数の関係
この節では、推測 3 をデータで確かめる。局面は次のように 5,000 個作った(乱数の種 20261024)。4〜55 から手数を 1 つ等確率に選び、初期局面から双方が打てる手から等確率に選んでその手数だけ打つ(パスは手数に数えない)。途中で終局したものと、止めた局面で打てる手が 1 つ以下のものは捨てる。打てる手の平均は 9.47 個だった。各局面で、開放度が最小の手の集合と、返す数が最少の手の集合を比べた。
| 選び方 | 返す数が最少の手を選ぶ確率 | 選んだ手の返す数の平均 |
|---|---|---|
| 打てる手から等確率 | 45.3% | 2.21 |
| 著者の定義の開放度が最小の手から等確率 | 59.0% | 1.85 |
| 一般の定義の開放度が最小の手から等確率 | 60.8% | 1.79 |
| 返す数が最少の手から等確率 | 100% | 1.08 |
「返す数が最少の手を選ぶ確率」は、その選び方で選んだ手が、返す数が最少の手の 1 つである確率(同点の手は等確率に選ぶとして計算した期待値)である。空きの数で分けると、一般の定義では空き 41 以上で 81.7%、21〜40 で 56.9%、20 以下で 43.1% だった(等確率なら 59.4%・41.6%・34.7%)。
この表から、一般の開放度が最小の手を選ぶと、等確率に選ぶより、返す数が最少の手を選ぶ割合が高い(60.8% 対 45.3%、返す数の平均は 2.21 個から 1.79 個)。ただし高まり方は、返す数が最少の手を選ぶ打ち手の 3 分の 1 ほどで(返す数の平均で 、確率で )、著者の定義(59.0%、1.85 個)とほぼ同じである。空きの数で分けても、どの範囲でも、著者の定義で同じくらい割合が高い(空き 41 以上で 77.3%、21〜40 で 56.3%、20 以下で 42.5%)。したがって「一般の開放度を最小にすると、返す数が少ない手に近くなる」はある程度言えるが、著者の定義にも同じ程度に言えるので、一般の定義だけの性質ではなく、2 つの定義の強さの差(直接対決で 57.5%)を説明できない。直接対決でも、「一般の開放度が最小」は「少なく返す」に 68.0% で勝っており、同じ打ち手ではない。
まだ確かめていない方法
この節では、推測 1・2・4 を確かめる方法を挙げる。どれも実施していない。
- 数手先を読む打ち手と比べる:例えば 2〜4 手先まで読み、末端の局面に「隅・X の値 + 開放度の重み × 開放度」で値を付ける打ち手と、開放度の重みを 0 にした打ち手を比べる。差が 1 手だけのときより広がれば、推測 2 に合う。
- 隅を点数表で扱う強い相手と比べる:Edax(深さ 1)のように隅の点数表を持つ相手との対局で、開放度の有無で勝ち数が変わるかを見る。今の総当たりでは、規則の打ち手が Edax(深さ 1)に 0〜12 勝(「多く返す」を除く)で、差が出る余地がない。
- 空きの数で開放度の重みを変える:終盤(例えば空き 20 以下)だけ開放度を使わない打ち手と比べる。推測 4 に合えば、強さは下がらない。
第4章の確かめ問題
第2章の例の局面(黒番、打てる手 9 つ)で、「一般の開放度が最小」と「開放度が最小」(著者の定義)の打ち手が選びうる手を挙げ、それぞれが返す数が最少の手を選ぶ確率を求めよ。
解答(例の局面での選び方)
第2章の表から、返す数が最少(1 個)の手は b2・d2・g3・b6・d6 の 5 つである。
- 一般の定義の開放度が最小(2)の手は d2・d6 で、どちらも返す数 1 なので、確率は である。
- 著者の定義の開放度が最小(0)の手は g3・b6 で、どちらも返す数 1 なので、確率は である。
- 打てる手から等確率なら (四捨五入)である。
この局面では、どちらの定義でも、開放度が最小の手は返す数が最少の手になる。ただし 2 つの定義は別の手を選ぶ(d2・d6 と g3・b6)。
第5章 Edax の評価関数の形
この章では、オセロのプログラム Edax(オセロの強化学習の「Edax の作り」 で全体の作りを説明している)の評価関数が、どのマスの組を見ているかを示す。点の付け方の式、探索、終盤の読み切りは、そのページの 評価関数・αβ 探索・終盤の読み切り の節にあり、ここでは繰り返さない。
形ごとの点数表の和
この節では、評価関数の作りを短く示す。Edax は、盤の上に決まったマスの組(以下「形」)を 46 個置く。各形のマスの状態(手番の石・相手の石・空きの 3 通りずつ)の並びごとに、点数表から値を引き、46 個の値と定数を足して 128 で割り、四捨五入した値を局面の値にする。この値は終局の石差と同じ単位で読む。点数表は空きマスの数ごと(0〜60 の 61 組)に別の値を持つ(Edax 4.7 の eval.c の EVAL_N_PLY = 61)。点数表の値をどう決めたか(人の棋譜から当てはめたのか、Edax 自身の対局から当てはめたのか)は、Edax のソースにも説明にも書かれておらず、確かめていない。
形の一覧
この節では、46 個の形を 12 種類に分けて示す。形のマスは eval.c の表 EVAL_F2X、並びの数と対称でまとめた数は同じファイルの EVAL_SIZE・EVAL_PACKED_SIZE から写した。形のマスの数を とすると、並びの数は である。「対称でまとめた数」は、裏返すと重なる 2 つの並びを 1 つと数えた数で、次の節で説明する。
| 形の種類 | 例(1 つ目の形のマス) | マスの数 | 個数 | 並びの数 | 対称でまとめた数 |
|---|---|---|---|---|---|
| 隅の 3×3 | a1〜c3 | 9 | 4 | 19,683 | 10,206 |
| 隅から 2 辺に伸びた形 | a1〜a5、b1〜e1、b2 | 10 | 4 | 59,049 | 29,889 |
| 辺と X 2 つ | a1〜h1、b2、g2 | 10 | 4 | 59,049 | 29,646 |
| 辺の両隅・中央と 2 行目の中央 | a1、c1〜f1、h1、c2〜f2 | 10 | 4 | 59,049 | 29,646 |
| 2 行目 | a2〜h2 | 8 | 4 | 6,561 | 3,321 |
| 3 行目 | a3〜h3 | 8 | 4 | 6,561 | 3,321 |
| 4 行目 | a4〜h4 | 8 | 4 | 6,561 | 3,321 |
| 対角線 | a1〜h8 | 8 | 2 | 6,561 | 3,321 |
| 斜め 7 マス | b1〜h7 | 7 | 4 | 2,187 | 1,134 |
| 斜め 6 マス | c1〜h6 | 6 | 4 | 729 | 378 |
| 斜め 5 マス | d1〜h5 | 5 | 4 | 243 | 135 |
| 斜め 4 マス | d1〜a4 | 4 | 4 | 81 | 45 |
| 定数 | なし | 0 | 1 | 1 | 1 |
個数の合計は である。「行目」の形は、盤を 90 度ずつ回した 4 か所(2 行目なら 2 行目・7 行目・b 列・g 列)に置く。同じ種類の形は同じ点数表を使う。
図3 12 種類の形の、それぞれ 1 つ目の位置(EVAL_F2X の順)。塗ったマスが形のマスで、紫は X マス、青はそれ以外。上の段の 4 つは隅を含み、そのうち左の 3 つは X も含む(4 つ目の「辺の両隅・中央と 2 行目の中央」は X を含まない)。中の段の「2 行目」は X を 2 つ、「対角線」は隅を 2 つと X を 2 つ含む。下の段の斜めの形は、隅も X も通らない。
対称でまとめた数
この節では、表の「対称でまとめた数」が何かを示す。形の中には、裏返すと同じ形に重なるもの(例えば辺の 8 マスは、左右を反転しても辺の 8 マス)があり、Edax は、裏返して同じになる 2 つの並びに同じ点を使う。そのため点数表に置く値の数は、並びの数より少ない。
形のマスの数を 、裏返しで動かない(自分自身に移る)マスの数と、入れかわるマスの対の数の和を とする。例えば「2 行目」の形 a2〜h2 の左右の反転では、a2↔h2・b2↔g2・c2↔f2・d2↔e2 の 4 対が入れかわり、動かないマスは無いので である。このとき、裏返しで重なる並びをまとめた数 は次になる。
詳しくはこちら(式(14) の数え方)
並びは全部で 通りある。裏返しで自分自身に移る並びの数を とする。自分自身に移る並びは、入れかわる対の 2 マスが同じ状態で、動かないマスは何でもよいので、対ごとに 3 通り、動かないマスごとに 3 通りで、
である。残りの 通りは、裏返すと別の並びに移り、2 つずつ組になる(もう一度裏返すと元に戻るから)。まとめた数は、自分自身に移る並びが 1 つずつ、組になる並びが 2 つで 1 つなので、
である。式(16) に 式(15) を入れると 式(14) になる。
各種類の裏返しと は次のとおり。この で 式(14) を計算すると、12 種類すべてで EVAL_PACKED_SIZE の値と一致する(Python で確かめた)。Edax のソース(eval.c の eval_open)は、形の中の並びの桁を入れかえる対応表 sym_C9・sym_C10・sym_S10 で並びをまとめている。辺と斜めと行の形(sym_S10 とその後ろの部分)は桁の順を逆にする対応表で、両端を入れかえる裏返しにあたる。sym_C9 は 3 桁を動かさず 3 対を入れかえ、sym_C10 は 2 桁を動かさず 4 対を入れかえる。桁とマスの対応を表 EVAL_X2F(各マスが形の何桁目か)で読むと、sym_C9 は a1・b2・c3 を動かさず b1↔a2・c1↔a3・c2↔b3 を入れかえ、sym_C10 は a1・b2 を動かさず a2↔b1・a3↔c1・a4↔d1・a5↔e1 を入れかえる。どちらも下の表の対角線での裏返しにあたる。
| 形の種類 | 裏返し | 動かないマス | 入れかわる対 | 合計 |
|---|---|---|---|---|
| 隅の 3×3 | a1 と c3 を結ぶ対角線で裏返す | 3(a1・b2・c3) | 3 | 6 |
| 隅から 2 辺に伸びた形 | 同じ対角線で裏返す(2 本の辺が入れかわる) | 2(a1・b2) | 4 | 6 |
| 辺と X 2 つ | 左右の反転 | 0 | 5 | 5 |
| 辺の両隅・中央と 2 行目の中央 | 左右の反転 | 0 | 5 | 5 |
| 2〜4 行目、対角線 | 両端を入れかえる | 0 | 4 | 4 |
| 斜め 7 マス | 両端を入れかえる | 1 | 3 | 4 |
| 斜め 6 マス | 両端を入れかえる | 0 | 3 | 3 |
| 斜め 5 マス | 両端を入れかえる | 1 | 2 | 3 |
| 斜め 4 マス | 両端を入れかえる | 0 | 2 | 2 |
12 種類の「対称でまとめた数」と定数 1 個を足すと 114,364 である。点数表のファイル eval.dat の大きさ 13,952,436 バイトは、見出しの 28 バイトと、61 組 × 114,364 個 × 2 バイトの和に一致する()。
隅・X の規則との関係
この節では、第2章の規則と、この評価関数との関係を述べる。ここに書くのは解釈であり、確かめた事実ではない。
- 「隅を取る」「X を避ける」は、隅か X を含む形(隅の 3×3、隅から 2 辺に伸びた形、辺と X 2 つ、辺の両隅・中央と 2 行目の中央、2 行目、対角線)の点数表のうち、隅のマスと X のマスの状態だけで決まる部分を、「隅は良い、X は悪い」という 2 つの値に単純にしたものと見られる。点数表は、隅が空いているか、隣の辺の石がどう並んでいるかで、同じ X の石にも違う点を付けうる。規則の打ち手は、その違いを見ない。
- 開放度や置けるマスの差は、評価関数の項に無い。Edax は、手を読む順番を決める値(
move.cのmovelist_evaluateと、残りの深さが浅いときに使うmovelist_evaluate_fast)に、次の 3 つを入れる(ほかに、置換表(同じ局面を何度も読まないよう、読んだ局面の値と最善手を記録する表)に記録した最善手、空きの偶奇(盤の 4 区画それぞれの空きの数が奇数か偶数か)、浅く読んだ値などの項目もある。全部は オセロの強化学習の「αβ 探索」 にある)。打った後の相手の打てる手の数(少ないほど高い。隅を 2 つと数える。重み )、打った後の自分の石に接する空きマスの数(少ないほど高い。盤全体の自分の石について数え、数える空きマスが隅なら 2 つと数える。隅にある自分の石は数えない。辺の石は辺に沿う向きだけで数える。開放度は返した石だけについて数える。重み )、マスごとの固定の値SQUARE_VALUE(隅 18、X 2、C マス 4 など)。このほか、返らない石の数(重み )も入る。movelist_evaluate_fastでは隅とその近くの石(get_corner_stability)、movelist_evaluateでは辺全体の石(get_edge_stability)を数える。固定の値は、隅を高く X を低くする点で、隅・X の規則と同じ向きである。読む順番は、αβ 探索で省ける枝の数を変えて速さを変えるが、ProbCut を使わない設定(深さの設定 1〜10)では、読む順番を変えても求まる値は変わらない。したがって、これらの量は手の値には入らない。ただし、値が同じ手が複数あるときは、先に読んだ手が残るので、どの手を打つかには効く。
第5章の確かめ問題
隅の 3×3 の形(9 マス)について、式(14) で対称でまとめた数を求め、表の 10,206 と一致することを確かめよ。
解答(隅の 3×3 のまとめた数)
a1〜c3 の 9 マスを a1 と c3 を結ぶ対角線で裏返すと、対角線の上の a1・b2・c3 の 3 マスは動かず、b1↔a2・c1↔a3・c2↔b3 の 3 対が入れかわる。よって 、 で、式(14) から
となり、表の値と一致する。
第6章 Edax の深さ
この章では、第3章で使った深さの設定 1・2・4 の Edax が、手を選ぶときに何をしているかを示す。Edax に渡す「深さの設定」と、読む深さ(式(5) の )は、空きの数によって違うことがある。深さの設定 1〜10・12・16・21 と読む深さ、ProbCut(第1章)の関係は オセロの強化学習の「このページの対局での Edax の条件」 にある。勉強盤で使う設定 18 は第1章の表のとおりに使う。
終盤より前の手の選び方
この節では、空きが多いうちの Edax(深さ 1・2・4)の手の選び方を示す。Edax(深さ 1)は、打てる各手 について、打った後の局面 の第5章の評価関数の値を求め、それを手番から見た値に直した(符号を反転した)値が最大の手を打つ。式(5) で読む深さ としたものである(ただし Edax は、打った後の局面が空きの残る終局(一方の石が全部返った場合を含む)でも評価関数の値を使い、空きが 0 のときだけ石を数える(root.c の search_route_PVS と midgame.c の search_eval_0)。そのため 式(5) の 1 行目と違う場合がある。根で深さ 1 を読むときは、打った後の局面を search_eval_1 ではなく search_eval_0 で評価するので、オセロの強化学習の αβ 探索の節にある「search_eval_1 は相手の石を全部返した場合を除いて」という扱いとは、全部返した局面の扱いが違う)。1 手先しか見ないが、値は 46 個の形の並びから決まるので、隅と X のマスだけを見る規則の打ち手と違い、辺や斜めの石の並びも値に入る。深さ 2・4 の Edax は、それぞれ 2 手先・4 手先まで読み(αβ 探索、第1章)、その先の局面に評価関数の値を使う。
読み切りに入る空きの数
この節では、Edax(深さ 1・2・4)が終局まで読み切る空きの数を、Edax 4.7 の search.c の表 LEVEL[深さの設定][空きの数] で確かめた結果を示す。表の各要素は「読む深さ」と「ProbCut の段階」の組である。ProbCut の段階は 0〜5 で、0〜4 は ProbCut を使い(段階が小さいほど多くの枝を省く。selectivity_table で確からしさ 73%・87%・95%・98%・99% にあたる)、5 は ProbCut を使わない。読む深さが空きの数に等しいとき、終局まで読み切る。
| 深さの設定 | 空き 0〜2 | 空き 3〜4 | 空き 5〜8 | 空き 9 以上 | 読み切る空きの数 |
|---|---|---|---|---|---|
| 1 | 空きと同じ深さ | 1 | 1 | 1 | 2 以下 |
| 2 | 空きと同じ深さ | 空きと同じ深さ | 2 | 2 | 4 以下 |
| 4 | 空きと同じ深さ | 空きと同じ深さ | 空きと同じ深さ | 4 | 8 以下 |
深さの設定 1〜4 では、どの空きの数でも ProbCut の段階は 5(ProbCut を使わない)である。Edax(深さ 1)は空き 2 以下で、Edax(深さ 4)は空き 8 以下で終局まで読む。
book を使っていないこと
この節では、第3章の対局で定石の本(第7章)を使っていないことを示す。Edax は -book-usage off の設定で起動した。この設定では、序盤でも探索だけで手を決める。
第6章の確かめ問題
Edax(深さ 4)は、空き 9 の局面と空き 8 の局面で、それぞれ終局まで読み切るか。上の表で答えよ。
解答(深さ 4 の読み切り)
深さの設定 4 の行では、空き 9 以上で読む深さは 4 である。空き 9 では読む深さ 4 が空きの数 9 より小さいので、読み切らない。4 手先の局面に評価関数の値を使う。空き 8 では読む深さが空きの数と同じ 8 なので、終局まで読み切る。
第7章 定石の本(book)
この章では、Edax の定石の本(以下 book)が何を記録しているかと、手元の book の中身を示す。
book が記録するもの
この節では、book の 1 局面の記録の中身を、Edax 4.7 の book.c の構造体 Position と、ファイルから読む関数 position_read で確かめた結果を示す。book は局面ごとに次を持つ。
| 項目 | 中身 | 大きさ(バイト) |
|---|---|---|
| 盤面 | 手番の石と相手の石の 64 ビットずつ | 16 |
| 勝敗の数 | その局面を通った対局の勝ち・引き分け・負けの数 | 12 |
| 終わっていない手順の数 | その局面から先で、終局まで記録していない手順の数 | 4 |
| 局面の値 | 値を求めた深さの設定の探索の値(多くは 式(5) の見込み。空きが少ない局面では読み切りの値になりうる)と、その下限・上限 | 6 |
| 手のつながりの数 | 記録した次の手の数 | 1 |
| 値を求めた深さの設定 | 値を求めた探索の深さの設定(level) | 1 |
| 手のつながり | 次の手ごとに、その手と評価値の組(1 つ 2 バイト) | 手のつながりの数 × 2 |
| 残りの最善手 | 手のつながりに入っていない手のうち最善の手とその評価値 | 2 |
1 局面の記録は、手のつながりの数を として バイトである。Edax は、対局中の局面が book にあれば、記録した評価値から手を選ぶ。
手元の book
この節では、手元の book のファイル data/book.dat を読んだ結果を示す。大きさは 84 バイトで、見出し 42 バイトと、局面の記録 1 つ(42 バイト、手のつながりは 0)でできていた。記録された局面は初期局面で、勝敗の数はすべて 0、局面の値は −1(下限 −127、上限 127)、値を求めた深さの設定は 24、残りの最善手の欄は d3(評価値 −1)だった。この −1 は深さの設定 24 の探索の見込みで、初期局面の読み切りの値ではない。手のつながりの記録は無く、d3 は残りの最善手の欄にあるだけなので、初期局面のほかの局面は記録していない。第3章の対局と勉強盤では、この book を使わない設定にしている。
book を入れたときの影響
この節に書くのは推測である。中身のある book を使うと、Edax(深さ 1・2・4)は、book にある序盤の局面では同じ手(記録した評価値が最大の手)を打つ。そのため、深さの違いによる強さの差は、序盤では無くなり、book を抜けた後の局面だけで出る、と見られる。第3章の総当たりは最初の 4 手を乱数で打つので、乱数で進んだ局面が book に無ければ、影響は小さくなる。どちらも確かめていない。
第7章の確かめ問題
book の 1 局面の記録が、次の手を 3 つ記録しているとき、その記録は何バイトか。
解答(記録の大きさ)
手のつながりの数 を に入れて、 バイトである。内訳は、盤面 16、勝敗の数 12、終わっていない手順の数 4、局面の値 6、手のつながりの数 1、値を求めた深さの設定 1、手のつながり 、残りの最善手 2 である。
第8章 手元の勉強盤
この章では、ここまでの評価値・判定・打ち手を使って勉強するために作った勉強盤の機能の要点を示す。ソースは公開していない。
評価の盤
この節では、評価値を見る画面を示す。勉強盤には盤が 2 つある。
- 実際の盤面:いまの対局の盤で、ここに打つ。評価値は出さない。
- 評価の盤:選んだ時点の、手を打つ前の盤に、その時点の全部の手の評価値(式(3))を数字で重ねる。最善の手(同点なら全部)に印を付け、実際に打った手にも印を付ける。前の手・次の手へ動かして、過去の手を見直せる。
- 「評価値を表示」の切りかえ:入れると、対局中、自分の番のときに、いまの局面の評価値を評価の盤に出す。外すと、いまの局面の評価値は出さず、過去の手の評価値だけを見られる。初めは外れている。
評価の盤の外に、値が読み切りの値か見込みか(第1章の読み切りの値と探索の見込み)を書く。各時点の局面の値(式(4))を黒から見た値に直した折れ線を出す(画面での名前は「黒から見た評価値の推移」)。
判定
この節では、手ごとの判定を示す。打った全部の手(自分の手も相手の手も)に、式(6) の損と、第1章の 4 段階の判定を付ける。終局後は、損がいちばん大きい自分の手を評価の盤に開く。
本番と練習
この節では、対局の 2 つの種類を示す。
| 項目 | 練習 | 本番 |
|---|---|---|
| 自分のレーティングに入れるか | 入れない | 入れる |
| 対局中の評価値と評価の盤 | 見られる | 出さない(終局後の復習では出す) |
| 1 手戻す | できる | できない |
| 途中で新しい対局を始めたとき | 記録しないでやめる | 投了(負け)として記録する(自分が 1 手も打っていなければ記録しない) |
自分のレーティングは、第3章の打ち手の値を固定し、本番の対局の勝敗から自分の値だけを 式(12) の最尤推定で求める。全勝・全敗でも値が無限大にならないよう、相手の値の平均と 1 回引き分けた仮想の対局を足してから推定する。
サーバーの有無で違うこと
この節では、勉強盤をファイルのまま開いたときと、手元のサーバーを起動したときの違いを示す。勉強盤は、HTML のファイルをブラウザで開くだけで動く。規則の打ち手(第2章)とルールは、ブラウザの中の JavaScript で動く。
| 項目 | サーバーなし | サーバーあり |
|---|---|---|
| 規則の打ち手との対局 | できる | できる |
| Edax との対局 | できない | できる |
| 評価値 | 終盤だけ(ブラウザで読み切る) | 全部の局面(Edax) |
| 記録の置き場所 | そのブラウザの中 | そのブラウザの中と、手元のファイル |
サーバーなしで評価値が出るのは、そのブラウザで 1 局面の全部の手を 1 秒以内に読み切れる空きの数以下の局面だけである。この数は、初めて開いたときにブラウザが空きの数ごとの時間を測って決める。手元の PC では 13 前後で、終盤 13 マス以下だけ評価値が出る。ブラウザで読み切った値は、空き 10〜14 の 40 局面(打てる手 291 個)で Edax の読み切りの値と一致した。
Edax がブラウザから動かないのは、ファイルとして開いたページからは、PC にあるプログラム(Edax)を起動できないからである。ブラウザは、開いたページが PC のプログラムを動かすことを許さない。サーバーは手元の PC で動くプログラムなので Edax を起動でき、ページはサーバーに局面を送って評価値を受け取る。
第8章の確かめ問題
サーバーを起動せずに勉強盤をファイルのまま開き(読み切れる空きの数は 13 とする)、「評価値を表示」を入れて練習で対局している。次の 3 つの場面で、評価の盤にいまの局面の評価値が出るか答えよ。(a) 空き 20 の局面、(b) 空き 12 の局面、(c) 同じ条件で本番の対局中の空き 12 の局面。
解答(評価値が出るか)
- (a) 出ない。サーバーなしではブラウザの読み切りだけで、空き 20 は 13 より多い。サーバーを起動すれば、空き 22 以下なので Edax の読み切りの値が出る(第1章の表)。
- (b) 出る。空き 12 は 13 以下なので、ブラウザで読み切った値が出る。
- (c) 出ない。本番の対局中は評価値を出さない。終局後の復習では出る。
確認できていない点
この章では、本文で確かめていないと書いた事項をまとめる。
- 勉強盤の空き 25〜27(深さの設定 12)の見込みと読み切りの値の差。
- オンラインオセロ教室と Zebra の評価値の単位(最終石差か)は、それぞれの説明やソースで確かめていない。
- このページのレーティングを人間の段位と比べるときのずれの大きさ(Edax(深さ 2)で 121.4、Edax(深さ 4)で 15.8 ずれた 2 例しかない)。
- 「多く返す」打ち手が Edax(深さ 1)から 113 勝した仕組み(110 局が全部返しての勝ちだったことは確かめた。Edax(深さ 1)が相手の次の手を読まないため、という説明は推測)。
- 開放度の上乗せが小さかった理由のうち、推測 1(隅で決まる水準)・2(1 手だけ)・4(終盤)。確かめる方法は まだ確かめていない方法 に挙げた。
- 打ち手を足すと値が動く仕組み(式(12) が合わない組の折り合いが変わる、という説明は推測)。
- Edax の点数表の値の決め方。
- 隅・X の規則が Edax の点数表の一部を単純にしたもの、という見方(解釈)。
- 中身のある book を入れたときの、深さごとの強さの変化。