※21/9/26 Lv30の内容が間違っていたのを修正。
結論に影響はないですが、(Lv,depth)=(30,30)については正しく計算できることになります
修正した部分は緑色にしておきます
■1章 導入
こんにちは。
edaxに自作bookを計算させている人も多いのではないでしょうか。
その時の悩みとして、
Lv(bookの手を読む際のEdaxのレベル)
depth(何手目まで記憶させるか)
を自分で決めないといけないというものがあります。
複数の人から聞いたことがあるのは、
「Lvとdepthの合計が60(オセロの最大手数)になるようにするといい」です。
これは本当なのでしょうか??今回はこれについて考えてみようと思います。

▲Edaxでbookを構築している様子
議論が長くなるので先に結論を書きます。
合計が60だといいというのは必ずしも正しくないです。
が、最適解のうちの一つにLv=24、depth=36 というものがあり、
この場合は「偶然」合計が60になっています。
合計が60でも、例えばLv=31、depth=29だと精度が落ちてしまいます。
bookを新しく作る人向けのオススメは
①Lv=24、depth=36(普段EdaxのLv24以下で研究している人向け、最も万人向け)
②Lv=30、depth=30~33(bookのサイズを抑えられるメリットがある。
巨大なbookを作りたい人/高性能PCがある人/普段Lv25以上で研究している人向け)
です。
ちなみに、edaxのデフォルトはLv21&depth36ですがこれは悪くない選択です。
デフォルトのまま構築を始めた人はLv24に変えて一から作り直す必要は薄いです。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
■2章 正確なbookに求められる要件
さて、なぜこうなるか考えてみましょう。
図はキロキティア様からの引用(一部改変)で、edaxのレベルごとの読みの内容を示しています。
※21/9/26 Lv30の内容が間違っていたのを修正

