2015-08-01 16:52
「ここ最近、コンピューター将棋エンジン『きふわらべ』のソースコードには ほとんど手を付けずに、ボナンザ6.0のソースコードを読んでいるだけなんだぜ☆」
「早く読み終われ☆」
「日記が止まってしまうので、ボナンザ6.0のソースコードの読んでいるところも
日記に認(したた)めておくぜ☆」
「7/31~8/01 と、csa.c を読んでいるぜ☆
これも いつ読み終わるか分からないぜ☆」
「ちなみに、これより前には、
learn1.c を読み終わったあとに、 learn2.c を読み終わっている☆
それ以外のソースコードは 特に今年は 読み深めてはいないぜ☆」
「ちょうど去年あたり、将棋エンジンを作ろうか作るまいか考え中だったな☆」
「おっ、1歳になったな☆wwwwwwwwwwwwww 誕生日おめでとうなんだぜ☆」
「プレゼントをくれ☆」
「なるべく 第3回電王トーナメントまでに 2駒関係+機械学習を付ける予定なので
それまで待ってくれ☆wwwww」
「これまでの実績から、ランダム2駒関係に落ち着きそうなんだぜ☆」
2015-08-01 22:35
「ボナンザ6.0の csa.c のソースコードを読み終わったぜ☆
今日は17時~22時の7時間、昨日も何時間か読んでいたので、
丸1日は 潰れたんだぜ☆」
「読んだ内容を 少しまとめてみるぜ☆」
read ファイル名
「コマンド『read』を打鍵すると、棋譜を読むみたいなんだぜ☆」
勉強する順番1: read_record(~)
「moves が 0 だと .csaのヘッダーだけ読むみたいだな☆
それ以外だと .csaの内容を全部 読み込むらしい。
なんのことだかは 分からない☆」
勉強する順番2: in_CSA(~)
勉強する順番2: in_CSA_header(~)
「in_CSAで、.csa の内容を全部読み込むみたいだぜ☆
in_CSA_headerは、.csaのヘッダーだけを読み込むみたいだな☆
in_CSAの中には、in_CSA_headerが入っているぜ☆」
「ヘッダーというから、見出しの部分かな、と思っていたんだが、
読んでみると、ほとんど対局内容に関わる本文なんだぜ☆」
概念図
ファイル名.csa
1局の棋譜データ
/
1局の棋譜データ
/
1局の棋譜データ
「棋譜データが入っている .csa ファイルは、
上図のように / 記号で、1対局、1対局が区切られているんだぜ☆
in_CSA(~) は 1対局の棋譜データ分だけを読むんだぜ☆
read_record(~) は、.csaファイルを 丸ごと どかどか 読んでくれるんだぜ☆」
勉強する順番3: read_CSA_line(~)
「これは、.csaの1行を読み取ってくれるぜ☆
コメントと、末尾のスペースは削り取ってくれると思うぜ☆」
「.csa ファイルの中を簡単に説明するんだぜ☆
次のウェブサイトに、参考となるサンプルがあるぜ☆」
コンピュータ将棋協会 『
CSA標準棋譜ファイル形式』
http://www.computer-shogi.org/protocol/record_v21.html
'----------棋譜ファイルの例"example.csa"-----------------
'バージョン
V2
'対局者名
N+NAKAHARA
N-YONENAGA
'棋譜情報
'棋戦名
$EVENT:13th World Computer Shogi Championship
'対局場所
$SITE:KAZUSA ARC
'開始日時
$START_TIME:2003/05/03 10:30:00
'終了日時
$END_TIME:2003/05/03 11:11:05
'持ち時間:25分、切れ負け
$TIME_LIMIT:00:25+00
'戦型:矢倉
$OPENING:YAGURA
'平手の局面
P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
P2 * -HI * * * * * -KA *
P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
P4 * * * * * * * * *
P5 * * * * * * * * *
P6 * * * * * * * * *
P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
P8 * +KA * * * * * +HI *
P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
'先手番
+
'指し手と消費時間
+2726FU
T12
-3334FU
T6
%CHUDAN
「このデータは、行先頭の1文字を見ると、その行の種類が分かるんだぜ☆
では、最初の1文字を ピックアップしてみるぜ☆」
’ ----------棋譜ファイルの例"example.csa"-----------------
’ バージョン
V 2
’ 対局者名
N +NAKAHARA
N -YONENAGA
’ 棋譜情報
’ 棋戦名
$ EVENT:13th World Computer Shogi Championship
’ 対局場所
$ SITE:KAZUSA ARC
’ 開始日時
$ START_TIME:2003/05/03 10:30:00
’ 終了日時
$ END_TIME:2003/05/03 11:11:05
’ 持ち時間:25分、切れ負け
$ TIME_LIMIT:00:25+00
’ 戦型:矢倉
$ OPENING:YAGURA
’ 平手の局面
P 1-KY-KE-GI-KI-OU-KI-GI-KE-KY
P 2 * -HI * * * * * -KA *
P 3-FU-FU-FU-FU-FU-FU-FU-FU-FU
P 4 * * * * * * * * *
P 5 * * * * * * * * *
P 6 * * * * * * * * *
P 7+FU+FU+FU+FU+FU+FU+FU+FU+FU
P 8 * +KA * * * * * +HI *
P 9+KY+KE+GI+KI+OU+KI+GI+KE+KY
’ 先手番
+
’ 指し手と消費時間
+ 2726FU
T 12
- 3334FU
T 6
% CHUDAN
「頭が『
’』の行は コメントなので、まず 無視してみよう☆」
V 2
N +NAKAHARA
N -YONENAGA
$ EVENT:13th World Computer Shogi Championship
$ SITE:KAZUSA ARC
$ START_TIME:2003/05/03 10:30:00
$ END_TIME:2003/05/03 11:11:05
$ TIME_LIMIT:00:25+00
$ OPENING:YAGURA
P 1-KY-KE-GI-KI-OU-KI-GI-KE-KY
P 2 * -HI * * * * * -KA *
P 3-FU-FU-FU-FU-FU-FU-FU-FU-FU
P 4 * * * * * * * * *
P 5 * * * * * * * * *
P 6 * * * * * * * * *
P 7+FU+FU+FU+FU+FU+FU+FU+FU+FU
P 8 * +KA * * * * * +HI *
P 9+KY+KE+GI+KI+OU+KI+GI+KE+KY
+
+ 2726FU
T 12
- 3334FU
T 6
% CHUDAN
「おっおっ☆! 『
VN$P±T±T±%』の順にならんでいるな☆
見えてきたんじゃないか☆ww」
「ここで、ボナンザ6.0では、『
VN$P±』までを CSAヘッダー と
独自に名付けている☆
残りの『
T±T±%』の部分は、ヘッダーの後に解析している☆
ボナンザ6.0は『
T』も『
±』も無視して、『
%』だけ見てるようだが☆ww」
「ま☆ どっちにしろ両方使うわたしには そんな区別なんて
どうでもいいんだぜ☆wwwww」
「次に、 .csa の棋譜では、盤面の書き方が 3通りあるんだぜ☆
ボナンザでは それぞれ rep1、rep2、rep3 と呼んでいる☆
次に説明していくんだぜ☆」
(rep1)平手初期配置と駒落ち
PI 82HI 22KA
「先頭の2文字が 『
PI』 だった場合だぜ☆
実際には隙間なく1行に書かれているが、平手初期配置から落ちている駒を
4桁で全部並べていくんだぜ☆
82HI は 8二飛 を落とすんだぜ☆」
(rep2)一括表現
P1 -KY -KE -GI -KI -OU -KI -GI -KE -KY
P2 * -HI * * * * * -KA *
~
P9 略
「先頭の2文字が 『
P数字』 だった場合だぜ☆
実際には1行には隙間がなく、P1~P9の9行分書かれているわけだが、
1マスを3文字で書くものとし、ーを後手、+を先手として 駒を書くんだぜ☆
3文字目の1文字を空白にすると、空マス扱いになるぜ☆」
(rep3)駒別単独表現
P- 22KA
P+ 99KY 89KE
P+ 00KI 00FU
P- 00AL
「先頭の2文字が 『
P±』 だった場合だぜ☆
実際には1行には隙間がない。
駒1個ずつ書く場合だぜ☆ まず P-、P+ で分けて、盤上の駒を書くんだぜ☆
次のP+、P-は持ち駒だぜ☆ 持ち駒の場所は 00 だぜ☆
最後の 『
00AL』だけが特殊で、残りの駒を持ち駒にする という意味になるぜ☆
王様は持ち駒にできないみたいだな☆ww」
「よくがんばって実装したな☆wwww」
2015-08-02 01:18
「日付が変わっていた☆」
「ドンマイ☆ アフィリエイターには時間はたっぷりあるだろ☆」
「.csa ファイルを解析した結果は、shogi.h にも定義されている min_posi_t 構造体の
かたちで データとして持たれるんだぜ☆
ボナンザは ビット演算を利用しているので、
ビット演算の知識を知らずに ソースコードを見ても
ぱっと見、意味が分からなくて困るぜ☆」
「例えば、hand_black という変数には 0~65535 の範囲の数字が
1つ入っているんだが、
どうも、先手の持ち駒の全パターンが これ1つで表現されているみたいなんだぜ☆
こんなん、びっくりするんだぜ☆」
2015-08-02 01:56
「ボナンザ6.0では、.csaファイルで『/』が出ていた後にも何か タイム 関係の処理をしているみたいなんだが、なんで 1局目と それ以降の局で違いがあるのか わからないぜ☆
でもこれで、.csa ファイルの解析はできそうなんだぜ☆」
勉強の進展
あり なんだぜ☆
微速微進、遅々前進なんだぜ☆
2015-08-02 06:41
「.csa棋譜のパーサーを作ったぜ☆ 最低限動くところだけ☆」
「もうできたのか☆」
「ここから、きふわらべの指し手生成ルーチンと合流して、
教師の指した手を良し、指さなかった手を悪し、と
フィーチャーベクターの配列の内容を いじっていけば、
機械学習はできるはずなんだぜ☆」
「もうすぐそうだな☆」
「いや、きふわらべの指し手生成ルーチンは どっちらかっているから整理が必要だし、
ラーニング部分のソースコードもまだ書いていないんだぜ☆」
「書け☆」
「おっお☆ おっ、おっ、おっ☆」
実装の進展
あり なんだぜ☆
微速微進、遅々前進なんだぜ☆
[0回]
PR
http://grayscale.dou-jin.com/Entry/261/【将棋】きふわらべが頂上を目指す☆!第3回将棋電王トーナメント(6) ボナンザ6.0のソースコードを読んでいるんだぜ☆ csa.c 編☆