より深く読むことで最善手が変わった例

     前回の記事で、3三将棋アプリをより深く読むようにしたことで正解(おそらく)に辿り着くことが出来た例を紹介しましたが、もう一つ変化があった例を紹介しようと思います。

    Arrange109

     上の初期配置は3三将棋アプリのNo.109のものです。持ち駒は先手飛車1、後手飛車1です。

    まずは自分で考えてみる

     やったことある人なら同意していただけると思うのですが、多くの9マス将棋の問題では2二の地点を自分の駒で埋めることが最善手になることが多いので、初手は2二飛を選択する人が多いのではないでしょうか?王手をかけて香車は取られるけどその後玉で香車を取り返して飛車を成れば楽勝だなっと、考える人が多いような気がします、自分もそうでした。
     でもアプリで確認していただければわかりますが、2二飛、3三玉、1一玉、と進んだときに、後手に3一飛と打たれて困ります(下図)。

    Arrange109途中図

     自分の場合はここで失敗したことに気付きました。後手の3一飛の王手をかわして1二玉と逃げれば後手に1一香と打たれて詰んでしまいます。ならば合い駒をしようと思っても2一に香車を打つことは出来ない(行き場のない駒は打てない)ので2一飛車(成っても成らなくても同じ)とするしかありません。2一飛車とすると後手はその飛車を取って、先手も同玉と応じるしかありませんが、その次に後手から2三飛車と打たれて合い利かずの詰みになります(下図)。

    Arrange109途中図

     どこに逃げても2二飛車成りで後手勝ちです。

    以前のバージョンでも後手勝ち

     以前のバージョン(1.0.7.0未満)の3三将棋アプリの一番深く読む瞑想モードだと初手に3一飛と打ちます(下図)。

    Arrange109 AI初手

     香車を守りながら次に3二飛成を見て納得のいく一手に見えますが、2手目に後手に1二飛と打たれると飛車交換は避けられず、後手に竜を作られて後手勝ちになります(下図)。

    Arrange109 旧バージョン

     旧バージョンでは全ての強さ設定(モード)で後手が勝ちます。

    新バージョンでは千日手に持ち込む

     新バージョン(1.0.7.0以降 depth=9)では初手に3二飛と打ちます。後手が1二飛と合わせると先手から飛車交換されて飛車打ちから竜を作られて後手が負けます(下図)。前述の「以前のバージョン」の逆パターンです。飛車を先に打つことはやはり大事みたいです。

    Arrange109 変化例

     ということで、後手は飛車交換を避けるために1三飛と打つと(下図)。

    Arrange109 変化例

     ここで先手にいい手があって2二飛と王手するのではなく、3一玉と寄ります(下図)。

    Arrange109 変化例

     すると後手は1二飛は先手に飛車交換から2一飛と打たれて負けるので、1二香しか指す手がないのですが、そこで先手がもう一度2一玉と寄ると後手の指す手がなくなって後手が負けてしまいます(下図)。

    Arrange109 変化例

     ということで、結局後手は2手目は1三香成りとするしかありませんが、先手は2二飛から千日手に持ち込むことが出来ます(下図)。

    Arrange109 新バージョン

     旧バージョンの後手勝ちの結論から、もっと深く読むことで先手が千日手に持ち込むことが出来そうだと分かりました。では、この初期配置は3二飛と打って千日手に持ち込むのが先手にとっての最善手と言っていいのでしょうか1
     念のため全件探索で新バージョンと同じ深さまで読ませてみると、また違った変化が示されました🤔

    全件探索2で新バージョンと同じ深さまで読むと

    Arrange109 全件探索

     初手は2二飛で後手の2手目3三玉に対して、取れる香を敢えて取らずに3一玉と寄るのがいいみたいです。後手は飛車をどこかに打つと、今まで見てきたように飛車交換されて先手に竜を作られるので香を成るか1三に飛車を打つぐらいしか手がありません。その後は新バージョンの時と同じように千日手に持ち込めます。ということは自分の最初の直感通りの初手2二飛でも良かったということになるのですが、その後まさか香車を取ってはいけないとは思いませんでした。後手は4手目に自分の香車があるために飛車を打って王手することが出来ないのです。
     ということでこの初期配置は初手3二飛あるいは2二飛と打って千日手に持ち込むのが先手にとっての最善手と言う結論でいいのではないでしょうか?
     それにしてもこの初期配置を見て先手に勝ちはなさそうだから千日手に持ち込むのが最善だと読み切れる人がどれ程いるのか気になります🤔

    おまけの変化

     全件探索で調べれば必ず正解が得られるかのように誤解されると困るのでもう一つの変化例を挙げておきます。読む深さを変える(さらに深く)と以下のように先手が勝つ変化を示すこともあります。

    Arrange109 全件探索

     2二飛、3三玉、3二飛、2三玉、3一玉、1二飛、同飛、同玉、2二飛、1三玉、3二玉、3三飛、同玉、3一香、3二飛打、同香、同玉、1二飛、同飛、同玉、1三香、同玉、2三飛、1二玉、2一飛成、1三玉、2二竜まで27手で先手の勝ち
     上の手順で2二飛、3三玉、3二飛、2三玉、3一玉と5手進んだ局面(下図)で

    Arrange109 全件探索

     後手が1二飛と打ってますが、これが後手にとっての悪手で先手からの飛車交換を許して不利になってます。全く同じプログラムを使っていても読む深さを変えると指し手が変わるわけで、なぜこうなるんだと聞かれても評価関数の出来が悪いからですかねぇとしか答えられません:sweat_smile:
     それともう一つはっきりしている原因は、後手が6手目を指すときに20手以上先の負けまで読めていないことです。
     今まで3三将棋程度なら簡単な評価関数で十分だろうと思っていたのですが、だんだん考えが変わってきました。かなり長手数の読みが必要な局面も結構あるので、評価関数の精度の高さも結構求められるようです。探索部分に関しては大きな問題はないと思っているので、今度は現在5五将棋で使用している駒の働きも考慮した評価関数をとりあえず試してみようと思ってます。

    まとめ

     以前の記事でも書きましたが、最もシンプルな評価関数(先手勝ち+1、後手勝ち-1、それ以外0の3値を返す評価関数)を使って全件探索をした上でどちらかが勝ちという結論を得たのでなければ、これが正解とはなかなか言い切れません。完全に読み切れないからこそ評価関数を工夫する必要があるわけで、評価関数を工夫することによって得た結論は絶対不変の最善手とは言い切れないのです。最新のソフトが人間の能力を超えているのは間違いないとしても、最新ソフトの示す手が正解だと言い切ることは出来ないのです。独自の評価関数を使っている限り、読む深さを変えると最善手も変わり得るということです。でも、自分のアプリでは確認出来ませんが、もっと深く読めば初期配置からの必勝手順(連続王手の詰みとは限らない)が存在するかもしれませんので、その場合はそこでの初手が絶対不変の最善手です。
     今回紹介したケース以外にも難しい初期配置はいっぱいありますのでまた紹介していこうと思います。


    1. 今回の例を本将棋のルールに当てはめて連続王手の千日手で先手の負けという考え方もあると思います。 

    2. アプリでは意図的に候補手を絞っているので、全ての変化を読んでいるわけではありません。「CUIで9マス将棋を解く」で紹介したやり方で確認した手順です。