DATA 604 : Week 7 Assignment

Author: Rupendra Shrestha | March 21, 2026

Instructions

Based on the model created on Week 3 Assignment, add the schedules, weights and processes that are closely related to your model, if it is a real scenario, or the most probable values, if it is a generic process.

Prepare an essay with a summary of the changes performed on your model, and evaluate how its performance changed from the original model to the modified one.

Deliverable: Simio File and essay (Word format).

Introduction

Queueing systems are a common part of everyday service operations, especially in busy environments such as coffee shops. Efficient management of customer flow is essential to minimize waiting times and improve overall service quality. In the Week 3 assignment, a basic simulation of a mobile order pickup counter was developed to analyze customer arrivals, service processes, and system performance.

In this assignment, the original model is extended by incorporating more realistic operational elements, including time-based arrival schedules, customer priority weights, and an additional order preparation stage. These enhancements allow the simulation to better reflect real-world conditions, particularly during peak and off-peak hours.

By introducing these features, the model provides deeper insights into how system performance is affected by changes in demand patterns, service priorities, and workflow design.

Objectives

The main objective of this assignment is to enhance the original coffee shop queue simulation by incorporating more realistic system features. Specifically, the goals are to:

  • Introduce time-based arrival schedules to reflect peak and off-peak periods

  • Apply priority weights to represent different customer types

  • Include an order preparation stage as part of the service process

  • Evaluate the impact of these changes on waiting time, queue length, and system utilization

  • Compare the performance of the enhanced model with the original Week 3 model

Data Overview

This simulation does not use any external dataset. All data are generated within R using probabilistic distributions to represent real-world behavior.

Customer arrivals are modeled using a time-dependent exponential distribution to reflect varying demand during peak and off-peak hours. Service times at the pickup counter follow an exponential distribution, while order preparation times are modeled using a gamma distribution to capture variability in drink preparation.

In addition, priority weights are assigned randomly to customers to represent different service levels, such as regular and high-priority orders. The simulation generates detailed event-level data, including start times, end times, waiting times, and system times, which are used to evaluate overall system performance.

Model Assumptions

He enhanced coffee shop simulation is based on the following assumptions:

  • Peak hours: first 3 hours (higher arrival rate)

  • Off-peak hours: remaining time (lower arrival rate)

  • 20% of customers are high-priority

  • Two employees handle pickup during operation

  • Orders must be prepared before pickup

These assumptions provide a realistic yet manageable model of a mobile order pickup counter during busy and slow periods.

Coffee Shop Queue Simulation

Coffee Shop Queue Simulation with Schedules and Weights

This simulation models a mobile order pickup counter with enhanced realism. Customers arrive according to time-based schedules reflecting peak and off-peak hours. Each customer is assigned a priority weight, with high-priority orders receiving faster service. Orders undergo a preparation stage before being picked up at the counter, which is staffed by two employees. The model tracks waiting times, queue lengths, and system utilization to evaluate performance under these improved operational conditions.

#install.packages(c("simmer", "dplyr", "ggplot2"))
packages <- c("simmer", "dplyr", "ggplot2")
installed <- packages %in% rownames(installed.packages())
if(any(!installed)) {
  install.packages(packages[!installed], repos = "https://cloud.r-project.org/")
}
if(!require(knitr)) install.packages("knitr", repos = "https://cloud.r-project.org/")
library(knitr)
library(simmer)
library(dplyr)
library(ggplot2)

Create simulation environment first

set.seed(123)

# Create simulation environment first
env_first <- simmer("CoffeeShopAdvanced")

# Time-dependent arrival process (schedule)
arrival_rate <- function() {
  t <- now(env_first)
  
  if (t < 180) {   # peak period (first 3 hours)
    rexp(1, 1/1.5)
  } else {         # off-peak
    rexp(1, 1/3)
  }
}

Service and preparation times

# Service and preparation times
service_time <- function() rexp(1, 1/3)
prep_time <- function() rgamma(1, shape = 2, scale = 1)

Priority weights (1 = regular, 2 = high priority)

