■きのあ将棋について ○作成 :2018/03/31 ...過去のものを元に作成。 現在(2018/03/31)、 2018年の将棋思考エンジンの研究は環境を整えただけでまだ進めてないです。。 ですので、現状の特徴や昨年までの模索、ならびに模索予定の内容を記します。 ●きのあ将棋の特徴 1手ごと思考エンジンを実行し、次の着手を思考する方法を採用しています。(2011年採用) ・この方法のメリット →1台のマシンで沢山の相手と対局する際にて、コンピュータ資源の節約。 →思考プログラムの実行を管理しやすくなる。など。。 ・この方法のデメリット →前回の思考時のハッシュの利用ができなくなる。 →相手の思考時間を有効利用できない。など。。 ●使用ライブラリなど 現在のところ過去においても将棋ライブラリの利用ならびに利用予定なし。 他プログラム(手作成も含め)の評価値や読み筋、定跡データなどの利用もなし。 プロ棋士の棋譜データの利用のみあり。(椿原チーム様から。椿原チーム様ありがとうございます) とはいえ研究開発を汎用化/効率化の目的から、きのあ将棋/囲碁などで共通化する仕組みを模索。 (過去のPR文章にも書いた記憶) ですので昨年2017年から、 きのあ将棋と囲碁でコピペで使いまわしていたところをライブラリ化をすすめています。 2018年wcscでは実使用を間に合わせたいです。 ●最近の模索:評価について ここ数年、加算連結する評価処理、乗算連結する評価処理をしたものを、 抽象化しくりかえし処理をさせる評価関数を作成。これを機械学習する模索をしていました。 ↓抽象例 加算連結の評価 = (A[i]+B[i]+C[i]+D[i]) + (E[i]+F[i]+G[i]+H[i]) + (I[i]+J[i]+K[i]+L[i]) … 乗算連結の評価 = (A[i]+B[i]+C[i]+D[i]) * (E[i]+F[i]+G[i]+H[i]) * (I[i]+J[i]+K[i]+L[i]) … ながらく乗算連結の方に期待(表現力が高いと考えていた)していたのですが、 結局は加算連結より機能しませんでした。 原因は機械学習時のパラメータ値が発散するためだと思われ、乗算連結は断念する方向。 (ですので今年は昨年までと同様に加算連結を採用予定。) 今年は加算連結のみですすめる代わりに評価関数の機械的構築を実現したいと考えています。 ●最近の模索:機械学習について 評価パラメータにノイズを加味する際において、 「2重の乱数方式」で行っていたのを「2の倍数固定値方式」に変更しました。 // 2重の乱数方式 for( g_noise = 0; g_noise == 0; ) { g_noise = ((QiRand_rand()%17) -8) +((QiRand_rand()%17) -8); } // 2の倍数固定値方式 for( g_noise = 0; g_noise == 0; ) { g_noise = ((QiRand_rand()%3) -1) *16; } // メモ // 上記は実際のプログラムから抜粋 // QiRand_rand関数 :rnd関数と使い方が同じな精度の高い乱数生成関数 // for文は乱数加算値が0になるのを回避する目的 昨年(2017年)に発見した「2の倍数固定値方式」は、 学習結果のパラメータ精度は収束までにきわめて高速(少ない計算量)に機能します。 他にも、計算資源をより消費することで精度向上が担保される性質を持ちます。 具体的にはパラメータ精度の粗さは、必要に応じて2の倍数の固定値を利用し分解能の精度とします。 これにより細かい精度は、粗い精度がとりえない値を取ることを保証することが可能になります。 例として ±128固定でパラメータ調整した時:  prm1 = 128  prm2 = -128  prm3 = 512  prm4 = 384 例として ±16固定でパラメータ調整した時:  prm1 = 144  prm2 = -112  prm3 = 544  prm4 = 368 ※当然「2重の乱数方式」などの方式でも乱数の取りうる値を、  学習が進むにつれ小さくするやりかたは一般的であることは把握しています。  ですが今回の方式は、パラメータに加えるノイズを2の倍数の固定とし分解能を表すことが特徴。 「2の倍数固定値方式」は、評価関数の機械的構築に貢献できるものと考えています。 End