Version: 4.1.3
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 scheme language is required instead of the scheme/base language.
| #lang scheme | 
| ; Example 4 - Classes | 
| (require (planet williams/simulation/simulation-with-graphics)) | 
| (require (planet williams/science/random-distributions)) | 
| (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))) | 
| (write-special (history-plot | 
| (variable-history | 
| (send attendant queue-variable-n)))) | 
| (newline))) | 
| (run-simulation 1000) | 
The output is identical to the example in Section 8.3 Example – Data Collection (except for the heading).
| --- Example 4 - Classes --- | 
| Maximum queue length = 8 | 
| Average queue length = 0.9120534884951139 | 
| Variance = 2.2420855874934826 | 
| Utilization = 1.4320511974417858 | 
| Variance = 0.5885107114317054 | 
