人は駒得のみに生くるにあらず その15
floodgateは1日のうちの毎時間、00分と30分になると対戦が始まりまして、これに参加するとこの00分と30分が気になって気になって仕方ないわけであります。
00分になってpishogiと当たると「またpishogiか」、Bonanzaと当たると「ボナ君は出てこなくていいよ(ひよこ将棋が勝てないから)」とか、lesserpyon_PhoenomII720_1cと当たると「またれさぴょんに蹂躙されるのか」だとか、本当ストレスでひよこ(←私)は死にそうです。
対れさぴょんですと、どうもひよこが切れ負けすることが多いようなので、思考時間が予定より大きければ、思考を打ち切るコードを追加しました。
tree->node_searched++; // 探索ノード数を加算 // 思考時間チェック。 // 一定時間おきにチェックしておく。 if ((tree->node_searched & 0x3fff) == 0) { // PV自体は求め終わっているのか? if ( tree->pv[0].type != not_done) { // 今回の思考で要した時間。 u32 e = timer->elapsed(); if (e >= myTime || isStopReceived ) // 今回用の持ち時間をオーバーしている // もしくは、停止信号が別スレッドから来ている。 { isTimeOver = true; // ループから抜ける。 return 0; } } }
isTimeOverフラグが立っているかは AlphaBetaSearch関数から戻ってきたところでチェックして、このフラグが立っていればreturn 0; しているだけの簡単コードです。
たいした改良でもないので、floodgate上のバージョンは0.08のまま参戦しておきます。
人は駒得のみに生くるにあらず その16
昨日書いた置換表まわりのコードが盛大にバグっていたので、実はあまり置換表はうまく使えていなかったということが判明しました。あと、killerとhashの手をその後の指し手生成から除外していなかったのを修正しました。
そうこうしていると、ひよこ将棋v0.09はfloodgateでようやくgps500(R1733)に勝てました。
ひよこ将棋側、終局まで飛車をまったく動かしていません。これでは飛車落ちと同じです。毎度のことながら玉も囲っていないので、よくこれで勝てたなぁ…というのが正直な感想でして、これはやられたほうは気分的には相当嫌なのではないでしょうか。(ごめんなさい)
以前にも書きましたように、ひよこ将棋側が歩を順番に突いてくる将棋は健在でして、昨日はBlunder戦で、フルボッコにされました。
Blunderは囲ってから攻めてくるタイプで、これはひよこ将棋とは相性がすこぶる悪いようです。
囲わずに攻めてきて乱戦になってもらえたほうが、ひよこ将棋のほうは得なのですが、ひよこ将棋の序盤を改善する気はいまのところありません。
ひたすら探索のほうを頑張って、iterationを増やすことで強くしていくつもりです。