みなさん、python使ってますかー?私、久しぶりにpython使ったら文法とか全部忘れてるんですよ。リハビリを兼ねて、pythonからやねうら王を使うためのアダプターを書いてみました。1000行近い意外と大きなソースコードになってしまいましたが、かなり綺麗な設計になっていると思うので、使いやすいと思います。
Ayane
https://github.com/yaneurao/Ayane
Ayaneとは、python Adaptor to YaneuraOuの略で、やねうら王をpythonから呼び出して便利に使えてしまうアダプターです。
※ AdaptorのAと、YaneuraOuのYaneの部分でAyaneです。また、YaneuraOuのYane-r–uの部分を取って、Ayaneru(あやねる)の愛称で呼ぶことがあります。
サンプルのコードなのですが、凄くシンプルだし、たったこれだけ書くだけでやねうら王が呼び出せるって凄くないですか?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import shogi.Ayane # 通常探索用の思考エンジンの接続テスト # 同期的に思考させる。 def test_ayane(): # エンジンとやりとりするクラス usi = ayane.UsiEngine() # デバッグ用にエンジンとのやりとり内容を標準出力に出力する。 # usi.debug_print = True # エンジンオプション自体は、基本的には"engine_options.txt"で設定する。(やねうら王のdocs/を読むべし) # 特定のエンジンオプションをさらに上書きで設定できる usi.set_engine_options({"Hash":"128","Threads":"4","NetworkDelay":"0","NetworkDelay2":"0"}) # エンジンに接続 # 通常の思考エンジンであるものとする。 usi.connect("exe/YaneuraOu.exe") # 開始局面から76歩の局面 # ※ "position"コマンド、"go"コマンドなどについては、USIプロトコルの説明を参考にしてください。 # cf.「USIプロトコルとは」: http://shogidokoro.starfree.jp/usi.html usi.usi_position("startpos moves 7g7f") # multipv 4で探索させてみる # 2秒思考して待機させる。 usi.send_command("multipv 4") usi.usi_go_and_wait_bestmove("btime 0 wtime 0 byoyomi 2000") # 思考内容を表示させてみる。 print("=== UsiThinkResult ===\n" + usi.think_result.to_string()) # エンジンを切断 usi.disconnect() if __name__ == "__main__": test_ayane() |
棋譜解析、自己対局などに活用してみてください。
ちなみに、近日中に以下の2つも公開する予定です。(たぶん)
Ayaneru-server(あやねるサーバー)
自己対局のための補助クラス。 鋭意製作中。
Ayaneru-gate(あやねるゲート)
Ayaneを使った複数ソフト間の対局を自動化するスクリプト。 近日公開予定。
これってgoogle colaboratoryで使えますか?
そもそもやねうら王がGoogle Colab.で動くのか私はよく知らないのですが、動くとツイートしてた人がおられました。
それで、Google Colab.ではpython製のソフトは動くらしいので、Ayaneは標準的なpythonの記法で書いているので(Ubuntuなどでもそのまま動くらしいので)、まあ、動くのではないかと。
教師局面を作れるようにもして頂けませんか?
局面をsfen→packed sfenにできれば…ということですね。
packed sfenのpythonでの再実装、わりと大変 & Ayaneの範疇を超えそうなので、今回は見送りです。(´ω`)
誰かpythonのパッケージとして用意してくれないかな…。> sfen ←→ packed sfen
エンジン側で変換していいなら、簡単ですが、大量に変換するとき、この受け渡しのオーバーヘッドがちょっと嫌で..
sfenとpacked sfenのコンバータを書いてみました。 https://github.com/ingktkhk/sfen_converter
初期局面くらいしかテストしてないので持ち駒があると変な結果になるかも知れません。コンピュータ将棋開発者ではないもので……
(゚д゚)!!! すごすぎ!!
これでpythonから教師局面の書き出しができるです…。
んで、あやねタンのグラフィックはありますか?w
「あやねる」で検索s(ry
実写はいらない(コラw
御存知かもしれませんが,山岡さんがpsfenとか高速処理できるライブラリをcythonで作られています。主旨が異なるので外部エンジン呼び出しとかありません。
http://tadaoyamaoka.hatenablog.com/entry/2019/02/11/004335
おお、それは処理がすこぶる速そうですね!
まあ、速度が要求されない場合はpythonで完結しているほうが有り難い意味もありますのでpython実装も有難かったり。> packed sfen
やねさんのソースはいつも綺麗でわかりやすい♪
毎度助かってます♪(^-^)
(`・ω・´)b pythonのソースコードはVS Codeで書くと書きやすくてモリモリ書けます。
あやねるたんは開発者向けのツールなんでしょうか?
あまり勝手が解らぬせいか、この記事のサンプルでやってる事は別にあやねる使わずやねうら王を直接起動してやればいいじゃんとか思ってしまったり。
実際はもっと複雑なことを書けば、あやねるを通す事で色々捗る的な感じですかね?
あやねる使うと簡単にできそうなこと
・プロの棋譜を全部与えて、詰みの局面だけ抽出
・自己対局させて詰みの局面を抽出
・詰みの局面から駒を一枚ずつ剥がしていき、同様に詰むならそれは不要駒とみなせるので、最小限の駒で構成された詰め将棋局面にできる
・MATEではあるけど即詰みではない局面を抽出(必至局面の抽出)
・MultiPV 2で探索させて1つ目の候補手がMATEで2つ目の候補手がMATEではない局面の抽出(開始局面での余詰めがないことの保証)
・浅い探索をさせて、そのbestmoveが、MultiPV 10での深い探索で10個の候補手に入っていない局面の抽出。(次の一手問題として面白いばす。)
etc…
Pythonが使えればちょっとした込み入ったことを指示できる将棋所やFloodgateみたいなものですか(今更理解しました)
ちょっとだけPythonが使えるだけで思考エンジンをかなりのところまで制御できちゃうすごい奴です。詰将棋作品を自動で生成するだとか、エンジンを途中でバトンタッチさせるだとか、そういうのにも使えるです。(たぶん)
次のアップデートの時には評価関数も使える様にしてください。(評価関数の読み込みもしてみたい)
評価関数が使えるとはどういう状態のことを指すのでしょう?
python側から評価関数を呼び出すということでしょうか?
ある局面の評価値を返すだけでしたら、エンジンに対して”eval”コマンドを送れば評価値、返ってきますけども..
やねうら王の標準入出力とpythonでどうにかやり取りできないかとやれpipeやらサブプロセスやら鬼のように悩んでいたところでした
神様かと思いましたありがとうございます(´;ω;`)
こんにちは、神です(`・ω・´)b
qhapaqさんがayaneを使ってこんなプログラムを書いていましたよ!
http://qhapaq.hatenablog.com/entry/2019/07/23/221409
Qhapaqさん、さすがでございます(`・ω・´)b
ayaneを将棋所とかで動かす方法ってありますか?
拡張子を.batにして、そのファイルに
python ayane.py
みたいな感じで書いておけばエンジンのふりはできるのではないかと…。(Pathは通っているものとします)
エンジン登録出来ませんでした。
どうすれば良いですか?
ayane.pyそのままではエンジンとはみなされませんけども、まあ、そこは自分でゴニョゴニョすれば..
(近いうちにAyaneを用いたバトンタッチエンジンを公開します)