将棋の棋譜フォーマットPSNとは何なのか?

最近、カツ丼将棋さんがPSNって何すか?って言ってたので、将棋ソフト開発者にすら忘れ去られているPSNフォーマットについてまとめておきます。まず、PSNフォーマット以前に、将棋の棋譜フォーマットについておさらいから。

将棋の棋譜フォーマットができるまで

柿木将棋(かきのきしょうぎ)で使われていた棋譜の形式である、KIF/KI2形式。現在、将棋ソフトの棋譜で広く使われているのはこの形式です。KIF/KI2の指し手表現には「5八金(69)」(KIF形式)、「5八金右」(KI2形式)のように日本語が使われています。

ところが、将棋の思考エンジンはUSIプロトコルでGUI側とやりとりするのが普通です。USIプロトコルでは、指し手は「6i5h」(69の駒を58へ移動)のように表現されます。何故、思考エンジンとやりとりするためにKIF/KI2形式を拡張したものが使われなかったのかと言うと、これらの形式は日本語で指し手を書かないといけないため、そのようなプログラムを書くのがわりと面倒だからです。(特にKI2形式は難しいです)

将棋ファンならご存知だとは思いますが、日本将棋連盟の公式サイトには、棋譜の表記方法について説明があり、このルールはとても複雑です。

棋譜の表記方法
https://www.shogi.or.jp/faq/kihuhyouki.html

そういうわけで、思考エンジンとのやりとりに使うプロトコルとしてKIF/KI2をベースとしないのはこれはこれで良いのですが、であれば、USIプロトコルはどこからやってきたのでしょうか?

USIプロトコルの由来

USI(Universal Shogi Interface)は、チェスのソフトで使われていたUCI(Universal Chess Interface)プロトコルを将棋用に手直ししたものです。USIプロトコルを考案した人のサイトはすでに消滅しています。

USIプロトコル原案の魚拓
https://yaneuraou.yaneu.com/2020/03/09/usi%e3%83%97%e3%83%ad%e3%83%88%e3%82%b3%e3%83%ab%e5%8e%9f%e6%a1%88%e3%81%ae%e9%ad%9a%e6%8b%93/

チェスの棋譜

USIプロトコルがチェスからやってきたことはわかりました。では、チェスの棋譜表現はどうなっているのでしょうか?

チェスの棋譜表現としては、PGN(Portable Game Notation)というフォーマットが事実上の標準となっています。

Portable Game Notation : https://ja.wikipedia.org/wiki/Portable_Game_Notation

PGNの指し手表現は、「40.Rd6」(40手目にROOKをd6の升に移動)のようになっていて、UCIの指し手表現である「d5d6」(d5の升の駒をd6に)とは少し異なるようですが、KIF形式ほど違うわけではないのでUCI対応の将棋エンジンがPGN形式のファイルの読み書きを行うのは、それほど難しいことではないでしょう。

PGNの将棋版はないのか?

それでは将棋でも、USIプロトコルの指し手表現(「6i5h」みたいなの)をそのまま棋譜の指し手に使うような棋譜フォーマットを作れば、思考エンジンで読み書きするのが楽になるのではないでしょうか?

それがPSNフォーマットです。

PSNフォーマットとは

USIプロトコルの指し手文字列(SFEN文字列と呼ばれる)をそのまま指し手表現に用いた棋譜表現フォーマットであり、SFEN文字列を入出力に用いている将棋の思考エンジンからは簡単に入出力部を書けます。

将棋所、将棋神やねうら王(MyShogi)ではPSN形式で棋譜の読み書きができます。

また、MyShogi(将棋神やねうら王で使われているGUI)で、PSN形式ではかゆいところに手が届かなかったのでPSNを拡張したPSN2というフォーマットを私(やねうらお)は定めました。

将棋ソフト界隈では、KIF/KI2形式、CSA形式がすでに普及していて、かつ、それらは表現力がPSNより高かったために、PSNは将棋ソフト界隈ではほとんど知られることなく現在に至ります。

