|
@@ -170,7 +170,29 @@ impl SearchControl {
|
|
|
|
|
|
self.set_depth(depth);
|
|
|
|
|
|
- let result = search(board, self, hash, alpha, beta, depth);
|
|
|
+ let result =
|
|
|
+ if let Some(bv) = best_val {
|
|
|
+ const WINDOW_RADIUS: PosValue = 20;
|
|
|
+ alpha = 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 {
|
|
|
+ alpha = MIN_VALUE; beta = MAX_VALUE;
|
|
|
+ search(self.board.clone(), self, self.hash.clone(), alpha, beta, depth)
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ result
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ result
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ search(board, self, hash, alpha, beta, depth)
|
|
|
+ };
|
|
|
+
|
|
|
|
|
|
match result {
|
|
|
SearchResult::Finished(mov, val) => {
|