DeepLearningShogi icon indicating copy to clipboard operation
DeepLearningShogi copied to clipboard

Results 16 DeepLearningShogi issues
Sort by recently updated
recently updated
newest added

SelectMaxUcbChild()なのですが、子ノードがすべて引き分けの時に親ノードにそれを伝播していないです。😥 なので伝播していれば早い段階で引き分けだとわかる局面でも引き分けだと判明するのに時間がかかります。 https://github.com/TadaoYamaoka/DeepLearningShogi/blob/2ec875c037c4abc3e6f5511e2169461cf3457ff4/usi/UctSearch.cpp#L1349 1) すべての子ノードが、勝ち(IsWin) => 親ノードは負け 2) すべての子ノードが、引き分け(IsDraw) => 親ノードは引き分け 3) ひとつでも子ノードが、負け(IsLose) => 親ノードは勝ち となるのですが、1),2)のIsWin,IsDrawはMove(指し手構造体)の上位bitを用いるので、bitwise andしていけば1),2)同時に求まります。 3)もその時についでにbitwise orしていけば求まります。 ついでに言うと、子ノードすべてのMoveだけの配列があれば、その配列に対して、AVX命令で8つずつまとめて上のbitwise and/orができます。 // なのでそういう構造になってほしい気はします。 さらに言うと、1,2,3)のケースにおいて、そのindexを返す必要はなくて(子ノードの訪問回数のincrementが不要なら)、indexを返さず、上のbitwise andした結果なり何なりを参照渡しされた引数などに返すほうが、すっきりしたコードになります。

https://github.com/TadaoYamaoka/DeepLearningShogi/blob/2ec875c037c4abc3e6f5511e2169461cf3457ff4/usi/UctSearch.cpp#L1227 これだと、例えば、draw_value_white = 1.0(勝ち)、draw_value_black = 0.5(引き分け)の時、先手は千日手を引き分け、後手は千日手を負けだと思って探索するという非対称な探索を行っていることになります。こういう非対称な探索がやりたい機会は現実的にはほとんどないので、これは無意味な設定だと思います。 現実的には(例えば大会では)、先手番であるなら、引き分けを避けたくて、後手番なら引き分けは0.5勝扱いとみなして、対称的な探索をしたいのです。 例えば、この時、次のように設定したいわけです。  draw_value_black = 0  draw_value_white = 0.5 よって、上の当該箇所は、pos->turn() == BLACK ではなく、root_color(探索開始局面の手番) == WHITE になっているべきだと思うのです。

float UctSearch(Position* pos, uct_node_t* current, const int depth, vector& trajectories); この、trajectoriesは、探索開始局面からの経路を表していて、pair は、その時に通過したnodeと、そのnodeで何番目の子を選んだかというindexを表現しているのだと思うが、関数のコメントに書いてあってほしい。

Draw_Value_BlackとDraw_Value_White、千日手時の引き分けのスコアの設定だが、大会では「(自分が先手か後手かはわからないけど)自分はできれば千日手を狙いたくて、相手のソフトは千日手を引き分けだとみなしている」状況では、root color(開始局面の手番)と、root colorの反対の手番(相手のcolor)に対して、それぞれ、0.7 , 0.5のように設定したいことがある。 root colorが後手なら、上の設定値をDraw_Value_Black、Draw_Value_White入れ替えてくれる設定があると良い。

make_move_label()は現状、Policy Networkは27*81 = 2187通りに指し手を分類しているが、このうち通常の将棋で出現しないのを除くと、1968通りになる。

dlshogiのmake_input_features()、呼び出し元で入力特徴量を格納する配列のゼロクリアをしているが、make_input_features()のなかでやるべき。 features2_tは、手駒と王手のchannelで、81升全部塗りつぶすやつなので、事前にゼロクリアしても、 そのあと1.0fで塗りつぶす場合(ただし手駒と王手なのであまりない)、ゼロクリアしたのが無駄にる。