まあ、思考エンジンから棋譜を出力する処理を書きたい時に、わりと簡単に実装できるので、将棋ソフト開発者の方は、活用すると良いのではないでしょうか。

資料

PSN formatの書いてあったサイトのWeb Archive : https://web.archive.org/web/20160418021921/http://genedavis.com/articles/2014/05/09/psn/
// PSNのフォーマットの説明が書かれていたサイト自体が消滅しているようです。(ドメイン更新されずSEO業者の手に渡った模様)

PSN2 format について(MyShogiのdocsより) : https://github.com/yaneurao/MyShogi/blob/master/MyShogi/docs/PSN2format.md

以下、魚拓代わりにPSNフォーマットの原案を貼り付けておきます。

将棋の棋譜フォーマットPSNとは何なのか?」への15件のフィードバック

  1. 過去の遺跡の発掘&資料化ありがとうございます!

    コンピュータ将棋老害勢からの突っ込み。
    > 柿木将棋(かきのきしょうぎ)で使われていた棋譜の形式である、KIF形式。現在、将棋ソフトの棋譜で広く使われているのはこの形式です。指し手表現には「5八金右」のように日本語が使われています。
    これはki2の間違いかも。

    ▼kif
    # —- 柿木将棋VI V6.00 棋譜ファイル —-
    開始日時:2021/06/22(火) 11:24:45
    手合割:平手  
    先手:
    後手:
    手数—-指手———消費時間–
    1 5八玉(59) ( 0:01/00:00:01)
    2 5二玉(51) ( 0:00/00:00:00)
    3 5九金(49) ( 0:02/00:00:03)
    4 5一金(41) ( 0:02/00:00:02)

    ▼ki2
    ▲5八玉 △5二玉 ▲5九金右 △5一金左

  2. 1998年、『柿木将棋Ⅲ』の時代から柿木将棋用の定跡ファイルを作り始め、2003年にホームページを開設して、完全無料にこだわって更新している『宮本定跡』の作者です。
    大変興味深く、本記事を読ませていただきました。
    『やねうら王』の次回作で『宮本定跡』が動くようになる日を心待ちにしております。

    • 宮本定跡、Bonanzaで採用(?)されていたので当時からすごいなーと思って見てます。
      あれはKIF形式で分岐棋譜で管理されているのですか?コンバーターを書いてやれば使えそうな…。

      • 宮本定跡の原本は単独のKIF形式で、最新版では46700ファイルになります。
        開発当時はフロッピーディスクで管理していて、CD-ROM、USBメモリーに移って行きました。
        Bonanzaのページで紹介されていたファイルは、匿名の変換職人様がコンバーターを作って作成したものらしく、保木様や、もちろん私が関与して作ったのでもないのです。
        あの保木様が出来なかったことを、やねうらお様なら可能にしてしまいそうですね。
        そして、やねうら王の次回作にコンバーターを付けて発売してくださればということを願っております。

        • おお、なるほど…。分岐KIF形式をやねうら王形式の定跡にするのはそんなに難しくはないような…。(やるかどうかはわかりませんが)

          • 分岐KIF形式ではなくて、柿木将棋の定跡ファイル形式を直接やねうら王形式の定跡にすることは可能でしょうか?Bonanza形式にすることはできる人がいたのですが、そのコンバーターは非公開だったのです。

      • いや、これはイッツ・ア・ソ(ピー)製ゲーム機のアレと省略形がかぶってしまってるせいで、単にPSNをググったりビングったりするだけじゃほぼ出てこないみたいなw

      • ちなみに、バッテリーマネジメントシステムは「bms回路」より縮めてしまうと、あのフォーマットも含んだ別のものしか出てこなくなったりするw

  3. こんにちは
    本将棋ではありませんが、八方桂の棋譜表記もややこしくなりそうですね

  4. 原文にあるSorceForge上にはJavaのLibraryが残ってますね。パターンルックアップの部分を参考にしてPHPかTypeScriptでコンバーター書いてみようかなと思いました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です