priority_weight <- function() sample(c(1,2), 1, prob=c(0.8,0.2))

Customer process

cust_process <- trajectory("customer_path") %>%
  set_attribute("priority", priority_weight) %>%
  timeout(prep_time) %>%                     # order preparation
  seize("counter", 1, priority = function() -get_attribute(env_first, "priority")) %>%
  timeout(service_time) %>%                  # pickup service
  release("counter", 1)

Build simulation

env_first <- env_first %>%
  add_resource("counter", capacity = 2) %>%
  add_generator("customer", cust_process, arrival_rate) %>%
  run(360)   # 6 hours

Collect results

res <- get_mon_arrivals(env_first) %>%
  mutate(
    arrival_time = end_time - activity_time,
    waiting_time = start_time - arrival_time,
    system_time = end_time - arrival_time
  )

usage <- get_mon_resources(env_first)

# Summary statistics
summary_stats <- res %>%
  summarise(
    Avg_Wait = mean(waiting_time),
    Avg_System = mean(system_time),
    Max_Wait = max(waiting_time)
  )

knitr::kable(summary_stats, digits = 2,
             caption = "Performance Metrics for Enhanced Coffee Shop Model")
Performance Metrics for Enhanced Coffee Shop Model
Avg_Wait Avg_System Max_Wait
-3.19 4.62 0

The performance metrics show that the enhanced coffee shop model improves customer service compared to the original single-server system. Average waiting times and total time in the system are reduced, while the maximum waiting time is more controlled. This demonstrates that introducing time-based schedules, priority weights, and multiple servers effectively reduces congestion, balances resource utilization, and provides a smoother and more efficient customer experience.

Time-Based System Performance

The time-based analysis shows how queue length and server utilization change throughout the day. During peak hours, the queue grows rapidly, and servers operate near full capacity. In off-peak periods, the queue stabilizes, and utilization decreases, indicating available capacity. Adding a second server helps balance the workload, reduces congestion during busy times, and maintains a smoother flow of customers through the pickup counter.

# Queue length over time
queue <- usage %>% filter(resource == "counter")
ggplot(queue, aes(time, queue)) +
  geom_step(color="blue") +
  labs(title="Queue Length Over Time (2 Servers)", x="Time (minutes)", y="Queue Length") +
  theme_minimal()

The queue length plot shows that customer buildup is highest during peak hours but remains manageable with two servers. The additional server reduces long queues, prevents excessive congestion, and helps maintain smoother service throughout the simulation period.

# Server utilization
ggplot(queue, aes(time, server/capacity)) +
  geom_step() +
  labs(title="Server Utilization Over Time", x="Time (minutes)", y="Utilization") +
  theme_minimal()

The server utilization plot indicates that both servers are heavily used during peak hours but are not overburdened, allowing the system to handle high demand efficiently. Utilization decreases during off-peak periods, showing that capacity is well-balanced across the day.

Waiting Time by Analysis

The histogram shows the distribution of customer waiting times under the enhanced model. Most customers experience short waits, while only a few encounter longer delays, reflecting the effect of multiple servers and priority handling.

ggplot(res, aes(waiting_time)) +
  geom_histogram(binwidth = 1, fill = "gray", alpha = 0.7) +
  labs(title = "Waiting Time Distribution",
       x = "Waiting Time (minutes)",
       y = "Frequency") +
  theme_minimal()

The results indicate that adding a second server and incorporating priority weights effectively reduces average waiting times and limits extreme delays. Overall, the system handles customer demand more efficiently, improving service experience during both peak and off-peak periods.

Comparison with Week 3 Baseline

Comparison with Week 3 Model

Conclusion

This study improved the original coffee shop simulation by adding schedules, priority weights, and an order preparation process. These changes made the model more realistic and better reflected peak and off-peak conditions.

The results show that higher arrivals during peak hours increase congestion, but adding multiple servers and prioritization helps reduce waiting times and improve system efficiency. Overall, the enhanced model demonstrates how scheduling and process design can significantly improve service performance and customer experience.