読者です 読者をやめる 読者になる 読者になる

Qhapaqの定跡とtimemanを公開します

WCSC参加、ご視聴の皆様、お疲れ様でした。

Qhapaqは大会を10位で終えました。無課金でもできる学習理論の構築を目指し、色々頑張ったのですが、残念ながら負けてしまいました。応援してくださった皆様には心よりお礼申し上げます。

さて、私の大会は終わりましたが、まだやることはあります。そう、やねチルとして同じ釜の飯を食う仲間達を応援する必要があるのです。

というわけで、今からできる微調整としてQhapaqの定跡とtimemanを公開します。

# でも実際使えうるのは定跡だけだと思う

 

河童全力定跡 (Qhapaq_z.db)

timeman.cpp

 

・森久保量子ガシャを駆使した河童全力定跡

Qhapaqの定跡はメタ対象(まふ定跡、やねうら定跡、定跡off)とQhapaqを戦わせ、評価値がそれほど悪くなく、ある程度進めば評価値が高くなるもの(60手目以内に評価値がある一定値以上になるもの)を選んでいます。相手を悪い手が出やすい局面に誘導する。相手の悪い手を咎めるのが主な目的であるため、相手の持ち時間は短め(5-10秒。定跡を作ってる方は30秒-1分)としています。なお、Qhapaqが悪手を指しているが、相手も悪手を指していたため勝ってしまったという自滅を防ぐために、短い消費時間側が勝った局面はストックし、その局面から短い持ち時間で自己対局をさせて勝率を測定し、勝率が芳しくない場合は削除するという調整も行っています。

広い序盤の変化の枝をネガティブかつ効率的に探索するという意味で森久保量子ガシャと名付けました。

 

・timemanはoptimum timeが一定になるように調整すべし

理論の詳細はコンピュータ将棋流の時間攻めと電王戦の攻防 に任せますが、stockfishの時間制御はbestmoveの変化する確率の時間微分を敷居値にして行われます。

実際は局面の難しさやponderの当り具合によって持ち時間は動的に変化するため、手を読み始める前に「恐らくこのぐらいの時間を使っていい」という仮想消費時間(optimum time) を決め、

 消費時間 ☓ bestmoveの変化確率 > optimum time ☓ 定数

となった時に読みを打ち切るようにしています。やねうら王では持ち時間を80で割った値をoptimum timeに用いていますが、この実装は序盤から終盤になるにつれ、optimum timeが減るため良くありません(終盤になるほど局面の複雑さが落ちるチェスの影響だ多分)。理論的にはoptimum timeは対局開始から終局まで一定であるべきです(机上の空論ではありますが、0−30手目、30手目-60手目、60手目-90手目の持ち時間を倍にして勝率を測定すると、どれも似たようなレート上昇になるのであながち間違いではないと思います)。

Qhapapのtimemanはoptimum timeをできるだけ一定に保つように実装しています。実際、WCSCの棋譜でも、ある程度均等に時間を消費できていると思います。ついでに、浮かむ瀬がやっていた序盤の時間節約ルーチンも実装(最初20手は長くてもoptimumの2倍程度しか時間を使わないようにする)しています。

 

・timemanはハードや評価関数に依存して地味に面倒

 消費時間 ☓ bestmoveの変化確率 > optimum time ☓ 定数

という式をじっと眺めると、stockfishの実装だと、ハードが強くなればなるほど消費時間が短くなることが解ります。また評価関数の質を高めるほど、変な勘違いが減る分、消費時間が減ることが期待されます。elmoは殆どやねうら王の実装そのままだと思うのですが、Qhapaqよりも消費時間が短めでしたし......

Qhapaqのtimemanはtimemanに使うノートPC用にチューニングしたので、恐らく直接使うと時間が余り気味になると思います。

 

・定跡とtimemanのご利益

一応、定跡+timemanを搭載したやねうら王 vs まふ定跡/真やね定跡を搭載した魔女、やねうら王の対局 in WCSC型の持ち時間では、河童側が7割弱勝てているようでした(ただし、50試合ぐらいしか出来ていませんが)

 

最近は自己対局の勝率が探索部以外も持ち時間依存する説が囁かれており、私の行ったテストに意味があるかは謎ですが...

 

まあ、そのままコピーして使えるかは激しく疑問ですが、盟友たちの最後の抵抗の小さな支えになればと思います。