mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 16:53:09 +00:00
Introduce and use qsearch_scoring()
Move qsearch scoring functionality out of RootMoveList initialization. Will be needed by future patches. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
6849f0800e
commit
f352008958
1 changed files with 26 additions and 14 deletions
|
@ -302,6 +302,7 @@ namespace {
|
||||||
void update_history(const Position& pos, Move move, Depth depth, Move movesSearched[], int moveCount);
|
void update_history(const Position& pos, Move move, Depth depth, Move movesSearched[], int moveCount);
|
||||||
void update_killers(Move m, Move killers[]);
|
void update_killers(Move m, Move killers[]);
|
||||||
void update_gains(const Position& pos, Move move, Value before, Value after);
|
void update_gains(const Position& pos, Move move, Value before, Value after);
|
||||||
|
void qsearch_scoring(Position& pos, MoveStack* mlist, MoveStack* last);
|
||||||
|
|
||||||
int current_search_time();
|
int current_search_time();
|
||||||
std::string value_to_uci(Value v);
|
std::string value_to_uci(Value v);
|
||||||
|
@ -1522,6 +1523,26 @@ split_point_start: // At split points actual search starts from here
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// qsearch_scoring() scores each move of a list using a qsearch() evaluation,
|
||||||
|
// it is used in RootMoveList to get an initial scoring.
|
||||||
|
void qsearch_scoring(Position& pos, MoveStack* mlist, MoveStack* last) {
|
||||||
|
|
||||||
|
SearchStack ss[PLY_MAX_PLUS_2];
|
||||||
|
StateInfo st;
|
||||||
|
|
||||||
|
memset(ss, 0, 4 * sizeof(SearchStack));
|
||||||
|
ss[0].eval = ss[0].evalMargin = VALUE_NONE;
|
||||||
|
|
||||||
|
for (MoveStack* cur = mlist; cur != last; cur++)
|
||||||
|
{
|
||||||
|
ss[0].currentMove = cur->move;
|
||||||
|
pos.do_move(cur->move, st);
|
||||||
|
cur->score = -qsearch<PV>(pos, ss+1, -VALUE_INFINITE, VALUE_INFINITE, DEPTH_ZERO, 1);
|
||||||
|
pos.undo_move(cur->move);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// check_is_dangerous() tests if a checking move can be pruned in qsearch().
|
// check_is_dangerous() tests if a checking move can be pruned in qsearch().
|
||||||
// bestValue is updated only when returning false because in that case move
|
// bestValue is updated only when returning false because in that case move
|
||||||
// will be pruned.
|
// will be pruned.
|
||||||
|
@ -2559,19 +2580,15 @@ split_point_start: // At split points actual search starts from here
|
||||||
|
|
||||||
void RootMoveList::init(Position& pos, Move searchMoves[]) {
|
void RootMoveList::init(Position& pos, Move searchMoves[]) {
|
||||||
|
|
||||||
SearchStack ss[PLY_MAX_PLUS_2];
|
|
||||||
MoveStack mlist[MOVES_MAX];
|
MoveStack mlist[MOVES_MAX];
|
||||||
StateInfo st;
|
|
||||||
Move* sm;
|
Move* sm;
|
||||||
|
|
||||||
// Initialize search stack
|
|
||||||
memset(ss, 0, PLY_MAX_PLUS_2 * sizeof(SearchStack));
|
|
||||||
ss[0].eval = ss[0].evalMargin = VALUE_NONE;
|
|
||||||
bestMoveChanges = 0;
|
|
||||||
clear();
|
clear();
|
||||||
|
bestMoveChanges = 0;
|
||||||
|
|
||||||
// Generate all legal moves
|
// Generate all legal moves and score them
|
||||||
MoveStack* last = generate<MV_LEGAL>(pos, mlist);
|
MoveStack* last = generate<MV_LEGAL>(pos, mlist);
|
||||||
|
qsearch_scoring(pos, mlist, last);
|
||||||
|
|
||||||
// Add each move to the RootMoveList's vector
|
// Add each move to the RootMoveList's vector
|
||||||
for (MoveStack* cur = mlist; cur != last; cur++)
|
for (MoveStack* cur = mlist; cur != last; cur++)
|
||||||
|
@ -2583,16 +2600,11 @@ split_point_start: // At split points actual search starts from here
|
||||||
if (searchMoves[0] && *sm != cur->move)
|
if (searchMoves[0] && *sm != cur->move)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Find a quick score for the move and add to the list
|
|
||||||
pos.do_move(cur->move, st);
|
|
||||||
|
|
||||||
RootMove rm;
|
RootMove rm;
|
||||||
rm.pv[0] = ss[0].currentMove = cur->move;
|
rm.pv[0] = cur->move;
|
||||||
rm.pv[1] = MOVE_NONE;
|
rm.pv[1] = MOVE_NONE;
|
||||||
rm.pv_score = -qsearch<PV>(pos, ss+1, -VALUE_INFINITE, VALUE_INFINITE, DEPTH_ZERO, 1);
|
rm.pv_score = Value(cur->score);
|
||||||
push_back(rm);
|
push_back(rm);
|
||||||
|
|
||||||
pos.undo_move(cur->move);
|
|
||||||
}
|
}
|
||||||
sort();
|
sort();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue