Consider the following variables in a queueing problem:
 p_1, p2,...p_n people
 1 server that works at a rate of k*mu (this approximates the effect of k servers)
 a_i = arrival time of person i
 s_i = service time for person i
 w_i = waiting time for person i
 f_i = finish time for person i (when the person leaves after being served)
At each value of t between (t=0,t=100), I am trying to calculate a variable w_i for each person currently in the queue based on the following conditions:

For the p1:
w_1 = 0
f_1 = a_1 + s_1

For all other people (i > 1):
If they arrive after the previous person has finished:
If : a_i >= f_{i1}:
w_i = 0
f_i = a_i + s_i
If they arrive before the previous person has finished:
If: a_i < f_{i1}:
w_i = f_{i1}  a_i
f_i = f_{i1} + s_i
Here is what I tried:
I first generated some data for this problem
set.seed(123)
k = 1
n_customers < 50
max_time < 100
# parameter for exponential distribution
mu < k*0.2
# generate arrival times (uniformly distributed between 0 and 100)
arrivals < sort(runif(n_customers, 0, max_time))
# generate service times (exponentially distributed)
service_times < rexp(n_customers, mu)
# vectors to store results
queue_lengths < numeric(max_time)
cumulative_processed < numeric(max_time)
total_waiting_times < numeric(max_time)
finish_times < numeric(n_customers)
waiting_times < numeric(n_customers)
I then tried to write a for loop to reflect these logical formulas :
for (t in 1:max_time) {
processed_this_step < 0
for (i in 1:n_customers) {
if (arrivals[i] <= t) {
if (i == 1  (i > 1 && t >= finish_times[i1])) {
if (finish_times[i] == 0) {
start_time < max(t, arrivals[i])
finish_times[i] < start_time + service_times[i]
waiting_times[i] < start_time  arrivals[i]
}
if (finish_times[i] == t) {
processed_this_step < processed_this_step + 1
}
} else {
waiting_times[i] < waiting_times[i] + 1
}
}
}
queue_lengths[t] < sum(ifelse(arrivals <= t & finish_times > t, 1, 0))
total_waiting_times[t] < sum(ifelse(arrivals <= t,
pmin(t  arrivals, pmax(0, t  finish_times + service_times)),
0))
cumulative_processed[t] < ifelse(t > 1, cumulative_processed[t1], 0) + processed_this_step
}
Then, I vertically rearranged everything:
results_long < pivot_longer(results, cols = c(queue_length, total_waiting_time, cumulative_processed),
names_to = "metric", values_to = "value")
I think there is a problem in the way that the cumulative orders are being calculated since they all come out as 0. Can someone please show me where I am wrong with this logic?