pythonからやねうら王を駆動できるアダプターAyane、公開しました

みなさん、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(あやねる)の愛称で呼ぶことがあります。

サンプルのコードなのですが、凄くシンプルだし、たったこれだけ書くだけでやねうら王が呼び出せるって凄くないですか?

棋譜解析、自己対局などに活用してみてください。

ちなみに、近日中に以下の2つも公開する予定です。(たぶん)

Ayaneru-server(あやねるサーバー)
自己対局のための補助クラス。 鋭意製作中。

Ayaneru-gate(あやねるゲート)
Ayaneを使った複数ソフト間の対局を自動化するスクリプト。 近日公開予定。

 

pythonからやねうら王を駆動できるアダプターAyane、公開しました” への19件のコメント

    • そもそもやねうら王がGoogle Colab.で動くのか私はよく知らないのですが、動くとツイートしてた人がおられました。
      それで、Google Colab.ではpython製のソフトは動くらしいので、Ayaneは標準的なpythonの記法で書いているので(Ubuntuなどでもそのまま動くらしいので)、まあ、動くのではないかと。

        • 局面をsfen→packed sfenにできれば…ということですね。
          packed sfenのpythonでの再実装、わりと大変 & Ayaneの範疇を超えそうなので、今回は見送りです。(´ω`)
          誰かpythonのパッケージとして用意してくれないかな…。> sfen ←→ packed sfen
          エンジン側で変換していいなら、簡単ですが、大量に変換するとき、この受け渡しのオーバーヘッドがちょっと嫌で..

    • おお、それは処理がすこぶる速そうですね!
      まあ、速度が要求されない場合はpythonで完結しているほうが有り難い意味もありますのでpython実装も有難かったり。> packed sfen

  1. あやねるたんは開発者向けのツールなんでしょうか?
    あまり勝手が解らぬせいか、この記事のサンプルでやってる事は別にあやねる使わずやねうら王を直接起動してやればいいじゃんとか思ってしまったり。
    実際はもっと複雑なことを書けば、あやねるを通す事で色々捗る的な感じですかね?

    • あやねる使うと簡単にできそうなこと
      ・プロの棋譜を全部与えて、詰みの局面だけ抽出
      ・自己対局させて詰みの局面を抽出
      ・詰みの局面から駒を一枚ずつ剥がしていき、同様に詰むならそれは不要駒とみなせるので、最小限の駒で構成された詰め将棋局面にできる
      ・MATEではあるけど即詰みではない局面を抽出(必至局面の抽出)
      ・MultiPV 2で探索させて1つ目の候補手がMATEで2つ目の候補手がMATEではない局面の抽出(開始局面での余詰めがないことの保証)
      ・浅い探索をさせて、そのbestmoveが、MultiPV 10での深い探索で10個の候補手に入っていない局面の抽出。(次の一手問題として面白いばす。)
      etc…

  2. 次のアップデートの時には評価関数も使える様にしてください。(評価関数の読み込みもしてみたい)

    • 評価関数が使えるとはどういう状態のことを指すのでしょう?
      python側から評価関数を呼び出すということでしょうか?
      ある局面の評価値を返すだけでしたら、エンジンに対して”eval”コマンドを送れば評価値、返ってきますけども..

  3. やねうら王の標準入出力とpythonでどうにかやり取りできないかとやれpipeやらサブプロセスやら鬼のように悩んでいたところでした
    神様かと思いましたありがとうございます(´;ω;`)

コメントを残す

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