« 詰将棋メモ(2016年1月21日) | トップページ | 詰将棋メモ(2016年1月22日) »

詰将棋創作プログラミング 16 手筋を手順パターンで表現

[2016年1月22日最終更新]

詰将棋創作プログラミング 16 手筋を手順パターンで表現

前回(詰将棋創作プログラミング 15 データベースを手順で検索)は手順パターンを既存作品の検索に利用する話だったが、そこで「創作のための作品評価の準備としても必要な機能」だと書いた。この点をもう少し説明してみたい。

1.自動創作でのコンピュータによる評価の必要性

コンピュータによる創作支援では、多数の候補図の中でどれを採用するかが問題になってくる。詰将棋創作プログラミング 11 ランダムに自動創作およびその続きでは、最終的には人間が評価することにして、その候補を絞るために手順中の「同」の出現回数でフィルタリングした。これにより、人間が判断する数を大幅に削減できたわけである。これは捨駒が含まれているかを見ようとしたものだが、捨駒は取るとは限らないので、この見方はかなり大雑把である。

まだ今後の話だが、逆算による自動創作とか考えると、逆算した局面の候補はかなり多いので、すべての局面を生成するとしたら、何手か逆算を重ねると(完全作だけでも)局面の数が爆発してしまうことは容易に予想できる。これを避けるには2手(あるいは1手)逆算するごとに、その局面を評価して候補を絞ることが必要になってくる。その評価をすべて人間がするのでは効率が悪すぎるので、最終的な評価は人間がするにしても、途中の段階ではコンピュータに評価を任せたい。

2.コンピュータによる評価方法

コンピュータに評価させるには、当然のことながら、評価値をコンピュータが計算できることが必要である。駒数など静的に判断できる要素はそう難しくなさそうだが、問題は手順の評価だ。「同」の数だけではあまりに原始的なので、手順パターンを利用して、より精度の高い評価をさせたいわけだ。

手順の評価にもいろいろな要素があるが、基本的な評価項目として「捨駒」「中合」など手筋が含まれているか、があげられる。こういった手筋をコンピュータに理解させるために手順パターンで表現できるようにしたい。

パターン化できれば、そのパターンが含まれている既存作品の数とか、高い評価を得た作品が多く含んでいるパターンとか調べて、データベースを利用して評価関数のパラメータの最適値を求めることが可能になるかもしれない。

3.手順データの拡張

現在の手順ファイルtejun.txtのデータを基にした手順パターンでは、捨て駒とか移動合とか基本的な手筋を表現することもできない。そこで、これらを表現できるように各手のデータを追加することを検討している。

ただ、データ数が増えると検索で何番目とか指定するのも大変になるので、増やす前にキーワードで指定できるようにしてみた。いまある情報は次の通り。

# 手数 指手 先後 元 先 駒 成 玉 相対元 相対先
1,2三飛成(26),1,2,6,2,3,7,2,1,4,1,2,1,-1

1)何手目か:N=1
2)指し手(kif形式):TE=2三飛成(26)
3)先手(1)か後手(2)か:SG=1 (先手)
4)移動元(打の場合は0,0):FS=2,FD=6
5)移動先:TS=2,TD=3
6)駒(歩(1)~玉(8)、と(9)~龍(15)):KM=7
7)成れない(0)か不成(1)か成(2)か:NF=2
8)玉位置:GS=1,GD=4
9)玉相対の移動元(打の場合は0,0):FSS=1,FDS=2 (1,4 + 1,2 = 2,6)
10)玉相対の移動先:TSS=1,TDS=-1 (1,4 + 1,-1 = 2,3)

例えば、歩不成なら /歩.+NF=1/ (".+"は任意の文字1つ以上の意味)と指定できるようになった。

ここまでの情報でも、不成(NF=1)、打ち合(打、かつSG=2)、頭金(金打、かつTSS=0,TDS=1)とか、ある程度の表現はできるが、捨て駒のような基本手筋が表現できないのでは極めて不十分。

そこで、追加情報として、とりあえず次の項目を考えている。

11)非王手(0)か直接王手(1)か離し王手(2)か空き王手(3)か両王手か(4):OS=1
12)移動元が駒台(0)か盤上(1)か:FB=0
 *指し手の"打"の有無でも判別可能
13)移動先が空きマス(0)か敵駒(1)か:TK=0
14)移動先が玉の回りのマス(1)か玉から1間以上離れたマス(2)か:TG=1
15)移動先への自駒の利きの数(移動する駒の利きは除く):NJ=1
16)移動先への敵駒の利きの数:NT=2
17)前の手と違うマス(0)か同じマス(1)か:DO=0
 *指し手の"同"の有無でも判別可能

4.手筋の手順パターンによる表現

上記項目を基本要素として、これらの組み合わせで手筋を表現できればよいわけである。この項目で何が表現できるか、あげてみよう。

先手後手とも
駒打ち:  FB=0  移動元が駒台
移動:   FB=1  移動元が盤上
玉の回り: TG=1  移動先が玉の回りのマス
駒取りなし:TK=0  移動先が空きマス
駒取り:  TK=1  移動先に敵駒あり
自利きなし:NJ=0  移動先への自駒の利きがない
自利きあり:NJ=[^0] 移動先への自駒の利きの数が1以上
敵利きなし:NT=0  移動先への敵駒の利きがない
敵利きあり:NT=[^0] 移動先への敵駒の利きの数が1以上

先手の手
捨て駒:  OS=1(直接王手)かつ TK=0(駒取りなし)かつ
      NJ=0(自利きなし)かつ NT=[^0](敵利きあり)
 *自利きありでも、玉以外の敵駒の利きがあれば捨て駒と呼ぶかも。
打捨て駒: 捨て駒 かつ FB=0(駒打ち)
移動捨て駒:捨て駒 かつ FB=1(移動)

後手の手
合:    KM=[^8](玉以外)かつ TK=0(駒取りなし)
打ち合:  合 かつ FB=0(駒打ち)
移動合:  合 かつ FB=1(移動)
中合:   合 かつ NJ=0(自利きなし)
打ち中合: 中合 かつ FB=0(駒打ち)
移動中合: 中合 かつ FB=1(移動)
捨て合:  合 かつ TG=1(玉の回り)
      かつ NJ=1(移動先への自駒の利きの数が1)
      かつ NT=[^0-1](移動先への敵駒の利きが2以上)
打ち捨て合:捨合 かつ FB=0(駒打ち)
移動捨て合:捨合 かつ FB=1(移動)

たぶんまだ情報が足りないが、それは随時追加を検討していけばよいだろう。

5.手順パターンによる表現の限界

上記により、捨て駒作品とか、ある程度の手筋は表現できるようになるが、いくら情報を追加しても表現できる範囲には限界がある。例えば、打歩詰がらみの構想などは作意の手順パターンだけでは表現できない。変化や紛れの手順も合わせてみないとわからないからである。

こういう高級な作品については、また別の創作支援機能が必要になるだろう。

|

« 詰将棋メモ(2016年1月21日) | トップページ | 詰将棋メモ(2016年1月22日) »

「コンピュータ詰将棋」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/22735/63101884

この記事へのトラックバック一覧です: 詰将棋創作プログラミング 16 手筋を手順パターンで表現:

« 詰将棋メモ(2016年1月21日) | トップページ | 詰将棋メモ(2016年1月22日) »