//*************** 名前の由来 *******************// 「イチビンイチ」ではありません。「イッヒビンイッヒ」と発音するドイツ語です。よろしく。 ドイツ語直訳  ―> 私は私 ドイツ語跳訳 ―> じゃがわしい、俺は俺だ。 //*************** アピールポイント *******************//  大会ルールの改訂に伴い開発方針を大きく変えました。いままではライブラリー未使用を基本方針としてきましたが、今回はライブラリーを使用させていただくことにしました。 1.背景 28,29回大会はJavaでプログラムを書いていましたが、そろそろ飽きてきたので方針を変換します。 他人様が創られたライブラリーのほとんどは、C++で書かれています。30回大会はC++を使います。 基本の出発点はやねうら王様のV4.86(以下、YO4.86)を出発点としています。YO4.86をほんの少しいじっては性能を見たりしていますが元祖YO4.86を超えることはできません。YO4.86が極限にまで調整されていることに驚かされます。 2.評価関数の工夫 (a) 29回大会は、いわゆるKPからなる独自の評価関数を使っていました。この29回大会評価関数(KP)を無理やり三駒関係(以下、「無理やりKPPT」と呼ぶ)に変換して、V4.86への評価関数の整合化を行いました。 (b) その後に、YOV4.86のlearnコマンドを使って強化学習を行いました。 強化学習は、「無理やりKPPT」の強化学習済み評価関数を使って教師局面を作成しました。浅い読みによるおかしな評価値を排除する方法が何とかならないかと考えて、統計的な方法で選別することを試しています。 (c)1月の時点で、「無理やりKPPT」を発展させる強化学習と、一方、NNUE型の評価関数の強化学習にも取り組んでいます。今のところ(2020年2月)、思うように強化学習は進んでいません。 既存の公表されている優良評価関数を使って追加学習を行うのも手ですが、これをやってしまうと、富士山にヘリコプターを使って登山するようなものになってしまうので、どんなものでしょう。 //***************************************// //***************************************// //***************************************// //***************************************// //*************** おまけ *******************// //***************************************// //***************************************// 以下は、私のコンピュータ将棋に関する1年です。 (5月) ・選手権が終了した。1次予選の成績が4勝4敗、前回大会が3勝5敗であったことを思えば少しは成長したかな。全体の順位は38位、昨年が43位だったから、5アップしたことになる。2次予選、決勝戦と観戦したが、大会を通して会場内を包む和気あいあいとした雰囲気は、とても心地よい。次回も参加するつもり。 ・これから取り組む2020年バージョンは、基本的に(1)データ構造を含めて根本的な作り直しは行わない。したがってc++には戻らずにjava路線を引き継ぐ。(2)せっかくNPSを犠牲にして利き情報を使っているのだから、評価関数に利き情報を活用する。(3)2019年バージョンでは諦めた強化学習に再度チャレンジする(4)他人様が公開しているソースコードを参考に、枝刈り、読み延長・短縮についてしっかり考えてみる。ということで、まずは贅肉がついてメタボ化してしまった本体を削って骨格だけにして、詰めルーチンのチェック。2月にバグ治しを行ったときに、バグ治しの検証をしっかり行わなかったことが災いして、歩・香車・桂馬を使った合いを読まなくなっていた。また、歩詰めに関する処理が完璧ではなかったことがわかる。これをしっかり治す。そして新たなチャレンジとして未展開局面に達したところで、pn=1;dn = 1;とするところを、利き情報を利用して、pn =max(1,王の自由度) ; dn= 1にしてみる。これは結構な効果があり、検証用に使っている「内藤国男:〜」の第1問から第80問までを、いままではサイクルにハマって解けなかった問題も含めて、1問あたり500ミリ秒(surface pro3: i5)の制限時間で全問を解くことができるようになった。詰めはここまで。例年のことだが、5月は選手権の余韻で元気があるのだが、しだいに気力がなくなっていく。 (6月) ・世界ナンバワンに到達したやねうら王さんのソースコードをWEBからダウンロードして拝見。第一印象は、世界1を競い合うプログラムとはこういうものかと呆然とした。脳細胞に辛子を振りかけられたような久々の高揚感を感じる。ライブラリー使用への誘惑に駆られる悪魔の囁きが聞こえそうなソースコードだ。 ・やねうら王のソースコードを観た後、さらにやる気がなくなる。 (7月) ・Visual Studio 2019 をダウンロードする。そしてやねうら王のソースをコンパイルしてみる。なんと、一発ですんなりと成功する。良い出だし。少し、プログラムがどう流れるのか少し試してみる。C++は、ここ4〜5年触っていないが、少しづつ思い出す。駒割りだけでもコンパイル可能なようにdefineされている。これはよい。それにコメントも親切に書かれている。 ・qsearchのevaluateに、ichibinichiの思考部分をぶちこんでみようかと考え始める。やねうら王とichibinichiのデータ構造がかなり違うので、いくらかの処理は必要だが、どんなものかと興味本位に改造に着手する。WCSC29では54チーム参加で38位のミジンコ脳が、大会制覇の世界一の筋肉脚をどう操ることが面白そう。 ・致命的なドツボにハマることもなく、自分自身もびっくりするくらいのトラブルレスで作業が終了。さっそくやねうら王(V486)の駒割りバージョンのみと対戦させてみる。260勝22敗で勝率は92%。みじんこ脳は一応、やねうら王から拒絶反応は受けずスーパー筋肉脚を使いこなしているようだ。 ・さて、これからどうしよう。ついに禁断の果実をかじってしまった。 ・大会参加にはオリジナリティが必要だ。「やねうら王みじんこ脳バージョン」でも、一応、思考部分は自作ということなので大会参加規程はクリアできそうだ。ただ、今は7月。これから来年の5月まで、何をしよう。 ・長い梅雨が続く。 (8月) ・とにかく暑い日が続く。中だるみ状態。 (9月) ・忙しい日々が続く。何もできず。中だるみ状態。 (10月) ・忙しい日々が続く。中だるみ状態。 (11月) ・NNUE全盛の時代を迎えている。周回遅れも甚だしいが3駒関係の強化学習ですこし道草を食べてみることにする。 ・ichibinichiは、基本的にKPと利きをボナンザメソッドで学習している。まずは、3駒評価型の評価関数の原型を作ろうと考える。29回選手権のKP型を無理やりにKPP型に変換することにする。これは、オリジナルのKPとコピーしたKPを独立した評価関数とみて、やねうら型KPPにそれぞれを無理やり代入し、2で割って、いいかげんながらできあがり。それをまたまた無理やりコピーして、KPPTに拡張する。KKとKKPは、ヌルベクトルとしてゼロを代入する。これで、やっと、やねうら王のライブラリーに整合したKPPT型になる。この状態で、やねうら王(V486)の駒割りバージョンと対戦してみる。まあ、こんなもんか。 ・ルール変更の連絡を受ける。他人様のアイデアや成果物を使うことの制限がかなり緩やかになった印象。ただし、独自のオリジナリティは必要なようだ。 (12月) ・ひたすらKPPTの学習のためにPC資源を投下。300万ノードに限定してfloodgateに投入。Gikouとの勝率は2割程度。ここで壁にブチあたる。 ・NNUEの勉強を始める。評価関数をヌル状態から学習を始める。全然、うまくいかない。3駒関係の学習と比較するとかなり癖がありそうだ。KristalweisenのWCSC29のアピール文書を参考にして試行錯誤を繰り返すが、すぐに鞍部にハマってしまいうまくいかない。何か工夫をしないと駄目な感じ。 ・クリスマスとともに、WCSC30の参加案内を受け取る。これを受け取ると1年の終わりを感じる。 (1月) ・年始に家族でベトナムへ観光旅行。帰国後、体調を崩し不完全状態が続く。2週間経っても完治しない。 ・NNUEの強化学習で試行錯誤を繰り返す。一方、教師データから悪手排除の方法を考えてみる。やねうら王のlearn コマンドを使って、教師ファイルをbinファイルからtxtファイルに変換する。いろいろと試してみる。 (2月) ・NNUEの強化学習で試行錯誤を継続。すこしづつ手ごたえを感じる。喜んだり落胆したりの繰り返し。コンピュータが1台空いていたので定跡つくり用に活用。Javaを使って、やねうら王が吐き出す教師ファイル(.txt)をいろいろと加工して何とかならないかと思案を続ける。 ・WCSC30 (3月) ・現時点でのアピール文をアップロードする。