先日、pythonからやねうら王を操作できるアダプター、Ayaneをリリースしたばかりですが、これを用いたスクリプトがいくつか完成したのでご報告させていただきます。
※ Ayane : https://github.com/yaneurao/ayane
・1 VS 1の対局クラス → あやねるサーバー(クラス)
・並列自己対局クラス → マルチあやねるサーバー(クラス)
・並列自己対局スクリプト → あやねるサーバー(スクリプト) : ayaneru-server.py
・N VS Nの対局スクリプト → あやねるゲート(スクリプト) : ayaneru-gate.py
まだ作りたてなので何か大きなバグがあるかも知れませんので何かあれば教えてください。
あやねるゲートのほうは、enginesフォルダに複数のエンジンをぶちこんで置くと、「任意の二つを取り出して自己対局をloop回行う」という動作をiteration回だけ繰り返すというスクリプトです。複数ソフト間の相対的なレーティングがわかります。
あやねるゲートは、floodgateのようなものを目指していたのですが、”startpos moves …”のような形式(USIプロトコルのpositionコマンドで送られてくる形式)のJavaScript製の棋譜ビュアーがないので早めに断念しました。(´ω`) CSAへの変換部書いてもいいのですけど、もう気力ゲージが尽きたので今回はこのへんまでで…。
また、Ayaneのスクリプトは、すべてpython 3.7で動作確認をしています。
今を去ること3年前ぐらい、やねうら王でpipeを維持したままsubprocessを起動する方法がpython2でしか見つからなかった関係で、手元の自己対局スクリプトは未だにpython2だったのですが、これで来年からpython3に移行できます。マイヤハッハーーーーー!!!
— Ryoto_Sawada⛅Qhapaq (@Qhapaq_49) June 28, 2019
とりあえず、python 3系で動く並列自己対局スクリプトが完成したことで、やねうら王のGitHubにあったpython 2専用の自己対局スクリプトはお役御免になる予定です。まあ、あのスクリプトは、「python触ったことないけど、流行ってるらしいから、いっちょこれで書いてやるか!」と、pythonの言語仕様すら知らずに適当にググりながら書き始めたコードなので、いままでよく動いていたなぁという感じですが、今回、Ayaneを開発するにあたり、pythonの公式ドキュメントを10分ぐらいチラ見してclassやenumなどの使い方を覚え、「python、完全に理解した」状態になりましたので、これでバッチリなはずです。
環境依存になりそうな書き方は極力避けてあるので、Ubuntu/macOSなどでもそのまま動くはずです。あやねちゃん、可愛がっていただけたら嬉しいです。
※ Ayaneの開発は、これでひとまず終了です。
startpos moves …形式の指し手を受け取れる棋譜ビューア、akicho8さんのhttps://github.com/akicho8/shogi-playerならいけると思います
自分はまだjavascript(というかwebフロントエンド)を学び始めたばかりでどうやって使うのかよく分からないですが…
(゚д゚)!?!?!マジっすか!?!?!
AyaneruでmultiPVを取得するには、どのクラスのどの関数から取得すればよいのでしょうか?それっぽいところから取得しようとしても、取得した値が入ってるはずの配列が空っぽで完全に行き詰ってしまいました
https://github.com/yaneurao/Ayane
のトップページのところのサンプルコード、そのままで動きませんか?
> # multipv 4で探索させてみる
「MultiPVの候補手を配列に取得したい」という意味です
質問させていただいたのですが、自力で何とか解決できました
UsiEngine.think_result.to_string()から、文字列を取り出してsplitで配列にして候補手を配列に何とか格納することができました
think_result.pvsが配列になってて、そこから取り出せます。
think_resultはUsiThinkResult型なので、そこのソースコード見るとよろしいです。
# こういうのは、print(type(think_result))のようにして、そのinstanceの型を調べて、そしてその型の定義をソースコード見るのがコツというか…。
Ayaneって他のUSIエンジンもある程度は動かせると思うのですが、独自の拡張USIコマンド以外に、やねうら王でしか動かない注意点などありますか?
(技巧やdlshogiをAyaneで使えないかと思い質問しました。)
使えるはずなのですが、検証をやねうら王でしかやっていないので使えない可能性もあります。(それはバグなので、バグレポもらえたら修正します)