AI作の終盤クイズが難しすぎる件

Qhapaq アドベント将棋記事 4日目

棋力向上には詰将棋をやれ仮説に従って、現在、詰将棋を無限に作ってくれるエンジンを開発しています。将棋ソフトの棋譜をベースに問題を作れば、棋譜の版権問題に引っかからずに実戦的な詰将棋を生成できるのではないかと思い詰将棋エンジンの改造に勤しんではいるのですが、中々役に立つものを作るのは難しい.....という開発日記です。

 

 

【大雑把な作り方】

将棋ソフト同士の対局棋譜に対して、駒を増やしたり減らしたりしながらひたすら詰みチェックを行い、詰んだ局面を採用するという雑な設計思想になっています。昨今の詰将棋ソルバは十数手程度の詰み筋なら1秒もかけずに見つけることができるので、局面の質よりも数の暴力を優先し、作られた棋譜を何らかの形でスクリーニングするという戦略をとります。

 

詰将棋アルゴリズムとして近代のソフトに取り入れられているdf-pn法について知りたい方には以下の記事をおすすめします(tanuki-/やねうら王に実装された詰将棋ソルバはdf-pnの発展系なのですが、その内容は少々難しいので割愛。ニーズがあったら今後記事にするかも)。

 

【終盤クイズとしての運用】

作成された詰む局面は大抵の場合、複数の詰み筋があったり、詰む際に駒が余ってしまいます。しかし、これ自体は棋力向上という観点では大きな問題にはならないと考えています。というのも、玉側を将棋ソフトに持たせて対局するという形にすれば、想定解より長い手順をプレイヤーが指したとしてもそれに対応してできるだけ詰まないような手を返すということができるからです。この技術をいち早く取り入れているのが将皇の「終盤問題」です。将皇ではプレイヤーは詰み筋のある実戦形の局面から最善を尽くして逃げてくるソフト相手に玉を詰ませるという課題にチャレンジできます。私自身、終盤力向上を目指してこのサイトで練習をしていますが、実に良いサイトだと思います。

www14.big.or.jp

 

今回私が作ろうとしているのは将皇のサービスの類型であり、局面を将棋ソフトの力を使って無限に作成しまくれることを売りにしようとしています。が......

 

【作られた局面を見てみる】

例えば以下のような問題が生成されます。

f:id:qhapaq:20200712172343p:plain

ちなみに、答えの一例(最短の詰み手順の一つ)は79龍、同玉、78桂成、同玉、66桂打、67玉、76金打、68玉、88飛成、78合、78同龍、59玉、58龍です。

どうでしょう。変化が狭いからまだ簡単に見える気もしますが、13手詰(最後の無駄合いを除いても9手)です。ちとゴツい気もします。しかし残念ながら、自動生成される問題がこのぐらいの手数で収まることは稀です。大体は下記のような感じになります。

 

f:id:qhapaq:20200712174018p:plain

この問題の答えの一例(最短の詰み手順の一つ)は、24桂、13玉、12飛打、24玉、34金打、15玉、24銀打、16玉、14飛成、27玉、18角打、37玉、17龍、27桂打、同龍、46玉、57馬、だそうです。無駄合いを抜いても15手。

 

敢えて言おう。解けぬ

 

こんな長大な問題ばかり作られるのは将棋ソフト同士が数手詰レベルの頓死に引っかかってくれないからです。高度な将棋ソフト同士の戦いでは双方十数手詰めを水面下で読み合いながら殴り合っているので、詰み局面を見つけようとするとどうしてもこんなのばっかりになってしまうのです。

 

それならば、実際に詰むまで戦わせて詰む数手前の局面を使うというのも考えられますが、これをやると今度は負けを確信したソフトはゲームの手数を伸ばすためだけに無駄に駒を捨てまくるという仕様が邪魔をしてきます。将棋ソフトは人間を超えた終盤戦を見せる一方で、最後の最後の局面は将棋素人でも簡単にわかるようなダメダメな終盤手を指してしまうものなのです。

 

【今後の課題】

七手詰ぐらいの終盤問題なら将皇が沢山提供してくれているので、そもそも初心者向けの終盤問題を作ること自体が筋が悪いのかも知れません。そして、詰将棋理論に基づけば段位者でも詰将棋の練習をすべきとのことなので、段位者向けの問題すればいいのかも知れません。

 

しかし、、それならば段位者がどのぐらいの問題なら解けるかを知らねばなりません。案外上述の問題ぐらいでいいのかも知れないですし、やはり、難易度調整ルーチンが必要なのかも知れません。残念ながら私にはこれを論じるだけの棋力が足りない......

果たして私はこの問題を解くことができるのか。こうご期待。