瀏覽代碼

re-adding aspiration windows

Nicolas Winkler 2 年之前
父節點
當前提交
658f0dc73e
共有 1 個文件被更改,包括 23 次插入1 次删除
  1. 23 1
      src/search.rs

+ 23 - 1
src/search.rs

@@ -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) => {