Initiate end game psqt based on material scores

This commit is contained in:
stefiosif
2024-11-10 14:19:26 +02:00
parent e2d3185bbe
commit aba551ce7f

View File

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