記事更新日: 2019年03月31日

将棋しょうぎ物理ぶつり棋譜きふ
- What is a physical record of shogi?

KITASHIRAKAWA_Chiyuri
こんなこと やってるの わたしだけなんで、説明しないといけないよな☆
全体像が知りたければ 第29回コンピューター将棋選手権 の[参加チーム]に置いてある きふわらべのPR文書 でも読んでろだぜ☆
ソースの Git hubは ここだが、大会へのライブラリ登録はしてないぜ☆

目次 - Table of contents.

戻る - back

1. 第一象限☆
- First quadrant ☆.

KITASHIRAKAWA_Chiyuri
すべてが新しいので お前とは会話が通じない☆
そこで、今日 初めてコンピューター将棋を見る人間に説明するつもりで 駒を動かしながら 説明する☆
20190331wcsc52a1.png
KITASHIRAKAWA_Chiyuri
これは、お前らが ふだん 見慣れている後手から見た将棋盤だぜ☆
KIFUWARABE
早く指せだぜ☆
20190331wcsc52a2b1.png
KITASHIRAKAWA_Chiyuri
しかし この将棋盤は Third quadrantサード クァドリン ☆
OKAZAKI_Yumemi
早く 指しなさいよ!
20190331wcsc53a1.png
KITASHIRAKAWA_Chiyuri
きふわらべ は First quadrantファースト クァドリン で将棋盤を持つぜ☆
KIFUWARABE
どっちでもいいのに……☆
OKAZAKI_Yumemi
上手うわてにしただけじゃないの
戻る - back

2. 大橋ナンバーズ☆
- Piece identify. Order of "Ohashi" mode ☆.

KITASHIRAKAWA_Chiyuri
プロには 駒の並べる順番にも 流行りがあるそうだぜ☆
20190331wcsc54a1.png
KITASHIRAKAWA_Chiyuri
上手の王から、下手の玉、
上手の左金、下手の左金 と交互に置いていくらしい☆ 大橋のおっさんは 右利きだったのかも知れないな☆
KIFUWARABE
どこから並べても同じなのに……☆
20190328wcsc49a3.png
KITASHIRAKAWA_Chiyuri
親しみの深さを優先し、大橋流の並べ順を 背番号に採用した☆
背番号は 0から 数え始めることにしたぜ☆
KIFUWARABE
偶数は 上手の位相いそう、 奇数は 下手の位相 だな☆
OKAZAKI_Yumemi
位相とか言うの止めなさい。読者が逃げるわよ!
KITASHIRAKAWA_Chiyuri
将棋の駒は 相手の駒を取って 自分の駒になったり、
自分の駒を取られて 相手の駒になったり するので、
偶数、奇数は 位相を外れ 入り乱れる☆
戻る - back

3. リバーシブル指し手☆
- Reversible physical move ☆.

