cshogi is a fast Python shogi library that provides board management, legal move generation, move verification, USI protocol, and support for machine learning formats. Below is an example of creating a board, generating legal moves at the starting position, displaying them, and making a move.
cshogiは、盤面管理、合法手生成、指し手の検証、USIプロトコル、および機械学習向けフォーマットのサポートを備えた高速なPythonの将棋ライブラリです。 以下は、盤を作成して、開始局面で合法手を生成して表示し、1手指す処理の例です。
>>> import cshogi
>>> board = cshogi.Board()
>>> for move in board.legal_moves:
... print(cshogi.move_to_usi(move))
1g1f 2g2f 3g3f 4g4f 5g5f 6g6f 7g7f ...
>>> board.push_usi('7g7f')
Python 3.5以上とCython 0.29以上をサポート
IPython/Jupyter Notebookと統合
>>> board
指す/手を戻す
>>> move = board.push_usi('7g7f') # 指す >>> board.pop() # 手を戻す
テキスト形式で盤面を表示
>>> board = Board('ln4skl/3r1g3/1p2pgnp1/p1ppsbp1p/5p3/2PPP1P1P/PPBSSG1P1/2R3GK1/LN5NL b P 43') >>> print(board)
' 9 8 7 6 5 4 3 2 1 P1-KY-KE * * * * -GI-OU-KY P2 * * * -HI * -KI * * * P3 * -FU * * -FU-KI-KE-FU * P4-FU * -FU-FU-GI-KA-FU * -FU P5 * * * * * -FU * * * P6 * * +FU+FU+FU * +FU * +FU P7+FU+FU+KA+GI+GI+KI * +FU * P8 * * +HI * * * +KI+OU * P9+KY+KE * * * * * +KE+KY P+00FU +
王手判定、終局判定、入玉宣言法判定
>>> board.is_check() False >>> board.is_game_over() True >>> board.is_nyugyoku() False
千日手判定
>>> board.is_draw() == REPETITION_DRAW # 同一局面が1つ以上ある False
指し手の表現
指し手は数値で扱う。ヘルパー関数でUSIまたはCSA形式に変換できる。
>>> move = [move for move in board.legal_moves][0] >>> move 66309 >>> move_to_usi(move) '1g1f' >>> move_to_csa(move) '1716FU'
USIまたはCSA形式から数値の指し手に変換できる。
>>> board.move_from_usi('7g7f') 73275 >>> board.move_from_csa('7776FU') 73275
局面の圧縮形式
Apery、やねうら王で生成した教師局面を読み込むことができる。
>>> import numpy as np >>> hcpes = np.fromfile('teacher.hcpe', dtype=cshogi.HuffmanCodedPosAndEval) # Aperyの教師局面(HuffmanCodedPosAndEval) >>> board.set_hcp(hcpes[0]['hcp']) >>> psfens = np.fromfile('sfen.bin', dtype=cshogi.PackedSfenValue) # やねうら王の教師局面(PackedSfenValue) >>> board.set_psfen(psfens[0]['sfen'])
局面をAperyの圧縮形式で保存できる。
>>> hcps = np.empty(1, dtype=cshogi.HuffmanCodedPos) >>> board.to_hcp(hcps) >>> hcps.tofile('hcp')
USIエンジンの操作
USIエンジンを起動して操作できる。
>>> from cshogi.usi import Engine >>> engine = Engine('/content/LesserkaiSrc/Lesserkai/Lesserkai') >>> engine.isready() >>> engine.position(sfen='sfen 7nl/5kP2/3p2g1p/2p1gp3/p6sP/s1BGpN3/4nPSp1/1+r4R2/L1+p3K1L w GSNLPb6p 122') >>> engine.go()
USIエンジン同士の対局
>>> from cshogi import cli >>> cli.main('/content/LesserkaiSrc/Lesserkai/Lesserkai', '/content/LesserkaiSrc/Lesserkai/Lesserkai')
- GitHubのソースからインストール
以下のコマンドでインストールします。インストールにはCythonと対応したC++コンパイラが必要です。
pip install git+https://github.com/TadaoYamaoka/cshogi
- PYPIからインストール
pip install cshogi
pipのバージョン19.0以上が必要です。19.0未満の場合は、事前にpipの アップグレード が必要です。
インストールに失敗して、再実行する際は、--no-cache-dirオプションを付けて実行してください。
pip install --no-cache-dir cshogi
cshogi.webパッケージを使用する場合は、以下のコマンドで追加の依存パッケージをインストールできます。
pip install cshogi[web]
高速化のために多くの部分で Apery のソースを流用しています。
cshogiはGPL3の元にライセンスされています。詳細はLICENSEを確認してください。