sakurapyon’s blog

sakurapyon’s blog

Mate じゃない Mate Killer と 駒得になる同一盤面

誰も教えてくれないKiller Moveが2個な理由 - 2012-06-02 - aki.の月記を読んでもやもやが晴れました。なるほど!そうだったのか… Killer Moveの1個目はそこそこβカットするけど2個目はほとんどβカットしない、でも2個必要な理由が腑に落ちました。

追記:gpsfishのソース読み間違えてるかも…再調査中

さて、再度 gpsfishのソースを読んでみたら Mate Killer も使ってることに気がついた。以前 Mate Killer を試したときは余り効率が良くなかったので、gpsfish はどうしてるんだろ?と思ったら、勝ちになる手を普通に登録しているだけ。よくよく調べると、以前の私の実装との違いは「親局面で子のMate Killerを初期化しているかどうか」だけでした。初期化しないと兄弟だけじゃなくて従兄弟やハトコ局面でも使われちゃう、と。
(さらによくよく見ると、gpsfishがクリアしてるのは孫のKiller/Mate Killerですね。ということは、従兄弟までは流用すると…)
追記:JAIST Repository: コンピュータ将棋における高精度キラーヒューリスティックの研究にも「ほとんどの場合には直近の兄弟ノードの最善手となるが、探索済みの兄弟ノードがない場合は直近の従兄弟ノードの最善手を利用する。それもない場合は空である」とありますね。従兄弟までなのが普通なのか。


ここでハタと気がついた。sakurapyon の Killer のβカット率が低いのか以前から疑問だったんだけど、これも初期化忘れが原因っぽい。Akiさんの記事にある「悪いKiller Move」が2個存在する状態だったっぽいです。ということで、ここは修正。


Mate Killerを入れて実験してみたら、どうやら Counter Move と Mate Killer の効果は被ってるようだ。私の実装では Counter Move だけでも充分かもしれない(Mate Killer の方が実装が簡単なので、Mate Killer だけでもいいかも)。これは下記の理由のようだ。

  • 現在の sakurapyon の実装では、駒を只で捨てて・以前と同一局面に戻る手が多数生成されている
  • 同一盤面に戻って駒得する場合、sakurapyonは勝ちの評価値を返す(下記局面から2四角打5二玉5一角成同玉にて同一盤面・角得)
  • 勝ちなのでMate Killerに登録される
    • この手が1五角打5二玉5一角成同玉のときも使われる
  • 追記:以前はSHEK(Strong Horizon Effect Killer)対策を入れていなかったので、上記の効果が発生していなかったと思われる。

Counter Moveが有効な場合も同様で、同じ位置への只捨てに対して同じ手が使われてβカットされている。そのため Mate Killer と Counter Move が食い合いをしているようだ。


しかし、これって Mate Killer じゃないよなあ。ただやんキラーというか。そもそも、これでいいのだろうか? ただやんキラーが有効なのは只捨てを行ってるから。只の手を作って Mate Killer でサクサク刈るべきか、手生成のときにもうちょっと考えるべきか…

後手の持駒:角 
  9 8 7 6 5 4 3 2 1
+---------------------------+
|v香v桂v銀v金v玉v金 ・v桂v香|一
| ・v飛 ・ ・ ・ ・ ・v銀 ・|二
|v歩v歩v歩v歩v歩v歩 ・v歩v歩|三
| ・ ・ ・ ・ ・ ・v歩 ・ ・|四
| ・ ・ ・ ・ ・ ・ ・ ・ ・|五
| ・ ・ 歩 ・ ・ ・ ・ ・ ・|六
| 歩 歩 ・ 歩 歩 歩 歩 歩 歩|七
| ・ ・ ・ ・ ・ ・ ・ 飛 ・|八
| 香 桂 銀 金 玉 金 銀 桂 香|九
+---------------------------+
先手:Black
先手の持駒:角 

ここから、▲2四角打△6二玉▲5一角成△5一同玉のような手