20190331wcsc55.png
KITASHIRAKAWA_Chiyuri
7六歩ななろくふ☆ これがお前らの聞きなれた符号だぜ☆
日本将棋連盟(JSA)式の符号はわたしが 完全解析 した☆ なるほど、合理的に整理整頓されてるぜ☆
KIFUWARABE
他にも コンピューター将棋選手権式の大会用ゲームサーバー向け CSA符号
コンピューター将棋エンジンの思考部を自動対局させるのに向いた USI符号 もあるぜ☆
KITASHIRAKAWA_Chiyuri
JSAジェイ エス エー符号は 秒読みでも短く読み上げられ、まぎれも無い、
CSAシー エス エー符号は JSA符号をそのままに 移動元を加えただけで、読み上げの利点を捨て、将棋の素人でも駒を動かせる利点を加え、
USIユー エス アイ符号は 手書きのときに駒を書き漏らすなどのミスを防止する、など それぞれ得意がある☆
KITASHIRAKAWA_Chiyuri
これらを 暗記不要で カンペキに理解した わたし が、
新しく提案するのが リバーシブルReversible物理Physical指し手Move符号、RPMアール ピー エム符号 だぜ☆
OKAZAKI_Yumemi
フーン
KIFUWARABE
黙って USI使ってればいいのに……☆
KITASHIRAKAWA_Chiyuri
利点は 本将棋への最適化を捨て、検討シーンも含めた将棋全体を表現することができる盤操作を記述できることだぜ☆
何を言っているのか、何をしようとしているのか 両方分からないと思うので 駒を動かして説明する☆
KITASHIRAKAWA_Chiyuri
計算機科学の練習では Tower of Hanoiハノイの塔 という遊戯が紹介されることがある☆
これは メモリを増やせば問題は楽に解決できることもある、 ということを教えてくれるんだが……☆
20190331wcsc56.png
KITASHIRAKAWA_Chiyuri
きふわらべでも スカイ升 を1つ追加した☆
OKAZAKI_Yumemi
駒台ではなくて?
KITASHIRAKAWA_Chiyuri
駒台ではない☆
KIFUWARABE
世界一周も飽きて 空を飛ぶようになったか☆
20190331wcsc57.png
KITASHIRAKAWA_Chiyuri
升の番号を指定すると、すべて スカイ升 に置いてあるものとの交換だと思ってほしい☆
20190331wcsc57a1.png
KITASHIRAKAWA_Chiyuri
升の番号を2回指定するだけで ちゃんと 駒が進んだな☆
それが 何の駒なのか 指定することは不要☆
OKAZAKI_Yumemi
ハハーン。 操作だけに特化したのね
20190331wcsc57a2.png
KITASHIRAKAWA_Chiyuri
手番の交代のときは、 わざわざ タテ棒 を記述して 区切ってくれだぜ☆
タテ棒の代わりに、 [2] とか手目を書いて それを区切りに使ってもいい☆
20190331wcsc57a3.png
KITASHIRAKAWA_Chiyuri
慣れてくると、 半角空白区切りで 符号をつなげてもいい☆
先頭から 逐次 読み取るだけなんで 同じことだぜ☆
KIFUWARABE
じゃあ 先手番一手損角換わりで☆
20190331wcsc57a4.png
KITASHIRAKAWA_Chiyuri
取る駒を まず スカイ升 に入れる☆
棋譜に こんなことを記述するのは 有名どころでは聞いたことないぜ☆
20190331wcsc57a5.png
KITASHIRAKAWA_Chiyuri
スカイ升で 駒を 180°回転 させる符号は マイナス にした☆
OKAZAKI_Yumemi
めんどくさ……
20190331wcsc57a6.png
KITASHIRAKAWA_Chiyuri
駒台は スタックになっている☆ ゼロから始まるアルファベット で指定しろだぜ☆
このとき 先後付き駒Piece を指定する必要があるぜ☆
20190331wcsc58.png
KITASHIRAKAWA_Chiyuri
使わない駒を置く場所もある☆
UTF-8 エンコーディングなら、英字と 半角カナを 同時に使える☆
銀はシルバー☆
OKAZAKI_Yumemi
駒の種類を止めて 全部 数 にできないの?
KITASHIRAKAWA_Chiyuri
駒台に 駐車場のように 番号 を付けて使うのは、駒を探すときの スキャンの実行時間がかかるので
駒の種類を指定して ぱっと 使えるようにした☆
20190331wcsc57a7.png
KITASHIRAKAWA_Chiyuri
よいしょっ☆
20190331wcsc57a8.png
KITASHIRAKAWA_Chiyuri
プラス記号で裏返すぜ☆
20190331wcsc57a9.png
KITASHIRAKAWA_Chiyuri
成り込めたな☆ もう大変☆
OKAZAKI_Yumemi
人間が使う棋譜じゃないわよね
KITASHIRAKAWA_Chiyuri
77 76 | 33 34 | 22 - 0B 88 + 22
という棋譜になるんだが、これは逆再生できる☆
KIFUWARABE
リバーシブルだな☆
OKAZAKI_Yumemi
JSAだって、 CSAだって、 USI だって リバーシブルじゃない。
そこらへんの どの棋譜アプリでも 1手戻すボタンがあるわよ
KITASHIRAKAWA_Chiyuri
その3つの符号は コンピューターが 取った駒などを覚えているから 逆再生できるわけで、
終局図から 人間に 逆順で1手ずつ 棋譜を伝えても 逆再生できないはずだぜ☆
KIFUWARABE
逆再生したいやつなんか いないからな☆
KITASHIRAKAWA_Chiyuri
わたしの RPM符号 は、 人間でも逆再生できる ☆
手間が多くて いやだが……☆
KITASHIRAKAWA_Chiyuri
そして、 RPM符号 にだけ できる特長として、
1手戻す という操作も 1本の棋譜に記録できる ☆
というのも、RPM符号 は 指すのも、戻すのも、違いがない☆
KIFUWARABE
ゲームツリーを上ったり下りたりするなら 変化なんか忘れてしまわないと、
記憶が 宇宙の原子の数 を超えてしまうぜ☆?
KITASHIRAKAWA_Chiyuri
全部の変化を見るから 宇宙の原子の数 を超えてしまう☆
有力な変化だけを検討するのは、大盤解説では ふつうに やってるだろ☆
コンピューター将棋ソフトにも その表現力を与える☆
OKAZAKI_Yumemi
与えて どうすんの?
KITASHIRAKAWA_Chiyuri
投了図を与えると、どんな局面だったか 戻していく という勘が付く☆
OKAZAKI_Yumemi
付くのかなぁ?
KITASHIRAKAWA_Chiyuri
現局面から指していく評価関数と、起こり得そうな投了図から逆順で指していく評価関数の2つを作って、
時間軸を挟み撃ちにするというのが リバーシブルの骨子 だぜ☆
OKAZAKI_Yumemi
探索と、詰めルーチンを 同じアルゴリズムで 一石二鳥するの?
KITASHIRAKAWA_Chiyuri
時間軸を 行ったり来たり すれば かしこくなる はずだぜ☆
理屈としては、水平線効果 に対して なんらかの対処方法を与えたい☆
KIFUWARABE
できんのか☆?
KITASHIRAKAWA_Chiyuri
考え中☆
戻る - back

