#lang scheme/base
(require (planet williams/simulation/simulation-with-graphics))
(require (planet williams/science/random-distributions))
(define n-attendants 2)
(define attendant #f)
(define-process (generator n)
(do ((i 0 (+ i 1)))
((= i n) (void))
(wait (random-exponential 4.0))
(schedule now (customer i))))
(define-process (customer i)
(with-resource (attendant)
(work (random-flat 2.0 10.0))))
(define (run-simulation n)
(with-new-simulation-environment
(set! attendant (make-resource n-attendants))
(schedule (at 0.0) (generator n))
(accumulate (variable-statistics (resource-queue-variable-n attendant)))
(accumulate (variable-history (resource-queue-variable-n attendant)))
(start-simulation)
(printf "--- Example 3 - Data Collection ---~n")
(printf "Maximum queue length = ~a~n"
(variable-maximum (resource-queue-variable-n attendant)))
(printf "Average queue length = ~a~n"
(variable-mean (resource-queue-variable-n attendant)))
(printf "Variance = ~a~n"
(variable-variance (resource-queue-variable-n attendant)))
(printf "Utilization = ~a~n"
(variable-mean (resource-satisfied-variable-n attendant)))
(printf "Variance = ~a~n"
(variable-variance (resource-satisfied-variable-n attendant)))
(write-special (history-plot (variable-history
(resource-queue-variable-n attendant))))))
(run-simulation 1000)