From 20bfd26c43049f346ef0f72ca4a8cb4387d7f782 Mon Sep 17 00:00:00 2001 From: Mario Lang Date: Mon, 1 Mar 2004 16:22:51 +0000 Subject: (chess-eval-static). Try to reward passed pawns and piece mobility --- chess-ai.el | 58 ++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 22 deletions(-) (limited to 'chess-ai.el') diff --git a/chess-ai.el b/chess-ai.el index 55e31f5..427b515 100644 --- a/chess-ai.el +++ b/chess-ai.el @@ -77,43 +77,57 @@ reply moves. You can only specify the search depth (see `chess-ai-depth')." -32767 (if (eq status :stalemate) 0 - (let (white-pawns black-pawns) + (let (white-queens black-queens white-rooks black-rooks + white-bishops black-bishops white-knights black-knights + white-pawns black-pawns) (dotimes (i 64) (let ((piece (aref position i))) (unless (= piece ? ) (cond ((= piece ?P) (push i white-pawns) (incf v chess-ai-pawn-value)) ((= piece ?p) (push i black-pawns) (decf v chess-ai-pawn-value)) - ((= piece ?Q) (incf v chess-ai-queen-value)) - ((= piece ?q) (decf v chess-ai-queen-value)) - ((= piece ?R) (incf v chess-ai-rook-value)) - ((= piece ?r) (decf v chess-ai-rook-value)) - ((= piece ?B) (incf v chess-ai-bishop-value)) - ((= piece ?b) (decf v chess-ai-bishop-value)) - ((= piece ?N) (incf v chess-ai-knight-value)) - ((= piece ?n) (decf v chess-ai-knight-value)))))) + ((= piece ?Q) (push i white-queens) (incf v chess-ai-queen-value)) + ((= piece ?q) (push i black-queens) (decf v chess-ai-queen-value)) + ((= piece ?R) (push i white-rooks) (incf v chess-ai-rook-value)) + ((= piece ?r) (push i black-rooks) (decf v chess-ai-rook-value)) + ((= piece ?B) (push i white-bishops) (incf v chess-ai-bishop-value)) + ((= piece ?b) (push i black-bishops) (decf v chess-ai-bishop-value)) + ((= piece ?N) (push i white-knights) (incf v chess-ai-knight-value)) + ((= piece ?n) (push i black-knights) (decf v chess-ai-knight-value)))))) ;; Reward passed Pawns - (unless white-pawns + (when white-pawns (setq v (+ (* (length (chess-pos-passed-pawns position t white-pawns)) chess-ai-passed-pawn)))) - (unless black-pawns + (when black-pawns (setq v (- v (* (length (chess-pos-passed-pawns position nil black-pawns)) chess-ai-passed-pawn)))) ;; Mobility - (setq v (+ v - (- (length (append (chess-legal-plies position :piece ?Q) - (chess-legal-plies position :piece ?R) - (chess-legal-plies position :piece ?B) - (chess-legal-plies position :piece ?N)) - ) - (length (append (chess-legal-plies position :piece ?q) - (chess-legal-plies position :piece ?r) - (chess-legal-plies position :piece ?b) - (chess-legal-plies position :piece ?n)) - )))) + (setq + v + (+ + v + (- + (length + (append (when white-queens + (chess-legal-plies position :piece ?Q :candidates white-queens)) + (when white-rooks + (chess-legal-plies position :piece ?R :candidates white-rooks)) + (when white-bishops + (chess-legal-plies position :piece ?B :candidates white-bishops)) + (when white-knights + (chess-legal-plies position :piece ?N :candidates white-knights)))) + (length + (append (when black-queens + (chess-legal-plies position :piece ?q :candidates black-queens)) + (when black-rooks + (chess-legal-plies position :piece ?r :candidates black-rooks)) + (when black-bishops + (chess-legal-plies position :piece ?b :candidates black-bishops)) + (when black-knights + (chess-legal-plies position :piece ?n :candidates black-knights))))))) (if (chess-pos-side-to-move position) v (- v))))))) -- cgit v1.2.3