mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 16:53:09 +00:00
Merge branch 'master' into increase_iid
This commit is contained in:
commit
c89274d8fb
3 changed files with 23 additions and 17 deletions
|
@ -40,8 +40,8 @@ namespace {
|
||||||
Pawns::Entry* pi;
|
Pawns::Entry* pi;
|
||||||
|
|
||||||
// attackedBy[color][piece type] is a bitboard representing all squares
|
// attackedBy[color][piece type] is a bitboard representing all squares
|
||||||
// attacked by a given color and piece type, attackedBy[color][0] contains
|
// attacked by a given color and piece type, attackedBy[color][ALL_PIECES]
|
||||||
// all squares attacked by the given color.
|
// contains all squares attacked by the given color.
|
||||||
Bitboard attackedBy[COLOR_NB][PIECE_TYPE_NB];
|
Bitboard attackedBy[COLOR_NB][PIECE_TYPE_NB];
|
||||||
|
|
||||||
// kingRing[color] is the zone around the king which is considered
|
// kingRing[color] is the zone around the king which is considered
|
||||||
|
@ -693,7 +693,7 @@ Value do_evaluate(const Position& pos, Value& margin) {
|
||||||
// Undefended minors get penalized even if not under attack
|
// Undefended minors get penalized even if not under attack
|
||||||
undefendedMinors = pos.pieces(Them)
|
undefendedMinors = pos.pieces(Them)
|
||||||
& (pos.pieces(BISHOP) | pos.pieces(KNIGHT))
|
& (pos.pieces(BISHOP) | pos.pieces(KNIGHT))
|
||||||
& ~ei.attackedBy[Them][0];
|
& ~ei.attackedBy[Them][ALL_PIECES];
|
||||||
|
|
||||||
if (undefendedMinors)
|
if (undefendedMinors)
|
||||||
score += UndefendedMinorPenalty;
|
score += UndefendedMinorPenalty;
|
||||||
|
@ -701,7 +701,7 @@ Value do_evaluate(const Position& pos, Value& margin) {
|
||||||
// Enemy pieces not defended by a pawn and under our attack
|
// Enemy pieces not defended by a pawn and under our attack
|
||||||
weakEnemies = pos.pieces(Them)
|
weakEnemies = pos.pieces(Them)
|
||||||
& ~ei.attackedBy[Them][PAWN]
|
& ~ei.attackedBy[Them][PAWN]
|
||||||
& ei.attackedBy[Us][0];
|
& ei.attackedBy[Us][ALL_PIECES];
|
||||||
|
|
||||||
if (!weakEnemies)
|
if (!weakEnemies)
|
||||||
return score;
|
return score;
|
||||||
|
@ -740,7 +740,7 @@ Value do_evaluate(const Position& pos, Value& margin) {
|
||||||
score += evaluate_pieces<QUEEN, Us, Trace>(pos, ei, mobility, mobilityArea);
|
score += evaluate_pieces<QUEEN, Us, Trace>(pos, ei, mobility, mobilityArea);
|
||||||
|
|
||||||
// Sum up all attacked squares
|
// Sum up all attacked squares
|
||||||
ei.attackedBy[Us][0] = ei.attackedBy[Us][PAWN] | ei.attackedBy[Us][KNIGHT]
|
ei.attackedBy[Us][ALL_PIECES] = ei.attackedBy[Us][PAWN] | ei.attackedBy[Us][KNIGHT]
|
||||||
| ei.attackedBy[Us][BISHOP] | ei.attackedBy[Us][ROOK]
|
| ei.attackedBy[Us][BISHOP] | ei.attackedBy[Us][ROOK]
|
||||||
| ei.attackedBy[Us][QUEEN] | ei.attackedBy[Us][KING];
|
| ei.attackedBy[Us][QUEEN] | ei.attackedBy[Us][KING];
|
||||||
return score;
|
return score;
|
||||||
|
@ -768,7 +768,7 @@ Value do_evaluate(const Position& pos, Value& margin) {
|
||||||
{
|
{
|
||||||
// Find the attacked squares around the king which has no defenders
|
// Find the attacked squares around the king which has no defenders
|
||||||
// apart from the king itself
|
// apart from the king itself
|
||||||
undefended = ei.attackedBy[Them][0] & ei.attackedBy[Us][KING];
|
undefended = ei.attackedBy[Them][ALL_PIECES] & ei.attackedBy[Us][KING];
|
||||||
undefended &= ~( ei.attackedBy[Us][PAWN] | ei.attackedBy[Us][KNIGHT]
|
undefended &= ~( ei.attackedBy[Us][PAWN] | ei.attackedBy[Us][KNIGHT]
|
||||||
| ei.attackedBy[Us][BISHOP] | ei.attackedBy[Us][ROOK]
|
| ei.attackedBy[Us][BISHOP] | ei.attackedBy[Us][ROOK]
|
||||||
| ei.attackedBy[Us][QUEEN]);
|
| ei.attackedBy[Us][QUEEN]);
|
||||||
|
@ -816,7 +816,7 @@ Value do_evaluate(const Position& pos, Value& margin) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Analyse enemy's safe distance checks for sliders and knights
|
// Analyse enemy's safe distance checks for sliders and knights
|
||||||
safe = ~(pos.pieces(Them) | ei.attackedBy[Us][0]);
|
safe = ~(pos.pieces(Them) | ei.attackedBy[Us][ALL_PIECES]);
|
||||||
|
|
||||||
b1 = pos.attacks_from<ROOK>(ksq) & safe;
|
b1 = pos.attacks_from<ROOK>(ksq) & safe;
|
||||||
b2 = pos.attacks_from<BISHOP>(ksq) & safe;
|
b2 = pos.attacks_from<BISHOP>(ksq) & safe;
|
||||||
|
@ -903,7 +903,7 @@ Value do_evaluate(const Position& pos, Value& margin) {
|
||||||
if (pos.is_empty(blockSq))
|
if (pos.is_empty(blockSq))
|
||||||
{
|
{
|
||||||
squaresToQueen = forward_bb(Us, s);
|
squaresToQueen = forward_bb(Us, s);
|
||||||
defendedSquares = squaresToQueen & ei.attackedBy[Us][0];
|
defendedSquares = squaresToQueen & ei.attackedBy[Us][ALL_PIECES];
|
||||||
|
|
||||||
// If there is an enemy rook or queen attacking the pawn from behind,
|
// If there is an enemy rook or queen attacking the pawn from behind,
|
||||||
// add all X-ray attacks by the rook or queen. Otherwise consider only
|
// add all X-ray attacks by the rook or queen. Otherwise consider only
|
||||||
|
@ -912,7 +912,7 @@ Value do_evaluate(const Position& pos, Value& margin) {
|
||||||
&& (forward_bb(Them, s) & pos.pieces(Them, ROOK, QUEEN) & pos.attacks_from<ROOK>(s)))
|
&& (forward_bb(Them, s) & pos.pieces(Them, ROOK, QUEEN) & pos.attacks_from<ROOK>(s)))
|
||||||
unsafeSquares = squaresToQueen;
|
unsafeSquares = squaresToQueen;
|
||||||
else
|
else
|
||||||
unsafeSquares = squaresToQueen & (ei.attackedBy[Them][0] | pos.pieces(Them));
|
unsafeSquares = squaresToQueen & (ei.attackedBy[Them][ALL_PIECES] | pos.pieces(Them));
|
||||||
|
|
||||||
// If there aren't enemy attacks or pieces along the path to queen give
|
// If there aren't enemy attacks or pieces along the path to queen give
|
||||||
// huge bonus. Even bigger if we protect the pawn's path.
|
// huge bonus. Even bigger if we protect the pawn's path.
|
||||||
|
@ -989,7 +989,7 @@ Value do_evaluate(const Position& pos, Value& margin) {
|
||||||
// Compute plies to queening and check direct advancement
|
// Compute plies to queening and check direct advancement
|
||||||
movesToGo = rank_distance(s, queeningSquare) - int(relative_rank(c, s) == RANK_2);
|
movesToGo = rank_distance(s, queeningSquare) - int(relative_rank(c, s) == RANK_2);
|
||||||
oppMovesToGo = square_distance(pos.king_square(~c), queeningSquare) - int(c != pos.side_to_move());
|
oppMovesToGo = square_distance(pos.king_square(~c), queeningSquare) - int(c != pos.side_to_move());
|
||||||
pathDefended = ((ei.attackedBy[c][0] & queeningPath) == queeningPath);
|
pathDefended = ((ei.attackedBy[c][ALL_PIECES] & queeningPath) == queeningPath);
|
||||||
|
|
||||||
if (movesToGo >= oppMovesToGo && !pathDefended)
|
if (movesToGo >= oppMovesToGo && !pathDefended)
|
||||||
continue;
|
continue;
|
||||||
|
@ -1136,7 +1136,7 @@ Value do_evaluate(const Position& pos, Value& margin) {
|
||||||
Bitboard safe = SpaceMask[Us]
|
Bitboard safe = SpaceMask[Us]
|
||||||
& ~pos.pieces(Us, PAWN)
|
& ~pos.pieces(Us, PAWN)
|
||||||
& ~ei.attackedBy[Them][PAWN]
|
& ~ei.attackedBy[Them][PAWN]
|
||||||
& (ei.attackedBy[Us][0] | ~ei.attackedBy[Them][0]);
|
& (ei.attackedBy[Us][ALL_PIECES] | ~ei.attackedBy[Them][ALL_PIECES]);
|
||||||
|
|
||||||
// Find all squares which are at most three squares behind some friendly pawn
|
// Find all squares which are at most three squares behind some friendly pawn
|
||||||
Bitboard behind = pos.pieces(Us, PAWN);
|
Bitboard behind = pos.pieces(Us, PAWN);
|
||||||
|
|
|
@ -856,7 +856,8 @@ split_point_start: // At split points actual search starts from here
|
||||||
&& !captureOrPromotion
|
&& !captureOrPromotion
|
||||||
&& !inCheck
|
&& !inCheck
|
||||||
&& !dangerous
|
&& !dangerous
|
||||||
&& move != ttMove)
|
&& move != ttMove
|
||||||
|
&& bestValue > VALUE_MATED_IN_MAX_PLY)
|
||||||
{
|
{
|
||||||
// Move count based pruning
|
// Move count based pruning
|
||||||
if ( depth < 16 * ONE_PLY
|
if ( depth < 16 * ONE_PLY
|
||||||
|
@ -878,9 +879,14 @@ split_point_start: // At split points actual search starts from here
|
||||||
|
|
||||||
if (futilityValue < beta)
|
if (futilityValue < beta)
|
||||||
{
|
{
|
||||||
if (SpNode)
|
bestValue = std::max(bestValue, futilityValue);
|
||||||
splitPoint->mutex.lock();
|
|
||||||
|
|
||||||
|
if (SpNode)
|
||||||
|
{
|
||||||
|
splitPoint->mutex.lock();
|
||||||
|
if (bestValue > splitPoint->bestValue)
|
||||||
|
splitPoint->bestValue = bestValue;
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ void init(OptionsMap& o) {
|
||||||
o["Passed Pawns (Middle Game)"] = Option(100, 0, 200, on_eval);
|
o["Passed Pawns (Middle Game)"] = Option(100, 0, 200, on_eval);
|
||||||
o["Passed Pawns (Endgame)"] = Option(100, 0, 200, on_eval);
|
o["Passed Pawns (Endgame)"] = Option(100, 0, 200, on_eval);
|
||||||
o["Space"] = Option(100, 0, 200, on_eval);
|
o["Space"] = Option(100, 0, 200, on_eval);
|
||||||
o["Min Split Depth"] = Option(msd, 4, 7, on_threads);
|
o["Min Split Depth"] = Option(msd, 4, 12, on_threads);
|
||||||
o["Max Threads per Split Point"] = Option(5, 4, 8, on_threads);
|
o["Max Threads per Split Point"] = Option(5, 4, 8, on_threads);
|
||||||
o["Threads"] = Option(cpus, 1, MAX_THREADS, on_threads);
|
o["Threads"] = Option(cpus, 1, MAX_THREADS, on_threads);
|
||||||
o["Use Sleeping Threads"] = Option(true);
|
o["Use Sleeping Threads"] = Option(true);
|
||||||
|
|
Loading…
Add table
Reference in a new issue