詰将棋創作プログラミング 12 ランダムに自動創作 続き
[2015年5月26日最終更新]
詰将棋創作プログラミング 12 ランダムに自動創作 続き
1) 前回のあらすじ
11 ランダムに自動創作では、3種のプログラムを開発して、実戦型詰将棋の自動創作を試行した。
- 詰将棋データベース検索プログラム
- 詰将棋自動創作プログラム
- 詰将棋ポイント最適化プログラム
作る詰将棋の条件を「盤面11香21桂22玉を含む7枚以下、持駒5枚以下」と設定、まずは検索プログラムで詰将棋全体のデータベースから条件を満たす詰将棋だけのサブデータベース(約1000作品)を作成する。
発想は、既存作品をまねすれば、ランダムでも詰将棋になっている確率が高いのではないかということ。 そこで、このサブデータベースからランダムに選んだ9作品から1筋~9筋をコピーして新たな図を作ることにした。 持駒もまたランダムに選んだ作品からコピーする。 こうして生成した図を柿木将棋を呼んで解図し、5手以上で駒余りなしで詰めば余詰をチェックする。
実際試してみると、(5手以上の駒余り無しの)詰みが1作あたり15.8秒、完全作1作あたり111秒で、ほとんどが詰む将棋であることを考えるともっと効率をあげたい。 そこで、将棋プログラムの局面の評価をまねして、詰将棋らしさを示す評価値(詰将棋ポイント)を導入した。 先手の勢力が後手の勢力より少しだけ強いとき詰将棋になる、という仮説のもとに、既存作品の詰将棋ポイントが90から110に入るように評価関数を最適化したところ、上記サブデータベースの83%が入るようにできた。 生成した図の詰将棋ポイントが90から110のときだけ柿木将棋を呼ぶようにしたところ、効率が大幅に向上し、詰み1作あたり8.5秒、完全作1作あたり64秒で生成できるようになった。
大量に生成された完全作を、いい作品か人間が見て判断するのは大変なので、捨駒が2回以上あるものだけ出力するようにした。 まだ手順の処理プログラムは作ってないので、このフィルタリングの精度向上が今後の課題である。
2) やってみると、いろいろ問題点、改良点が見つかった
実際に何回か試しているうちに、問題点がみつかったり、改良を思いついたりすることがいろいろあり、手順の処理を考える前に、もう少し改善してみることにした。
a) 類似作が多い
同一作は排除しているが、実際に生成された図を見ると、似たような手順が多い。 まねしているのだから、ある程度はしかたないが、すこしでもばらつかせるように、9作品から1筋~9筋をコピーするのではなく、81作品から81マスをコピーするようにしてみた。
b) 盤面生成、持駒生成のリトライ
もともと筋ごとにコピーしていたのは、二歩を自動的に排除するためだった。 81マスばらばらにコピーすると、二歩の図が生成される可能性がある。 前回も詰将棋ポイントが範囲外のとき持駒生成を10回までリトライするようにしてみたが、これを拡大して、二歩や使用駒異常(飛車3枚とか)などのときも含め、盤面生成、持駒生成、各10回まで再選択するようにした。
c) 詰将棋ポイントでの空きマスの評価
詰将棋ポイントの評価関数では、各駒の位置に着目していて、空きマスは考慮していなかった。 よく考えてみると、例えば22玉のとき、33が空いているのと99が空いているのでは全然価値が違う。 そこで、各空きマスについても点数を付けて、詰将棋ポイントに加算するようにしてみた。
空きマスを考慮しない評価関数では、90~110に入るのは83%だったが、空きマスも加えた評価関数で最適な値を求めてみると、99%以上入る組み合わせが見つかった。空きマスを評価した方が詰将棋としての特徴をより正確にとらえているといえそうだ。
99~101まで範囲を狭めても60%以上入っているので、図面生成時も90~100でなく、もっと狭めると効率が向上するかもしれない。
d) 無仕掛け図式の排除
解図している様子を見ていると、いくつか無仕掛け図式(先手盤駒なし)がでてきていた。 無仕掛けでも持駒が多ければ詰将棋ポイントは範囲内になるのだが、完全作になる可能性は非常に低いので、無仕掛け図式は解図せず、盤面を再選択することにした。
e) 捨て駒回数のチェックを前倒し
前回は完全作に対して捨て駒回数をチェックしていたが、解図で手順が求まれば、このチェックは検討する前でも可能だ。 先にチェックすることで、余分な検討を大幅に省くことができる。
3) 詰将棋ポイントの範囲を変えて試行してみる
上記の改良を織り込んだ自動創作プログラムで、詰将棋ポイントの範囲を変えるとどうなるか試してみた。 各10000回生成した結果である。 10000回程度では捨て駒2回以上の完全作は数作程度でばらつきが大きいので、まずは5手以上の駒余り無しの詰が何作生成されたか、その1作あたりの時間(秒数)を比較する。
ケース | 詰将棋 ポイント |
時間 (秒) |
解図 | 配置 NG |
時間 切れ |
不詰 | 駒 余り |
3手 以下 |
5手 以上 |
1作 あたり |
前回 |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 制限なし | 7244 | 9995 | 458 5% |
4829 48% |
380 4% |
3456 35% |
302 3% |
570 6% |
12.7秒 | 15.3秒 |
2 | 90-110 | 6634 | 8874 | 388 4% |
4354 49% |
91 1% |
2988 34% |
310 3% |
743 8% |
8.9秒 | 8.5秒 |
3 | 99-101 | 3230 | 4650 | 211 5% |
2027 44% |
31 1% |
1772 38% |
159 3% |
450 10% |
7.2秒 | |
4 | 100-115 | 3668 | 6860 | 307 4% |
1940 28% |
27 0% |
3713 54% |
217 3% |
656 10% |
5.6秒 |
詰将棋ポイントを制限しないケース1では、前回の1作あたり15.3秒から12.7秒に向上。 これは捨て駒回数チェックの前倒しなど前述の改良の効果と思われる。
一方で90-110に制限したケース2では、前回の8.5秒から8.9秒に若干悪化。 これは、詰将棋ポイントの精度が向上した分、90-110では範囲が広すぎるようになったためと考えられる。 そこで、範囲を99-101に狭めたケース3を試してみた。
結果として5手以上の駒余り無しの詰の割合が10%まで向上、1作あたりの時間も7.2秒まで短縮された。
解図時間で大きな割合を占めるのは時間切れの場合である。 今回は解図時間の上限を1秒に設定しているので、時間切れは1図につき約1秒。 それに対し詰む場合はずっと短い。 詰将棋ポイントが100より小さくなると不詰や時間切れが増え、100より大きくなると駒余りが増える。 そこで、詰将棋ポイントの範囲を100-115と大きい方を厚くしたのがケース4である。
ケース4では時間切れがケース3の44%から28%と大幅に減少、駒余りなしの5手以上の詰みは10%で変わらない。 結果として1作あたりの時間も5.6秒とさらに縮まり、ケース1から2.3倍、前回のケース1(15.3秒)からは2.8倍高速化できた。
4) 生成された作品
捨て駒2回以上の完全作(非限定や手順前後、迂回手順も排除している)は、10000回の生成で数作程度である。 そこで、効率のよさそうなケース4の設定で一日走らせておいたら、数十作の詰将棋が生成された。
生成された詰将棋を一通り見てみると、捨駒回数でフィルタリングしているので、一応は詰将棋になっているのだが、遊び手も多く、詰パラなどに投稿するのはどうか、というレベルが多い。 やはり手順を分析して、よい作品だけを出力するフィルターを開発する必要がありそうだ。
しかし、数十作もあれば、なかには私が担当だったら採用するかなあ、という作品もあったので、いくつか選んでみた。
詰将棋創作プログラミング 作品25 eureka
- 24角53馬|11香21桂22玉|金銀銀 11手
今回の自動生成では「盤面11香21桂22玉を含む7枚以下、持駒5枚以下」は保証されているので、いずれも解きたくなるようないい形。
本作はさらに簡素図式で、5×5に収まって持駒3枚となれば、表紙に出題してもいいかも。
詰将棋創作プログラミング 作品26 eureka
- 43龍|11香21桂22玉32銀34角|金4桂 13手
守りが強いが、持駒が豊富なので、順番に守備を崩していけばよい。普通の手筋もの。
詰将棋創作プログラミング 作品27 eureka
- 14歩43と|11香21桂22玉|角角金銀 17手
本作も簡素図式で、4×4に収まっている。
持駒は豊富だが、桂香の守りも利いているので、どう攻めるか考えどころ。
詰工房で今回の作品を見てもらったら、本作、有望そうな紛れがあり、一番難しかったようだ。
詰将棋創作プログラミング 作品28 eureka
- 24桂42角|11香21桂22玉|飛金金 21手
本作も4×4簡素図式。
その割には手数が長いが、解いてみるとすぐにそのわけがわかる。
詰将棋創作プログラミング 作品29 eureka
- 25歩45角|11香21桂22玉|銀4 21手
銀一色持駒の簡素図式。
妙手バリバリの作品もよいのだが、こういう、リズム感のあるゆるい作品も私は好きである。
5) 5×5簡素図式が有望か
今回「盤面11香21桂22玉を含む7枚以下、持駒5枚以下」でランダム創作を試みたのだが、そのうち良さそうな作品(上記の5作)を見ると、作品26(盤面6枚持駒5枚)を除いた4作はいずれも簡素図式。また5作とも5×5に収まっている。
駒数が増えたり、面積が拡大すると、可能なすべての局面は急速に増加し、その中での詰将棋になっている局面の割合が低下するのは容易に予想できるので、これはもっともな結果なのかもしれない。
究極は裸玉だが、今度は詰めたり完全であることを検証するコスト(時間)が急上昇するのと、既存作品との衝突も多くなるので、あまり現実的ではない。
そう考えると、ランダム創作でほどほどにいい作品を生成するのに効率が良いのは、5×5簡素図式あたりなのかもしれない。
| 固定リンク
「コンピュータ詰将棋」カテゴリの記事
- 詰将棋創作プログラミング 26 同一作リストの分析(2019.03.27)
- 詰将棋創作プログラミング 25 記録に挑戦!(2018.08.30)
- 詰将棋創作プログラミング 24 飛角図式のランダム生成(2018.01.22)
- 詰将棋創作プログラミング 23 柿木将棋自動化の効果(2017.01.22)
- 詰将棋創作プログラミング 22 詰将棋創作AIを作るには(2017.01.17)
コメント