ひよこカルロ将棋に伸びしろはまだある?

ひよこカルロ将棋がどこまで強くなるのか、他のコンピューター開発者の方からいろいろ問い合わせをいただくのですが、ひよこカルロ将棋の開発は今月末までと決めていますので今月末でひよこカルロ将棋の開発は終わりです。

そのあとのことは…いまはまだお話できません。10月末になってからのお楽しみということで。

今月末までは残り2日ありませんが、並列化も含めればあと200はRを上げられると私は信じています。

駒得+モンテカルロでfloodgateの二週間レーティングでR2000を達成できれば自分で言うのもナンですが、素晴らしい快挙だと思います。

駒得だけの評価関数だと弱いというのは私は迷信だと思っています。探索速度さえあれば強いはずです。その探索速度がいまのCPUのアーキテクチャではなかなか上げにくいので評価関数で足りない分を補っているだけです。

Bonanza相当の探索手法でシングルスレッドで5Mnpsぐらい出ていれば駒得だけの評価関数でもR2000ぐらいになるはずです。(ひよこカルロ将棋はいまは2Mnps程度です) 倍になるごとにR100ずつぐらい上がるでしょうから、その1000倍である5Gnps出ればR3000クラスになり、トップレベルのソフトとも渡り合えるはずです。いや、将棋専用CPUでもあるまいし、そんなに出ませんけどね。


将棋の強い人には「評価関数が駒得だけで序盤が出鱈目だと序盤で押されて挽回できないよ」と言われそうですが、それが正しいのかどうか私はよくわかりません。探索深さがどれくらい深くなれば駒得だけの評価関数でも序盤を形勢互角か少し不利ぐらいで乗りきれるのか、そのへんが私にはよくわからないのです。いや、私を含めて誰にもわからないのが現状かも知れません。


1手1秒のBonanzaと1手1000秒の駒得だけのBonanzaなら後者が本当に勝ち越すのかと言われるとちょっと自信がないのですが、しかし、少なくともfloodgateで駒得のみの評価関数でR2000が達成できたなら、「将棋ってそういう(序盤逃げ切り型の)ゲームではないんじゃないの?」という一つのテーゼにはなると思います。

これはコンピューター将棋界にとって大きな波紋を投げかけることになるのではないでしょうか。


「ひよこカルロ将棋の評価関数をBonanzaのfv.binに差し替えれば本家Bonanzaより強くなるのでは?」などと一部で囁かれておりますが、そんなことはしないし、したくもないというのが私の美学でして、独創的で、従来にないような将棋ソフトを作ろうと考えております。


それでは皆さん、最後まで応援のほどよろしくお願いします。

ひよこカルロ将棋v0.13を公開しました。

ひよこカルロ将棋v0.13を公開しました。例によってこのブログの上のところからダウンロード出来ます。

・LMR(Late Move Reduction)、やっぱり導入しました。
・PVS(Principal Variation Search)を導入しました。
モンテカルロシミュレーションの精度を上げました。
・hashcutの条件を改善しました。
・持ち時間を終盤に多く残すようにしました。
・killer moveを2系列用意するようにしました。
・指し手のオーダリングを(少し真面目に)するようにしました。
・futility pruning、やっぱり導入しました。

目に見えて強くなっているので、今回はおそらくfloodgateの二週間レーティングでR1850〜1900ぐらい行くと思います。

明日は探索の並列化に取り組み、それで4コアでR2000を突破できるかどうかに挑戦してみます。

ひよこカルロ将棋v0.13、GA将に敗れる

floodgateにさっき投入した、ひよこカルロ将棋v0.13ですが、さっそくGA将に敗れました…。


http://wdoor.c.u-tokyo.ac.jp/shogi/view/2011/10/30/wdoor+floodgate-900-0+hiyoko_carlo_v0.13_1c+Gasyou_Atom-D510_2c4t+20111030173002.csa


大熱戦で、以前までのひよこカルロ将棋とは一味違う終盤力なのは一目瞭然ですが、惜しくも敗れました。ひよこカルロ将棋は駒の効率とか何も考えていないので、敵陣に成り駒を作って喜んでいるのがいけないんですが…。

R1900の壁は意外と厚いのかも知れませんね。

あとponderhitのときに指し手をランダムに指すバグがあるような気がします。(←ひどいバグ!!) ponderhitしたときにノータイムで変な手を指したので。

ともかく、このまましばらく見守ります。せめてR1850に到達しますように…。

