It seems much worst in number of nodes seacrhed to reach
the depth and anyhow does not give any advantage to the
Onno's oroginal one.
So revert by now and perhaps readd when we find something
clearly better.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
-MovePicker::MovePicker(const Position& p, Move ttm, const History& h, int threshold)
+MovePicker::MovePicker(const Position& p, Move ttm, const History& h, int parentCapture)
: pos(p), H(h) {
assert (!pos.in_check());
// In ProbCut we consider only captures better than parent's move
: pos(p), H(h) {
assert (!pos.in_check());
// In ProbCut we consider only captures better than parent's move
- captureThreshold = threshold;
+ captureThreshold = parentCapture;
phasePtr = ProbCutTable;
if ( ttm != MOVE_NONE
phasePtr = ProbCutTable;
if ( ttm != MOVE_NONE
public:
MovePicker(const Position&, Move, Depth, const History&, SearchStack*, Value);
MovePicker(const Position&, Move, Depth, const History&);
public:
MovePicker(const Position&, Move, Depth, const History&, SearchStack*, Value);
MovePicker(const Position&, Move, Depth, const History&);
- MovePicker(const Position&, Move, const History&, int threshold);
+ MovePicker(const Position&, Move, const History&, int parentCapture);
Move get_next_move();
private:
Move get_next_move();
private:
// Static exchange evaluation
int see(Move m) const;
int see_sign(Move m) const;
// Static exchange evaluation
int see(Move m) const;
int see_sign(Move m) const;
+ static int see_value(PieceType pt);
// Accessing hash keys
Key get_key() const;
// Accessing hash keys
Key get_key() const;
return !(pieces(PAWN, opposite_color(c)) & attack_span_mask(c, s));
}
return !(pieces(PAWN, opposite_color(c)) & attack_span_mask(c, s));
}
+inline int Position::see_value(PieceType pt) {
+ return seeValues[pt];
+}
+
inline Key Position::get_key() const {
return st->key;
}
inline Key Position::get_key() const {
return st->key;
}
}
// Step 9. ProbCut (is omitted in PV nodes)
}
// Step 9. ProbCut (is omitted in PV nodes)
- // If we have a good capture that raises the score well above beta and a reduced
- // search confirms the score then we can (almost) safely prune the previous move.
+ // If we have a very good capture (i.e. SEE > seeValues[captured_piece_type])
+ // and a reduced search returns a value much above beta, we can (almost) safely
+ // prune the previous move.
if ( !PvNode
&& depth >= RazorDepth + ONE_PLY
&& !inCheck
if ( !PvNode
&& depth >= RazorDepth + ONE_PLY
&& !inCheck
assert(rdepth >= ONE_PLY);
assert(rdepth >= ONE_PLY);
- MovePicker mp(pos, ttMove, H, Max(rbeta - refinedValue, VALUE_ZERO));
+ MovePicker mp(pos, ttMove, H, Position::see_value(pos.captured_piece_type()));
pinned = pos.pinned_pieces(pos.side_to_move());
while ((move = mp.get_next_move()) != MOVE_NONE)
pinned = pos.pinned_pieces(pos.side_to_move());
while ((move = mp.get_next_move()) != MOVE_NONE)