mirror of
https://github.com/sockspls/badfish
synced 2025-07-11 19:49:14 +00:00
MovePicker: rename number_of_moves() in number_of_evasions()
It is more clear that only in that case the move number is correct, otherwise is only a partial quantity: the number of moves of that phase. In case of PH_EVASIONS instead we have only one phase. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
c9d364f9ca
commit
cf71efc34b
4 changed files with 31 additions and 32 deletions
|
@ -39,11 +39,23 @@
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
enum MovegenPhase {
|
||||||
|
PH_TT_MOVES, // Transposition table move and mate killer
|
||||||
|
PH_GOOD_CAPTURES, // Queen promotions and captures with SEE values >= 0
|
||||||
|
PH_KILLERS, // Killer moves from the current ply
|
||||||
|
PH_NONCAPTURES, // Non-captures and underpromotions
|
||||||
|
PH_BAD_CAPTURES, // Queen promotions and captures with SEE values < 0
|
||||||
|
PH_EVASIONS, // Check evasions
|
||||||
|
PH_QCAPTURES, // Captures in quiescence search
|
||||||
|
PH_QCHECKS, // Non-capture checks in quiescence search
|
||||||
|
PH_STOP
|
||||||
|
};
|
||||||
|
|
||||||
CACHE_LINE_ALIGNMENT
|
CACHE_LINE_ALIGNMENT
|
||||||
const MovegenPhaseT MainSearchPhaseTable[] = { PH_TT_MOVES, PH_GOOD_CAPTURES, PH_KILLERS, PH_NONCAPTURES, PH_BAD_CAPTURES, PH_STOP};
|
const uint8_t MainSearchPhaseTable[] = { PH_TT_MOVES, PH_GOOD_CAPTURES, PH_KILLERS, PH_NONCAPTURES, PH_BAD_CAPTURES, PH_STOP};
|
||||||
const MovegenPhaseT EvasionsPhaseTable[] = { PH_EVASIONS, PH_STOP};
|
const uint8_t EvasionsPhaseTable[] = { PH_EVASIONS, PH_STOP};
|
||||||
const MovegenPhaseT QsearchWithChecksPhaseTable[] = { PH_TT_MOVES, PH_QCAPTURES, PH_QCHECKS, PH_STOP};
|
const uint8_t QsearchWithChecksPhaseTable[] = { PH_TT_MOVES, PH_QCAPTURES, PH_QCHECKS, PH_STOP};
|
||||||
const MovegenPhaseT QsearchWithoutChecksPhaseTable[] = { PH_TT_MOVES, PH_QCAPTURES, PH_STOP};
|
const uint8_t QsearchWithoutChecksPhaseTable[] = { PH_TT_MOVES, PH_QCAPTURES, PH_STOP};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -63,6 +75,9 @@ MovePicker::MovePicker(const Position& p, Move ttm, Depth d,
|
||||||
const History& h, SearchStack* ss) : pos(p), H(h) {
|
const History& h, SearchStack* ss) : pos(p), H(h) {
|
||||||
int searchTT = ttm;
|
int searchTT = ttm;
|
||||||
ttMoves[0].move = ttm;
|
ttMoves[0].move = ttm;
|
||||||
|
finished = false;
|
||||||
|
lastBadCapture = badCaptures;
|
||||||
|
|
||||||
if (ss)
|
if (ss)
|
||||||
{
|
{
|
||||||
ttMoves[1].move = (ss->mateKiller == ttm)? MOVE_NONE : ss->mateKiller;
|
ttMoves[1].move = (ss->mateKiller == ttm)? MOVE_NONE : ss->mateKiller;
|
||||||
|
@ -72,9 +87,6 @@ MovePicker::MovePicker(const Position& p, Move ttm, Depth d,
|
||||||
} else
|
} else
|
||||||
ttMoves[1].move = killers[0].move = killers[1].move = MOVE_NONE;
|
ttMoves[1].move = killers[0].move = killers[1].move = MOVE_NONE;
|
||||||
|
|
||||||
finished = false;
|
|
||||||
lastBadCapture = badCaptures;
|
|
||||||
|
|
||||||
Color us = pos.side_to_move();
|
Color us = pos.side_to_move();
|
||||||
|
|
||||||
dc = p.discovered_check_candidates(us);
|
dc = p.discovered_check_candidates(us);
|
||||||
|
@ -243,7 +255,7 @@ void MovePicker::score_evasions() {
|
||||||
/// class. It returns a new legal move every time it is called, until there
|
/// class. It returns a new legal move every time it is called, until there
|
||||||
/// are no more moves left.
|
/// are no more moves left.
|
||||||
/// It picks the move with the biggest score from a list of generated moves taking
|
/// It picks the move with the biggest score from a list of generated moves taking
|
||||||
/// care not to return the tt move if that has already been serched previously.
|
/// care not to return the tt move if has already been searched previously.
|
||||||
|
|
||||||
Move MovePicker::get_next_move() {
|
Move MovePicker::get_next_move() {
|
||||||
|
|
||||||
|
|
|
@ -37,20 +37,6 @@
|
||||||
|
|
||||||
struct SearchStack;
|
struct SearchStack;
|
||||||
|
|
||||||
enum MovegenPhase {
|
|
||||||
PH_TT_MOVES, // Transposition table move and mate killer
|
|
||||||
PH_GOOD_CAPTURES, // Queen promotions and captures with SEE values >= 0
|
|
||||||
PH_KILLERS, // Killer moves from the current ply
|
|
||||||
PH_NONCAPTURES, // Non-captures and underpromotions
|
|
||||||
PH_BAD_CAPTURES, // Queen promotions and captures with SEE values < 0
|
|
||||||
PH_EVASIONS, // Check evasions
|
|
||||||
PH_QCAPTURES, // Captures in quiescence search
|
|
||||||
PH_QCHECKS, // Non-capture checks in quiescence search
|
|
||||||
PH_STOP
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef uint8_t MovegenPhaseT;
|
|
||||||
|
|
||||||
/// MovePicker is a class which is used to pick one legal move at a time from
|
/// MovePicker is a class which is used to pick one legal move at a time from
|
||||||
/// the current position. It is initialized with a Position object and a few
|
/// the current position. It is initialized with a Position object and a few
|
||||||
/// moves we have reason to believe are good. The most important method is
|
/// moves we have reason to believe are good. The most important method is
|
||||||
|
@ -67,7 +53,7 @@ public:
|
||||||
MovePicker(const Position& p, Move ttm, Depth d, const History& h, SearchStack* ss = NULL);
|
MovePicker(const Position& p, Move ttm, Depth d, const History& h, SearchStack* ss = NULL);
|
||||||
Move get_next_move();
|
Move get_next_move();
|
||||||
Move get_next_move(Lock& lock);
|
Move get_next_move(Lock& lock);
|
||||||
int number_of_moves() const;
|
int number_of_evasions() const;
|
||||||
Bitboard discovered_check_candidates() const;
|
Bitboard discovered_check_candidates() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -81,7 +67,7 @@ private:
|
||||||
MoveStack ttMoves[2], killers[2];
|
MoveStack ttMoves[2], killers[2];
|
||||||
bool finished;
|
bool finished;
|
||||||
int phase;
|
int phase;
|
||||||
const MovegenPhaseT* phasePtr;
|
const uint8_t* phasePtr;
|
||||||
MoveStack *curMove, *lastMove, *lastBadCapture;
|
MoveStack *curMove, *lastMove, *lastBadCapture;
|
||||||
Bitboard dc, pinned;
|
Bitboard dc, pinned;
|
||||||
MoveStack moves[256], badCaptures[64];
|
MoveStack moves[256], badCaptures[64];
|
||||||
|
@ -92,12 +78,13 @@ private:
|
||||||
//// Inline functions
|
//// Inline functions
|
||||||
////
|
////
|
||||||
|
|
||||||
/// MovePicker::number_of_moves() simply returns the numOfMoves member
|
/// MovePicker::number_of_evasions() simply returns the number of moves in
|
||||||
/// variable. It is intended to be used in positions where the side to move
|
/// evasions phase. It is intended to be used in positions where the side to
|
||||||
/// is in check, for detecting checkmates or situations where there is only
|
/// move is in check, for detecting checkmates or situations where there is
|
||||||
/// a single reply to check.
|
/// only a single reply to check.
|
||||||
|
/// WARNING: It works as long as PH_EVASIONS is the _only_ phase for evasions.
|
||||||
|
|
||||||
inline int MovePicker::number_of_moves() const {
|
inline int MovePicker::number_of_evasions() const {
|
||||||
return int(lastMove - moves);
|
return int(lastMove - moves);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -940,7 +940,7 @@ void Position::do_capture_move(Bitboard& key, PieceType capture, Color them, Squ
|
||||||
|
|
||||||
// Update piece list, move the last piece at index[capsq] position
|
// Update piece list, move the last piece at index[capsq] position
|
||||||
//
|
//
|
||||||
// WARNING: this is a not perfectly revresible operation. When we
|
// WARNING: This is a not perfectly revresible operation. When we
|
||||||
// will reinsert the captured piece in undo_move() we will put it
|
// will reinsert the captured piece in undo_move() we will put it
|
||||||
// at the end of the list and not in its original place, it means
|
// at the end of the list and not in its original place, it means
|
||||||
// index[] and pieceList[] are not guaranteed to be invariant to a
|
// index[] and pieceList[] are not guaranteed to be invariant to a
|
||||||
|
|
|
@ -1109,7 +1109,7 @@ namespace {
|
||||||
{
|
{
|
||||||
assert(move_is_ok(move));
|
assert(move_is_ok(move));
|
||||||
|
|
||||||
bool singleReply = (isCheck && mp.number_of_moves() == 1);
|
bool singleReply = (isCheck && mp.number_of_evasions() == 1);
|
||||||
bool moveIsCheck = pos.move_is_check(move, dcCandidates);
|
bool moveIsCheck = pos.move_is_check(move, dcCandidates);
|
||||||
bool moveIsCapture = pos.move_is_capture(move);
|
bool moveIsCapture = pos.move_is_capture(move);
|
||||||
|
|
||||||
|
@ -1366,7 +1366,7 @@ namespace {
|
||||||
{
|
{
|
||||||
assert(move_is_ok(move));
|
assert(move_is_ok(move));
|
||||||
|
|
||||||
bool singleReply = (isCheck && mp.number_of_moves() == 1);
|
bool singleReply = (isCheck && mp.number_of_evasions() == 1);
|
||||||
bool moveIsCheck = pos.move_is_check(move, dcCandidates);
|
bool moveIsCheck = pos.move_is_check(move, dcCandidates);
|
||||||
bool moveIsCapture = pos.move_is_capture(move);
|
bool moveIsCapture = pos.move_is_capture(move);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue