# HG changeset patch # User Steve Losh # Date 1494850970 0 # Node ID 4c2306e08ed1f39104a61bf50b47d4509b6b29cc # Parent a3e8fc8cad533951e32fd0c26dc8d029a1b3b3e8 A few more tweaks diff -r a3e8fc8cad53 -r 4c2306e08ed1 src/graphviz.lisp --- a/src/graphviz.lisp Tue May 09 12:37:41 2017 +0000 +++ b/src/graphviz.lisp Mon May 15 12:22:50 2017 +0000 @@ -42,7 +42,8 @@ (label-fn #'identity)) (let ((*rt-label-fn* label-fn)) (cl-dot:dot-graph - (cl-dot:generate-graph-from-roots 'rule-tree (list rule-tree)) + (cl-dot:generate-graph-from-roots 'rule-tree (list rule-tree) + '(:dpi 300)) filename :format :png)) rule-tree) diff -r a3e8fc8cad53 -r 4c2306e08ed1 src/players/random-ii.lisp --- a/src/players/random-ii.lisp Tue May 09 12:37:41 2017 +0000 +++ b/src/players/random-ii.lisp Mon May 15 12:22:50 2017 +0000 @@ -56,17 +56,28 @@ (rp-information-set player) nil)) (defmethod ggp:player-update-game-ii ((player random-ii-player) move percepts) + (format t "~2%=====================================~%") (when move (setf (rp-information-set player) (get-next-information-set player move percepts)))) +(defun information-set-objects (iset) + (let ((seen (make-hash-table))) + (recursively ((iset iset)) + (etypecase iset + ((or integer symbol) (if (nth-value 1 (ensure-gethash iset seen)) + 0 + 1)) + (cons (+ 1 + (recur (car iset)) + (recur (cdr iset)))))))) + (defmethod ggp:player-select-move ((player random-ii-player) timeout) + (format t "Selecting move...~%") (with-random-ii-player (player) (format t "Information set size: ~D~%" (length information-set)) - ; (let ((*package* (find-package :ggp-rules))) - ; (iterate (for state :in information-set) - ; (format t " ~S~%" state))) - (format t "Selecting move...~%") + (format t "Information set object count ~D~%" + (information-set-objects information-set)) (random-elt (legal-moves-for reasoner role (first information-set))))) @@ -77,5 +88,5 @@ :name "Scully-Random-II" :port 5002)) -; (ggp:start-player *player* :server :hunchentoot :use-thread t) -; (ggp:kill-player *player*) +;; (ggp:start-player *player* :server :hunchentoot :use-thread t) +;; (ggp:kill-player *player*) diff -r a3e8fc8cad53 -r 4c2306e08ed1 src/players/random-zdd.lisp --- a/src/players/random-zdd.lisp Tue May 09 12:37:41 2017 +0000 +++ b/src/players/random-zdd.lisp Mon May 15 12:22:50 2017 +0000 @@ -30,14 +30,22 @@ iset nil)))) (defmethod ggp:player-update-game-ii ((player random-zdd-player) move percepts) + (format t "~2%=====================================~%") (scully.zdd::with-zdd (with-random-zdd-player (player) (setf iset (if move (-<> iset - (sprout reasoner <>) + (progn (format t "Information set size: ~D states, ~D ZDD nodes~%" + (scully.zdd:zdd-count <>) + (scully.zdd:zdd-node-count <>)) + <>) + (sprout reasoner <> (rp-role player) move) (apply-happens reasoner <>) - (filter-iset-for-move reasoner <> role move) + (progn + (format t " Max size: ~D ZDD nodes~%" + (scully.zdd:zdd-node-count <>)) + <>) (filter-iset-for-percepts reasoner <> role percepts) (compute-next-iset reasoner <>) (apply-possible reasoner <>)) @@ -47,13 +55,10 @@ (scully.zdd::with-zdd (format t "Selecting move...~%") (with-random-zdd-player (player) - (format t "CURRENT ISET:~%") - (dump-iset reasoner iset) - (format t "Information set size: ~D states, ~D ZDD nodes~%" - (scully.zdd:zdd-count iset) - (scully.zdd:zdd-node-count iset)) - (format t "LEGAL MOVES:~%") - (pr (legal-moves-for reasoner iset role)) + ;; (format t "CURRENT ISET:~%") + ;; (dump-iset reasoner iset) + ;; (format t "LEGAL MOVES:~%") + ;; (pr (legal-moves-for reasoner iset role)) (random-elt (legal-moves-for reasoner iset role))))) @@ -64,5 +69,6 @@ :name "Scully-Random-ZDD" :port 5003)) -;; (ggp:start-player *player* :server :hunchentoot :use-thread t) +(ggp:start-player *player* :server :hunchentoot :use-thread t) ;; (ggp:kill-player *player*) +(slot-value *player* 'ggp::request-lock) diff -r a3e8fc8cad53 -r 4c2306e08ed1 src/reasoners/zdd.lisp --- a/src/reasoners/zdd.lisp Tue May 09 12:37:41 2017 +0000 +++ b/src/reasoners/zdd.lisp Mon May 15 12:22:50 2017 +0000 @@ -220,12 +220,15 @@ (defun sprout-extend% (legal-moves-by-role) (reduce #'build-role-move-zdd legal-moves-by-role :initial-value (sink t))) -(defun sprout-extend (reasoner legal-moves) +(defun sprout-extend (reasoner legal-moves role chosen-move) (sprout-extend% (-<> legal-moves (group-by #'second <>) ; go role by role + (progn (setf (gethash role <>) + (list `(ggp-rules::does ,role ,chosen-move))) + <>) hash-table-values - (sort <> #'scully.terms::symbol< ; sort by role + (sort <> #'scully.terms::symbol< ; sort by role :key (lambda (moves) (second (first moves)))) nreverse ; go bottom up @@ -234,14 +237,14 @@ <>)))) -(defun sprout-traverse (reasoner iset) +(defun sprout-traverse (reasoner iset role chosen-move) (recursively ((z iset) (legal-moves '())) (ematch z ;; If we hit the empty sink, just bail, there's nothing to add on to. ((sink nil) (sink nil)) ;; If we hit the unit sink we're ready to sprout off the `does`es. - ((sink t) (sprout-extend reasoner legal-moves)) + ((sink t) (sprout-extend reasoner legal-moves role chosen-move)) ;; Otherwise we're at a node. ((node n hi lo) (match (number-to-term reasoner n) @@ -254,7 +257,7 @@ ;; Otherwise we just recur down both. (_ (zdd-node n (recur hi legal-moves) (recur lo legal-moves)))))))) -(defun sprout (reasoner iset) +(defun sprout (reasoner iset role chosen-move) "Sprout off child states for each state in `iset` for all legal moves." ;; Given an information set, we want to compute a new information set with all ;; possible combinations of `does` added, which we'll narrow down later once @@ -266,7 +269,7 @@ ;; To do this we'll traverse the ZDD recursively, accumulating a list of all ;; legal moves for each player as we go. Once we hit a sink we'll tack on ;; a child ZDD of all the possible combos. - (sprout-traverse reasoner iset)) + (sprout-traverse reasoner iset role chosen-move)) ;;;; Basic API ---------------------------------------------------------------- @@ -362,7 +365,8 @@ *reasoner* reasoner) <>) - (format nil "~D ~S" n <>)))) + ;; (format nil "~D ~S" n <>) + (format nil "~S" <>)))) (defun draw-zdd (reasoner zdd) (scully.graphviz::draw-zdd zdd :label-fn (curry #'label reasoner))) @@ -583,6 +587,7 @@ (defparameter *rules* (scully.gdl::read-gdl "gdl/pennies-grounded.gdl")) (defparameter *rules* (scully.gdl::read-gdl "gdl/mastermind-grounded.gdl")) (defparameter *rules* (scully.gdl::read-gdl "gdl/montyhall-grounded.gdl")) +(defparameter *rules* (scully.gdl::read-gdl "gdl/tictactoe-grounded.gdl")) (defparameter *i* nil) ;; (defparameter *r* nil)