Skip to content

Commit

Permalink
- Step 8. Futility pruningの条件調整。
Browse files Browse the repository at this point in the history
- PARAM_FUTILITY_RETURN_DEPTH 8→9に変更
- futility_margin関数、更新。

  // Futility margin
  Value futility_margin(Depth d, bool improving) {
    return Value(168 * (d - improving));
  }
 ↓
  Value futility_margin(Depth d, bool noTtCutNode, bool improving) {
    return Value((126 - 42 * noTtCutNode) * (d - improving));
  }
- PARAM_FUTILITY_MARGIN_ALPHA2追加。
  • Loading branch information
yaneurao committed Oct 17, 2023
1 parent cfd50a4 commit 84081ea
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 14 deletions.
14 changes: 10 additions & 4 deletions source/engine/yaneuraou-engine/yaneuraou-param.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,14 @@
//

// 深さに比例したfutility pruning
// 元の値 = 168 , step = 20
// 元の値 = 126 , step = 20
// [PARAM] min:100,max:300,step:10,interval:1,time_rate:1,fixed
PARAM_DEFINE PARAM_FUTILITY_MARGIN_ALPHA1 = 168;
PARAM_DEFINE PARAM_FUTILITY_MARGIN_ALPHA1 = 126;

// 深さに比例したfutility pruning
// 元の値 = 42 , step = 4
// [PARAM] min:10,max:200,step:10,interval:1,time_rate:1,fixed
PARAM_DEFINE PARAM_FUTILITY_MARGIN_ALPHA2 = 42;
//

// 元の値 = 138 , step = 20
Expand All @@ -48,9 +52,11 @@ PARAM_DEFINE PARAM_FUTILITY_MARGIN_QUIET = 118;

// futility pruningの適用depth。
// この制限自体が要らない可能性がある。→ そうでもなかった。
// 元の値 = 8 , step = 1
// 元の値 = 9 , step = 1
// [PARAM] min:5,max:15,step:1,interval:1,time_rate:1,fixed
PARAM_DEFINE PARAM_FUTILITY_RETURN_DEPTH = 8;
PARAM_DEFINE PARAM_FUTILITY_RETURN_DEPTH = 9;



// 親nodeでのfutilityの適用depth。
// この枝刈り、depthの制限自体が要らないような気がする。→ そうでもなかった。
Expand Down
27 changes: 17 additions & 10 deletions source/engine/yaneuraou-engine/yaneuraou-search.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -198,11 +198,10 @@ namespace {
enum NodeType { NonPV, PV , Root};

// Futility margin
// RazoringはStockfish12で効果がないとされてしまい除去された。

// depth(残り探索深さ)に応じたfutility margin。
Value futility_margin(Depth d, bool improving) {
return Value(PARAM_FUTILITY_MARGIN_ALPHA1/*168*/ * (d - improving));
// ※ RazoringはStockfish12で効果がないとされてしまい除去された。
Value futility_margin(Depth d, bool noTtCutNode, bool improving) {
return Value((PARAM_FUTILITY_MARGIN_ALPHA1/*126*/ - PARAM_FUTILITY_MARGIN_ALPHA2/*42*/ * noTtCutNode) * (d - improving));
}

// 【計測資料 30.】 Reductionのコード、Stockfish 9と10での比較
Expand Down Expand Up @@ -1881,12 +1880,14 @@ namespace {
}

// -----------------------
// Step 8. Futility pruning: child node (~25 Elo).
// The depth condition is important for mate finding.
// Step 8. Futility pruning: child node (~40 Elo)
// -----------------------

// Futility pruning : 子ノード (王手がかかっているときはスキップする)

// The depth condition is important for mate finding.
// depthの条件は詰みを発見するために重要である。

// このあとの残り探索深さによって、評価値が変動する幅はfutility_margin(depth)だと見積れるので
// evalからこれを引いてbetaより大きいなら、beta cutが出来る。
// ただし、将棋の終盤では評価値の変動の幅は大きくなっていくので、進行度に応じたfutility_marginが必要となる。
Expand All @@ -1896,15 +1897,21 @@ namespace {
// Stockfish10でnonPVにのみの適用に変更になった。

if ( !ss->ttPv
&& depth < PARAM_FUTILITY_RETURN_DEPTH/*8*/
&& eval - futility_margin(depth, improving) - (ss - 1)->statScore / 256 >= beta
&& depth < 9
&& eval - futility_margin(depth, cutNode && !ss->ttHit, improving) - (ss-1)->statScore / 321 >= beta
&& eval >= beta
&& eval < 29462) // smaller than TB wins
&& eval < 29462 // smaller than TB wins
&& !( !ttCapture
&& ttMove
&& thisThread->mainHistory[us][from_to(ttMove)] < 989))

// 29462の根拠はよくわからないが、VALUE_TB_WIN_IN_MAX_PLY より少し小さい値にしたいようだ。
// そこまではfutility pruningで枝刈りして良いと言うことなのだろう。
// また、詰み絡み等だとmate distance pruningで枝刈りされるはずで、ここでは枝刈りしない。


// ※ 統計値(mainHistoryとかstatScoreとか)のしきい値に関しては、やねうら王ではStockfishから調整しないことにしているので、
// 上のif式に出てくる定数については調整しないことにする。

return eval;
// 次のようにするより、単にevalを返したほうが良いらしい。
// return eval - futility_margin(depth);
Expand Down

0 comments on commit 84081ea

Please sign in to comment.