bookについて考えるうえで重要なのは、何手目から完全読み(必ず評価値が正しい読み)になるかです。
完全読み=読みが最終手まで(図の白矢印の範囲) かつ selectivity=100% (図の水色の範囲)です。
※selectivityについての解説はしません。知らない人はキロキティアさんを見てください。
図より、
Lv11~18: 39手目以降は完全読み
Lv19~24: 36手目以降は完全読み
Lv25~29: 33手目以降は完全読み
Lv30~36: 30手目以降は完全読み
です。
「正確」なbookに求められる要件は、
「bookのdepthの上限に達したleafでの読みは完全読みでないといけない」です。
上の結果を使い言い換えると、
depth=39なら Lv11以上が必要
depth=36なら Lv19以上が必要
depth=33なら Lv25以上が必要
depth=30なら Lv30以上が必要
です。
さて、この要件を満たさない場合どうなるかを考えてみましょう。
例えば、depth=29、Lv31を考えます。
この場合、bookの深さの上限(29手目)での読みは
深さ31手(最終手まで)、selectivity=98%なので完全読みではありません。
完全読みではない場合、(低確率で)評価値が狂うため、bookの評価値が狂います。
※例えば、引き分けの進行が白+2と表示されるなど
bookが間違うこと自体はよくあることなのですが、
この場合、既に深さの上限に達しているためさらに学習させることができず
間違った評価値を直すことができません。
いくら学習させても評価値が直らないのは嫌ですよね。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
■3章 2章の要件を満たす中でどのLvが最適?
ここでは仮にdepth=36の場合で考えてみましょう。
この場合に求められるLvは19以上です。
bookの精度的には当然Lvが高いほどいいのですが、
ここで効いてくるのはbookの精度と計算時間のトレードオフです。
同じ数のleafを評価するのにかかる計算時間は、Lvが
18<<<<<19<20<21<<22<23<24<<<<<25<26
となります。
理由なんですが、みなさんedaxを使っているときに
終盤の入り口だけやけに評価に時間がかかる経験はありませんか?
大体あると思いますが、これはソフト(droidShimax、iEdax、うえのんEDAXなど)の不具合ではなく
edax自体の仕様です。
※人間同様ソフトも終盤の入り口以降がミスりやすいのでそこに時間をかけるのは合理的ですよね。
完全読み(水色&白矢印エリア)は本当に全ての盤面(αβ法でカットできるものは除く)を評価しているため非常に時間がかかります。図を見ると、完全読みエリアの範囲が
18と19、24と25では大きく変わることがわかります。
なので、ここを境界として計算量が爆増します。
正直、Lv19以上なら十分正確なので、計算量が増えるより前の
Lv19~24の範囲がいいと思います。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
■4章 depth=36の場合、結局Lv19~24のどれがいいのか
自分は、3章までの内容は何年も前から何となく気づいていたのですが、
4章の内容について1週間くらい前まで誤解していました。
具体的に、自分はLv19が最適だと思っていたのですが、実はLv24のほうがいいというのが結論です。
これがこの記事を執筆するに至った動機です。
まず、Lv19が最適だと思った理由ですが、
これは簡単でLv19以上の要件を満たす中で、最も(単位leaf当たりの)計算時間が短いからです。
確かにこれは正しいです、が、
「単位leaf当たりの計算時間が短い」≠「同じ時間でより正確なbookを構築できる」
なんですね。例によって何言ってるか分からんと思うので解説します。
Lv19の場合、中盤の精度が悪いために、無駄な進行を計算してしまうんです。
具体的にはコンポス白+2や蛇0、飛び出し黒+2などになって直りにくい。
(もちろん、完全読み条件を満たしているのでいつかは直るが時間がかかる)
これは、うえのんEDAXに添付する用のbookをLv19で構築した際に気づいたことです。
(ちなみに、ver 0.10aに添付しているbookはLv19なので、今Lv24で作り直してます。。。)
いくら単位leaf当たりの計算時間が短くても、無駄な進行が多いとbook全体の精度は上がりません。
実際、Lv24に変えたところ学習してすぐに正しい評価値になることが多くなりました。
さらにもう一つ、計算時間19<20<21<<22<23<24と書きましたが、Lv19と24では
そこまで(単位leaf当たりの)計算時間には差がないことです。
体感的にですが2倍は変わらない?(要検証)
何せ、圧倒的に時間のかかる完全読み部分は19~24で同じですからね。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
■5章 depthをいくつにする?
先ほどまでの議論で、
depth39:Lv18 (←18じゃ足りない気がするので24でもいいかもだけど・・・)
depth36:Lv24
depth33:Lv29
depth30:Lv36 (←重すぎて試したことないがLv31でも十分な精度の可能性はある)
※depth36以外も同様に考えると同じ結論が得られる
がいいとわかりました。この中でどれを選ぶかっていう話です。
・depthが大きすぎる(39)ときのデメリット
これは単純で、bookのサイズが大きくなります。
サイズが大きくなると、アプリのbook読み込みに時間がかかるようになり利便性が下がります。
自分が普段使っているbookはLv24/depth36で211MBほどのものですが、
例えばedaxGUIに読み込ませると4秒ほどかかりました。
(うえのんEDAXは特別な処理をしてるので一瞬)
もしdepthが39だとサイズは数倍になるはずなので読み込み時間は数倍になるでしょう。
起動するたび10秒も待たされると面倒ですね。
・depthが小さすぎるすぎる(30)ときのデメリット
この問題は、bookを実際に利用するときのedaxのレベルに依存します。
depth=30だと、31手目にはすでにbook切れすることになりますが、
検討に使っているedaxのレベルが29以下の場合は、完全読みになりません。
そのため、検討の精度が落ちます。
普通の人は、検討にLv20くらいを使ってるでしょうから、depthは36以上がいいことになります。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
■6章 結論:再掲
始めの方に書きましたが、もう一度結論を書くと最適なedaxのレベルは
①Lv=24、depth=36(普段EdaxのLv24以下で研究している人向け、最も万人向け、オススメ)
②Lv=30、depth=30~33
(bookのサイズを抑えられるメリットがある。巨大なbookを作りたい人/高性能PCがある人/
使用する端末のメモリが貧弱(スマホなど)な場合/普段Lv25以上で研究している人向け)
です。
②を見るとわかるように、合計が60になるといいというのは迷信です。
長文読んでくださりありがとうございました。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
■7章 (追記)既存bookの修正方法
twitterで貴重な情報いただきました!感謝!
仮に、Lv=31、depth=29で作ってしまったbookがあるとしてdepth=33に直す方法です。
まず、前提として「Lvを変更することは無理」です。depthを動かしましょう。
※Lv18以下で作った人は初めから作り直したほうがいいかも・・・
方法は、
①book depth 33
depthを33に設定
②play (まだbookに登録されてない進行)⇒book store
これを挟まないと、bookの内容が変更なしとみなされてしまいbookが上書き保存されません。罠。
③exit
これで終了しないと書き込まれないです。
必要に応じて、
④book deviate 0 0
で足りない分のbook(この場合は30~33手目)を追加してください。
④は長い時間がかかることがあります。
(特に、もともとのbookでbook deviate 0 0が通っていない場合はその計算もまとめて行われるので
なおさら時間がかかる。)
ちなみに、depthの確認方法は book infoです。
②を挟まずにexitしてしまうと再起動時にbook infoが29に戻ってしまうのがわかるでしょう。
結論に影響はないですが、(Lv,depth)=(30,30)については正しく計算できることになります
修正した部分は緑色にしておきます
■1章 導入
こんにちは。
edaxに自作bookを計算させている人も多いのではないでしょうか。
その時の悩みとして、
Lv(bookの手を読む際のEdaxのレベル)
depth(何手目まで記憶させるか)
を自分で決めないといけないというものがあります。
複数の人から聞いたことがあるのは、
「Lvとdepthの合計が60(オセロの最大手数)になるようにするといい」です。
これは本当なのでしょうか??今回はこれについて考えてみようと思います。

