gnubgの評価関数解読を試みた
eval.cのClassifyPositionあたりから読んでいくのが有益かな。文字通りPositionの分類を行う。Boardの情報とルールの種類(Hyper, normarl, Nack等をから)使う評価関数を選ぶためにある。#gnubg #backgammon
2010-09-28 00:04:07分類は次の通りCRASHED, CONTACT, BEAROFF2, BEAROFF_TS, BEAROFF_1, BEAROFF_OS, RACE。2分だとコンタクトの有無、コンタクトのあるものはクラッシュしているか、そうでないか。
2010-09-28 00:06:49EvaluatePositionFullが肝っぽい。36通りの出目を生成している部分がある。そこでBestMoveを見つけて、そのムーブをさし、サイドを入れ替えてもう一度読んでいるようだ。 #gnubg #backgammon
2010-09-28 00:21:04EvaluatePositionFullで、nPlies = 0のときがstaticな評価を行っている。今回興味あるのはここ。 #backgammon #gnubg
2010-09-28 00:26:40acef[pc]とか関数ポインタのテーブルだし。pcはポジションのカテゴリをあらわす整数。関数EvalContactがtableに突っ込まれているので、それを見る。#backgammon #gnubg
2010-09-28 00:28:54CAlculateContactInputsなる関数があって、局面情報からneuralnetworkへ入力を生成している。#backgammon #gnubg
2010-09-28 00:32:44基本入力はpointに0, 1, 2, 3枚以上の4つのケースでinputが作られている。on the barは扱いが異なるようだ。#backgammon #gnubg
2010-09-28 00:33:52bearoffしている枚数が5枚以上、2枚以上、それ以外で違う(CalculateContactInputs). それからCalculateHalfInputsを呼び出す。 #backgammon #gnubg
2010-09-28 00:37:21CalculateHalfInputsの中で計算しているもの:shotの数。コンタクトがなくなるために必要なpip数。I_FREEPIP(なんだこれ?)、I_TIMING(タイミング、計算式がコードされているので後で解読) #backgammon #gnubg
2010-09-28 00:41:42CalculateHalfInputsのつづき: backchekerの位置(I_BACK_CHEQUER)、アンカーの位置(I_BACK_ANCHOR)、進んだアンカー位置(I_FORAWARD_ANCHOR、いわゆる一般的な意味でのアンカーと思われる)
2010-09-28 00:49:30I_PIPLOSS(一般的なwastageの意味ではなく、ヒットされて失うpipの期待値)、I_P1(singlehitの数) I_P2(double hitの数)、I_BACKESCAPES (バックチェッカーが脱出できる目の数) #backgammon #gnubg
2010-09-28 00:59:58I_ACONTAIN 9ptからbarまでに存在している相手のチェッカーの数、ただし逃げることのできる目を差し引く。(おそらくこれがgnubgがsnakeを正しくできない原因だろう)、これを2乗した数(I_ACONTAION2)も 使う #backgammon #gnubg
2010-09-28 01:03:31I_CONTAINというものもある。I_ACONTAINとの差がコメントからはわかりにくい。コードを細かく読むしかなさそう。#backgammon #gnubg
2010-09-28 20:38:24I_MOBILITYはhomeにたどり着いていないチェッカーに関して、そのチェッカーが逃げることができる出目の数xホームまでの距離の合計。3600で割る(正規化)#backgammon #gnubg
2010-09-28 20:39:51コメントの数学英語理解できず。orz. コード読まないといけない。モーメントとかいっていて物理っぽい。 I_MOMENT2 #backgammon #gnubg
2010-09-28 20:45:52on the barにいるときに失われるピップの期待値I_ENTER, 1枚がダンスする確率 I_ENTER2 #backgammon #gnubg
2010-09-28 20:48:15以下コメント無し、実装を調べるしかない。I_TIMING, I_BACKBONE, I_BACKG, I_BACKG1, I_FREEPIP, I_BACKRESCAOPES #ackgammon #gnubg
2010-09-28 20:49:15