やねうらお について

BM98,BMSの生みの親 / ヒルズにオフィスのある某社CTO / プログラミング歴37年(5歳から) / 将棋ソフト「やねうら王」開発者 / 音楽理論ブログ / 天才(らしい) / 毎日が楽しすぎて死にそう

Stockfish DD – timeman 時間制御部

今回は思考時間制御部(time manager)です。現局面での次の1手に使うべき時間を計算します。

maximum search time = 今回の指し手で使える最大思考時間。fail high/fail lowした場合など、この最大時間までは使うものとします。(残りの手数に応じて時間をある程度残しておかないといけないので、この値は残り持ち時間のすべてではありません。)

optimum search time = 今回の指し手で使える平常時の目安時間。

unstable PV Extra Time = 反復深化のiterationを深くしていくときにPV(最善応手列)が変化したときは評価値が不安定な局面だということで与えられる追加の思考時間。

続きを読む

ブラウザ版やねうら王について

電王戦リベンジマッチ、「森下9段 vs ツツカナ」は、私の発言が引き金となって、この企画が実現したという経緯もあって、ハラハラしながら見ています。現在、深夜の3時15分。森下先生が大優勢ながら、ツツカナの入玉がありそうで終局までにはまだ時間がかかりそうです。本局は、ヒューマンエラーさえなければ人間はコンピューター将棋とまだまだ戦えるということを知らしめたことに大きな意義があったと思います。年越しにこんな素晴らしい対局を見れたことで、今年一年はいい年になりそうです。

お返しというわけではありませんが、私のほうから皆さんにお年玉があります。

ブラウザ版やねうら王の公開についてです。
応援していただける方は、下のツイートをRTしてください。

【追記】
・夜中の3時17分なのにツイートしてわずか5分で100RT突破!!これは、本当に1000RT行きそう!?
・ツイートして16分経過で200RT。48分経過で300RT。
ツイートして9時間足らずで1000RT達成しました!!たくさんの方に応援していただけて本当に嬉しいです!!

今年一年を振り返って

Kasparov201411

将棋電王戦の振り駒のために来日していたカスパロフ氏とツーショット。(左がカスパロフ氏、右がやねうらおです。念のため)
氏は15年間チェスの世界タイトルを保持し続け、1997年にIBMの作ったコンピューターチェスDeepBlueと対戦したことはあまりにも有名。現在は政治家なのだそうです。

今年の電王トーナメントでも前評判では「激指先生が出てくるならやねうら王なんかお呼びじゃねーよ」という声が多かった。

それが激指先生がやねうら王に二連敗(予選と本戦)すると、「激指たいしたことねーなw」「激指なんのために出てきたんだ?www」「やねうらおさんはマジ天才だな」とか、手のひら返しがひどすぎる。

続きを読む

Stockfish DD – bitcount.h

今回はStockfishのbitcount.hです。これは、2進数的に見て1になっているbitの数を数えるというものです。いわゆるpopcountですね。SSE4.1以降であればx86/x64ではpopcnt命令が使えますので簡単なのですが、そうではない環境ではビット演算のテクニックを用いて求めることになります。

続きを読む

Stockfish DD – bitboard

Stockfishのbitboardは、チェスなので盤面が8×8 = 64升であり、64bit変数に収まります。(将棋の場合、81升なので128bit変数もしくは、64bit変数が2つ必要になります。)

あと、magic bitboardと言う仕組みが使われています。これは斜めに利く駒の利きのbitboardに対して掛け算を使って連続するビットに移動させるテクニックです。→ Magic Bitboard – Chess Programming Wiki

Haswell以降であればBMIを使うべきでしょう。→ BMI使ってますか?

続きを読む

定跡の生成に使った評価関数を用いるべき?

定跡の生成のため探索をして評価値が一定以上悪くなる指し手は定跡DBには登録しないだとか、探索して棋譜の指し手の評価値を定跡DBに記録しておき、ベストの評価値とかけ離れた評価値の指し手は採用しないだとかして定跡DBを作っていたのですが、少し興味深い現象があったので書いておきます。

続きを読む

Stockfish DD – rkiss

今回は擬似乱数生成器です。世間では「乱数と言えばMT(Mersenne twister : メルセンヌツイスター)乱数だろ」と思われているかも知れませんが、MT乱数は生成に結構コストがかかるので、ベストなソリューションとは言えません。かと言って、組み込み系の乱数は乱数の精度が今ひとつですのでそういう部分で偏りが出るのは困ります。(定跡選択で乱数を使うので、乱数に偏りがあると連続自己対戦の勝率に偏りが生じかねない)

Stockfishで採用されているのはRKISSという乱数で、この乱数の実装を見るためだけにでも、Stockfishのソースコードを読む価値はあると私は思います。

続きを読む

Stockfish DD – types.h

今回はStockfishのtypes.hの解説です。このファイルはBonanza6で言うとshogi.hに相当するもので、チェスで使う基本的な構造体の定義が一式書かれています。このファイルの内容を頭においてからソースコードを読み進めれば細部まで理解しやすいでしょう。

続きを読む