2012-01-01から1年間の記事一覧

パターンマッチ

http://www.computer-shogi.org/wcsc22/appeal/Kuma_Shogi/kuma.pdf アピール文のように、新特徴として玉の周囲3×4マスの マッチングをかけているのですが、どうも動作がおかしいと思っていたら、 学習時のハッシュ値と試合時のハッシュ値が違っていたようで…

あと10日

矢倉20000万局を学習中。 これで選手権に出る予定です。穴熊は無理でした。 あとは定跡を増やすくらいかな。

あと2週間

忙しくて何もやっていないです。ponderを加えたくらい。 穴熊棋譜で学習を回しているけど、矢倉で学習した時よりも弱い。 たまに穴角を組んだり、飛車を玉横に移動したり、意味不明な動作をする。 穴熊を学習させるのは難しいのかもしれない。bona6のfv.bin…

切手

趣味の話です。さっき、定食屋でビックコミックよんでいたら キッテデカという切手の漫画があった。 切手が流行っているのか。 内容は、日付が24.11.1という消印が押してあって、 昭和と平成を間違う、みたいなオチ。 当時の国内便は櫛型印なので消印の形を…

相性

自力学習して投入したsimk_10000_prですが、floodgateのレーティングが 1850程度で前回とあまり変わらないどころか、 sakurapyonファミリーに負け続けて、以前より弱くなったかも、 学習に失敗したかも、と思っていたけど、 gps_normal付近の勝率は割と良い…

simk_10000_pr再度

もろもろのバグを直して、再度、10000局で学習させたバージョンです。 バグを直したはずなんですが、前回と比べてあまり強くなっていない気がします。 学習では、深さがルートから1手+静止探索でPVを作っているけど 浅すぎるのかもしれない。反復回数…

しばらくすると消えてしまうので保存。 ponanzaには、逆王手をかけるとそのまま相手が止まってしまったので 勝っている模様。

simk_test その2

静止探索を修正したらgps_normalに勝ち越すようになった。 ただし、これはディスクトップPCでbona6のfv.binを使ってでの 強さで、選手権ではノートPCと自前fv.binなので、これよりも 大幅に弱くなる。学習の方も文字コードを全部utfにしてビルドしなおした…

g++のコメント文

to = attack_koma[player][type][pos].pos[i]; // 移動先が自分の駒でなければ移動可能 if(in->kifu[to] <= 0) { ..... というプログラムがあって、VC++だとちゃんと動作するけど g++で実行すると、in->kifu[to] 必ずif文を実行してしまう現象が起きていた。…

静止探索の安定性

http://wdoor.c.u-tokyo.ac.jp/shogi/view/2012/03/28/wdoor+floodgate-900-0+Kakinoki-Test+simk_test+20120328173007.csa/89 9 8 7 6 5 4 3 2 1 P1-KY * * * * -KI * -KE-KY P2 * * * * -KI * -GI+KA-OU P3 * * * * -FU-FU-FU+FU * P4-FU+NG * * -KE * +GI…

simk_test

simk_10000_prでいくつかバグが見つかったので直して、 オリジナルfv.binで再度投入したバージョンです。 これでも終盤に急に負けるケースが多発していたので おかしいと思って調べたら、王手回避手の生成にバグがあった。なんてことだ・・・ あと、ボナンザ…

simk_10000_pr

10000局で学習させたバージョンをfloodgateに投入中。 一回のイタレーションに8時間ほどかかっている。 更新したら随時プログラムに反映されている。 じわじわと強くなっているようで現在はR1900くらい。 ただし、自玉の安全評価が甘いようで、途中まで優勢…

simk_1000_p

1000局で学習したバージョンをfloodgateに投入しています。 3駒関係+玉の周囲の駒特徴を入れています。学習した駒割は以下。 歩 96 香 286 桂 278 銀 385 金 496 角 569 飛 692 と 464 成香 520 成桂 483 成銀 484 馬 748 龍 899 そんなに変な値にはなって…

駒割の学習

作ったルーチンで、テストで1000局面の学習を行ってみた。 歩を100に固定。以下は結果。 歩=100 香=156 桂=135 銀=176 金=253 角=283 飛=316 と=360 成香=269 成桂=260 成銀=231 馬=393 龍=459「と」が大きいが気になるが、なんとなく、あっていそう…

ペナルティ

微分値が小さな特徴値はゼロの方向に向かうように更新している。 頻度が少ない特徴値は微分値が小さくなる傾向にあり、 頻度が少ない特徴量は信頼できないものと見なすことになる。

KPPの対称性

