Activity: Inputs, Outputs, and the Warm-Up Period

Simulation Output Analysis Activities

Author

Manuel D. Rossetti, PhD P.E.

We change this model together: the instructor types the code, and you type along. Before each run, write down a prediction; then run and check it.

The situation. Passengers arrive at an airport security checkpoint as a Poisson process with a rate of 30 per hour (stream 1). One officer checks identification, in a triangular time with minimum 0.75, mode 1.5, and maximum 3 minutes (stream 2). Ninety-three percent of passengers pass the first time (stream 3) and go on to a single X-ray machine, which takes an exponential time with a mean of 2 minutes (stream 4). Passengers who do not pass spend a time uniformly distributed between 10 and 15 minutes on paperwork (stream 5), then rejoin the inspection line, and always pass the second time. The checkpoint operates 24 hours a day, 7 days a week, for the foreseeable future, and it started with no one waiting.

Because the checkpoint never closes, we want its long-run (steady-state) performance, and must decide how much of each replication’s start to discard.

Setup. Get the starter file AirportWarmUp.kt from the code/ folder beside this activity. Put it in src/main/kotlin/student/activities in your KSL project, the package the file declares; create the folder if you do not have it. It holds the complete model, built with the station package, and a main that runs 10 replications of 30,000 minutes (about three weeks). Its six steps, marked TODO, are what we write.

1. Before changing anything

Let \(\lambda\) represent the arrival rate in passengers per minute.

  1. Every passenger who fails inspection comes back once. What is the arrival rate to the inspection station, counting returns? Predict the utilization of the officer and of the X-ray machine. Does this system have a steady state?

  2. Run the model as given. Look at the half-widths of System Time and of the X-ray queue. What do they tell you?

2. Make the model controllable

A model’s inputs should be changeable from main without editing the model.

  1. TODO 1. We expose the arrival generator through its read-only interface, EventGeneratorRVCIfc. Why expose an interface rather than the generator itself?

  2. TODO 2. We add a property for the probability of passing inspection. Why must its setter refuse a change while the model is running?

  3. TODO 3. We add a property for the number of X-ray machines. At 30 passengers per hour, how many X-ray machines would the checkpoint need to have a steady state?

  4. TODO 4. We give read-only access to the system time. Who needs it, and why read-only?

3. Capture the output, and look for a steady state

  1. TODO 5. We capture the results in a KSL database. Before running, predict what the database holds: one row per what?

  2. TODO 6. We observe the system time with a WelchFileObserver and save a Welch plot. Before running at 30 per hour, sketch what you expect the plot to look like. Then run it. What does the plot show?

4. Find the warm-up period

Use TODO 1’s new control in main to change the time between arrivals to exponential with a mean of 2.5 minutes (24 passengers per hour).

  1. Predict the officer’s and the X-ray machine’s utilizations now. Is there a steady state?

  2. Run the model and read the new Welch plot. Where does the plot level off? Convert your choice from observations to minutes: how much time is one observation?

  3. Set lengthOfReplicationWarmUp to your warm-up and run again. Compare the confidence interval for System Time with the one from the run with no warm-up. Is the difference what you expected? Why is the half-width not smaller?