浏览代码

fix aspiration window

Nicolas Winkler 2 年之前
父节点
当前提交
aed721d245
共有 1 个文件被更改,包括 17 次插入9 次删除
  1. 17 9
      src/search.rs

+ 17 - 9
src/search.rs

@@ -172,24 +172,32 @@ impl SearchControl {
 
             let result =
                 if let Some(bv) = best_val {
-                    const WINDOW_RADIUS: PosValue = 20;
+                    const WINDOW_RADIUS: PosValue = 30;
                     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 {
+                    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;
-                            search(self.board.clone(), self, self.hash.clone(), alpha, beta, depth)
+                            result = search(self.board.clone(), self, self.hash.clone(), alpha, beta, depth)
                         }
                         else {
-                            result
+                            break;
                         }
                     }
-                    else {
-                        result
-                    }
+                    result
                 } else {
+                    alpha = MIN_VALUE; beta = MAX_VALUE;
                     search(board, self, hash, alpha, beta, depth)
                 };