将棋を指すというよりは、高い数字が出る選択肢を選ぶ
――実際に将棋プログラムを作るのは、どういう流れになるのでしょうか。
渡辺 将棋プログラムには、大きく分けて3つの要素があります。その1つ目が、「探索」と呼ばれている手を読む部分。2つ目が「評価関数」。そして、3つ目が「定跡」。このうち、「探索」については高度なプログラミングが必要なんですけど、残りの2つはそんなに技術はいらない。もちろん、細部に工夫はあるんですけど、そこまでシビアではないですね。とにかく将棋プログラムにとって心臓部分に当たる「探索」が重要かつ大変です。
――素人の質問ですが、「探索」と「評価関数」は密接に関わっているわけではないのでしょうか。
渡辺 将棋の一局面の良し悪しを判断するのが「評価関数」です。初期局面から「7六歩」なら何点、「2六歩」なら何点で、後手がどう応じたら何点とか、その先の選択肢をガーッて読み込ませるわけです。どういう風に進んだら一番いい結果が得られるか、流れを考えるのが「探索」です。
コンピュータって、結局将棋を指しているというよりは、計算して高い数字が出るような選択肢を選んで駒を動かしているんです。その「探索」アルゴリズムは、とにかく少しでも多くの手を読めるように、1バイトとか1ビットのレベルで無駄を削ぎ落とすような世界で動いています。だから、関係なさそうなプログラムをちょっと直しただけでも影響が出てしまうのです。
定跡を載せた「だけ」だとも言われた
――そうしてできた初代「ハニーワッフル」がデビューしたのが……。
渡辺 世界コンピュータ将棋選手権が毎年5月のゴールデンウィークにあって、2016年に行われた第26回大会でしたね。そのときはまだPonanzaが出場していて、当たり前のように優勝していました。
――ただ、1次予選で2勝5敗とほろ苦いデビューになったと。
渡辺 そうですね。ちょっともう思い出したくない歴史ですけれど(笑)。定跡の概念を、やっぱりスクラッチから作って取り入れるのは、なかなか難しいといいますか……。あとは、結局ある程度深く読めないと意味がないので、「探索」を優先した結果ですね。
――ところが、翌年行われた第27回大会では一気に全体7位と結果を出しました。
渡辺 「いきなり」ですね。ライブラリのおかげでした。探索部はほとんど既存のソフト「やねうら王」のものを使っていて、それに振り飛車の定跡を載せたような仕組みです。それ以外の部分でも頑張って工夫はしたんですが、当時は定跡を載せた「だけ」だとも言われました(笑)。
――次の年、第28回大会でも8位でした。
渡辺 このあたりからオリジナル要素がかなり入ったんですけど、一番大きかったのが振り飛車の評価関数を作ったことです。そして、探索部でも振り飛車を優遇するような改造をしました。ですから、本格的に将棋ソフトを開発したという意味では、この第28回が一つの節目になりましたね。
――今年は残念ながら予選敗退で、入賞はなりませんでした。
渡辺 そうですね。今年は、サーバーがちょっと豪華になって、定跡が増えただけで、プログラム的な進歩がなかったので……。ちょっとサボってしまいました。第29回大会の特筆すべき点としては、ディープラーニング系のソフトもいくつか出場していたことです。今回は決勝リーグ進出はなりませんでしたが、他の開発者には大きな影響を与えると思います。