#Linear Congruential Generator (LCG)
lcg <- function(n, seed=12345, a=1103515245, c=12345, m=2^31){
x <- seed
numbers <- numeric(n)
for(i in 1:n){
x <- (a * x + c) %% m
numbers[i] <- x / m
}
return(numbers)
}
n <- 50
arrival_random <- lcg(n, seed=101)
service_random <- lcg(n, seed=202)
# Map Random Numbers to Probability Distributions
map_interarrival <- function(r){
if(r < 0.15) return(2)
else if(r < 0.40) return(3)
else if(r < 0.60) return(4)
else if(r < 0.85) return(5)
else return(6)
}
map_service <- function(r){
if(r < 0.10) return(2)
else if(r < 0.35) return(3)
else if(r < 0.65) return(4)
else if(r < 0.85) return(5)
else return(6)
}
inter_arrival <- sapply(arrival_random, map_interarrival)
service_time <- sapply(service_random, map_service)
#Compute Arrival Times
arrival_time <- cumsum(inter_arrival)
# Queue Simulation (Single Server)
service_start <- numeric(n)
service_end <- numeric(n)
waiting_time <- numeric(n)
idle_time <- numeric(n)
time_in_system <- numeric(n)
for(i in 1:n){
if(i == 1){
service_start[i] <- arrival_time[i]
waiting_time[i] <- 0
idle_time[i] <- arrival_time[i]
} else {
service_start[i] <- max(arrival_time[i], service_end[i-1])
waiting_time[i] <- service_start[i] - arrival_time[i]
idle_time[i] <- max(0, arrival_time[i] - service_end[i-1])
}
service_end[i] <- service_start[i] + service_time[i]
time_in_system[i] <- waiting_time[i] + service_time[i]
}
# Performance Measures
mean_waiting_time <- mean(waiting_time)
average_service_time <- mean(service_time)
average_idle_time <- mean(idle_time)
average_time_in_system <- mean(time_in_system)
#Results Table
results <- data.frame(
Inter_Arrival = inter_arrival,
Arrival_Time = arrival_time,
Service_Time = service_time,
Service_Start = service_start,
Service_End = service_end,
Waiting_Time = waiting_time,
Idle_Time = idle_time,
Time_in_System = time_in_system
)
# Output
cat("\n----- PERFORMANCE MEASURES -----\n")
##
## ----- PERFORMANCE MEASURES -----
cat("Mean Waiting Time:", round(mean_waiting_time,3), "minutes\n")
## Mean Waiting Time: 6.14 minutes
cat("Average Service Time:", round(average_service_time,3), "minutes\n")
## Average Service Time: 3.94 minutes
cat("Average Idle Time:", round(average_idle_time,3), "minutes\n")
## Average Idle Time: 0.18 minutes
cat("Average Time in System:", round(average_time_in_system,3), "minutes\n")
## Average Time in System: 10.08 minutes
cat("\nDecision Rule: Implement if Mean Waiting Time < 5 minutes\n")
##
## Decision Rule: Implement if Mean Waiting Time < 5 minutes
if(mean_waiting_time < 5){
cat("Decision: IMPLEMENT the plan\n")
} else {
cat("Decision: DO NOT implement the plan\n")
}
## Decision: DO NOT implement the plan
# View all the 50 customers
head(results, 50)