|
@@ -172,24 +172,32 @@ impl SearchControl {
|
|
|
|
|
|
let result =
|
|
let result =
|
|
if let Some(bv) = best_val {
|
|
if let Some(bv) = best_val {
|
|
- const WINDOW_RADIUS: PosValue = 20;
|
|
|
|
|
|
+ const WINDOW_RADIUS: PosValue = 30;
|
|
alpha = bv - WINDOW_RADIUS;
|
|
alpha = bv - WINDOW_RADIUS;
|
|
beta = bv + WINDOW_RADIUS;
|
|
beta = bv + WINDOW_RADIUS;
|
|
|
|
|
|
- let result = search(board, self, hash, alpha, beta, depth);
|
|
|
|
- if let SearchResult::Finished(_mov, val) = result {
|
|
|
|
- if val <= alpha || val >= beta {
|
|
|
|
|
|
+ let mut result = search(board, self, hash, alpha, beta, depth);
|
|
|
|
+ loop {
|
|
|
|
+ if let SearchResult::Finished(_mov, val) = result {
|
|
|
|
+ if val <= alpha || val >= beta {
|
|
|
|
+ alpha = MIN_VALUE; beta = MAX_VALUE;
|
|
|
|
+ result = search(self.board.clone(), self, self.hash.clone(), alpha, beta, depth)
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else if let SearchResult::Invalid = result {
|
|
alpha = MIN_VALUE; beta = MAX_VALUE;
|
|
alpha = MIN_VALUE; beta = MAX_VALUE;
|
|
- search(self.board.clone(), self, self.hash.clone(), alpha, beta, depth)
|
|
|
|
|
|
+ result = search(self.board.clone(), self, self.hash.clone(), alpha, beta, depth)
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
- result
|
|
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- else {
|
|
|
|
- result
|
|
|
|
- }
|
|
|
|
|
|
+ result
|
|
} else {
|
|
} else {
|
|
|
|
+ alpha = MIN_VALUE; beta = MAX_VALUE;
|
|
search(board, self, hash, alpha, beta, depth)
|
|
search(board, self, hash, alpha, beta, depth)
|
|
};
|
|
};
|
|
|
|
|