12 Simulation Classes
12.1 Process Classes
TBD
12.2 Resource Classes
TBD
12.3 Example— Simulation Classes
This example is the same as Example 3 in Chapter 8 Data Collection. Since this example uses classes, the racket language is required instead of the racket/base language.
#lang scheme ; 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—
--- Example 4 - Classes --- |
Maximum queue length = 8 |
Average queue length = 0.9120534884951139 |
Variance = 2.2420855874934826 |
Utilization = 1.4320511974417858 |
Variance = 0.5885107114317054 |