racket/collects/games/gobblet/robot.ss
Jay McCarthy a6312e8050 DrDr props and stderr removal
svn: r15477
2009-07-17 17:59:36 +00:00

81 lines
3.5 KiB
Scheme

;; Plays automatic games, often useful when learning is enabled in explore.ss
(module robot mzscheme
(require mzlib/unitsig
mzlib/etc
mzlib/list
"sig.ss"
"model.ss"
"explore.ss"
"heuristics.ss")
(define board-size 3)
(define steps 2)
(define depth 3)
(define timeout 3.0)
(define cannon-size +inf.0)
(invoke-unit/sig
(compound-unit/sig
(import)
(link
[CONFIG : config^ ((unit/sig config^
(import)
(define BOARD-SIZE board-size)))]
[MODEL : model^ (model-unit CONFIG)]
[HEURISTICS : heuristics^ (heuristics-unit CONFIG MODEL EXPLORE)]
[EXPLORE : explore^ (explore-unit CONFIG MODEL)]
[ROBOT : () ((unit/sig ()
(import config^ explore^ model^ heuristics^)
(define init-board
empty-board
#;
(move empty-board
(list-ref red-pieces 2) #f #f 0 0
(lambda (b)
(move b
(list-ref yellow-pieces 2) #f #f 0 1
(lambda (b) b)
void))
void))
(define init-who 'red)
; Only play 50 games to control run time
(define how-many 50)
;; Play-a-game test
(let go ()
(unless (zero? how-many)
(set! how-many (sub1 how-many))
;(sleep 1)
;; (random-seed 12)
(let loop ([board init-board]
[who init-who]
[who-moved "no one"]
[history null])
(cond
[(winner? board who)
(printf "----------- ~a wins!-------------~n~a~n" who (board->string 1 board))
(go)]
[(winner? board (other who))
(printf "----------- ~a wins!-------------~n~a~n" (other who) (board->string 1 board))
(go)]
[else
(printf "~n~a moved; ~a's turn~n~a~n" who-moved who (board->string 1 board))
(let ([start (current-inexact-milliseconds)]
[m ((make-search (if (= BOARD-SIZE 3)
make-3x3-rate-board
make-4x4-rate-board)
(if (= BOARD-SIZE 3)
make-3x3-no-canned-moves
make-4x4-canned-moves))
timeout steps depth
who board history)])
(printf "[~a secs]~n" (/ (- (current-inexact-milliseconds) start)
1000.0))
(loop (apply-play board m) (other who) who (cons board history)))])))))
CONFIG EXPLORE MODEL HEURISTICS)])
(export))))