詰将棋創作プログラミング 10 陣内竜堂はいつ出現するか
[2014年11月5日最終更新]
詰将棋創作プログラミング 10 陣内竜堂はいつ出現するか
1) 吉村達也さんが描いた悪夢の未来予測
詰パラは通巻700号を超えたが、以前から購読されている方は、1997年11月、通巻500号に掲載された、吉村達也さんの未来予測を覚えているだろうか。
帝都大学理学部講師の陣内竜堂氏が、飛角図式を全検し、未発表の3327作を詰パラ編集部に投稿してきて、すべての作品の著作権を主張したというストーリー。吉村氏は、この物語が「きわめて高い確率で近い将来起こり得る大事件」だという。
奇しくも1997年10月に開催されたGame Programing Workshopで、電通大の研究者が「詰将棋の3×3金銀図式の数え上げ」として、完全作567題(7手以上)を生成したことが発表されている。長年かけて人手で全検していた方がいたが、これにより意味がなくなってしまったわけである。
それから17年、詰将棋界にとって幸いなことに陣内竜堂はまだ出現していないようだ。
2) 飛角図式の全検には、どのぐらいの時間がかかるか
盤上の組み合わせをおおざっぱに計算してみよう。玉の置き方は81通りだが、対称性を考慮して45通り。飛角の置き方は各60~80通り。裏表先手後手でその4倍。したがって、同種駒の重複も考慮すると、おおむね 45×70×70×70×70×4×4×4×4/2 通りぐらいの配置があるわけだ。これは約1400億通り。次に持駒の組み合わせは 5×5×5×5×19通りあるが、ある持駒が詰めばそれを包含する組み合わせは省略できるので、効率よくチェックすれば100~300通りぐらいですむ。これも楽観的に100通りとすると、1400億の100倍で14兆通りの可能性があるわけだ。
盤面、持駒の1通りの配置を解図、余詰検討するのにかかる時間は、配置によってかなりかわるが、不詰の場合が一番大変で、組み合わせの数が一番多いのも不詰のケースなので、これが全体の時間を左右する。ここは完璧な検討はほぼ不可能なので、割り切って30秒で打ち切ることにしよう。これでも全体の平均時間は1通りにつき20秒以上にはなってしまうだろう。
最短で終わらせるために、10万CPU並列で動かせるスーパーコンピュータを使うことを考えよう。そうすると、14兆通り×20秒÷10万 で、全検には少なくみても28億秒かかることになる。これは約90年。10万CPUのスパコンを90年も独占して使うとなると、超国家的プロジェクトだ。それで、成果が飛角図式一覧、それも完璧なものではないとなると、誰がお金をだすだろうか。
ということで、現在のテクノロジーでは、陣内竜堂はまだ当分は出現しないようだ。しかし、今後計算コストがものすごく下がれば可能性が全くないわけではなさそうなオーダーではある。
飛角図式のようなシンプルな図でさえ、こんなに大変なのだから、コンピュータが全検できる範囲は現状ではとても狭く、人間の作家の脅威にはほとんどならないだろう。逆に、全検できるようなところは、人間が取り組む価値はあまりなく、コンピュータに任せればよい。「コンピュータ作家」が脅威になるとしたら、全検ではなく、人工知能が人間の作家のように意図を以って創作するようになったときだろう。コンピュータ将棋が人間がびっくりするような手を指せるようになった今、人間がびっくりするような詰将棋をコンピュータ作家が作る時代も案外早くくるのかもしれない。
3) PC1台で、どのくらいなら全検できるか
ここからは現実的な話。飛角図式の全検は当面は夢物語としても、いろいろ限定すれば、パソコンでもなんとか検討できるかもしれない。
一つのサンプルとして、以下の条件の飛角図式を考えてみた。
- 玉位置を限定。ここは一番美しそうな5五玉としよう。 (都玉図式)
- 向きを限定。飛角4枚とも詰め方の駒としよう。 (無防備図式)
- 表裏を限定。飛角4枚とも表(成駒なし)としよう。 (純飛角図式)
- 持駒を限定。持駒なしとしよう。 (正飛角図式)
つまり、都玉無防備正純飛角図式の全検を考えるわけだ。更に時間を短縮するために、次の条件を設定する。
- 解図時間は最大5秒で打切り
- 21手以上で駒余りでないときに限り余詰検討
- 余詰が一つでも見つかれば余詰検討打切り
ここまで限定すれば何とかなるかもしれないと、実際にプログラムを書いて試してみた。
4) 都玉無防備正純飛角図式の検討
一応、先にデータベースで既存作品を調査しておこう。
- 34飛52角65角86飛|55玉|なし 7手 森本弘 詰パラ1977年11月
- 46飛53角64飛65角|55玉|なし 3手 北原義治 将棋ジャーナル1983年1月
- 53飛54角56角57飛|55玉|なし 13手 平山達 詰棋めいと21号1996年10月 (余詰)
さすがにこれだけ条件を絞ると、ほとんどない。はたして21手以上の完全作なんて存在するのか不安になるが、なければ条件を変えてまた探せばよいので、とにかくやってみる。
まず玉を55に置いて、1枚目の飛を11から59に順次置いて、同様に2枚目の飛と角2枚を順次置いて、王手がかかったりしてなければ、柿木将棋を呼んで解図する。手数が21手以上で、駒余りでなければ、もう一度柿木将棋を呼んで、今度は余詰をチェックする。
プログラムはシンプルだが、飛角4枚で四重のループになるので、実行時間が心配だ。実際に動かしてみると、その心配は的中した。
3日ぐらい動かしていたら、メモリ不足で異常終了してしまった。以前も発生していた現象だが、WindowsXPやWindows7では発生しないので、Windows8の不具合かもしれない。まあ、適当に分割して実行すれば回避できるのだが、終了したときの実行ログを確認してみると、まだ1枚目の飛が最初の11に置かれている状態のままだった。これでは全検には何か月もかかる計算で、これだけ限定しても全検への道は遠いことが確認できたので、あきらめざるを得なかった。
せっかく3日実行したので、これまでに見つかった完全作候補をひとつあげておこう。
詰将棋創作プログラミング 作品19 eureka
- 11飛19飛92角95角|53玉|なし 29手
都玉無防備正純飛角図式で、飛角が4枚とも周辺に配置されているのがおもしろい。手順も限定合あり、中合ありでなかなかのもの。変同あり。
5) 左右対称無防備正純飛角図式 はどうか
四重のループをなんとか減らさないと、全検は無理そうということで、一つ思いついた。都玉の条件の代わりに、左右対称という条件にしたらどうだろうか。これなら玉位置は1か所から9か所に増えるが、飛角の組み合わせはおおむね二重のループで済むので、大幅に時間を短縮できるはずだ。
これも、まず既存作品を調査してみたら、前述の平山達作(余詰)1作しかなかった。流石に存在するか厳しそうな気がするので、21手以上でなく11手以上で探索することにした。
結果は、やはりかなり時間を短縮でき、一部省いたところはあるが、約20時間で全体の探索が終了した。見つかった完全作候補は下記の4つ。
- 21角33飛73飛81角|51玉|なし 11手
- 44飛45角64飛65角|51玉|なし 15手
- 21角46飛66飛81角|57玉|なし 27手
- 12角17飛92角97飛|59玉|なし 19手
(12角92角は23角83角でも同様、17飛97飛は27飛87飛でも同様)
玉も含めて周辺図式の4番目の作品を採用とする。
詰将棋創作プログラミング 作品20 eureka
- 12角17飛92角97飛|59玉|なし 19手
手順は今一つだが、左右対称無防備周辺正純飛角図式という条件を考えれば、完全というだけで満足すべきかもしれない。
6) 使用駒飛角図式にしたらどうか
もう一つ思いついたのが、盤面に配置するから組み合わせが多いのだから、いっそのこと一部を持駒にしたら組み合わせをずっと減らせるのではないか、ということ。例えば角2枚を持駒に回して、飛一色図式の角一色持駒にするわけである。これは飛角図式とは呼ばないかもしれないが、純生大駒全駒図式なので、美しさは飛角図式以上のものがある。
これも既存作品を調べてみよう。
- 25飛|11玉43飛|角角 9手 岩本一郎 詰パラ 1955-10
- 42飛|11玉34飛|角角 9手 稲葉元孝 詰パラ 2001-10
同一図: 関根茂 夕刊フジ 2009-8-6 - 52飛|11玉13飛|角角 13手 伊藤果 報知新聞 1996-12-14
案外少ない。3作とも11玉の似たような形。手数も短い。ちょっと不安になったが、まずは21手以上で探索してみることにした。
玉と2枚の飛車、三重のループですむので、無防備の条件は付けずに探索することにした。まあ、無仕掛けでは詰まないので、2枚とも詰方、1枚は詰方1枚は受方の2つのケースを調べればよい。
まずは、2枚とも詰方のケースから。21手以上の詰はたくさんでてくるのだが、ほとんど余詰で完全作候補はなかなかでてこない。「大駒3枚余詰あり」ということばがあるが、なにしろ大駒4枚だからね。なんとか、19玉と58玉で完全作候補が見つかった。
- 57飛95飛|19玉|角角 21手 *95飛の配置は自由度がある
- 45飛65飛|58玉|角角 31手
詰将棋創作プログラミング 作品21 eureka
- 57飛95飛|19玉|角角 21手
飛一色図式の角一色持駒。95飛の方の位置は自由度があるので、一直線になるよう置いてみた。手順はあまりおもしろくないが、まあ、こんなものか。
詰将棋創作プログラミング 作品22 eureka
- 45飛65飛|58玉|角角 31手
飛一色図式の角一色持駒。左右対称の美しい形。残念ながら21手目からの4手を別手順の6手で作意に合流するキズがある。柿木将棋は迂回手順と判断するが、余詰と見る人もいるかもしれない。
次に飛の1枚は詰方、1枚は受方のケースを探索してみた。
- 44飛|13玉42飛|角角 31手
- 34飛|11飛21玉|角角 23手
こちらも21手以上の完全作候補は二つだけ。前者を採用する(おもちゃ箱の2014年11月の展示室で出題)。
詰将棋創作プログラミング 作品23 eureka
- 44飛|13玉42飛|角角 31手
飛一色図式の角一色持駒。それだけではなく、手順を進めるとなんと角一色図式に変身する。その後の大駒の追い回しもおもしろい。
15手目と17手目、手順前後のキズあり。
7) 龍一色や馬一色の可能性
飛一色図式の角一色持駒が探索できるのなら、次のような組み合わせも同じぐらいの手間で探索できそうだ。
- 龍一色図式の角一色持駒
- 角一色図式の飛一色持駒
- 馬一色図式の飛一色持駒
今は、全検自体ではなく、創作プログラミングでどのくらいのことができるのかを試行するのが目的なので、このあたりは後の楽しみにおいておこう。プログラム自体は割に短く書けるので、プログラミングできてこういう詰将棋に興味のある方はやってみては。
| 固定リンク
「コンピュータ詰将棋」カテゴリの記事
- 詰将棋創作プログラミング 26 同一作リストの分析(2019.03.27)
- 詰将棋創作プログラミング 25 記録に挑戦!(2018.08.30)
- 詰将棋創作プログラミング 24 飛角図式のランダム生成(2018.01.22)
- 詰将棋創作プログラミング 23 柿木将棋自動化の効果(2017.01.22)
- 詰将棋創作プログラミング 22 詰将棋創作AIを作るには(2017.01.17)
コメント