gnubgの評価関数解読を試みた

gnubgというソフトウェアが使っているニューラルネットワークへの入力はなんなのかを調査。そのうちどの入力がどのような局面で重視されているかも調べるつもり。
1
Nori @bgnori

gnubgの評価の原理をちゃんと理解しようかしら?

2010-09-27 22:35:45
Nori @bgnori

eval.cのClassifyPositionあたりから読んでいくのが有益かな。文字通りPositionの分類を行う。Boardの情報とルールの種類(Hyper, normarl, Nack等をから)使う評価関数を選ぶためにある。#gnubg #backgammon

2010-09-28 00:04:07
Nori @bgnori

分類は次の通りCRASHED, CONTACT, BEAROFF2, BEAROFF_TS, BEAROFF_1, BEAROFF_OS, RACE。2分だとコンタクトの有無、コンタクトのあるものはクラッシュしているか、そうでないか。

2010-09-28 00:06:49
Nori @bgnori

コンタクト無しは、bearoffのdatabaseを使えるかどうかで分類されている。

2010-09-28 00:07:17
Nori @bgnori

dbを使わない場合の勝率計算は結構興味深いかも。#gnubg #backgammon

2010-09-28 00:14:24
Nori @bgnori

EvaluatePositionFullが肝っぽい。36通りの出目を生成している部分がある。そこでBestMoveを見つけて、そのムーブをさし、サイドを入れ替えてもう一度読んでいるようだ。 #gnubg #backgammon

2010-09-28 00:21:04
Nori @bgnori

EvaluatePositionFullで、nPlies = 0のときがstaticな評価を行っている。今回興味あるのはここ。 #backgammon #gnubg

2010-09-28 00:26:40
Nori @bgnori

acef[pc]とか関数ポインタのテーブルだし。pcはポジションのカテゴリをあらわす整数。関数EvalContactがtableに突っ込まれているので、それを見る。#backgammon #gnubg

2010-09-28 00:28:54
Nori @bgnori

CAlculateContactInputsなる関数があって、局面情報からneuralnetworkへ入力を生成している。#backgammon #gnubg

2010-09-28 00:32:44
Nori @bgnori

基本入力はpointに0, 1, 2, 3枚以上の4つのケースでinputが作られている。on the barは扱いが異なるようだ。#backgammon #gnubg

2010-09-28 00:33:52
Nori @bgnori

bearoffしている枚数が5枚以上、2枚以上、それ以外で違う(CalculateContactInputs). それからCalculateHalfInputsを呼び出す。 #backgammon #gnubg

2010-09-28 00:37:21
Nori @bgnori

CalculateHalfInputsの中で計算しているもの:shotの数。コンタクトがなくなるために必要なpip数。I_FREEPIP(なんだこれ?)、I_TIMING(タイミング、計算式がコードされているので後で解読) #backgammon #gnubg

2010-09-28 00:41:42
Nori @bgnori

CalculateHalfInputsのつづき: backchekerの位置(I_BACK_CHEQUER)、アンカーの位置(I_BACK_ANCHOR)、進んだアンカー位置(I_FORAWARD_ANCHOR、いわゆる一般的な意味でのアンカーと思われる)

2010-09-28 00:49:30
Nori @bgnori

I_FREEPIPは普通のpipカウントの模様 #backgammon #gnubg

2010-09-28 00:49:58
Nori @bgnori

I_PIPLOSS(一般的なwastageの意味ではなく、ヒットされて失うpipの期待値)、I_P1(singlehitの数) I_P2(double hitの数)、I_BACKESCAPES (バックチェッカーが脱出できる目の数) #backgammon #gnubg

2010-09-28 00:59:58
Nori @bgnori

I_ACONTAIN 9ptからbarまでに存在している相手のチェッカーの数、ただし逃げることのできる目を差し引く。(おそらくこれがgnubgがsnakeを正しくできない原因だろう)、これを2乗した数(I_ACONTAION2)も 使う #backgammon #gnubg

2010-09-28 01:03:31
Nori @bgnori

I_CONTAINというものもある。I_ACONTAINとの差がコメントからはわかりにくい。コードを細かく読むしかなさそう。#backgammon #gnubg

2010-09-28 20:38:24
Nori @bgnori

I_MOBILITYはhomeにたどり着いていないチェッカーに関して、そのチェッカーが逃げることができる出目の数xホームまでの距離の合計。3600で割る(正規化)#backgammon #gnubg

2010-09-28 20:39:51
Nori @bgnori

コメントの数学英語理解できず。orz. コード読まないといけない。モーメントとかいっていて物理っぽい。 I_MOMENT2 #backgammon #gnubg

2010-09-28 20:45:52
Nori @bgnori

on the barにいるときに失われるピップの期待値I_ENTER, 1枚がダンスする確率 I_ENTER2 #backgammon #gnubg

2010-09-28 20:48:15
Nori @bgnori

以下コメント無し、実装を調べるしかない。I_TIMING, I_BACKBONE, I_BACKG, I_BACKG1, I_FREEPIP, I_BACKRESCAOPES #ackgammon #gnubg

2010-09-28 20:49:15