mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 16:53:09 +00:00
parent
99d914985f
commit
0c1f119069
6 changed files with 21 additions and 19 deletions
|
@ -174,8 +174,8 @@ namespace {
|
|||
S(-20,-12), S( 1, -8), S( 2, 10), S( 9, 10)
|
||||
};
|
||||
|
||||
// KingProtector[PieceType-2] * "distance to own king" determines a bonus for each piece.
|
||||
const Score KingProtector[] = {S(-3, -5), S(-4, -3), S(-3, 0), S(-1, 1) };
|
||||
// KingProtector[PieceType-2] contains a bonus according to distance from king
|
||||
const Score KingProtector[] = { S(-3, -5), S(-4, -3), S(-3, 0), S(-1, 1) };
|
||||
|
||||
// Assorted bonuses and penalties used by evaluation
|
||||
const Score MinorBehindPawn = S( 16, 0);
|
||||
|
@ -291,9 +291,10 @@ namespace {
|
|||
|
||||
int mob = popcount(b & ei.mobilityArea[Us]);
|
||||
|
||||
mobility[Us] += MobilityBonus[Pt-2][mob];
|
||||
mobility[Us] += MobilityBonus[Pt - 2][mob];
|
||||
|
||||
score += KingProtector[Pt-2] * distance(s, pos.square<KING>(Us));
|
||||
// Bonus for this piece as a king protector
|
||||
score += KingProtector[Pt - 2] * distance(s, pos.square<KING>(Us));
|
||||
|
||||
if (Pt == BISHOP || Pt == KNIGHT)
|
||||
{
|
||||
|
|
|
@ -202,7 +202,7 @@ Move MovePicker::next_move(bool skipQuiets) {
|
|||
move = pick_best(cur++, endMoves);
|
||||
if (move != ttMove)
|
||||
{
|
||||
if (pos.see_ge(move, VALUE_ZERO))
|
||||
if (pos.see_ge(move))
|
||||
return move;
|
||||
|
||||
// Losing capture, move it to the beginning of the array
|
||||
|
|
|
@ -163,12 +163,14 @@ namespace {
|
|||
&& popcount(phalanx) >= popcount(leverPush))
|
||||
e->passedPawns[Us] |= s;
|
||||
|
||||
else if ( stoppers == SquareBB[s + Up]
|
||||
&& relative_rank(Us, s) >= RANK_5
|
||||
&& (b = (shift<Up>(supported) & ~theirPawns)))
|
||||
while(b)
|
||||
if(!more_than_one(theirPawns & PawnAttacks[Us][pop_lsb(&b)]))
|
||||
else if ( stoppers == SquareBB[s + Up]
|
||||
&& relative_rank(Us, s) >= RANK_5)
|
||||
{
|
||||
b = shift<Up>(supported) & ~theirPawns;
|
||||
while (b)
|
||||
if (!more_than_one(theirPawns & PawnAttacks[Us][pop_lsb(&b)]))
|
||||
e->passedPawns[Us] |= s;
|
||||
}
|
||||
|
||||
// Score this pawn
|
||||
if (!neighbours)
|
||||
|
@ -184,7 +186,7 @@ namespace {
|
|||
score += Connected[opposed][!!phalanx][more_than_one(supported)][relative_rank(Us, s)];
|
||||
|
||||
if (doubled && !supported)
|
||||
score -= Doubled;
|
||||
score -= Doubled;
|
||||
|
||||
if (lever)
|
||||
score += Lever[relative_rank(Us, s)];
|
||||
|
|
|
@ -65,7 +65,7 @@ PieceType min_attacker(const Bitboard* bb, Square to, Bitboard stmAttackers,
|
|||
|
||||
Bitboard b = stmAttackers & bb[Pt];
|
||||
if (!b)
|
||||
return min_attacker<Pt+1>(bb, to, stmAttackers, occupied, attackers);
|
||||
return min_attacker<Pt + 1>(bb, to, stmAttackers, occupied, attackers);
|
||||
|
||||
occupied ^= b & ~(b - 1);
|
||||
|
||||
|
|
|
@ -136,7 +136,7 @@ public:
|
|||
void undo_null_move();
|
||||
|
||||
// Static Exchange Evaluation
|
||||
bool see_ge(Move m, Value value) const;
|
||||
bool see_ge(Move m, Value value = VALUE_ZERO) const;
|
||||
|
||||
// Accessing hash keys
|
||||
Key key() const;
|
||||
|
|
|
@ -556,7 +556,7 @@ namespace {
|
|||
// Step 1. Initialize node
|
||||
Thread* thisThread = pos.this_thread();
|
||||
inCheck = pos.checkers();
|
||||
moveCount = quietCount = ss->moveCount = 0;
|
||||
moveCount = quietCount = ss->moveCount = 0;
|
||||
ss->history = 0;
|
||||
bestValue = -VALUE_INFINITE;
|
||||
ss->ply = (ss-1)->ply + 1;
|
||||
|
@ -895,7 +895,7 @@ moves_loop: // When in check search starts from here
|
|||
}
|
||||
else if ( givesCheck
|
||||
&& !moveCountPruning
|
||||
&& pos.see_ge(move, VALUE_ZERO))
|
||||
&& pos.see_ge(move))
|
||||
extension = ONE_PLY;
|
||||
|
||||
// Calculate new depth for this move
|
||||
|
@ -979,8 +979,8 @@ moves_loop: // When in check search starts from here
|
|||
// Decrease reduction for moves that escape a capture. Filter out
|
||||
// castling moves, because they are coded as "king captures rook" and
|
||||
// hence break make_move().
|
||||
else if ( type_of(move) == NORMAL
|
||||
&& !pos.see_ge(make_move(to_sq(move), from_sq(move)), VALUE_ZERO))
|
||||
else if ( type_of(move) == NORMAL
|
||||
&& !pos.see_ge(make_move(to_sq(move), from_sq(move))))
|
||||
r -= 2 * ONE_PLY;
|
||||
|
||||
ss->history = cmh[moved_piece][to_sq(move)]
|
||||
|
@ -1116,7 +1116,6 @@ moves_loop: // When in check search starts from here
|
|||
: inCheck ? mated_in(ss->ply) : DrawValue[pos.side_to_move()];
|
||||
else if (bestMove)
|
||||
{
|
||||
|
||||
// Quiet best move: update move sorting heuristics
|
||||
if (!pos.capture_or_promotion(bestMove))
|
||||
update_stats(pos, ss, bestMove, quietsSearched, quietCount, stat_bonus(depth));
|
||||
|
@ -1290,7 +1289,7 @@ moves_loop: // When in check search starts from here
|
|||
// Don't search moves with negative SEE values
|
||||
if ( (!InCheck || evasionPrunable)
|
||||
&& type_of(move) != PROMOTION
|
||||
&& !pos.see_ge(move, VALUE_ZERO))
|
||||
&& !pos.see_ge(move))
|
||||
continue;
|
||||
|
||||
// Speculative prefetch as early as possible
|
||||
|
|
Loading…
Add table
Reference in a new issue