中合い問題の解説 その4

■ 3手詰みの移動中合い省略定理


また、私は、合いは次の4つに分類できることを書きました。


1) 利きのない場所への打ち中合いの応手生成が省略できる条件
2) 利きのない場所への移動中合い応手生成が省略できる条件
3) 利きのある場所への打ち合い応手生成が省略できる条件
4) 利きのある場所への移動合い応手生成が省略できる条件


いままで、1)について考えてきました。1)が上の4つのなかで一番簡単に思えたからです。そして1)に関して、強力な定理を発見できました。(→ http://d.hatena.ne.jp/LS3600/20100107 )


2)については私の結論は以下の1点に要約されます。



まず、上の図をご覧ください。29角として金を入手すると王手がかかります。これを単に83金と受けると91金で詰まされます。普通の3手詰みです。


Bonanzaでは「利きのない場所への移動中合い」の場合も同Xと取ってそれで3手詰みであるかを再帰的に判定すると言いました。


さて上の図は移動中合いによって詰みを逃れるのでしょうか?


38歩→同角→47歩→同角→56歩→同角→65歩→同角→74歩→同角→83金とすれば、なんとこの局面、19の角が91の地点に利いていて詰みません。


要するに、この局面は不詰みであり、かつ、Bonanza的な意味での3手詰み判定で利きのない箇所への移動中合いを同角ととり続けても不詰みです。


では3手詰み判定において移動中合いは省略できないのかというとそうではありません。今回の要点は、玉周辺に角の利きが利いたことで詰みが回避できたということです。



移動中合いは、すぐに同角のようにとられるので、移動先には意味はありません。移動元の地点に空間が出来るというのが最大のポイントです。今回移動させた歩の移動元の位置は、玉の8近傍(91の地点など)の斜めライン(図に赤線で書いたライン)に入っていることがおわかりいただけるかと思います。


そして、37歩に着眼しますと、37の地点から、この赤いライン(Bonanzaの用語で言うところのdiag1)方向の利きを生成し、王と逆側だけ取ってやります。すなわち、緑の2マスが残ります。この緑のマスに受け方の角・馬がいれば、この移動中合いは意味がある可能性があるのです。


逆に、この緑のマスに受け方の角・馬がいなければ、この移動中合いは3手詰み判定に影響を及ぼさず、これによって詰みが回避できるパターンはないのです。


これを「3手詰みの移動中合い省略定理」と名付けます。


私はこの定理をながとさんの解答図(→ http://d.hatena.ne.jp/mclh46/20100105/1262675087 )を見て発見しました。ありがとうございます。> ながとさん


細かいことですが、実際には上の図では、赤いライン上にある駒をすべて移動させないと19の角が玉の8近傍に利くことはないため、「この赤いライン上にある駒をすべて29の角のラインに移動できる」というのが必要条件として加わります。この条件を満たさないときはこれらの駒の移動中合いは無意味であり、"29の角のための"移動中合いの応手生成すべてを省略できます。


■ 「3手詰みの移動中合い省略定理」補足



もうひとつ大切なことがあります。さきほどは説明の便宜上省略していましたが、上の図では、29角の王手に56香→同角→65歩→同角→74歩にて飛車の横利きがあって詰まないのです。


このように、飛車の横利きを通したり、上の図の84桂を防ぐために(玉の8近傍だけではなく)受け方の桂の利きを加えた10近傍の地点に利かせる手や、王手している駒(この場合29の角)のラインに利きをつくるための駒移動には意味があります。



図にすると上のようになります。香の移動中合いの必要性を調べるには、この香の移動元である54の地点から王手されているライン(赤い線)とのdiag1(斜め1),diag2(斜め2),file(縦),rank(横)の交点を見つけます。たとえばdiag2は緑の線で、ここと赤の線が交差するのは65の地点。この地点に移動させることのできる受け方の駒がないか、もしくは、緑のラインのうち赤いラインと交差しているのとは逆側に受け方の角か馬がいなければ、この緑のラインは生きません。


同様に、rankは青い線ですが、その赤い線との交点は、74の地点であり、ここに移動させる受け方の駒として73の歩があり、かつ、その交点とは香の移動元からして反対側に受け方の飛車がいます。これは以上の条件を満たします。


すなわち、
「3手詰みの移動中合い省略定理」には、
A) 玉の10近傍への利きを追加するための移動中合いには意味がある。
B) 王手している飛びごまのラインに利きを追加する移動中合いには意味がある。
という2つのことが含まれています。この両方を判定しなければなりません。


しかし、ほとんどの局面では、A)とB)のどちらかを満たすのはハードルが高く、移動中合い自体を省略できることがほとんどです。



あと、上の局面のように29角→47桂→同角→55銀→同角のように移動中合いで受かる局面があるので、55の桂の移動中合いを考えるときに、55の桂のrank方向を調べるときにこの45の銀を超えて飛車が存在するかを調べる必要があります。これは角で王手されたときの桂特有のことで、他の駒の組み合わせでは発生しないと思うのですが、何か反例があれば教えてください。


■ 利きのある場所への合いの応手生成の省略


これで残りは
3) 利きのある場所への打ち合い応手生成が省略できる条件
4) 利きのある場所への移動合い応手生成が省略できる条件
だけになりました。


「打ち」は新たに空間をつくるわけではないので、移動中合いのように移動元に出来た空間によって玉の8近傍の勢力関係が変わることはありません。


また、利きのある場所への合い駒は、Bonanzaの3手詰み判定においては同Xとは取る変化は調べないので、例えば玉から8マス離れたところから王手された場合、玉から4マス目に自分の利きがあって、そこに合い駒して詰むなら、玉から6マス目に自分の利きがあってそこに合い駒しても詰みます。


これは「3手詰みの打ち中合い省略定理」のときと同じです。よって、3)は、1)の問題をよく考えれば解決します。


また、ここまで見てきてわかるように、玉の8近傍の勢力関係を変えない限りはmate1ply(1手詰み判定)に影響を及ぼすことはありません。


4)の問題は、3)を応用して、一定マス以上玉から離れていて、かつ、「3手詰みの移動中合い省略定理」で省略できる条件を満たしているならば、その移動合いは省略できます。


■ まとめ


以上で3手詰みの応手生成の省略問題はすべて解決しました。実際のところBonanzaのmate3plyはパフォーマンスに重大な影響を与えていました。これがBonanzaの終盤が弱い原因のひとつだったと私は考えています。


この部分を改善し、かつ、もう少し手数の長い詰みルーチン(5手詰み、7手詰み専用ルーチン。あとdf-pnでの長手数の詰み)を搭載すれば、Bonazaの終盤は決して弱くないと私は思います。


今回解答をおよせいただいた皆さん、そしていろいろ教えていただいた保木さん、本当にありがとうございました。詰将棋メモのTETSUさんも紹介していただいたおかげで、たくさんのアクセスがあり、たくさんの人に興味を持っていただけたようで感謝しております。


3手詰みに関しては合駒の応手省略の問題が(私から見て一応は一通り)解決したので、これらの成果がコンピュータ将棋の進歩に貢献できているものと信じています。


5手詰み以上についても、いろいろ指し手を省略できる条件はあるのですが、これについてはまた機を改めて書きたいと思います。