2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 12 |
2008 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 03 | 04 | 05 |
2011-03-31
■[将棋] Mate Killersはじめました

KillerMoveのリストをもう1インスタンス作って、βカット時に探索結果が詰みを表す値になってたら新しい方のリストに追加するようにして、あとはオーダリングの特徴を追加して再学習。
あんまり発動しないみたいで、サンプル数少ないとろくに値が付かず、普通のKiller Moveより小さい値になったりとかしてますが、まあそんなものかもしれません。
Killer Moveと重ね合わせた特徴もあるので、他の手よりはそこそこ優先されはする感じで、勝率56%(1秒将棋201戦、有意確率2.4%)くらいになりました。
■[将棋] ツツカナのアピール文書

少し前にツツカナが凄いことになっていたので*1どんな手法なのか気になっていたところ、かなり詳しく書かれていました。
深さの制御は、実現確率は棋譜で指される確率を深さに変換するあたりが個人的になんか胡散臭い気がしていて、かといって他にいい方法も思いつかなくて気になっていたテーマだったりもします。
ツツカナの手法は、探索時は、指し手毎に消費深さ(絶対消費深さ)を算出して、その差を実際の消費深さ(相対消費深さ)として利用するものなようです。
学習時は、探索コストをBp^(深さ) (Bpは局面毎の定数)として、各局面・各指し手の探索コストの総和を最小化する…というような日本語に見えるのですが、式からするとBp^(-消費深さ、ただし棋譜の手は0)の総和を最小化しているような。
exp(定数 - x)をxで微分してもexp(定数 - x)なので、棋譜の手がn手、棋譜以外の手が(n - 消費深さ)手読んだコストの総和を最小化するのと同じ事になるのかも?
探索コストC(p)が指数関数な上に、その中の絶対深さを算出する関数Dがシグモイド関数になっていて、微分がややこしいですね…。

ただBp^(深さ) をそのまま利用するとマズイので局面ごとに正規化してます。
例えば、Bp=30の局面とBp=300の局面があったら、Bp=300の局面が目的関数において支配的になってしまいます。
そうならないように、Bp^(n - 消費深さ) / Bp^(n) = Bp^(-消費深さ、ただし棋譜の手は0)として
棋譜の手をn手読んだコストが1となるようにしています。
完全に棋譜の手しか読まなくなったらその局面ではコスト1といった感じですね。
その引き算が相対消費深さの形になってるのがなんかすごい上手いことになってる気がしますね。
そのままマネするのもなんなので、何か違う切り口から深さの制御を何とかしてみたいなぁと思って、アピール文書読んでからあれやこれや考えているのですが、なかなか難しいですねぇ。(そりゃそうだ)