X-Git-Url: http://git.kpe.io/?p=reversi.git;a=blobdiff_plain;f=strategies.lisp;h=c2cade730dbc034d99bba3498b72fec6842ff592;hp=e7d2fe681063a35c0c402e28b0a035c7cb99a2dc;hb=20c849f483c381f84eae22eee807280c8d00e554;hpb=1d59e17264a602c64d27607c2c00d98cca03e82e diff --git a/strategies.lisp b/strategies.lisp index e7d2fe6..c2cade7 100644 --- a/strategies.lisp +++ b/strategies.lisp @@ -8,9 +8,9 @@ ;;;; Programer: Kevin Rosenberg based on code by Peter Norvig ;;;; Date Started: 1 Nov 2001 ;;;; -;;;; $Id: strategies.lisp,v 1.5 2003/05/06 15:51:20 kevin Exp $ +;;;; $Id: strategies.lisp,v 1.6 2003/06/12 12:42:13 kevin Exp $ ;;;; -;;;; This file is Copyright (c) 2001-2002 by Kevin M. Rosenberg +;;;; This file is Copyright (c) 2001-2003 by Kevin M. Rosenberg ;;;; and Copyright (c) 1998-2002 Peter Norvig ;;;; ;;;; Reversi users are granted the rights to distribute and use this software @@ -20,9 +20,6 @@ (in-package #:reversi) -(eval-when (:compile-toplevel) - (declaim (optimize (safety 1) (space 0) (speed 3) (compilation-speed 0)))) - (defun random-strategy (player board) "Make any legal move." (declare (type player player) @@ -119,7 +116,8 @@ searching PLY levels deep and backing up values." (declare (type player player) (type board board) - (fixnum ply)) + (fixnum ply) + (optimize (speed 3) (space 0) (safety 0))) (if (= ply 0) (funcall eval-fn player board) (let ((moves (legal-moves player board))) @@ -158,7 +156,8 @@ using cutoffs whenever possible." (declare (type player player) (type board board) - (fixnum achievable cutoff ply)) + (fixnum achievable cutoff ply) + (optimize (speed 3) (safety 0) (space 0))) (if (= ply 0) (funcall eval-fn player board) (let ((moves (legal-moves player board))) @@ -199,7 +198,8 @@ "Like WEIGHTED-SQUARES, but don't take off for moving near an occupied corner." (declare (type player player) - (type board board)) + (type board board) + (optimize (speed 3) (safety 0) (space 0))) (let ((w (weighted-squares player board))) (declare (fixnum w)) (dolist (corner '(11 18 81 88)) @@ -256,6 +256,8 @@ (defun alpha-beta2 (player node achievable cutoff ply eval-fn) "A-B search, sorting moves by eval-fn" ;; Returns two values: achievable-value and move-to-make + (declare (fixnum ply) + (optimize (speed 3) (space 0) (safety 0))) (if (= ply 0) (values (node-value node) node) (let* ((board (node-board node)) @@ -283,6 +285,8 @@ (defun negate-value (node) "Set the value of a node to its negative." + (declare (fixnum node) + (speed 3) (safety 0) (space 0)) (setf (node-value node) (- (node-value node))) node) @@ -304,7 +308,8 @@ killer) (declare (type board board) (type player player) - (type fixnum achievable cutoff ply)) + (type fixnum achievable cutoff ply) + (optimize (speed 3) (space 0) (safety 0))) "A-B search, putting killer move first." (if (= ply 0) (funcall eval-fn player board) @@ -345,7 +350,8 @@ (declare (type board board) (type player player) (type fixnum achievable cutoff ply) - (type move killer)) + (type move killer) + (optimize (speed 3) (safety 0) (space 0))) "A-B search, putting killer move first." (if (= ply 0) (funcall eval-fn player board) @@ -416,7 +422,7 @@ Returns current and potential mobility for player." (declare (type board board) (type player player) - (optimize (speed 3) (safety 0 ))) + (optimize (speed 3) (safety 0) (space 0))) (let ((opp (opponent player)) (current 0) ; player's current mobility (potential 0)) ; player's potential mobility @@ -437,7 +443,7 @@ (declare (type board board) (type player opp) (type cons neighbors) - (optimize (speed 3) (safety 0))) + (optimize (speed 3) (safety 0) (space 0))) (block search (dolist (sq neighbors) (declare (type square sq)) @@ -448,7 +454,8 @@ (defun edge-stability (player board) "Total edge evaluation for player to move on board." (declare (type board board) - (type player player)) + (type player player) + (optimize (speed 3) (safety 0) (space 0)) (loop for edge-list in *edge-and-x-lists* sum (aref *edge-table* (edge-index player board edge-list)))) @@ -459,7 +466,8 @@ ;; The three factors are multiplied by coefficients ;; that vary by move number: (declare (type board board) - (type player player)) + (type player player) + (optimize (speed 3) (safety 0) (space 0))) (let ((c-edg (+ 312000 (* 6240 *move-number*))) (c-cur (if (< *move-number* 25) (+ 50000 (* 2000 *move-number*))