Make mvv_lva to map pieces to their material score instead of abritrary matrix
Add time limits, use anyhow crate to improve error handling, remove depth limit on quiescence search
This commit is contained in:
@@ -10,7 +10,7 @@ use crate::{
|
||||
|
||||
use super::psqt::piece_square_score_endgame;
|
||||
|
||||
const fn piece_score(piece_type: PieceType) -> i32 {
|
||||
pub const fn material_score(piece_type: PieceType) -> i32 {
|
||||
match piece_type {
|
||||
PieceType::Pawn => 100,
|
||||
PieceType::Knight => 320,
|
||||
@@ -23,11 +23,11 @@ const fn piece_score(piece_type: PieceType) -> i32 {
|
||||
|
||||
fn is_end_game(board: &Board) -> bool {
|
||||
let white_pieces = board.white_pieces.iter().fold(0, |acc, p| {
|
||||
acc + bitboard::bit_count(p.bitboard) * piece_score(p.piece_type) as usize
|
||||
acc + bitboard::bit_count(p.bitboard) * material_score(p.piece_type) as usize
|
||||
});
|
||||
|
||||
let black_pieces = board.black_pieces.iter().fold(0, |acc, p| {
|
||||
acc + bitboard::bit_count(p.bitboard) * piece_score(p.piece_type) as usize
|
||||
acc + bitboard::bit_count(p.bitboard) * material_score(p.piece_type) as usize
|
||||
});
|
||||
|
||||
(white_pieces + black_pieces) < 2000
|
||||
@@ -55,7 +55,7 @@ fn evaluate_side_for(board: &Board, color: Color) -> i32 {
|
||||
Color::Black => mirror_index(lsb(bitboard)),
|
||||
};
|
||||
|
||||
score += piece_score(piece_type);
|
||||
score += material_score(piece_type);
|
||||
score += psqt(piece_type, psqt_index);
|
||||
bitboard &= bitboard - 1;
|
||||
}
|
||||
@@ -81,7 +81,7 @@ mod tests {
|
||||
board::{Color, PieceType},
|
||||
fen::from_fen,
|
||||
},
|
||||
evaluation::evaluation::{evaluate_position, evaluate_side_for, piece_score},
|
||||
evaluation::evaluation::{evaluate_position, evaluate_side_for, material_score},
|
||||
};
|
||||
|
||||
const FEN_QUIET: [&str; 2] = [
|
||||
@@ -90,13 +90,13 @@ mod tests {
|
||||
];
|
||||
|
||||
#[test]
|
||||
fn test_piece_score() -> Result<(), String> {
|
||||
assert_eq!(100, piece_score(PieceType::Pawn));
|
||||
assert_eq!(320, piece_score(PieceType::Knight));
|
||||
assert_eq!(330, piece_score(PieceType::Bishop));
|
||||
assert_eq!(500, piece_score(PieceType::Rook));
|
||||
assert_eq!(900, piece_score(PieceType::Queen));
|
||||
assert_eq!(0, piece_score(PieceType::King));
|
||||
fn test_material_score() -> Result<(), String> {
|
||||
assert_eq!(100, material_score(PieceType::Pawn));
|
||||
assert_eq!(320, material_score(PieceType::Knight));
|
||||
assert_eq!(330, material_score(PieceType::Bishop));
|
||||
assert_eq!(500, material_score(PieceType::Rook));
|
||||
assert_eq!(900, material_score(PieceType::Queen));
|
||||
assert_eq!(0, material_score(PieceType::King));
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user