4. 使用例 WCSC28_F6_PAL_HFW.csa☆
- Example of use ☆. WCSC28_F6_PAL_HFW.csa ☆.

KITASHIRAKAWA_Chiyuri
細かい仕様は おいておいて、使ってみた例を紹介しよう☆
去年の 優勝ソフトと、準優勝ソフトが 決勝で当たったときの 棋譜 だぜ☆
KIFUWARABE
棋譜を並べることは 任せろだぜ☆!
20190331wcsc59a1.png
20190331wcsc59.png
OKAZAKI_Yumemi
…………
KITASHIRAKAWA_Chiyuri
…………☆
KIFUWARABE
…………☆
KITASHIRAKAWA_Chiyuri
一応、
f で 1個進む、 ff で 1手進む、 fff で 10手進む、 ffff で 400手進む、
b で 1個戻る、 bb で 1手戻る、 bbb で 10手戻る、 bbbb で 400手戻る、
d で 1個消す、 bb で 1手消す、 bbb で 10手消す、 bbbb で 400手消す、
ぐらいの機能はある☆ 400 というのは 全部進めるぐらいの意味だぜ☆
戻る - back

5. 使用例 WCSC_F2_QHA_TNK.csa☆
- Example of use ☆. WCSC_F2_QHA_TNK.csa ☆.

KITASHIRAKAWA_Chiyuri
カパックと タヌキも 見てみようぜ☆
20190331wcsc59a1.png
20190331wcsc59.png
OKAZAKI_Yumemi
…………
KITASHIRAKAWA_Chiyuri
…………☆
KIFUWARABE
…………☆
OKAZAKI_Yumemi
わたしたちが 棋譜を眺めても なんにも分かんないのよ!