JSON棋譜フォーマットに関する見解
csa,kif,ki2,kj2,kj3,sxf,pgn,usf,psn,bjd ...etc と、まあいっぱいあるもんだ。 UniversalやらPortableという名前の割にはUniversalでもPortableでもなかったりするのが残念だ。
2015-01-15 22:55:09@hitman51rivl 昨年末にJSON棋譜フォーマット(JKF)というものを定めたのですがこれはどう映りますでしょうか. github.com/na2hiro/json-k… JSON上なのでパーサは既存ライブラリでok,拡張性あり,既定フィールドは主要形式の情報を包含しています
2015-01-17 01:29:01複数ルール対応について
@na2hiro 方向性はよさそうですね。後はドメインを将棋に限定するのか、チェスバリアントすべてサポートするのか、ボードゲームにまで広げるのかといったところでしょうか。字句解析器と構文解析器ではなく、PEGというのがまた最先端な感じですね。
2015-01-17 13:30:37@hitman51rivl docs.google.com/presentation/d… 2010年頃にginsho会というねこまど主催の将棋関係プログラマが集まる集会があって,柿木さん含め数名の前で発表したスライドです.その後大して具体的に進まなかったのですが,その当時の構想では
2015-01-17 14:16:38@hitman51rivl ルールごとに盤の大きさ,標準の初期配置,駒の表示などを定めたルールファイルを用意し,棋譜にルールファイルのフィールドを用意する方式で数多くのルールに対応しようとしていました.でも多数のルールに対応した将棋ったーを作っていた自分くらいしかうまみがなかった
2015-01-17 14:19:24@hitman51rivl と感じたこともあり,最近定義したJKFでは将棋のみに絞ってあります.それでも今後JKFを複数ルール対応に拡張できる余地は十分あると思います.まずは本将棋で使ってくれるソフトが増えて,ニーズが高まればという感じですかね.
2015-01-17 14:22:11@na2hiro 主に互換性の問題です。新しいバージョンに対応したソフトウェアは古いバージョンの形式を認識できること。古いバージョンしかサポートしていないソフトウェアに対して、新しいバージョンの形式のデータが入力される時、拡張された部分は単に無視されるだけで
2015-01-17 14:31:44@na2hiro ソフトウェアの変更なしに対応できること。ですね。そういう点ではJSONベースというのがだいぶ楽になるだろうと思います。
2015-01-17 14:33:23@na2hiro ルールについては、エンジン側でもやっているっぽいですね。 エンジンでそれをやる意味はあるのかという指摘はあるようですが。 eglebbk.dds.nl/program/chess-…
2015-01-17 14:35:41@hitman51rivl 互換性,拡張性(1開発者が勝手に拡張しても他のプログラムで無視して読める)は必要ですね.KIFなどでの拡張は全部コメントで頑張ってしまっている.拡張性はJSONなどの形式を採用する大きな理由の一つです.
2015-01-17 14:56:10クエリ言語について
@na2hiro 前にちらっとつぶやいたのですが、将棋にはチェスのようなクエリー言語というものはまだないのでしょうか? こういうものがあれば棋譜や局面の検索に役立つのではと思っています。 chessprogramming.wikispaces.com/Chess+Query+La…
2015-01-17 13:34:30@hitman51rivl 将棋の局面/棋譜へのクエリ言語は見聞きしたことないです.非公開の連盟DBにしても棋譜でーたべーすにしても,DBとそれを操作するUIが独立しない限りは必要なさそうです.フリーのDBが開発されれば自ずとクエリ言語も出現するのではないでしょうかね.
2015-01-17 14:28:44@na2hiro なるほど。そういう点ではチェスの方はいろいろと整備されているようですね。UCIやUSIによってエンジンは分離しましたが、本当にUIにあたる部分と、アプリケーションロジックの分離はまだ先のようですね。
2015-01-17 14:39:15補完的な棋譜情報の保持について
@na2hiro 「同」や「直」のような情報について、棋譜にも入れておくべきなのか、アプリケーション側で一旦再生して人が読みやすいように指し手の表現を変換するのかが悩ましいところですね。個人的には他の情報から求まるならば棋譜のデータとしては不要かも知れないと思っています。
2015-01-17 13:51:38@na2hiro ただ、検索性という観点で考えると、補完的な情報もあった方が便利だろうとも考えていて、そこが悩ましい点だと考えています。
2015-01-17 13:57:30@hitman51rivl ポステルの法則「送る側は厳密に,受け取る側は寛容に」ではありませんが,形式を書き出す側は全能であり(駒の動き方なども知っている必要があるので)読み込む側は無能であるべきだと思って作ってあります.例えば取った駒がないと1手戻した時の局面を最初から
2015-01-17 14:39:53@hitman51rivl 最初から並べ直すか,別途何かの変数にキャッシュしないといけません."右"なども,現在の盤面状態はおろか,駒の動き方まで把握していないと計算できません.それはその形式を読み込みたいだけのプログラム作者にとっては結構ハードルが高いことだと思っています.
2015-01-17 14:41:43@na2hiro ええ、おっしゃる通りです。逆再生に私も苦労した覚えがあります。棋譜を再生するだけのプログラムを作っていたのですが、最終的には将棋そのもののルールも必要になり、再生だけでなく対局もできてしまうぐらいになりました。
2015-01-17 14:44:17それと対になる,将棋ライブラリとDSLの提供について
@na2hiro これには2つ解決策があると考えています。1つは、棋譜そのものにすべての情報を入れておく。もう1つは将棋というドメインに関するライブラリ化。
2015-01-17 14:46:49@na2hiro 単純なライブラリ化以外に、棋譜の再生や対局に必要な操作を抽象化し、DSLを構築できると便利かも知れないと思っています。
2015-01-17 14:51:09@hitman51rivl なるほど,後者のライブラリ化は,最近プログラム言語が氾濫していることもありコストが高いと感じたのですが,将棋操作の抽象化はライブラリ化を促せそうで良さそうですね.ただ,それでも複数ルール(とくに新ルール)対応でバラつきが出そうです.
2015-01-17 14:59:16