汎関数を用いた時間攻めの導出(の数学的解説)
前回の記事で紹介した汎関数を用いた時間攻めの導出について解説したのですが、読者の方から数式をもう少し解説して欲しいとのリクエストをいただきましたので、此方にて解説します。
数学マニアじゃない方にも雰囲気が伝わる用に善処はしますが、元が理系大学生が3−4年頃に習うものなので、それなりに高難易度な話です。
1.問題条件の定式化
・・・x手目に使う持ち時間(単位は秒)
・・・x手目にt秒使った時に正しい手をさせる確率
・・・今回最大化したいパラメタ。各々の局面において正しい手を指せる確率の和
・・・持ち時間の総和はHとする
持ち時間を制御することで最大化したいのは、厳密には勝率であり、各々の局面において正しい手を指せる確率の和ではありません。しかし、この記事 で検証したように、この指標はそれなりの精度で勝率と対応してくれていると考えています。
なお、が所謂汎関数というやつです。
2.ラグランジュの未定乗数法を使って最適な時間配分が満たすべき条件を求める
時間を無駄にしている = 本来読むべき局面でない局面に時間を使っている = 無駄に読んだ局面と読むべき局面とでは同じ時間を費やしても得られる利得が後者のほうが大きい という思考実験をすれば、「無駄のない時間配分では、どの局面についても時間対効果が同じになっているのだろう」という予想を立てることができます。即ち
一定
とするのが最適な時間配分となります。(ラグランジュの未定乗数法を用いだ導出はオマケを参照)
3.実験結果から、stockfishの時間配分が2の条件を満たしていることを証明する
レートの持ち時間依存性から考える技巧の敗因と探索部最適化で行った持ち時間に差があるソフト同士の勝率から、将棋の探索部は以下のような特徴を持つことが示唆されています。
・正しい手をさせる確率は読んだ手の深さに浅い領域では線形依存する(。dは深さ。は局面の複雑さを意味するパラメータ。複雑な局面ほど大きくなります(複雑な局面ほど深く読むと反省することが多いため、手の深さの価値が上がる))
・消費時間は読む手数に指数関数的に依存する(。T(d)はd手読むのにかかる時間)
ここで、を計算すると
(d(t)はt秒使った時に読める深さ)
これを一定にするには、が一定である必要があります。stockfishでは測定の中で手が変化する確率を計算しているため、はある程度の精度で求められています。また、であるため、は大雑把に言って今まで使った持ち時間とみなすことができます。
以上より、stockfishの時間配分ルーチン
「手の変化する確率と、消費時間の比率がある一定量に達したら探索を打ち切る」が浅めの読みの近似において最適な戦略であることが証明できます。
おまけ.ラグランジュの未定乗数法の例題と持ち時間の導出
ラグランジュの未定乗数法は2で述べたことをより一般的な話に落としこんだものです。wikipediaの記事が解りやすいので読んでみることをオススメします。あまり高度な説明は此処では扱いませんが、例題をひとつ紹介しますので、参考にしてください。
例題:がを満たすときの最大値を求めよ。
が束縛条件を満たすのであれば、の最適化は、と等しい。
をで偏微分すると
...(1)
...(2)
となる。(1,2)を同時に0にし、かつ、を満たすを求めると
。
よって、
解が2つ出てるのは、ラグランジュの未定乗数法で得られるのは値の極であるため、最小値も同時に得られてしまうからです。今回の問題(最大値)は2つ出てきた解のうちの、の方となります。
おまけ2.将棋の持ち時間への適用
将棋の持ち時間についても同様にの代わりに
の最適化を考えます。
から、が何であるかはに依存するものの、兎にも角にもが一定でなければならないことが解ります。