Skip to content

Commit

Permalink
- ponder_candidateの処理、復活。
Browse files Browse the repository at this point in the history
- ponderの指し手、legal moves全部生成して判定していたのをやめて高速化。
  • Loading branch information
yaneurao committed Nov 27, 2024
1 parent 22bea09 commit b2afb00
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 5 deletions.
2 changes: 1 addition & 1 deletion source/engine/yaneuraou-engine/yaneuraou-search.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -837,7 +837,7 @@ SKIP_SEARCH:;
// pvにはbestmoveのときの読み筋(PV)が格納されているので、ponderとしてpv[1]があればそれを出力してやる。
// また、pv[1]がない場合(rootでfail highを起こしたなど)、置換表からひねり出してみる。
if (bestThread->rootMoves[0].pv.size() > 1
|| bestThread->rootMoves[0].extract_ponder_from_tt(TT, rootPos))
|| bestThread->rootMoves[0].extract_ponder_from_tt(TT, rootPos, Threads.main()->ponder_candidate))
std::cout << " ponder " << bestThread->rootMoves[0].pv[1];

std::cout << sync_endl;
Expand Down
2 changes: 1 addition & 1 deletion source/search.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ struct RootMove
// GUIに返すponder moveをできる限り準備しようとしますが、
// そうでない場合、「ponder on」の際に考えるべきものが何もなくなります。

bool extract_ponder_from_tt(const TranspositionTable& tt, Position& pos);
bool extract_ponder_from_tt(const TranspositionTable& tt, Position& pos, Move ponder_candidate);

// std::count(),std::find()などで指し手と比較するときに必要。
bool operator==(const Move& m) const { return pv[0] == m; }
Expand Down
16 changes: 13 additions & 3 deletions source/types.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ namespace Search {
// GUIに返すponder moveをできる限り準備しようとしますが、
// そうでない場合、「ponder on」の際に考えるべきものが何もなくなります。

bool RootMove::extract_ponder_from_tt(const TranspositionTable& tt, Position& pos)
bool RootMove::extract_ponder_from_tt(const TranspositionTable& tt, Position& pos, Move ponder_candidate)
{
StateInfo st;

Expand All @@ -131,8 +131,18 @@ namespace Search {
auto [ttHit, ttData, ttWriter] = tt.probe(pos.key(), pos);
if (ttHit)
{
if (MoveList<LEGAL>(pos).contains(ttData.move))
pv.push_back(ttData.move);
Move m = ttData.move;
//if (MoveList<LEGAL>(pos).contains(ttData.move))
// ⇨ Stockfishのこのコード、pseudo_legalとlegalで十分なのではないか?
if (pos.pseudo_legal_s<true>(m) && pos.legal(m))
pv.push_back(m);
}
// 置換表にもなかったので以前のiteration時のpv[1]をほじくり返す。
else if (ponder_candidate)
{
Move m = ponder_candidate;
if (pos.pseudo_legal_s<true>(m) && pos.legal(m))
pv.push_back(m);
}

pos.undo_move(pv[0]);
Expand Down

0 comments on commit b2afb00

Please sign in to comment.