Fixed a bug that Learner::qsearch() recognizes stalemate as checkmated.

This commit is contained in:
Hisayori Noda
2019-07-04 23:44:58 +09:00
parent 81262320c3
commit 89e846c476
4 changed files with 20 additions and 24 deletions

View File

@@ -1854,21 +1854,26 @@ namespace Learner
{
Stack stack[MAX_PLY + 10], * ss = stack + 7;
Move pv[MAX_PLY + 1];
std::vector<Move> pvs;
init_for_search(pos, ss);
ss->pv = pv; // <20>Ƃ肠<C682><E882A0><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD>~<7E>[<5B>łǂ<C582><C782><EFBFBD><EFBFBD>o<EFBFBD>b<EFBFBD>t<EFBFBD>@<40><><EFBFBD>Ȃ<EFBFBD><C882>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>B
if (pos.is_draw(0)) {
// Return draw value if draw.
return { VALUE_DRAW, {} };
}
// <20>l<EFBFBD>܂<EFBFBD><DC82><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>̂<EFBFBD>
if (pos.is_mated())
if (MoveList<LEGAL>(pos).size() == 0)
{
pvs.push_back(MOVE_NONE);
return ValueAndPV(mated_in(/*ss->ply*/ 0 + 1), pvs);
// Return the mated value if checkmated.
return { mated_in(/*ss->ply*/ 0 + 1), {} };
}
auto bestValue = ::qsearch<PV>(pos, ss, -VALUE_INFINITE, VALUE_INFINITE, DEPTH_ZERO);
// <20><><EFBFBD><EFBFBD><EFBFBD>ꂽPV<50><56><EFBFBD>Ԃ<EFBFBD><D482>B
std::vector<Move> pvs;
for (Move* p = &ss->pv[0]; is_ok(*p); ++p)
pvs.push_back(*p);