形勢判断の基本事項(1)

問題局面


何手先を読もうが、終盤で詰みまで読み切れる局面でない限りは、非終端ノードでの、何らかの形勢判断を行なう必要がある。

この形勢判断を正しく行なうのは、意外と難しい。そもそも、絶対的に正確な形勢判断が出来るのならば、1手だけ先を読んで形勢を判断すればそれで最強なのである。

実際は、先を読まないと駒損することが判明しないことだってある。駒損すると、たいていはそれが形勢に直結するので、そのようなラディカルな局面においては、静的に局面評価を行なうと実際の形勢を大きく誤認する原因となる。だもんで、そういう局面では、駒の取り合いが終わる部分まで延長探索をして静止評価するのが普通である。

それはともかく、ちょっとの盤面を見て欲しい。序盤でよくある形だ。後手が7七角成と角交換をして来た形なのだが、この馬の取り方は3通りある。同銀、同金、同桂である。有段者ならば「形」からして有無を言わず同銀ととるだろうが、これをコンピュータに理解させるのは難しい。そもそも、どの駒でとったところですぐに駒損するわけではないからだ。

コンピュータの場合、駒損は簡単に判定できるのだが、それ以外の「利かし」〜「利かされ」や「形」は、比較的数値化しにくい、難しいパラメータだと言えるだろう。「利かし」〜「利かされ」については、人間でもアマ五段ぐらいでは理解しているとは言い難い。*1

さて、この問題の局面だが、この形では銀で取る、という知識データベース的なIF構造を積み重ねても強くなるとはとても思えない。それは本質的に問題解決の方向性を誤っていると思う。3手とか5手読みの時代ならばそれでも良いかも知れないが、そういう処理をする限りは「形」を本当に理解しているとは言えず、少し形から外れれば平気で変な手を指してくる。だもんで、その手のIFは一切導入せず、正しく評価できるように局面評価関数をチューンしていかなければならない。

能書きはこれくらいにして、この問題の局面についてもう少し深く考えてみよう。同桂ととらない理由は、同桂のあと、後手から飛車先を交換されるからである。先手からの飛車先の交換は成立しない(42銀〜33銀で拒否できる)のに対して後手に一方的に飛車先を交換されるのは大損である。だもんで、形を理解していないとしてもこの部分を読めば同桂とは指さない..と思うのだが、そう簡単でもない。同桂に対してすぐに8六歩同歩同飛に対しては、7五角やあるいは6五桂と跳ねて鬼殺しの成功図のようになるのだ。だから、4二銀(7五角の防ぎ)としてから8六歩が必要になる。ついでに、4二銀68玉86歩同歩同飛4八銀8二飛と局面が収まるところまで読まなければならない。しかし、同飛のときに、2二角と打ち込む手があり、3三角と合わせても、1一角成、同角、8七香、7六飛、8一香成、6二銀、8三歩となると難しい局面になる。先手駒損ながらも、後手からは大駒だけなので有効な手段がなさそうだからである。やや先手がいいような気もするがもっと先まで読まないと、とても形勢を判断できそうにない。そんなわけで後手は4二銀のあと飛車先を交換しに行く前に3二金が必要なのだ。これがあれば2二角の打ち込みはない。結局は先手は後手の飛車先の交換を拒否できない。ところが、4二銀6八玉3二金4八銀8六歩同歩同飛ときたときに、8五歩とか飛車をとじこめて、この間に8三角から馬を作るような手順がある。この飛車が本当に生還できるのかどうか怪しい局面になる。とまあ、本当のところ、すぐに飛車先を交換しに行く手は成立するかどうかはかなり先まで読んでも見極めることは困難だ。どのみち後手からすれば8八の銀が壁になっていて進展性がないことを見越して囲い合うようにすれば自然に作戦勝ちになると思うのだが、そのことをコンピュータに静的評価で理解させるためには、「囲いの進展性」というパラメータが必要になる。しかし桂跳ね自体が急戦志向の手で、急戦が成立する場合、「囲いの進展性」はあまり重要なパラメータではないので、このあと急戦が成立するようであれば、囲いの進展性が無いことはデメリットではなくなる。実際は、このあと急戦は成立しないので損なのだが..。

かと言って玉を8九までは移動できるわけで、玉の囲いやすさ自体は悪くはないと思う。桂を跳ねてその桂があった場所に玉を囲う手を否定するなら、振り飛車に対する西田スペシャル(かまぼこ囲い)をも否定することに成りかねない。また、仮に組み上がるころに飛車先を仮に交換されたとしても、そこから銀冠に囲えるならたいした損ではないかも知れない。実際は、このあと後手は角換わり棒銀、先手はしゃがみ矢倉でそれを受けるような形になって先手はいずれ手詰まりになると思うのだが、ともかく、同桂の変化は難解だ。何か明確に咎める手段があると思うのだが調べれば調べるほどわからなくなる。ここに来て、現代将棋は組み上がり形を想定して指し手を進めていることに気づく。矢倉に対して飛車先の歩を突かないのもそうだし、角交換に5筋の歩を突かないのもそうだ。「組み上がり形を想定する」のをコンピュータにやらせるには、「組み上げる」(駒をぶつけずに進展させていく)という概念をもう少し明確に定義する必要がある。これはこれで長くなりそうなのでまた別の機会に書くことにする。ただ、いまのコンピュータ将棋に一番不足している部分だとも言っておこう。

次に問題の局面で同金としない理由について考えてみる。同金は一応は飛車先の交換を拒否できる。しかし、金が上ずった形なので見るからに損だ。銀の進展性もない。おまけに、8一の桂が跳ねてくれば将来的に当たってくる。敵の桂の進路に金や大駒があるのは嫌な形だ。玉も囲いようがない。かと言って、すぐにこの金上がりを咎められるかというと難しい。将来的に〜になると言うのは、そこまで読まないといけないので、それを読まずに済ませたいのならば、この場合「駒の進展性」「玉の囲いやすさ」「敵の安い駒(桂)の進路にこちらの価値の高い駒があるか」というようなパラメータを導入しないといけないことになる。「金の上ずり具合」に対して駒の働きとしてペナルティを与えても良いが、入玉の時や、たこ金戦法のような局面の評価を誤りかねないので導入にはよっぽど気をつける必要があるだろう。

ともかく、これくらいやればコンピュータにも少しは形の理解が出来るというのはおぼろげながら見えてきた。しかし、たくさんの評価パラメータを導入すると今度はパラメータ間のチューンをするのが難しくなってくる。形勢互角の局面をたくさん入力しておき、それらに対して最小二乗法等で各パラメータの重み決定を行なうのだが、それぞれのパラメータが線形結合とは限らないので、なかなか大変である。このへん、いい加減にやるならニューラルネットワーク等を使ってもいいのだが、あれは、経験上、相関関係とか関数モデルとか全然わからない時に「まー許せる範囲の結果が出るのであればアルゴリズム考えんでいい分楽でええわー」ぐらいの気持ちで導入するものなので、まともにチューンしたものに勝ることはまずあり得ないので最初から使わないと決めておく。

そんなわけでパラメータ調整について詳しいことは次回にでも書くことにする。

*1:くどいようだが、やねうらおはmy com認定でアマ五段であるが、羽生名人が盤面解説で「これは利かされですから」と言っているのが、少し見ただけでは理解できない時がある。アマ五段なんて所詮その程度のものなのである。