▲Edaxでbookを構築している様子
議論が長くなるので先に結論を書きます。
合計が60だといいというのは必ずしも正しくないです。
が、最適解のうちの一つにLv=24、depth=36 というものがあり、
この場合は「偶然」合計が60になっています。
合計が60でも、例えばLv=31、depth=29だと精度が落ちてしまいます。
bookを新しく作る人向けのオススメは
①Lv=24、depth=36(普段EdaxのLv24以下で研究している人向け、最も万人向け)
②Lv=30、depth=30~33(bookのサイズを抑えられるメリットがある。
巨大なbookを作りたい人/高性能PCがある人/普段Lv25以上で研究している人向け)
です。
ちなみに、edaxのデフォルトはLv21&depth36ですがこれは悪くない選択です。
デフォルトのまま構築を始めた人はLv24に変えて一から作り直す必要は薄いです。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
■2章 正確なbookに求められる要件
さて、なぜこうなるか考えてみましょう。
図はキロキティア様からの引用(一部改変)で、edaxのレベルごとの読みの内容を示しています。
※21/9/26 Lv30の内容が間違っていたのを修正

bookについて考えるうえで重要なのは、何手目から完全読み(必ず評価値が正しい読み)になるかです。
完全読み=読みが最終手まで(図の白矢印の範囲) かつ selectivity=100% (図の水色の範囲)です。
※selectivityについての解説はしません。知らない人はキロキティアさんを見てください。
図より、
Lv11~18: 39手目以降は完全読み
Lv19~24: 36手目以降は完全読み
Lv25~29: 33手目以降は完全読み
Lv30~36: 30手目以降は完全読み
です。
「正確」なbookに求められる要件は、
「bookのdepthの上限に達したleafでの読みは完全読みでないといけない」です。
上の結果を使い言い換えると、
depth=39なら Lv11以上が必要
depth=36なら Lv19以上が必要
depth=33なら Lv25以上が必要
depth=30なら Lv30以上が必要
です。
さて、この要件を満たさない場合どうなるかを考えてみましょう。
例えば、depth=29、Lv31を考えます。
この場合、bookの深さの上限(29手目)での読みは
深さ31手(最終手まで)、selectivity=98%なので完全読みではありません。
完全読みではない場合、(低確率で)評価値が狂うため、bookの評価値が狂います。
※例えば、引き分けの進行が白+2と表示されるなど
bookが間違うこと自体はよくあることなのですが、
この場合、既に深さの上限に達しているためさらに学習させることができず
間違った評価値を直すことができません。
いくら学習させても評価値が直らないのは嫌ですよね。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
■3章 2章の要件を満たす中でどのLvが最適?
ここでは仮にdepth=36の場合で考えてみましょう。
この場合に求められるLvは19以上です。
bookの精度的には当然Lvが高いほどいいのですが、
ここで効いてくるのはbookの精度と計算時間のトレードオフです。
同じ数のleafを評価するのにかかる計算時間は、Lvが
18<<<<<19<20<21<<22<23<24<<<<<25<26
となります。
理由なんですが、みなさんedaxを使っているときに
終盤の入り口だけやけに評価に時間がかかる経験はありませんか?
大体あると思いますが、これはソフト(droidShimax、iEdax、うえのんEDAXなど)の不具合ではなく
edax自体の仕様です。
※人間同様ソフトも終盤の入り口以降がミスりやすいのでそこに時間をかけるのは合理的ですよね。
完全読み(水色&白矢印エリア)は本当に全ての盤面(αβ法でカットできるものは除く)を評価しているため非常に時間がかかります。図を見ると、完全読みエリアの範囲が
18と19、24と25では大きく変わることがわかります。
なので、ここを境界として計算量が爆増します。
正直、Lv19以上なら十分正確なので、計算量が増えるより前の
Lv19~24の範囲がいいと思います。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
■4章 depth=36の場合、結局Lv19~24のどれがいいのか
自分は、3章までの内容は何年も前から何となく気づいていたのですが、
4章の内容について1週間くらい前まで誤解していました。
具体的に、自分はLv19が最適だと思っていたのですが、実はLv24のほうがいいというのが結論です。
これがこの記事を執筆するに至った動機です。
まず、Lv19が最適だと思った理由ですが、
これは簡単でLv19以上の要件を満たす中で、最も(単位leaf当たりの)計算時間が短いからです。
確かにこれは正しいです、が、
「単位leaf当たりの計算時間が短い」≠「同じ時間でより正確なbookを構築できる」
なんですね。例によって何言ってるか分からんと思うので解説します。
Lv19の場合、中盤の精度が悪いために、無駄な進行を計算してしまうんです。
具体的にはコンポス白+2や蛇0、飛び出し黒+2などになって直りにくい。
(もちろん、完全読み条件を満たしているのでいつかは直るが時間がかかる)
これは、うえのんEDAXに添付する用のbookをLv19で構築した際に気づいたことです。
(ちなみに、ver 0.10aに添付しているbookはLv19なので、今Lv24で作り直してます。。。)
いくら単位leaf当たりの計算時間が短くても、無駄な進行が多いとbook全体の精度は上がりません。
実際、Lv24に変えたところ学習してすぐに正しい評価値になることが多くなりました。
さらにもう一つ、計算時間19<20<21<<22<23<24と書きましたが、Lv19と24では
そこまで(単位leaf当たりの)計算時間には差がないことです。
体感的にですが2倍は変わらない?(要検証)
何せ、圧倒的に時間のかかる完全読み部分は19~24で同じですからね。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
■5章 depthをいくつにする?
先ほどまでの議論で、
depth39:Lv18 (←18じゃ足りない気がするので24でもいいかもだけど・・・)
depth36:Lv24
depth33:Lv29
depth30:Lv36 (←重すぎて試したことないがLv31でも十分な精度の可能性はある)
※depth36以外も同様に考えると同じ結論が得られる
がいいとわかりました。この中でどれを選ぶかっていう話です。
・depthが大きすぎる(39)ときのデメリット
これは単純で、bookのサイズが大きくなります。
サイズが大きくなると、アプリのbook読み込みに時間がかかるようになり利便性が下がります。
自分が普段使っているbookはLv24/depth36で211MBほどのものですが、
例えばedaxGUIに読み込ませると4秒ほどかかりました。
(うえのんEDAXは特別な処理をしてるので一瞬)
もしdepthが39だとサイズは数倍になるはずなので読み込み時間は数倍になるでしょう。
起動するたび10秒も待たされると面倒ですね。
・depthが小さすぎるすぎる(30)ときのデメリット
この問題は、bookを実際に利用するときのedaxのレベルに依存します。
depth=30だと、31手目にはすでにbook切れすることになりますが、
検討に使っているedaxのレベルが29以下の場合は、完全読みになりません。
そのため、検討の精度が落ちます。
普通の人は、検討にLv20くらいを使ってるでしょうから、depthは36以上がいいことになります。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
■6章 結論:再掲
始めの方に書きましたが、もう一度結論を書くと最適なedaxのレベルは
①Lv=24、depth=36(普段EdaxのLv24以下で研究している人向け、最も万人向け、オススメ)
②Lv=30、depth=30~33
(bookのサイズを抑えられるメリットがある。巨大なbookを作りたい人/高性能PCがある人/
使用する端末のメモリが貧弱(スマホなど)な場合/普段Lv25以上で研究している人向け)
です。
②を見るとわかるように、合計が60になるといいというのは迷信です。
長文読んでくださりありがとうございました。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
■7章 (追記)既存bookの修正方法
twitterで貴重な情報いただきました!感謝!
仮に、Lv=31、depth=29で作ってしまったbookがあるとしてdepth=33に直す方法です。
まず、前提として「Lvを変更することは無理」です。depthを動かしましょう。
※Lv18以下で作った人は初めから作り直したほうがいいかも・・・
方法は、
①book depth 33
depthを33に設定
②play (まだbookに登録されてない進行)⇒book store
これを挟まないと、bookの内容が変更なしとみなされてしまいbookが上書き保存されません。罠。
③exit
これで終了しないと書き込まれないです。
必要に応じて、
④book deviate 0 0
で足りない分のbook(この場合は30~33手目)を追加してください。
④は長い時間がかかることがあります。
(特に、もともとのbookでbook deviate 0 0が通っていない場合はその計算もまとめて行われるので
なおさら時間がかかる。)
ちなみに、depthの確認方法は book infoです。
②を挟まずにexitしてしまうと再起動時にbook infoが29に戻ってしまうのがわかるでしょう。
コメント
コメント一覧 (4)
何となくlevel30、depth30で作っていて、評価値が一部治らず問題意識を持っていました。
私自身プログラミングについてはずぶの素人ですので、根本的なところで勘違いがあったら申し訳ございません。
本来ならキロキティアさんのホームページで尋ねるべき内容かもしれませんが、シマスケさんのedaxGUI付属のver3.3.2で、level30、force+m2でbookを作っていると、24手目までが@73、25-27が@87、28-30が@98となり、件のlevelとselectivity、読みの深さの対応の表と一致しません(〜27が73%、28-30が95%、31-33が99%)。
実際にlevel30でdepthを33にしてみると、31手目からは@表記無し、つまり完全読みと考えられます。
そこで、同サイトからsearch.cのver4.4のソースコードに飛んで見てみました。
254-267行がlevel30に対応すると考えられますが、これを素直に読むと、30マス空き以下つまり31手目からはselectivity5=完全読み、33マス空き以下つまり28-30手目はselectivity3=98%で最後まで、36マス空き以下つまり25-27手目はselectivity1=87%で最後まで、24手目まではselectivity0=73%でレベルの深さまで、と実際にm2で回した結果と一致します。
恐らく、237行目のlevel < 30を≦ 30と感違いされたのではないかと推測します。ここだけ何故か未満表記ですし。
それでも何故level30、depth30で一部評価値が訂正できないのか考えましたが、bookは30手までなのに完全読みは31手目から、と推測しました。
もしそうだとすると、level30で必要なdepthは31、同様にlevel24では37かと思いました。
あと、少し話が逸れますが、98-103行の括弧内の左の数字を標準偏差と考えると、98%表記は実際には99%、99%表記は99.9%なのでしょうか。
私のただの勘違いだったら申し訳ありません。
ご指摘を受けてこちらで検証しました。
まず、キロキティアさんの記事ですがLv30のみ間違っていると思われます。
管理者さんに連絡はしておきました。
>level30で必要なdepthは31、同様にlevel24では37かと思いました。
このご指摘ですが、おそらく間違いではないかな・・・と今のところ思っています
具体的に、level30で必要なdepthは30、level24では36と思います
なぜなら、今まで24-36でたくさんbook構築をしていますが、一度も問題が起きたことがないからです。
30-30の場合もおそらく問題は起こらないのでは・・・と思っています(手元で試した限りでは再現しなかった)
もし30-30で評価値が不正になる棋譜をお持ちでしたら、提供していただけないでしょうか?
depthとlevelの関係ですが、再検証して私の勘違いでした。
BookAdvisorでマムシの最善進行を私のbookと比較していたのですがF5F6E6D6F7E3D7E7D8C8B8F8C7G4C4C5C6G8D3G6F3C3F4B5がどうやっても最善になりませんでした。
book作成の仕様と思ったのですが、31手目で完全読みした時の評価値の±を見間違えるという凡ミスでした。
30手目決定時の31手目候補と31手目100%読みの手で私は前者が採用されると思い込んでいたのですが、level30,m2での計算過程を眺めていて後者がbookに取り込まれているのを確認しました。
お騒がせして申し訳ありません。
存在しないBookを読み込もうとした場合に自動生成されるのはなぜかdepth37で、
b new,b depthの省略値は36という不思議な仕様なので、
どちらをデフォルトと呼ぶに相応しいかはともかくとして、
デフォルトはdepth37だと思ってました…。
そして、キロキティアさんのLvの表を見ても37手目から完全読みという風に見て取れた事から
>level30で必要なdepthは31、同様にlevel24では37かと思いました。
私もこれと同様の事を思っていました。
ですが、今回36で良いと知り1手の差ですが、Bookのサイズを1割程削減できました!
ありがとうございました!
ちなみにですが、Bookの精度を追い求めるならLv24が良い事には同意しますが、
Edaxを使って研究をしている他の人が学習甘い状態で暗記してきたりしたら、
その"無駄な進行"が日の目を見るかもしれない…
ソフト的には寄り道でも人間的には有益な分岐になるかもしれない...
そう思うと、デフォルトのLevel21である程度外れルートを拾って答えを導くのも悪くないなと思っています。
かといってLv19にまで下げる気はないですが…。