( 2019.3.19追記 ) *プログラム名称  Ichibinichi(イッヒビンイッヒ)、ドイツ語で「俺は俺だ」をイメージしたつもりです。昔は、「Wildcat」という名前で出ていました。 *開発言語  javaです。Javaでの参加は2回目です。 *プログラムの特徴  これぞという工夫がないのが残念です。古典書のような内容です。 探索部分は、αβ法を基本に、全幅探索、aspiration search、futility cut、null move search, 多重反復深化、並列探索(検討中)、ポンダー探索などで組み立てています。ビットボードは使っていません。 評価部分は、いわゆる KP + 王回りの利き + 悪形排除のための簡易型3駒関係(序盤のみ)の3つです。プロ棋譜33000を使ってボナンザ法で学習した評価関数(A)と、下記の参考文献を参考に、水平線効果の出現を極端に制限した特別バージョンを作って約10万の自己対戦棋譜を作成し、プロ棋譜では出現稀な局面を玉の盤面上の位置から判断して選出し、ボナンザ法で学習し?た評価関数(B)を作成しています。評価関数(A)と評価関数(B)をブレンドして評価関数(C)をつくり、これを最終的な評価関数にしています。   (参考文献) ・林伸也、浦晃、三輪誠、田浦健次郎、近山隆。自己対戦棋譜を利用した半教師あり学習による将棋の評価関数の学習。第16回ゲームプログラミングワークショップ2011 *********************************************** *********************************************** 以下は、開発月報です。ご参考までに。 (5月) ・大会では3勝5敗の成績で1次予選敗退。Java、並列化なし、評価関数(要素数は約1万)は4年前作成のものの使いまわし、貧弱マシンパワー、まあこんなもんだなあという感じ。 ・次回大会の目標を「1次予選で勝ち越し」ぐらいかなとボヤーと決める。 ・データ構造を含めて、抜本的な見直しからの作り直し作業の開始。move生成のところで、前バージョンより2割弱のスピードを改善。 (6月) ・差手生成にバグはないか念入りに調べるために詰将棋用のプログラムを作成開始。桂馬、香車の非合法手生成のバグをつぶす。前年作成のdfpnを小修整して移植する。詰プログラムを作ったところで小休止。 (7月) ・オンライン学習に挑戦するために方策勾配法についてちょっかいを出し始める。下記の論文を目を皿にして読んでみるがチンプンカンプン状態(ボルツマン分布なんて、大学の授業だけの世界だと思っていたのに、こんなところで再会するとは…。あんまり真面目な生徒ではなかったからなと、今になってもっと勉強しておけばと後悔)。そうこうしているうちに忙しさにかまけて、コンピュータ将棋開発から一時的に遠ざかり始める。 (8月) ・今年の夏は異常に暑い。お盆は家族でカナダ旅行。仕事がメチャクチャに忙しくなり、しばらく休戦状態。 (9月) ・大槻知史さんがWEBで公開している「迷路の強化学習」には、C言語のソースコードが付属していた。これを自分なりにJavaに書き換えて走らせてみる。いろいろとパラメータを変えてみる。するとおぼろげながら方策勾配法とは何ぞえといういうことがわかり始める。再度、将棋関係の方策勾配法の論文再読を始める。なるほどなるほどだ。 (10月) ・これとは別に、何年か前にボナメソで評価関数をつくるプログラム(c/c++)があったので、javaに書き換えて、評価項目数を100万程度に増やして走らせ始める。(ちなみに29回大会バージョンは、KPの相対位置評価だけで項目数は約1万。)序盤の駒組はうまく行っているようなので学習はしているようだが、いまひとつシックリしない。 ・大槻知史さんがWEBで公開している「迷路の強化学習」について、結果が収束しない。どうしてだろう。書いたプログラムは何回も見直した。しかし間違いはなし。1週間ほど、考え抜いたが理由はわからず。ただし、方策勾配法とは何ぞえには手ごたえを得る。 ・鶴岡先生(劇指作者のひとり)の選手権優勝記―劇指の技術的改良の解説―を参考にプログラミングを開始する。 ・最近、仕事がゴタゴタしていて1週間に1〜2時間しかコンピュータ将棋にタッチできない。それに、眼球に疲労を感じる。今、一番、欲しいものはハイパフォーマンスのPCとその電気代、そして24時間モニターを凝視できる頑強な視力かな。 (11月) ・ボナメソによる評価関数でバグがボロボロと見つかる。致命的なのは、静止探索に入った後の読み筋を考慮していなかった。なんでこんな基本的なところで間違うのか。自分の注意力不足に愕然とする。静止探索に入る前に読みを打ち切っても学習は一応するはずだ。やけにトータルの学習時間が短いなあと思っていたが原因がわかった。 ・「選手権優勝記―劇指の技術的改良の解説―」を細々とコード書き。考え自体がシンプルだから、意外と、早い。 ・javaに限界を感じる。#define , #ifdefなどが使えないのがもどかしい。cと比べるとマニュアル車とオートマチック車ぐらいの違いかな。 ・大会事務局から連絡を受ける。ライブラリー使用が厳しくなる。私は他人様が作ったコードを丸ごと使うことには興味がない。富士山にヘリコプターを使って登っても楽しくないのではないだろうか。 (12月) ・コンピュータ将棋大会開催事務局から、ルール変更の通知をもらう。思考時間の管理は、もう少しあとからやろう。 ・大会用のハードウエアについて考慮し始める。ぜひとも新マシーンでチャレンジしたいものだ。 ・生まれて初めて病院に入院する。1泊2日の検査入院。体のガタは日増しに増加、脳みそも同じように劣化しているかと思うと寂しいものだ。検査結果は癌にはノーヒット。 ・教師なし学習について試行錯誤を続ける。もう半年は道草を喰っているなあ。理論上はうまくいくはずなのだが、プログラムにして動かしてみるが思い通りに行かない。次回大会も、ボナメソで参加濃厚。進歩なしか。 ・コンピュータ将棋大会開催事務局から、大会開催の案内を受け取る。参加の手続きを行う。 (1月) ・家族で台湾旅行。楽しかった。大会参加費を新年早々に振り込む。1万円が消えた。5000円の食事を2回喰ったと思って我慢。 ・キラームーブの合法性をチェックするところで、前々からバグらしきものの存在を感じていたが、やっと明らかになる。気分的に少しすっきりした。 ・探索の並列化を模索。例によってうまくいかない。 ・並列探索がなんとか動くようになる。並列に探索していることは確かなのだが、なぜか速度があがらない。2スレッドで走らせても、1スレッドと変わらず。むしろ並列のためのオーバヘッドがかかって、遅くなってしまっている。これってJavaの宿命なのだろうか。ネットで調べると、物理メモリーの量が影響するとか。開発用にsurface pro 3(4GB)を使っているが、メモリーがあまりに貧弱なのが原因だろうか。 (2月) ・10秒将棋の自己対戦棋譜を眺めて愕然とする。救いようがない指手ばかりだ。 ・並列探索と格闘。動作が今一つだ。今のままでは、実戦投入には、ちょっと無理。 (3月) ・並列探索は、ひとまず休憩。先読み探索を考えてみる。これはすんなりとうまくいく。 ・なんとこの時期になって、差し手生成のところでバグを発見する。自玉王が先手の場合は最上段(後手の場合は最下段)にいる時に、王手を掛けられた際の合い処理で動けない歩打(非合法手)を行っていた。王手対応の処理がいい加減でした。めったに起こらないから今まで見落としていたようだ。 (今後の予定)  5月の大会までにやりたいことは、並列探索のブラシュアップ、LMRや各種パラメータの調整ぐらいかな。結局、強化学習は、半年ねばったができなかった。 平行してFloodgateに投入して武者修行も必要かなと考えています。それでは大会でお会いしましょう。川崎の産業会館へは歩いていけますので、とても楽です。