サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
円安とは
ls3600.hatenadiary.org
知っている人は知っているかと思いますが、Haswellになってから、Bit Manipulation Instructions Sets (BMI sets)という命令セットが使えるようになりました。 http://en.wikipedia.org/wiki/Bit_Manipulation_Instruction_Sets#BMI2_.28Bit_Manipulation_Instruction_Set_2.29 SIMD用ではないので汎用レジスタ(64bit)に対してしか使えませんが、面白い命令がいくつかあります。 例えば、PEXTというParallel bits extract命令。これはなかなか使えます。 例えば、60bit目,30bit目,12bit目を1にしたbit maskを用意したとします。このmaskを指定してPEXTを使うと、入力レジスタの60bit目と30bit目と1
■ Bonanzaの定跡データベースはどういう構造になっているのか? 指し手生成について一通り解説が終わったので、その他の部分を順番に解説していく。 解説していくとは言うものの、私自身そんなに時間がとれるわけではないので、Bonanzaのソースにコメントを大量に追記した私のソース上のコメントをその解説代わりとしたい。 ■ 定跡ファイルの構造 Opening Book Data Structure: Index BookData 定跡データ構造は、 Index BookDataで構成される。 Index: IndexEntry.. (NUM_SECTION times) Indexは、IndexEntryがNUM_SECTION回ある。 IndexEntry: SectionPointer SectionSize IndexEntryは、SectionPointerとSectionSizeか
どちらも強いプログラムなのに、未知の局面への対応力に差が生じるのは不思議ですね。 http://d.hatena.ne.jp/yaneurao/20140208#c1392482608 棋譜からの学習は、いわゆる「機械学習」の考えを用いていますが、この機械学習にはL1正則化だとかL2正則化だとかがあります。簡単に言ってしまえば、出現しなかった評価項目はゼロするという縛りみたいなものです。この縛りを入れないと、出現頻度が低かった因子(評価項目)に対して棋譜との一致率を上げるためにどこまでも大きな値がつく(発散する)ことがありえます。これを回避したいというのがL1/L2正則化を行う主な動機です。 ところが、このような正則化をしますと、棋譜に現れなかった因子はすべてゼロになってしまいます。Bonanzaで入玉の評価が著しく下手なのも、入玉棋譜が足りていないため、おかしな値しかついていない(もしく
■ posi_t構造体 Bonanzaでは局面を表現する構造体posi_tはshogi.hで定義されている。 構造体のそれぞれのメンバ変数がどういう意味を持つかについては、それが使われているところを見るのが一番手っ取り早く、具体的には、指し手生成(makemove.c)のソースを見るのが一番早い。 それぞれの変数が何を意味するか、補足用のコメントを追加しつつ引用すると次のようになっている。 // 局面 typedef struct { // 局面のhash値 uint64_t hash_key; // --- 各駒のbitboard // b_ はblack(先手) , w_ はwhile(後手) // 先手/後手の駒の有無(駒があれば1) // このmaskには王も含まれる。 bitboard_t b_occupied, w_occupied; // ↑の駒の存在する位置を示すビットマッ
棋譜からの学習について保木さんにメールで直接教えていただきました 保木さんのご厚意により、メールで質問して構わないということでしたので、私は厚かましくもメールで根掘り葉掘り質問させていただきました。 保木さんに教えていただいた情報のうち、保木さんが公開して良いとおっしゃられた部分に関してはこのブログにて公開させてもらいます。 今回はBonanzaで学習に使用した棋譜についてのことです。以下は保木さんから私へのメールです。 学習に使用したプロ棋士の棋譜 45833 局です。入玉模様の棋譜は1000局以 下だと思います。入玉の局面を Bonanza は殆ど評価することが出来ません。 昔はアマチュアの棋譜で入玉模様のサンプルを増やしていたのですが、最近は しておりません。しかし、将来また使用するかもしれません。用いた Xeon は Harpertown 程度のものだったと思います。 学習の過程で
■ 64bit環境に適したBitboard、RBBが何故必要なのか? 将棋盤は81マスあり、Bitboardでこれを表現しようと思うと81bit必要です。64bit環境であれば、64bitレジスタが使用できるのですが、81bitは64bitレジスタ1つには収まりません。そこで、64bit変数1つと32bit変数を1つのようにBitboard構造体を構成するのが普通です。 struct Bitboard { u64 p1; u32 p2; }; Bonanzaのように3段ごとに32bit変数1つに入れないと、自陣にある駒だけを対象にforeachしたいときに、困ります。 しかし、x64環境では、bsf自体が1命令で出来るので、p1には、64マス分を詰め込みたいのです。そうするとp2は、残り81-64=17マスのみになります。これでは自陣にある駒を列挙しようとするときに、p1とp2にまたがるた
今回は、Bonanzaで使われている特殊な利きテーブルについて解説します。今回は、プログラマではなく将棋ファンの方にも読んでもらえる内容だと思うので、将棋ファン向けに少し丁寧に書きます。 解説が長いのでまず問題だけ書きます。 問1) 後手玉に対して、先手が銀打ちで王手になる範囲はどこでしょう? 問2) 後手玉に対して、先手が駒X打ち(X = 歩,香,桂,銀,金,角,飛)で王手になる範囲はどこでしょう? 問3) 先手の桂馬の移動によって後手玉に王手のかかる桂馬の"移動先"の範囲はどこでしょう?ただし、その桂馬の移動によって空き王手にはならないものとします。また桂馬は敵陣であれば不成ではなく成りも選択できるものとします。 問4) 先手の飛車を移動させて後手玉に王手になる飛車の移動先は? 問5) 先手の駒X(Xは成り駒ではない)を移動させて後手玉に王手になるXの移動先は? 問6) 先手の桂を移動
■ Bonanzaで使われているinsertion sortとは何か? Bonanzaで使われているsort(並べ替え)は、 1) insertion sort 2) shell sort 3) quick sort の3種類である。 3)はCのqsort関数を呼び出しているだけなので解説は不要だろう。また、3)は定跡データベースのメンテナンスにのみ使われており、実際の探索で使われているのは1),2)のみだ。 また、2)には1)が必要である。そこで、今回は1)について解説する。 ■ Bonanzaのnext.c Bonanzaのnext.cは、次の指し手を生成するcoroutineである。ここでinsertion sortが使われている。 指し手生成をcoroutineにしないでいきなり全部の手を生成したり、全部の手に対して点数をつけてquick sortしたりすると劇的なパフォーマンスの
■ 差分指し手生成とメモリコピーの高速化の基礎 差分指し手生成などをしようと思うと、それぞれの駒についての指し手をシリアル化(ここでは一次元の配列にまとめるの意味)する必要があります。 このとき、細切れになっているメモリを一箇所に集める必要があり、この部分をいかに高速化できるかが差分指し手生成が成功するかどうかの鍵になります。 ■ 高速なメモリコピーとは? どのへんの読者を対象にしていいのかわからないので、今回は基礎ということでメモリコピーの基本事項だけ解説します。 差分gencap(駒を捕獲する手)の指し手生成では、駒を捕獲することのできることがわかっている駒を対象に処理します。よって、メモリをコピーするマクロを用意することを考えます。またコピーされるサイズは(指し手が存在することがわかっているところを対象とするので)4バイト以上であり、コピーサイズ0ということはありません。 // メモ
知っての通り、Bonanza6では、手駒の価値は駒割の値 + KPのP=手駒としての値の合計値となる。(実際にはKPPの一つ目のPと二つ目のPが等しいときのKPと、 KKPのP=手駒のほうとがあるが、細かい話は割愛する) さて、駒割の値というのは、盤上の駒と手駒をひっくるめて、歩 = 100点のように点数化してある。 KPのP=手駒というのは、「先手の持ち駒の歩が0枚」「先手の持ち駒の歩が1枚」「先手の持ち駒の歩が2枚」のような状態を一つの駒(P)とみなしてある。 1枚目の歩だけ価値が100点よりは少し高く120点の価値があるとしよう。そうすると「先手の持ち駒の歩が1枚」のKP値には20点がつくことになる。 2枚目の歩は逆に80点の価値しかないとしよう。そうすると「先手の持ち駒の歩が2枚」の価値は-20点がつくことになる。 以下、同様であるのだが、歩を10枚以上持っているような局面はなかな
このページを最初にブックマークしてみませんか?
『Bonanzaソース完全解析ブログ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く