やねうら王の開発の歩み(2014年まで)

今日はやねうら王開発の歩みをまとめてみたいと思います。やねうら王 公式のほうに記載していた内容をまとめてみます。→ 旧やねうら王 公式

・2010年

超高速3手詰み判定ルーチンを搭載しています。Core i7 1コアにて4M yields(make_move + unmake_move + 1手詰み判定)/sec以上を達成しました。これはBonanzaの3手詰み判定ルーチンの5倍以上の探索速度です。また、合い駒の多い局面ではBonanzaの30倍以上の探索効率を発揮するようになりました。→ 超高速3手詰

このソフトに採用した打ち中合いの応手生成の省略技法は、Bonanzaにも採用されました。→ 中合いの省略技法

いまはこの3手詰めは入れていません。3手詰め相当の処理は何がしか入れたほうが良いとは思っていますが、呼び出すタイミングが難しく、プログラムを書くのが難しい割にはなかなか棋力向上につながりません。AWAKEは入れているらしいですが。

df-pnを改良した、長手数の高速な詰将棋ルーチンを持っています。短手数の詰みを発見するときにdf-pnより圧倒的に速いという特徴があります。→ 長手数の詰将棋ルーチン

df-pnも棋力向上になかなか貢献しないのでやねうら王2014では入れていないです。2014年の電王トーナメント上位5チームはすべてdf-pnが入っていないようです。

完全差分型評価関数を用いています。前回の局面からの差分で計算しています。これにより、同等の評価関数の3倍以上高速に局面を評価できます。

その後、私は上記のBonanza6型の差分評価型の評価関数(これを保木さんに提案したのは私ですが…)の他に、やね裏評価関数という高速化を発見しました。しかしやねうら王2014では、make_listの38要素化を用いています。

そのあと2011年と2012年は開発モチベーションが下がったため、開発しておらず。2013年の電王トーナメント開催に合わせて開発を再開。

・2013年

将棋倶楽部24にオートパイロットで対局する機能。→ やねうら王が将棋倶楽部24にきました

将棋倶楽部24にオートパイロットで参戦させていました。やねうら王の公式サイトでは現在対局中の局面と読み筋がリアルタイム表示されるようにしました。この開発は自分の会社のスタッフにお願いしたので、2013年の電王トーナメントの賞金が吹き飛びました。

やね裏定跡、やね裏学習メソッド、やね裏評価関数を実装しています。→ やねうら王特設ページ

やね裏評価関数に関しては、さきほど書いた通りです。やね裏定跡はワンサイドゲームの定跡のみ登録するという手法です。やね裏学習メソッドとは局後学習機能のことで、当時としては画期的でした。(たぶん)

ソース全体がYaneLispで書かれています。→ YaneLisp

YaneLispを採用することにより、C++ templateを一切使わずにC++ templateを駆使したコードと同等レベルの指し手生成速度になりました。Bonanzaとの指し手生成速度の比較では平均して2~3倍の速度を達成しました。→ 指し手生成高速化

指し手生成に力入れすぎて、Lisp風言語を自前実装してそれでソースを書ききるだなんてどう考えても狂ってます。私の天才的才能(?)が全く無駄な方面に消費されていました。

x64環境に適したRBB(Redundant Bitboards)を採用しています。→ RBB

RBBは非常に面白い実装で、確かに高速化されるのですが、ソースコードが複雑になり(これのためにYaneLispが必要になった意味がある)、そのコードの保守のコストを考えるとリターンが見合わないと思ったため、やねうら王2014では採用しませんでした。C++ templateで簡単に実装できるならまた採用することを考えてなくもないのですが…。

pin判定機能つきMakeMoveを実装しています。→ pin判定機能つきMakeMove

これあまり高速化に寄与していないわりにソースコードが汚くなるので、やねうら王2014では普通に書くように変更しました。

・2014年

やねうら未来定跡 — やねうら王は人間が考えだしたいかなる定跡も搭載しない。

やねうら未来学習メソッド — やねうら王は、人間が生み出したいかなる棋譜も参考にしない。

やねうら未来探索メソッド — やねうら王はいかなる将棋ソフトの流れも汲まない。

やねうら未来定跡とやねうら未来探索メソッドについてはやねうら2014の開発コンセプトに詳しく書いてあります。

やねうら未来学習メソッドはまだ実験段階で、2014年の電王トーナメント版では半分ぐらいの成果しか出せていませんでした。今年(2014年)の年末に「ひまうら王」の実験を行い、そこで成果が出せるといいなーと思っています。

・2015年 電王戦バージョン

2015年の電王戦Finalの出場が決まったので、「おもてなし定跡」という定跡を搭載しました。→ コンピューター将棋の定跡をデザインする

 

以上、駆け足でここまでのやねうら王の開発の歩みを振り返ってみました。

やねうら王の開発の歩み(2014年まで)」への2件のフィードバック

    • YaneLispで書くとコード生成に関して小回りが利くので、実行速度の面では文句なしなのですが、ソースコードを頻繁に大きな修正をするのには向いていないです。いまは私はソースコードを清潔に、シンプルに保つことのほうが重要と考えていまして、実行速度を多少犠牲にしてでも、変化に耐えうるソースコードを維持しておくのが重要なのかなと思っています。なのでいまはYaneLispは使っていないです。

コメントを残す

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