#lang scribble/doc @(require scribble/manual scribblings/icons (for-label racket/base racket/contract plot (planet williams/simulation/simulation-with-graphics))) @title[#:tag "simulation-classes"]{Simulation Classes} @local-table-of-contents[] @section{Process Classes} TBD @section{Resource Classes} TBD @section{Example---Simulation Classes} This example is the same as Example 3 in Chapter 8 Data Collection. Since this example uses classes, the @scheme[racket] language is required instead of the @scheme[racket/base] language. @schememod[ scheme (code:comment " Example 4 - Classes") (require (planet williams/simulation/simulation-with-graphics)) (define n-attendants 2) (define attendant #f) (define-process-class generator% (init-field (n 1000)) (do ((i 0 (+ i 1))) ((= i n) (void)) (wait (random-exponential 4.0)) (make-object customer% i))) (define-process-class customer% (init-field i) (begin (send attendant request) (work (random-flat 2.0 10.0)) (send attendant relinquish))) (define (run-simulation n) (with-new-simulation-environment (set! attendant (make-object resource% n-attendants)) (make-object generator% n) (accumulate (variable-statistics (send attendant queue-variable-n))) (accumulate (variable-history (send attendant queue-variable-n))) (start-simulation) (printf "--- Example 4 - Classes ---~n") (printf "Maximum queue length = ~a~n" (variable-maximum (send attendant queue-variable-n))) (printf "Average queue length = ~a~n" (variable-mean (send attendant queue-variable-n))) (printf "Variance = ~a~n" (variable-variance (send attendant queue-variable-n))) (printf "Utilization = ~a~n" (variable-mean (send attendant satisfied-variable-n))) (printf "Variance = ~a~n" (variable-variance (send attendant satisfied-variable-n))) (printf "~a~n" (history-plot (variable-history (send attendant queue-variable-n)))))) (run-simulation 1000) ] The output is identical to the example in Section 8.3 Example---Data Collection (except for the heading). @verbatim{ --- Example 4 - Classes --- Maximum queue length = 8 Average queue length = 0.9120534884951139 Variance = 2.2420855874934826 Utilization = 1.4320511974417858 Variance = 0.5885107114317054} @image["scribblings/images/example-4.gif"]