KPP=[王][駒1][駒2]の対称性は2種類ある。 一つは、駒1と駒2の対称性で、[王][駒1][駒2]=[王][駒2][駒1]。 この対称性でメモリを半分にできる。もうひとつは、左右対称性。9九玉と1九玉の評価値は同じにしている。 これは右玉と左玉の区別がつかなくなる…

ボナンザメソッドあれこれ

並列学習ルーチンができたので学習中。 探索の並列化は大変だけど、学習の並列化は割と簡単にできた。 これにて脱ボナンザライブラリは達成できそう。 オリジナルのfv.binを超えるものは作れそうにないですが、 今のままだと、クマ将棋は何も特徴がないので …

なんちゃってレーティング計算

例えば、A〜Dの4人の勝率マトリクスが以下のようになっていたときに、 A B C D AのB,C,Dへの勝率 0.50 0.10 0.90 0.99 B 0.90 0.50 0.80 0.99 C 0.10 0.20 0.50 0.99 D 0.01 0.01 0.01 0.50 このようなレーティングを計算するコードです(A=2150で固定と…

KPPの差分評価メモ

3駒関係(KPP:[王][駒1][駒2])の計算部分は簡単に書くと以下のようになる。 for ( i = 0; i < nlist; i++ ) { for ( j = 0; j <= i; j++ ) { sum += PcPcOnSq(sq_bk0, list[i], list[j]); } } listに駒種+駒位置情報を入れて2重ループを回す。 KPPの対称…

合議考察

色々と改良をしていますが、なかなか強くならないようです。 強くなっているかもしれないけど、自己対戦だと分からないのかもしれない。 合議の各クライアントの指手を見ているけど、 ほとんどの場合、同じ手を指すことが多い。 合議なので、価値観が異なる…

bonanza6.0でプロファイル取ってみた

局面評価と差分評価の比重が大きい。SEE(swap)やattacks_to_pieceは、simkに比べて小さい。 ビットボードにしないと駄目かもしれない。ただ、そうするとますます、ただのボナンザになってしまう。

解析結果

こんな感じでした。evaluate_pos2という局面評価部分が重いのは仕方がないとして、 get_attack_to_pos_allとseeにかなり重いのが気になる。get_attack_to_pos_allは、あるマスへの利きを持つ駒を全て調べる関数で seeの計算に使っている。要するに、seeがか…

プロファイル解析

プログラムのボトルネックを探すために、以前に一度プロファイル解析を vs_profiler_x86.exeというものを使ってやったけど、コマンドラインで出力結果もテキストファイルで すごく面倒という印象があったのですが、 AMD CodeAnalyst Performance Analyzer ht…

楽観的合議

そこで、文殊でも採用している楽観的合議を使ってみることにした。 これは、単純に各クライアントの最善手の中で最も評価が高い手を採用する方法。 たしかに楽観的すぎる気がするが、なんか良い気がしてきた。 でも、これも戦わせてみるが、強くなっているか…

重みの制約付き最適化

そこで、重みをGAで求める際に、最善手の重みが最も高くなるように制約をつけた。 すると、1クライアントでは38%くらいの一致率が40%くらいに若干増えた。 合議vs非合議で戦わせてみるが、強くなっているか弱くなっているか良く分からなかった。 あ…

次善手・次々善手の重み付き投票

最初に試したのが、最善手だけではなく、次善手、次々善手を求めて、それぞれに 重みをつけて投票するやりかた。重みは一致率が高くなるようにGAで最適化。 これで一致率が70%と驚愕の数値(バグかと思った。でも実はバグかもしれない)がでたので 喜ん…

【将棋】合議のテスト中

4つのクライアントで合議をやると弱くなっているようなので、まだfloodgateに投入していません。 いろいろな合議の方法を試しています。

【将棋】オーダリングメモ

忘れないうちにクマ将棋のオーダリング順序メモ。 以下の順序でオーダリング。具体的には手に点数をつけて、std::sortでまとめて並び替え。 逐次生成しておらず(ビットボードではないので難しい)、ソートに時間がかかりそうなので、 1番良い手と2番目に…

【将棋】合議の実装

合議の実装が大体終了。 並列探索を行うには、局面構造を変えないといけないし、 (今のクマ将棋は探索局面とハッシュをstaticに持っている) マルチスレッド処理の方法がよく分からし、 そもそも並列探索自体がとても大変そうなので 実装が簡単そうな合議に…

KPP評価部分

以下のようにして、listを作成した後、例のlist加算で評価できます。 (ボナンザのソースを見たことがある方はピンとくると思います) for(pos = 0;pos < 81;pos++) { koma = in.kifu[pos];// 駒種 switch(koma) { case KOMA_FU:// 先手 歩 // KKP加算 ret =…