2011-10-01から1ヶ月間の記事一覧

USIプロトコルのponderの仕様と稲庭対策のこと

昨日の記事に対して将棋所の作者様から直々にコメントをいただいたのでお答えします。 相手の正確な残り時間がわからないということですが、そもそも何のために知りたいのでしょうか。相手の残り時間を知って、それをどういうふうに使うのか、少し考えてみま…

USIプロトコルのponderhitについて

将棋所のponderについて http://d.hatena.ne.jp/hiyokoshogi/20111027/1319696413 私が思うに、ponderhitが送られてきたときに持ち時間情報が付与されていないのとかどうなんでしょう。自分の持ち時間はgo ponderのときに送られてきているのを保存しておけっ…

合法手じゃない合法手のこと

■ はじめにBonanzaの指し手生成/合法手判定は結構ややこしく、ややこしい原因は将棋用語にいくつかの用語が不足しているからなのですが、ここではその不足している用語を新たに定義しながら、自分自身のためのメモを書き残しておきます。自分用のメモですの…

3駒関係のパラメーターを計算式で割り出す実験

Bonanzaの3駒関係ですが、このパラメーターを棋譜から学習させたこと、すなわちボナメソがコンピューター将棋のブレークスルーであるように言われていますが、まあ、実際にもBonanzaに関してはその通りなのですが、私は、それより3駒関係という評価関数とい…

Bonanzaの駒の価値はどこに書かれているのか その5

それでは、make_moveでいつ駒割が変動するか考えてみましょう。 指し手を大別すると次の4つに分類されます。1. 駒を取らない、成らない移動 2. 駒を取らない、成る移動 3. 駒を取る、成らない移動 4. 駒を取る、成る移動 1.は駒割は変動しません。 2.は、成…

Bonanzaの駒の価値はどこに書かれているのか その4

p_value , p_value_ex , p_value_pmについて一通り説明が終わったところで、これらの変数がどう使われているかについて見ていきましょう。基本的には、盤面初期化(CSA形式のファイルを読み込んだときや、平手盤面で初期化したときなど)に、ini_game関数(debu…

Bonanzaの駒の価値はどこに書かれているのか その3

p_value,p_value_exの解説は終わりまして、今回はp_value_pmという配列についての解説です。だいたい、Cで書かれたプログラムというのは、型がどれもこれもintになっていたりして、型を見ても何をする変数なのかさっぱりわからないのが実情なんですよね。じ…

Bonanzaの駒の価値はどこに書かれているのか その2

p_valueに関しては、そこから派生する2つの配列があります。p_value_exとp_value_pmです。p_value_exは、p_valueの値を2倍したものです。歩を相手に取られたときには、p_value_ex[pawn]分だけ駒割のスコアが変動します。「自分の駒を失った損」+「相手がその…

Bonanzaの駒の価値はどこに書かれているのか その1

Bonanzaで駒割を計算するときの、駒の価値はどこに書かれているのかというのは、簡単なようで少しトリッキーです。今回はこの問題について説明します。 まず、駒自体の価値は、param.hでdefineされています。 #define DPawn 87 /* 174 */ #define DLance 232…

SEEの高速化について

私は最近何をしているかと言うと…正直、あまりコンピューター将棋の開発はやっていないのですが、まあビールを飲みながらテレビで野球観戦をするような程度の軽いノリでソースコードをいじくりまわして、ああだこうだ言いながら鑑賞(?)するのが趣味です。 最…

CSA形式のデータ書き出し部 解説

さて、今回からはCSAファイルの書き出し部について解説していきます。 と言っても、「CSAファイルの書き出し」の記事は誰も期待してませんよね。 CSAファイルの読み込みにしても、棋譜からの学習のときにCSAファイルを読み込むのにいる程度。 LAN対戦はUSIプ…

探索木のvalidatorを書こう!! その7

前回の問題の解答を。 配列、Board[sq]上に先手玉が二つあるとき、1)〜10)のどこに引っかかるでしょうか。 Bonanzaでは、玉のBitboardというのは存在しなくて(BB_HDKのように他の駒と合成されたBitboardは存在する)、先手玉の位置はSQ_BKINGという変数(実体…

探索木のvalidatorを書こう!! その6

今回はexam_bb(debug.cのなかに書かれている)を見ていきます。exam_bbのbbとはBitboardのことで、Bonanzaの保持しているBitboard盤面の正当性をチェックする関数です。 チェックしている項目は以下のものです。 1) 手番が0か1であること 2) 持ち駒の使ってい…

探索木のvalidatorを書こう!! その5

少し話が脱線してしまいました。 だいたいにして、大学の輪講や、勉強会なんかでは1時間ぐらいでやっちゃうようなことをこのブログでは10回ぐらいに細切れに分けてお送りしております。スローペースすぎてすみません。 毎日10分〜15分程度、こうやって少しず…

駒はsignedがいいのかunsignedがいいのか

Bonanzaでは駒を表現する型はs8(singed char)になっています。 さて、問題です。私のように設計した場合、 -(int)UToCap(move) に相当する部分はどう書けるでしょうか?なるべく速いコードを求みます!http://d.hatena.ne.jp/LS3600/20111001 私が書いたコー…

モンテカルロは公平なシミュレーションではないという話

a) 500手以内に4760局、1000手以内に7294局が終局。(今回の結果) b) 500手以内に5789局、1000手以内に8075局が終局。(前回の結果) 終局数が10%程度減りました。明らかに終局しにくくなっています。 終わらないんです 〜 ランダムプレイヤーは賢くなかった(ひ…

探索木のvalidatorを書こう!! その4

あと、is_move_validのソースコード上で // fromが81未満 == 盤面内の駒の移動 if ( from < nsquare ) { // 動かす駒 piece_move = (int)I2PieceMove(move); if ( turn ) { // 後手ならば // 移動元のところにあるのは後手の駒でなければならない if ( BOARD…