読み太 アピール文章 読み太という名前は友人が考えてくれました。 技術的な工夫はそれほどありませんが、作者自身が既存の技術を理解し、現代のコンピュータ将棋のスタートラインに立つことを目標としています。 ○特徴 1. Redundant Bitboard(RBB) 縦型bitboardが主流ですが、指し手生成が高速化できるとのことなので採用しました。 指し手生成祭りの局面で4M回/秒(CPU i7-6700HQ)程度の速度です。作者の力ではこれが限界でした。 工夫として、飛車の利きのテーブルは縦横合わせたものではなく、縦と横で別々に持つようにしています。 縦横一発で求めるのとそれほど速度が変わらず、テーブルを小さくできます。 また、香車の利きを求めるついでに飛車の利きを求められるメリットがあると思いますが、 これらについては測定していないので高速化に貢献しているかどうかはわかりません。 (4/30追記) RBBを利用した高速な近接王手の1手詰め判定、王手生成ルーチンを実装しました。 2. stockfish7の探索部 やはり優秀なので。将棋用に調整はしていますが、ほとんどそのまま利用しています。 工夫としては、futilityマージンを動的に決めるようにしていることと、独自の枝刈りを少し導入していますが、それによる棋力向上はわずかです。 (4/30追記) 現在、独自の枝刈りは効果が薄いようなので外しています。 また、stockfish7が探索部に元来持っているバグをいくつか発見し改善しています。 3. 3駒関係を利用した評価関数(やねうら王 コンピューター将棋フレームワークの評価関数部) 評価関数は用意したかったのですが、機械学習のやり方がわからないので上記の評価関数バイナリ(KKP, KPP)とその読み込み部、差分計算部を利用させていただいています。 できれば当日までに自前のものを用意したいのですが、(出場するからには結果を残したいので)おそらくそのまま使わせて頂くと思います。 3駒関係は非常に優秀な評価項目だと思います。しかし、評価項目が多すぎて人間には調整不可能で初心者には扱いにくいので、 人間でも調整しやすく、ある程度正確な評価関数を用意できればと思っています。 (4/30追記) 評価関数はやはりそのまま利用させていただくことにしました。 また、VPGATHERDD命令を使って高速化しました。 4. lazy SMP(探索の並列化) 正しく実装できているかどうかわかりませんが、シングルスレッドよりは強くなっています。 5. 定跡 定跡に詳しい人の力を借りて作りました(予定)。 定跡通りに指す限りでは差をつけられることはないと思います。 フォーマットは、やねうら王定跡フォーマット2016からbestmove以外を除外したものを採用しています。 bestmove以外を除外したのは手入力で定跡を追加できるようにしたかったからです。 floodgateに常駐させ、定跡を作るための棋譜を集めています。他の方はおそらく学習目的で常駐させているのだと思いますが、 読み太の場合は負けた将棋に対して定跡に敗着がないか探し、正しい対応を登録しなおすことが目的です。 といっても自動で定跡登録を行うような枠組みは用意しておらず、手作業でそれを行っているのですが、敗着を指した局面に対して同じソフトに考えさせても 正しい答えが得られるとは限らないので、仕方ない部分もあるかと思います。しかし、選手権までに時間があればそのような枠組みを用意したいです。 (4/30追記) 詳しい方の協力を得て危険な変化や、最新定跡を教えて頂きました。 ご協力くださった方、ありがとうございます。 定跡の追加は、今のところ手作業で行っており、自動化はできていません。 読み太は ・stockfish ・やねうら王mini ・Apery ・Bonanza を大いに参考にさせていただいております。作者様に感謝申し上げます。 2016/3/24 2016/4/30追記 今回、やねうら王の作者の磯崎様からたくさんのアドバイスを頂きました。 4/30に追記している変更点はそのアドバイスを受けてのものです。 ありがとうございます。