mirror of
https://github.com/sockspls/badfish
synced 2025-04-29 16:23: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;
|
||||
|
||||
// attackedBy[color][piece type] is a bitboard representing all squares
|
||||
// attacked by a given color and piece type, attackedBy[color][0] contains
|
||||
// all squares attacked by the given color.
|
||||
// attacked by a given color and piece type, attackedBy[color][ALL_PIECES]
|
||||
// contains all squares attacked by the given color.
|
||||
Bitboard attackedBy[COLOR_NB][PIECE_TYPE_NB];
|
||||
|
||||
// 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
|
||||
undefendedMinors = pos.pieces(Them)
|
||||
& (pos.pieces(BISHOP) | pos.pieces(KNIGHT))
|
||||
& ~ei.attackedBy[Them][0];
|
||||
& ~ei.attackedBy[Them][ALL_PIECES];
|
||||
|
||||
if (undefendedMinors)
|
||||
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
|
||||
weakEnemies = pos.pieces(Them)
|
||||
& ~ei.attackedBy[Them][PAWN]
|
||||
& ei.attackedBy[Us][0];
|
||||
& ei.attackedBy[Us][ALL_PIECES];
|
||||
|
||||
if (!weakEnemies)
|
||||
return score;
|
||||
|
@ -740,9 +740,9 @@ Value do_evaluate(const Position& pos, Value& margin) {
|
|||
score += evaluate_pieces<QUEEN, Us, Trace>(pos, ei, mobility, mobilityArea);
|
||||
|
||||
// Sum up all attacked squares
|
||||
ei.attackedBy[Us][0] = ei.attackedBy[Us][PAWN] | ei.attackedBy[Us][KNIGHT]
|
||||
| ei.attackedBy[Us][BISHOP] | ei.attackedBy[Us][ROOK]
|
||||
| ei.attackedBy[Us][QUEEN] | ei.attackedBy[Us][KING];
|
||||
ei.attackedBy[Us][ALL_PIECES] = ei.attackedBy[Us][PAWN] | ei.attackedBy[Us][KNIGHT]
|
||||
| ei.attackedBy[Us][BISHOP] | ei.attackedBy[Us][ROOK]
|
||||
| ei.attackedBy[Us][QUEEN] | ei.attackedBy[Us][KING];
|
||||
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
|
||||
// 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]
|
||||
| ei.attackedBy[Us][BISHOP] | ei.attackedBy[Us][ROOK]
|
||||
| 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
|
||||
safe = ~(pos.pieces(Them) | ei.attackedBy[Us][0]);
|
||||
safe = ~(pos.pieces(Them) | ei.attackedBy[Us][ALL_PIECES]);
|
||||
|
||||
b1 = pos.attacks_from<ROOK>(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))
|
||||
{
|
||||
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,
|
||||
// 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)))
|
||||
unsafeSquares = squaresToQueen;
|
||||
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
|
||||
// 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
|
||||
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());
|
||||
pathDefended = ((ei.attackedBy[c][0] & queeningPath) == queeningPath);
|
||||
pathDefended = ((ei.attackedBy[c][ALL_PIECES] & queeningPath) == queeningPath);
|
||||
|
||||
if (movesToGo >= oppMovesToGo && !pathDefended)
|
||||
continue;
|
||||
|
@ -1136,7 +1136,7 @@ Value do_evaluate(const Position& pos, Value& margin) {
|
|||
Bitboard safe = SpaceMask[Us]
|
||||
& ~pos.pieces(Us, 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
|
||||
Bitboard behind = pos.pieces(Us, PAWN);
|
||||
|
|
|
@ -856,7 +856,8 @@ split_point_start: // At split points actual search starts from here
|
|||
&& !captureOrPromotion
|
||||
&& !inCheck
|
||||
&& !dangerous
|
||||
&& move != ttMove)
|
||||
&& move != ttMove
|
||||
&& bestValue > VALUE_MATED_IN_MAX_PLY)
|
||||
{
|
||||
// Move count based pruning
|
||||
if ( depth < 16 * ONE_PLY
|
||||
|
@ -878,9 +879,14 @@ split_point_start: // At split points actual search starts from here
|
|||
|
||||
if (futilityValue < beta)
|
||||
{
|
||||
if (SpNode)
|
||||
splitPoint->mutex.lock();
|
||||
bestValue = std::max(bestValue, futilityValue);
|
||||
|
||||
if (SpNode)
|
||||
{
|
||||
splitPoint->mutex.lock();
|
||||
if (bestValue > splitPoint->bestValue)
|
||||
splitPoint->bestValue = bestValue;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ void init(OptionsMap& o) {
|
|||
o["Passed Pawns (Middle Game)"] = 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["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["Threads"] = Option(cpus, 1, MAX_THREADS, on_threads);
|
||||
o["Use Sleeping Threads"] = Option(true);
|
||||
|
|
Loading…
Add table
Reference in a new issue