Initiate end game psqt based on material scores
This commit is contained in:
@@ -17,23 +17,20 @@ const fn piece_score(piece_type: PieceType) -> i32 {
|
||||
PieceType::Bishop => 330,
|
||||
PieceType::Rook => 500,
|
||||
PieceType::Queen => 900,
|
||||
PieceType::King => 20000,
|
||||
PieceType::King => 0,
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Use piece scores instead of piece count
|
||||
fn is_end_game(board: &Board) -> bool {
|
||||
let white_pieces_num = board
|
||||
.white_pieces
|
||||
.iter()
|
||||
.fold(0, |acc, p| acc + bitboard::bit_count(p.bitboard));
|
||||
let white_pieces = board.white_pieces.iter().fold(0, |acc, p| {
|
||||
acc + bitboard::bit_count(p.bitboard) * piece_score(p.piece_type) as usize
|
||||
});
|
||||
|
||||
let black_pieces_num = board
|
||||
.black_pieces
|
||||
.iter()
|
||||
.fold(0, |acc, p| acc + bitboard::bit_count(p.bitboard));
|
||||
let black_pieces = board.black_pieces.iter().fold(0, |acc, p| {
|
||||
acc + bitboard::bit_count(p.bitboard) * piece_score(p.piece_type) as usize
|
||||
});
|
||||
|
||||
white_pieces_num < 6 && black_pieces_num < 6
|
||||
(white_pieces + black_pieces) < 2000
|
||||
}
|
||||
|
||||
fn evaluate_side_for(board: &Board, color: Color) -> i32 {
|
||||
@@ -43,10 +40,10 @@ fn evaluate_side_for(board: &Board, color: Color) -> i32 {
|
||||
Color::Black => &board.black_pieces,
|
||||
};
|
||||
|
||||
let psqt = if !is_end_game(board) {
|
||||
piece_square_score
|
||||
} else {
|
||||
let psqt = if is_end_game(board) {
|
||||
piece_square_score_endgame
|
||||
} else {
|
||||
piece_square_score
|
||||
};
|
||||
|
||||
for piece in pieces {
|
||||
@@ -99,7 +96,7 @@ mod tests {
|
||||
assert_eq!(330, piece_score(PieceType::Bishop));
|
||||
assert_eq!(500, piece_score(PieceType::Rook));
|
||||
assert_eq!(900, piece_score(PieceType::Queen));
|
||||
assert_eq!(20000, piece_score(PieceType::King));
|
||||
assert_eq!(0, piece_score(PieceType::King));
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -117,8 +114,8 @@ mod tests {
|
||||
let evaluate_white = evaluate_side_for(&game_2.board, Color::White);
|
||||
let evaluate_black = evaluate_side_for(&game_2.board, Color::Black);
|
||||
|
||||
assert_eq!(24005, evaluate_white);
|
||||
assert_eq!(23965, evaluate_black);
|
||||
assert_eq!(4005, evaluate_white);
|
||||
assert_eq!(3965, evaluate_black);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user