将棋AIで学ぶディープラーニングを読む

7-3 python-shogi

pydlshogiは基本的なところはpython-shogiに依存している。

python-shogiはpythonだけで記述されたshogi用のライブラリ。

github.com

ファイル構成と主な役割
init.py:主な定数、変数、共通関数、主要なクラス
Consts.py その他定数
CAS.py CAS棋譜パースなど
KIF.py 棋譜パース
Move.py Moveクラス
Piece.py Pieceクラス

init.pyを頭から呼んでいくjupyter notebookに
shogiライブラリをimportしておく

print(shogi.PIECE_TYPES_WITHOUT_KING)

[1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14]
駒種の定義をしている配列のようである
PAWN:1
LANCE:2
KNIGHT:3
SILVER:4
GOLD:5
BISHOP:6
ROOK:7
PROM_PAWN:9
PROM_LANCE:10
PROM_KNIGHT:11
PROM_SILVER:12
PROM_BISHOP:13
PROM_ROOK:14
KING(8)はこの配列からはずしてあるようだ

print(shogi.MAX_PIECES_IN_HAND)

[0, 18, 4, 4, 4, 4, 2, 2, 0, 0, 0, 0, 0, 0, 0]
PAWNの最大持ち駒数:18枚
LANCEの最大持ち駒数:4枚
KNIGHTの最大持ち駒数:4枚
SILVERの最大持ち駒数:4枚
GOLDの最大持ち駒数:4枚
BISHOPの最大持ち駒数:2枚
ROOKの最大持ち駒数:2枚

print(shogi.PIECE_PROMOTED)

[None, 9, 10, 11, 12, None, 13, 14, None, None, None, None, None, None, None]
成り駒の駒種の配列
add_piece_into_hand,remove_piece_from_hand,has_piece_in_hand,push,pop関数で使われている。
成り駒を取った場合通常駒に変換してから持ち駒配列に入れる必要があるのでこの配列で変換している
PROM_PAWN:9->PAWN:1
PROM_LANCE:10->LANCE:2
PROM_KNIGHT:11->KNIGHT:3
PROM_SILVER:12->SILVER:4
PROM_BISHOP:13->BISHOP:6
PROM_ROOK:14->ROOK:7
通常駒種コード+8 = 成り駒コードではないので配列による変化にしているのかな

print(shogi.NUMBER_JAPANESE_NUMBER_SYMBOLS)

['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
全角数字

print(shogi.NUMBER_JAPANESE_KANJI_SYMBOLS)

['零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二', '十三', '十四', '十五', '十六', '十七', '十八']
漢数字

print(shogi.SQUARES)
    9  8  7  6  5  4  3  2  1  
 A  0  1  2  3  4  5  6  7  8  
 B  9 10 11 12 13 14 15 16 17  
 C 18 19 20 21 22 23 24 25 26  
 D 27 28 29 30 31 32 33 34 35  
 E 36 27 28 39 40 41 42 43 44  
 F 45 46 47 48 49 50 51 52 53  
 G 54 55 56 57 58 59 60 61 62  
 H 63 64 65 66 67 68 69 70 71  
 I  72 73 74 75 76 77 78 79 80  

盤の表示

print(shogi.SQUARES_L90)
SQUARES_L90 = [  
A1, B1, C1, D1, E1, F1, G1, H1, I1,  
A2, B2, C2, D2, E2, F2, G2, H2, I2,  
A3, B3, C3, D3, E3, F3, G3, H3, I3,  
A4, B4, C4, D4, E4, F4, G4, H4, I4,  
A5, B5, C5, D5, E5, F5, G5, H5, I5,  
A6, B6, C6, D6, E6, F6, G6, H6, I6,  
A7, B7, C7, D7, E7, F7, G7, H7, I7,  
A8, B8, C8, D8, E8, F8, G8, H8, I8,  
A9, B9, C9, D9, E9, F9, G9, H9, I9,  
]  

SQUARES盤を左90度回転させた配置

SQUARES_R45は右45度回転させた配置
SQUARES_L45は左45度回転させた配置