あやねるサーバー、あやねるゲート出来ました

先日、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で動作確認をしています。

とりあえず、python 3系で動く並列自己対局スクリプトが完成したことで、やねうら王のGitHubにあったpython 2専用の自己対局スクリプトはお役御免になる予定です。まあ、あのスクリプトは、「python触ったことないけど、流行ってるらしいから、いっちょこれで書いてやるか!」と、pythonの言語仕様すら知らずに適当にググりながら書き始めたコードなので、いままでよく動いていたなぁという感じですが、今回、Ayaneを開発するにあたり、pythonの公式ドキュメントを10分ぐらいチラ見してclassやenumなどの使い方を覚え、「python、完全に理解した」状態になりましたので、これでバッチリなはずです。

環境依存になりそうな書き方は極力避けてあるので、Ubuntu/macOSなどでもそのまま動くはずです。あやねちゃん、可愛がっていただけたら嬉しいです。

※ Ayaneの開発は、これでひとまず終了です。

あやねるサーバー、あやねるゲート出来ました」への8件のフィードバック

  1. startpos moves …形式の指し手を受け取れる棋譜ビューア、akicho8さんのhttps://github.com/akicho8/shogi-playerならいけると思います

    自分はまだjavascript(というかwebフロントエンド)を学び始めたばかりでどうやって使うのかよく分からないですが…

  2. AyaneruでmultiPVを取得するには、どのクラスのどの関数から取得すればよいのでしょうか?それっぽいところから取得しようとしても、取得した値が入ってるはずの配列が空っぽで完全に行き詰ってしまいました

      • 「MultiPVの候補手を配列に取得したい」という意味です
        質問させていただいたのですが、自力で何とか解決できました
        UsiEngine.think_result.to_string()から、文字列を取り出してsplitで配列にして候補手を配列に何とか格納することができました

        • think_result.pvsが配列になってて、そこから取り出せます。
          think_resultはUsiThinkResult型なので、そこのソースコード見るとよろしいです。

          # こういうのは、print(type(think_result))のようにして、そのinstanceの型を調べて、そしてその型の定義をソースコード見るのがコツというか…。

  3. Ayaneって他のUSIエンジンもある程度は動かせると思うのですが、独自の拡張USIコマンド以外に、やねうら王でしか動かない注意点などありますか?
    (技巧やdlshogiをAyaneで使えないかと思い質問しました。)

    • 使えるはずなのですが、検証をやねうら王でしかやっていないので使えない可能性もあります。(それはバグなので、バグレポもらえたら修正します)

やねうらお へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です