将棋方程式を発見した!(2)


例によって、タイトルは誇大広告である。
今回は、将棋の手駒と手番の価値との関係について考察しておく。


将棋の手駒は盤上の好きな場所に打つことが出来る。例外として、すでに駒のある場所には打てないというのと、打ったあと移動させることが出来ない場所には駒は打てない、そして、二歩と打ち歩詰めになる歩は打てないというのがあるが、ここではそれらは考えない。


盤上の駒は(チェスに比べると)のろのろで、目的の場所まで移動させるのにかなりの手番が必要である。


このことから、手駒はかなりidealな状態であることがわかる。
終盤では、小駒は自玉の付近か敵玉の付近にしか打たない。それ以外の場所はたいてい意味をなさないからである。


手駒の価値とは攻め駒として使うなら「敵玉を詰ませる能力」とみなすことができるし、守り駒として使うなら「自玉を守る能力」とみなすことができる。(次回、この部分をもっと突っ込んで考察する)



いま、同じ「と」を5回移動させると相手の駒「銀」にぶつけて交換できるとする。(対穴熊戦ではよくあることだ)
そのためには5回の手番が必要である。5回の手番で「と」を目的のところに運ぶことが出来る。


このとき


5回の手番の価値 + 盤上の「と」の価値 = 手駒の「銀」−手駒の「歩」(交換したときに相手に「と」を渡すので)


である。


もう少し正確に書くなら、


5回の自分の手番の価値 + 盤上の自分の「と」の価値 = 自分の手駒の「銀」の価値 − 相手の手駒の「歩」の価値 − 盤上の相手の「銀」の価値


であるが、簡単のため、前者の式を使うことにする。


この等式から盤上の駒の価値と手駒の価値は、手番と密接に結びついていることがわかる。プレイヤは、5回の手番をもっと他の攻めに使うことも出来るかも知れない。よって場合によっては、以下のように不等式で書くのが正しい。


5回の自分の手番の価値 + 盤上の「と」の価値 ≧ 手駒の「銀」−手駒の「歩」


これを変形して、
1回の自分の手番の価値 ≧ (手駒の「銀」- 手駒の「歩」 - 盤上の「と」の価値) / 5
である。(単純な割り算が許されるならば)


盤上の「と」を何回かの手番との交換によって盤上の「銀」と交換出来る場合、交換が完了するまでは1回の手番の最低価値が上のように担保される。


もちろん、何回移動させても「と」単独では相手の駒と交換が達成できないこともあるだろう。この場合、上のような不等式で手番の価値を保証するものは何もない。(よって、場合によっては手番の価値が0だとかマイナスだとかの局面もあり得る)


昔のコンピュータ将棋は「と」を何枚も作って、優勢と錯覚することが多かった。「と」金の重みが大きすぎたとも言える。2枚目の「と」から評価値を減じていくのが現代風なのだが、これをBonanzaのようにプロ棋士棋譜から学習されるのはとても難しい。


プロ棋士の対局では「と」が何枚も出てくるような局面はそもそも出現しないし、仮に出現していたとしても、それは入玉狙いであるだとか、複数作って大駒を押さえ込むだとか何らかの狙いがあって、十分成立している時のみである。そこから学習させようと言うのは無理である。(このため、Bonanzaでは、出現していない特徴には筋悪な手としてペナルティを課せるような学習をしている。これは面白いアイデアだ。)


上の不等式から、「と」を何枚作ろうが、自分の手番との交換でしか相手の駒と交換できないことは明らかで、「と」を何枚作ろうが、手番を消費しない限りは駒の交換は実現しない。


次に、盤上の「と」の価値を計算しよう。さきほどの不等式を変形する。


盤上の「と」の価値 ≧ 手駒の「銀」−手駒の「歩」− 5回の自分の手番の価値


つまり、「と」の価値は、もしこれを攻め駒として相手の駒にぶつけていくのだとしたら、(ぶつけて交換できることがわかっている)もよりの敵の駒までの距離と自分の手番の価値とで決まることがわかる。


ここから、盤面のどこに「と」があれば何点だとか、そういう風に「と」の価値を評価するのはあまり正確な近似ではないことがわかる。
いまのコンピュータ将棋が、入玉穴熊の形勢判断を苦手とするのは、このように「と」の価値の評価が不当なのもあると思う。


■ 以下、考え中のアイデア


たぶん、もよりの敵駒との相対的な位置関係で点数を決めたほうがまだマシではないかと思う。もう少し厳密にやるなら、交換できる可能性みたいなもの(たとえば複数の駒を同時に逃げることは出来ないので、いずれかはとれるだろう、など。)を計算したほうが良いのだろうが、これを少ない計算量でうまく近似するのはそれなりに難しい。


攻めの「と」の価値は


「と」のもよりの敵の2駒×敵の玉の位置×「と」の位置


という組み合わせで(事前計算しておいた)テーブルを引いて決めるのがそれっぽい気はする。(要検証)