Skip to content

Commit

Permalink
- ふかうら王がdf-pnで見つけている詰みを見逃すことがある件 その2
Browse files Browse the repository at this point in the history
 - #286

```
isready
usinewgame
position sfen lr5nl/6k2/6bpp/p1p1S1R2/1P1np2P1/P1P1P3P/3K5/1S3G3/LN5NL b 2G6Pbg2sp 95
go btime 4000 wtime 4000 byoyomi 4000
```
 ⇨ うまく指せるようになった。
 ⇨ ついでに、詰みがあるときは即指しできるようになった。
  • Loading branch information
yaneurao committed Nov 29, 2024
1 parent 492b4c6 commit 4933602
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 2 deletions.
23 changes: 21 additions & 2 deletions source/engine/dlshogi-engine/dlshogi_searcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -401,7 +401,7 @@ namespace dlshogi
std::memcpy(&pos_root , pos, sizeof(Position));

// 探索開始局面
const Node* current_root = tree->GetCurrentHead();
Node* current_root = tree->GetCurrentHead();
search_limits.current_root = tree->GetCurrentHead();

// "go ponder"で呼び出されているかのフラグの設定
Expand Down Expand Up @@ -480,6 +480,14 @@ namespace dlshogi
if (search_options.debug_message)
UctPrint::PrintPlayoutLimits(search_limits.time_manager , search_limits.nodes_limit);

// --- 詰みルーチン用の初期化

rootMateMove = Move::none();

// 詰みフラグのリセット。これ、リセットしておかないと同じ局面で二度goされたときに、二度目の時に
// すでに詰み探索が終わっている扱いになり、rootMateMoveがセットされない。
current_root->dfpn_checked = false;

// PVの詰み探索スレッド開始
for (auto& searcher : pv_mate_searchers)
searcher.Run();
Expand Down Expand Up @@ -532,7 +540,11 @@ namespace dlshogi
// この時点で探索スレッドをすべて停止させないと
// Virtual Lossを元に戻す前にbestmoveを選出してしまう。


// df-pnルーチンが詰みを見つけている。
// (この時のponderはセットなしでいいと思う。どうせ残りもdf-pnが見つけるので…)
if (rootMateMove != Move::none())
return rootMateMove;

// 評価値が投了値を下回っていたら投了
if (best.wp < search_options.RESIGN_THRESHOLD) {
ponderMove = Move::none();
Expand Down Expand Up @@ -684,6 +696,13 @@ namespace dlshogi

// -- 時間制御

// df-pnが詰みの指し手を見つけている。
if (rootMateMove != Move::none())
{
interrupt();
return;
}

// 探索時間固定
// "go movetime XXX"のように指定するのでGUI側が対応していないかもしれないが。
// 探索時間固定なのにponderしていることは普通ないと思うので、ponder後の時間経過を見て停止させて良いと思う。
Expand Down
3 changes: 3 additions & 0 deletions source/engine/dlshogi-engine/dlshogi_searcher.h
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,9 @@ namespace dlshogi
// 探索開始局面。これはこの局面の探索中には消失しないのでglobalに参照して良い。
Position pos_root;

// root局面でdf-pnが詰みを見つけているときは、これがMove::none()以外になる。
Move rootMateMove;

private:

// Root Node(探索開始局面)を展開する。
Expand Down

0 comments on commit 4933602

Please sign in to comment.