Change a/b to fail-soft

This commit is contained in:
stefiosif
2025-01-25 09:16:51 +02:00
parent 29d69b5ab1
commit d8cc3b74a2
2 changed files with 17 additions and 14 deletions

View File

@@ -36,7 +36,6 @@ pub fn negamax(
let color = game.current_player(); let color = game.current_player();
let mut best_move = None; let mut best_move = None;
let mut best_score = MIN_SCORE; let mut best_score = MIN_SCORE;
let mate_score = -MATE_SCORE + plies as i32;
let mut legal_moves = 0; let mut legal_moves = 0;
let all_moves = game.board.pseudo_moves_all(); let all_moves = game.board.pseudo_moves_all();
@@ -57,23 +56,21 @@ pub fn negamax(
if score > best_score { if score > best_score {
best_score = score; best_score = score;
best_move = Some(mv);
}
if score >= beta {
best_score = beta;
best_move = Some(mv);
break;
} }
if score > alpha { if score > alpha {
alpha = score; alpha = score;
best_move = Some(mv);
}
if score >= beta {
break;
} }
} }
if legal_moves == 0 { if legal_moves == 0 {
if game.board.king_under_check(color) { if game.board.king_under_check(color) {
return Ok(mate_score); return Ok(-MATE_SCORE + plies as i32);
} }
return Ok(0); return Ok(0);
} }

View File

@@ -15,7 +15,7 @@ pub fn quiescence(game: &mut Game, mut alpha: i32, beta: i32, time_info: &TimeIn
let stand_pat = pesto().eval(game); let stand_pat = pesto().eval(game);
if stand_pat >= beta { if stand_pat >= beta {
return Ok(beta); return Ok(stand_pat);
} }
if stand_pat > alpha { if stand_pat > alpha {
@@ -26,6 +26,7 @@ pub fn quiescence(game: &mut Game, mut alpha: i32, beta: i32, time_info: &TimeIn
let all_moves = game.board.pseudo_moves_all_captures(); let all_moves = game.board.pseudo_moves_all_captures();
let tt_move = game.tt.lookup(game.hash).and_then(|entry| entry.mv); let tt_move = game.tt.lookup(game.hash).and_then(|entry| entry.mv);
let moves = move_ordering::sort_moves(all_moves, &game.mailbox, tt_move); let moves = move_ordering::sort_moves(all_moves, &game.mailbox, tt_move);
let mut best_score = stand_pat;
for mv in moves { for mv in moves {
game.make_move(&mv); game.make_move(&mv);
@@ -38,14 +39,19 @@ pub fn quiescence(game: &mut Game, mut alpha: i32, beta: i32, time_info: &TimeIn
let score = -quiescence(game, -beta, -alpha, time_info)?; let score = -quiescence(game, -beta, -alpha, time_info)?;
game.unmake_move(); game.unmake_move();
if score >= beta {
return Ok(beta); if score > best_score {
best_score = score;
} }
if score > alpha { if score > alpha {
alpha = score alpha = score;
}
if score >= beta {
break;
} }
} }
Ok(alpha) Ok(best_score)
} }