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

Aestetica

コンピュータ将棋Selene(セレネ)を作っています。名前は西海枝昌彦(さいかいし まさひこ)と読みます。

Stockfishをまた少し読んでみた

娘と夜にコンビニ行こうとして、途中にある公園を見ると、
結構な夜遅くなのに、真っ赤な服を着た小学校低学年くらいの女の子が公園内ひとりでブランコを漕いでいる。
「こんな時間にひとり?!」と思いながらも、しばらく見つめて、そのまま通り過ぎる。

私「今の、俺にしか見えてないことないよね」
娘「見えてるよ」
私「ただ、ブランコを漕ぐスピードが結構な勢いで、霊的なスピードでないから安心した」
娘「霊的なスピードがよくわからない(笑)ヤバイヤバイ」

なにがヤバイのか。


なんだかんだでまだ開発を始められてないんだけども。明日の夜からかな。
Stockfishのなにがアレって、

  for (int d = 0; d < 16; ++d)
  {
      FutilityMoveCounts[0][d] = int(2.4 + 0.773 * pow(d + 0.00, 1.8));
      FutilityMoveCounts[1][d] = int(2.9 + 1.045 * pow(d + 0.49, 1.8));
  }

こういうものの、2.4とか0.773とかの理由とか仕組みの不明さがはんぱ無い。
「理屈のわからんもんは使わんッ!!!」と思っていたけど、今回はとうとう使います。

SMPの手法も変わってる?!
以前までは並列探索を行う場合には枝の途中で並列化していたのに、最新のStockfishだと探索木をまるごと並列化してますね。
Stockfishみたいに大勢で開発を行っていると、こういった超常識化されているところすら変えて試してみるのがヤバイ・・。

評価関数のところもいろいろ読みましたが、位置の他にチェス独自の特徴が入ってますね。
チェスのエンジンとして、例えば2駒かなんかで学習してみて、強さにどのくらい差がでるのかは興味のあるところ。
誰かやってないのか。(Google検索中)・・やってないのか。
「チェス所」みたいなフリーのものは、あるのか。そりゃそうか。

それと、目で追っているだけだと「これでPV取れてる?」と、多少不安になる感じだけど、動かしてみないとわかんないですね。PV取れないとleaf系の学習はできないので非常に大事です。

Singular extension searchについては、Seleneでは構造的に実現が面倒だったので入れてなかったんだけど、この構造なら普通に入りますね。いろんな人に聞いてみたら「あんま意味ない」みたいなことを言ってたので安心してましたがー、やっぱり入ってます。良い手の場合は念のため探索を延長して、PVを深くするもの。
アルゴリズムはそれぞれ構造化する予定なので、こことProbCutはやっぱり苦労しそう。そうでもないのか。ProbCutも私がイメージしているものとは若干異なり、駒を取る手だけで200点だけマージン足して探索するという感じ。そういうものなのか。

静止探索もめちゃくちゃ凝ってます。凝ってるというかカットしまくってる。
静止探索は探索全体の2分の1を占めるほど動くところなので、ここでカットしまくるのは非常に有効そうです。
置換表もそうだけど、駒を取る手と駒を取らない王手と同じマスを取り合う手とか、なんかいろいろやってる。

で、とりあえずは前にも書いたけど、駒割のみという、教師なし学習の相手になるものをまず作らないと。
何年も前、Seleneの駒割のみを上げてレーティングを出したりしていて、何人かの人に「なぜ駒割で実験するのか?」ということを聞かれたけれども、教師なし学習をやりそうに見えてまだやらないという感じだったので、はっきり言えなかったんですが(ごめん)それは教師なし用の実験のため。
さあ、今回はどうなるかなー。