ああ、いま自分の書いたプログラムを眺めていたら、置換表の指し手でα値更新/βcutしたときにこの指し手をLMRのために加点するの忘れてました。うわぁぁぁ。

R1900への道は遠そうです…。



いま見たら、ponderhitしてbestmove返して投了してました。うわぁぁぁぁ。



ご飯食べてから、修正して、今夜v.0.14を公開します。ローカル環境ではほとんどテストしていないもんので、本当適当ですみません…。

iteration29!!

開始局面で1分程度でiterationが29まで回るようになりました。

LMRでreductionした結果なので、ほとんどの手がreductionされて、結局どの手も29手分も読めていないのだと思いますが。ある意味、インチキスコアですね。

それはそうと、futility pruningするようにしたらノード数のカウントが減って、1.1Mnps程度に落ちてしまいました。見かけ上1.1Mnpsですが、3Mnps相当分なのだと信じておくことにします。

落ちるバグについては現在原因を調査中です。とりあえず原因のうち2つは潰しました。まだ落ちます。つまり、バグは3つ以上あったということですね。いやはや…。


ところで置換表に残り探索深さを保存しているのですが探索深さ自体が固定小数(小数部3bit、整数部5bit)でBonanza相当。5bitということは31手(32手?)深さまで。iterationが29も30も回られますと、置換表におかしな値を書き込んでバグらないかと夜もおちおち眠れません…。

ひよこカルロ将棋v0.14公開しました。

前のバージョンは豪快にバグっておりました。テストしてくださった方、すみませんでした。
v0.13から以下の点を修正しました。

・王手がかかっている局面から検討させると落ちるバグを修正しました。
・成桂がある局面で検討させると落ちるバグを修正しました。
・盤面の駒の状態が同じで手駒が増えてたり減ってたりすると投了するバグを修正しました。
・指し手生成バッファが初期化されないケースがあって落ちていたのを修正しました。
・1手しか応手がない場合は思考時間を使わないようにしました。
・置換表の指し手でα値/βcutが生じたときにhistory heuristicとして加点していなかったのを修正しました。

まだ何かバグは残っていると思いますが、デバッグ代わりにfloodgateに投入しておきます。

将棋所でscoreのところに任意の文字列を表示したい

将棋で盤上の駒の状態が変わらず手駒だけが減っていくような反復局面が出現することがあります。「56歩58金57歩成同金」みたいな繰り返しで歩を損していくパターンですね。コンピューター将棋の思考ルーチンでは、この反復局面を検出すると、これは反則負け扱いの値をつけることがあります。こんな手は指すはずがない、指していいはずがないという意味で、です。Bonanzaではscore_inferiorがこれを表現する定数となっています。

これがPVに出現したときに将棋所のPVとしてscore_inferiorの値を表示させても仕方ないので何かscoreのところに任意の文字列を表示したいのですが、そういう記法は用意されておらず…。


あとは思考エンジンをデバッグしていて、終局から3手前とか5手前のコンピューターの読み筋を表示してくれなくて、思考エンジンがいつ詰みを発見していたのかを調べるために、USIのデバッグウインドゥを開いて探すような作業が入って、このへん余分に工数がかかりすぎて大変だるいのです。

思考エンジンから別途ファイルにでも思考ログを書きだしておけばいいと言えばいいのですが、棋譜ウインドゥで指し手をマウスでクリックしたときに、さっき表示していた、思考エンジンが"info string"で送信した読み筋を表示するように変更するぐらい将棋所の作者的にはどうってことないはずなのに…。

将棋所は機能的にはずいぶん優れていて、これと同等のものを作ろうと思うと結構大変ではあるのですが、まあ、なんと言いますか、自分で思考エンジンを書いていない人が開発しているので、「なんかそのへんわかってないなぁ」感はあります。

あと、USIプロトコルデバッグのために書いていた盤面を表示するコードが残っていることがあって、そういう不正な文字列を将棋所に送信した場合に思考エンジン側が不正終了してしまう(?)ようです。せめて「思考エンジンが送ってきたこの文字列が不正で、だから終了させます」ぐらい表示してくれればいいのになぁと思います。

将棋所のUIは使用するユーザーには優しいのですが、思考エンジン開発者には厳しい。そんな印象を受けました。


思考エンジンの過去の読み筋についてはもしかして何か特殊な操作で解決したりするのでしょうか?

何か良い方法があるのであれば、コメント欄にて教えていただきたく。