소스 검색

improved king safety eval

Nicolas Winkler 3 년 전
부모
커밋
6b624d48ec
2개의 변경된 파일11개의 추가작업 그리고 2개의 파일을 삭제
  1. 10 1
      src/evaluate.rs
  2. 1 1
      src/search.rs

+ 10 - 1
src/evaluate.rs

@@ -115,7 +115,16 @@ fn king_safety(game: &Game, side: Side) -> PosValue {
     let guards = game.get_all_side(side) & area;
     let attackers = game.get_all_side(!side) & area;
 
-    guards.count_ones() as PosValue * 10 - attackers.count_ones() as PosValue * 35
+    let kneighbors = guards.count_ones() as PosValue * 5 - attackers.count_ones() as PosValue * 15;
+
+    let enemies = game.get_all_side(!side);
+    let kingrow = indices_from_square(square(king)).1;
+
+    let row_opponents = enemies & (ROW_1 << (kingrow * 8));
+    let dang_row_opponents = row_opponents & (ROW_1 | ROW_2 | ROW_7 | ROW_8);
+    let danger_value = (dang_row_opponents.count_ones() * 50) as PosValue;
+
+    return kneighbors + danger_value;
 }
 
 fn king_there(game: &Game, side: Side) -> PosValue {

+ 1 - 1
src/search.rs

@@ -143,7 +143,7 @@ fn negamax(game: &mut Game, sc: &mut SearchControl, hash: &mut Cache, mut alpha:
     }
 
     if depth == 0 {
-        return quiescence_search(game, sc, hash, alpha, beta, 100);
+        return quiescence_search(game, sc, hash, alpha, beta, 13);
     }
 
     sc.nodes += 1;