1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-29 16:23:09 +00:00

Add psqt ordering when there is no history

This seems to increase strenght (about 15 ELO),
still to test some variations on this theme that
could increase ELO even more.

Idea from Rebel (http://members.home.nl/matador/chess840.htm)

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2008-10-15 07:18:05 +01:00
parent cb76e4a814
commit 644db060ae
2 changed files with 35 additions and 8 deletions

View file

@ -246,15 +246,36 @@ void MovePicker::score_captures() {
}
void MovePicker::score_noncaptures() {
for(int i = 0; i < numOfMoves; i++) {
Move m = moves[i].move;
if(m == killer1)
moves[i].score = HistoryMax + 2;
else if(m == killer2)
moves[i].score = HistoryMax + 1;
else
moves[i].score = H.move_ordering_score(pos->piece_on(move_from(m)), m);
bool all_zero = true;
for (int i = 0; i < numOfMoves; i++)
{
Move m = moves[i].move;
if (m == killer1)
{
moves[i].score = HistoryMax + 2;
all_zero = false;
}
else if (m == killer2)
{
moves[i].score = HistoryMax + 1;
all_zero = false;
}
else
{
moves[i].score = H.move_ordering_score(pos->piece_on(move_from(m)), m);
if (all_zero && moves[i].score != 0)
all_zero = false;
}
}
if (!all_zero)
return;
// If we don't have at least one history score then
// try to order using psq tables difference between
// from square and to square.
for (int i = 0; i < numOfMoves; i++)
moves[i].score = pos->mg_pst_delta(moves[i].move);
}
void MovePicker::score_evasions() {

View file

@ -278,6 +278,7 @@ public:
Value eg_value() const;
Value non_pawn_material(Color c) const;
Phase game_phase() const;
Value mg_pst_delta(Move m) const;
// Game termination checks
bool is_mate();
@ -681,6 +682,11 @@ inline Value Position::mg_pst(Color c, PieceType pt, Square s) const {
return MgPieceSquareTable[piece_of_color_and_type(c, pt)][s];
}
inline Value Position::mg_pst_delta(Move m) const {
return MgPieceSquareTable[piece_on(move_from(m))][move_to(m)]
-MgPieceSquareTable[piece_on(move_from(m))][move_from(m)];
}
inline Value Position::eg_pst(Color c, PieceType pt, Square s) const {
return EgPieceSquareTable[piece_of_color_and_type(c, pt)][s];
}