やねうら王miniの公開に向けて

電王トーナメントでコンピューター将棋に熱い視線が向けられる昨今、将棋の思考エンジンに興味を持つ人も多く、教育的なソースコードが求められていると思う。

1000行というのは、短めでという程度の意味で、コメントを無理に削除して、無理に改行を詰めて1000行に収めてもそれは全く教育的ではない。そういうことは何も意味を成さない。今回の目的として「教育的な」ということが最も優先されるべき事項だ。

そこで、行数をカウントするとき、コメント行はノーカウントとする。また、enumの各定数に対しても改行を入れながらコメントを書いていきたい。しかしそれだとenumの中身は本来ならば、1行であっても複数行に渡ってしまう。こういうのを無理に1行に収めたくはない。

そんなわけで、無理に行数を詰めることはしない。コメントを削ればだいたい1000行か2000行ぐらいで収まるんじゃね?ぐらいのアバウトさで理解してもらいたい。

それより重要なのはBonanza6より強いということだ。これも「教育的」であることと同じぐらい重要なことだ。

Bonanza6より弱いソフトは、すべてうんこであると私は思っている。

…いまコンピューター将棋開発者の半数ぐらいを敵にまわしたような気もするが、ご寛容にお願いしたい。

いくら教育的なコードとは言え、やねうら王miniをうんこにはしたくないのだ。どれだけ美しくコードを書こうとも、Bonanza6の棋力にすらないなら、それは現実世界で全く通用のしない、間違った教育なのだ。私はそういう偽りの教育が大嫌いなのだ。

…などと理想を高く高く掲げるのは簡単だが、Bitboardを使った場合、テーブル初期化と指し手生成だけで500行ぐらいあるんだよな。

かと言って指し手生成にBitboardを使わないのはいまどきありえない。行数を縮めるのが今回の目的ではないのだ。ちゃんと現実世界で通用するプログラム。このあと作りこんでいけばちゃんとトップレベルのソフトに匹敵する棋力となるプログラムの作れる土台となるプログラムが必要なので、Bitboardを使わないという選択肢はない。

「速度10%ぐらい遅くなるけどこっちのほうがソースコードが短くなるのでこっちにしとこう」などというプログラムは1行も書きたくないのだ。

私としてはやねうら王miniのソースコードにそのまま書き足して、やねうら王(2016)にしたいわけだ。やねうら王(2016)にするときにソースコードがまた大改造になるのは嫌なのだ。

そこで、1000行を大幅に超えようとも、Bitboardは用いる。逆に、静止探索やSEE、1手詰・3手詰めなどはあえて書かないかも知れない。私はそれらは必須とは思っていないからである。

もちろん、並列化もいまどきYBWCなんか流行らないしな。そんなトップソフトが採用していないような並列化の手法を採用しても仕方がないと思う。最新版のStockfishのようにちゃんと書く。

とまあ、ここまでの要点として

  • 行数が多くなろうとBitboardは使う
  • 高速化にそこそこ真面目に取り組む
  • やねうら王(2016)とある程度共通のコード
  • 探索の並列化はする
  • 探索の並列化にYBWCを使わない
  • 強さはBonanza6以上
  • それでもコメント行を除き、2000行には収めたい(収まる予定)

こういうことである。

次に、Aperyの評価関数バイナリを使おうと思っていたのだが、いくつか問題が出てきた。

まず最新のAperyの評価関数バイナリには手番が入っているので、以前のものの倍のサイズがあるということ。(1GB超え) 開発時に読み込みに時間がかかるのは嫌だ。冬場、寒くなってきたので布団に入りながらノートパソコンで開発したいのだが、このノートパソコンがメモリ1GBしか積んでいない。評価関数が読み込めないわけであるな。

あと、Piece番号の振り方がやねうら王と少し違うので、わざわざAperyの評価関数バイナリを読み込むために変換部を書くのも嫌だ。

そこで、やねうら王miniの評価関数バイナリはやねうら王のものを使うことにする。3駒関係、あまりうまく学習できたものがないのだが、まあいいや…。Bonanza6ぐらいにはなるっしょ…。(適当)

そんなわけで

  • ソースコード、バイナリともにMIT License(予定)
  • 搭載メモリ1GBのPCでも動く(予定)
  • Visual C++2015でビルド可能(私がその環境で開発しているため)
  • CPUはHaswell以降が望ましい。開発用のノートPCでも動かないと嫌なのでCPUがSSE4までサポートしていれば一応は動くようにしてあるが、それだとめちゃんこ遅い。

やねうら王miniのソースコード公開と同時ぐらいに「やねうら王miniソースコード完全解説」というのをこのブログに書く。(気が向いたら)

やねうら王miniは年内公開に向けて着々と準備中である。

やねうら王miniの公開に向けて」への17件のフィードバック

  1. >やねうら王miniを年内に公開するので、まずは鎮座して待たれよ。

    鎮座しておりますが、少々足がしびれてまいりました。
    そうして、なりよりこのままの姿で年を越すのだけはいやでございます。

  2. やねうら王miniですが,学習部のコードは載せない予定でしょうか? 強さはさておき,自分で用意した棋譜から学習させたソフトというのはロマンがあり,それも開発の楽しみであると思ってるのですが.

    • 学習部のコードはいずれはつけたいと思っていますが、年内公開の時点ではつけないと思います。いま新しい学習方法を考え中で、そのへんの成果が出れば、やねうら王miniのほうに、やねうら王(2016)からportingしてきます。

    • いまどきの評価関数は利きを使うので利きの計算が遅いと不利になるので、(やねうら王miniも含めて)時代はApery型のBitboardのレイアウトですね。

  3. >MIT License
    という事は、商用利用を含めて、各自のコードを公開せずに やねうら王mini を利用可能という事ですね。
    太っ腹ですね。(体形では、ありません。)

    コンパクトで棋力の高い実行ファイルなら、スマホ用アプリとか出てきそうな気がします。

    • 棋力はそんな…期待しないでください。
      Bonanza6よりは強くしますけども、そこが主眼ではなくて、多くの人に興味を持ってもらうのが狙いです。

  4. 楽しみです。
    3流の自分にも理解できるものであるといいなー。と思います。
    しかし、まぁ、そんなことは置いといて、思いうぞんぶん妙技をふるってください。
    解析は任せろ~。バリバリ~。

  5. Aperyの評価関数バイナリにはGPLv3ライセンスは及びません。
    棋力が主題では無いとの事ですので、Aperyの評価関数バイナリを使わない方が変換とか無しで済んで良さそうに思います。

    • おお、そうなんですか!本文修正しました!(`・ω・´)ゞ

      > それから評価関数バイナリのほうのライセンスが(おそらく)GNU GPLv3である。私はやねうら王miniのソースコードをMIT Licenseにしたいのだ。評価関数バイナリがGNU GPLv3だと、二次利用してもらうときに障壁となる。

      この一文削除。

  6. SSE4だとめちゃんと遅い。
    >apery(最新版)だと平岡さんが配布してるバイナリはSSE4でもそこまで遅くならないですが
    遅くなるのとそこまで遅くならない違いはどこで生じるのでしょうか?

コメントを残す

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