# SIMULASI SISTEM ANTRIAN PROSES PENERBITAN BUKU
# generate 6400 data
# setelah generate data kita ubah ke time series

# KASUS:
# sebuah penerbit menerima jumlah naskah berbeda setiap hari.
# setiap naskah melewati proses:
# 1. editing
# 2. layout
# 3. review
# 4. percetakan
# jumlah buku yang diterbitkan setiap hari tidak sama
# sehingga menyebabkan antrian pada sistem penerbitan.

# model yang digunakan:
# 1. M/M/1
# 2. M/M/c
# 3. M/G/1

# output:

# a). boxplot tiap model
# b). forecasting
# c). analisis ukuran performansi

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.2
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.3
library(forecast)
## Warning: package 'forecast' was built under R version 4.5.3
library(tseries)
## Warning: package 'tseries' was built under R version 4.5.3
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(lubridate)
## Warning: package 'lubridate' was built under R version 4.5.2
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
set.seed(233)

# generate data harian

# jumlah hari simulasi
jumlah_hari <- 365

# KASUS:
# setiap hari jumlah buku berbeda
#
# Senin-Jumat:
# penerbit menerima banyak naskah
#
# Sabtu-Minggu:
# penerbit menerima sedikit naskah
#
# musim tertentu:
# ada peningkatan penerbitan buku

tanggal <- seq.Date(from = as.Date("2025-01-01"),
                    by = "day",
                    length.out = jumlah_hari)

hari <- weekdays(tanggal)

# generate jumlah buku per hari

jumlah_buku <- numeric(jumlah_hari)

for(i in 1:jumlah_hari){
  
  # weekday
  if(hari[i] %in% c("Monday",
                    "Tuesday",
                    "Wednesday",
                    "Thursday",
                    "Friday")){
    
    jumlah_buku[i] <- sample(15:30, 1)
    
  } else{
    
    # weekend
    jumlah_buku[i] <- sample(5:15, 1)
  }
  
  # peningkatan musiman
  if(month(tanggal[i]) %in% c(6,7,12)){
    
    jumlah_buku[i] <- jumlah_buku[i] +
      sample(10:20,1)
  }
}

# total data

sum(jumlah_buku)
## [1] 8276
# pastikan > 6400
while(sum(jumlah_buku) < 6400){
  
  jumlah_buku <- jumlah_buku + sample(1:3,
                                      jumlah_hari,
                                      replace = TRUE)
}

total_data <- sum(jumlah_buku)

cat("Total Data :", total_data, "\n")
## Total Data : 8276
# buat data transaksi

data_penerbitan <- data.frame()

id <- 1

for(i in 1:jumlah_hari){
  
  n_buku <- jumlah_buku[i]
  

  
  # arrival mengikuti exponential
  interarrival <- rexp(n_buku,
                       rate = 5)
  
  arrival_time <- cumsum(interarrival)
  
  # waktu pelayanan
  
  service_time <- rexp(n_buku,
                       rate = 7)
  
  # similasi model M/M/1
  
  start_service <- numeric(n_buku)
  end_service <- numeric(n_buku)
  waiting_time <- numeric(n_buku)
  time_system <- numeric(n_buku)
  
  start_service[1] <- arrival_time[1]
  
  end_service[1] <- start_service[1] +
    service_time[1]
  
  for(j in 2:n_buku){
    
    start_service[j] <- max(arrival_time[j],
                            end_service[j-1])
    
    end_service[j] <- start_service[j] +
      service_time[j]
    
    waiting_time[j] <- start_service[j] -
      arrival_time[j]
    
    time_system[j] <- end_service[j] -
      arrival_time[j]
  }
  
  temp <- data.frame(
    ID = id:(id+n_buku-1),
    Tanggal = rep(tanggal[i],
                  n_buku),
    Hari = rep(hari[i],
               n_buku),
    Arrival_Time = arrival_time,
    Service_Time = service_time,
    Waiting_Time = waiting_time,
    Time_In_System = time_system
  )
  
  data_penerbitan <- rbind(data_penerbitan,
                           temp)
  
  id <- id + n_buku
}

# cek data penerbitan nya

head(data_penerbitan)
##   ID    Tanggal      Hari Arrival_Time Service_Time Waiting_Time Time_In_System
## 1  1 2025-01-01 Wednesday    0.1318588  0.091619043 0.000000e+00    0.000000000
## 2  2 2025-01-01 Wednesday    0.1740806  0.094619880 4.939718e-02    0.144017056
## 3  3 2025-01-01 Wednesday    0.4403688  0.237910733 0.000000e+00    0.237910733
## 4  4 2025-01-01 Wednesday    0.5478148  0.139659452 1.304648e-01    0.270124256
## 5  5 2025-01-01 Wednesday    0.8179205  0.003385853 1.847057e-05    0.003404324
## 6  6 2025-01-01 Wednesday    0.8217649  0.026901808 0.000000e+00    0.026901808
dim(data_penerbitan)
## [1] 8276    7
# agresi harian

daily_data <- data_penerbitan %>%
  group_by(Tanggal) %>%
  summarise(
    Jumlah_Buku = n(),
    Avg_Waiting = mean(Waiting_Time),
    Avg_Service = mean(Service_Time),
    Avg_System = mean(Time_In_System)
  )

head(daily_data)
## # A tibble: 6 × 5
##   Tanggal    Jumlah_Buku Avg_Waiting Avg_Service Avg_System
##   <date>           <int>       <dbl>       <dbl>      <dbl>
## 1 2025-01-01          28      0.0575       0.105      0.160
## 2 2025-01-02          20      0.366        0.181      0.545
## 3 2025-01-03          30      0.377        0.158      0.528
## 4 2025-01-04          12      0.0817       0.217      0.284
## 5 2025-01-05           9      0.745        0.221      0.882
## 6 2025-01-06          27      0.0396       0.107      0.142
# ubah ke time series

ts_buku <- ts(daily_data$Jumlah_Buku,
              frequency = 7)

ts_waiting <- ts(daily_data$Avg_Waiting,
                 frequency = 7)

ts_service <- ts(daily_data$Avg_Service,
                 frequency = 7)

ts_system <- ts(daily_data$Avg_System,
                frequency = 7)

# visualisasi time series

plot(ts_buku,
     main = "Time Series Jumlah Buku",
     ylab = "Jumlah Buku",
     xlab = "Hari")

plot(ts_waiting,
     main = "Time Series Waiting Time",
     ylab = "Waiting",
     xlab = "Hari")

plot(ts_service,
     main = "Time Series Service Time",
     ylab = "Service",
     xlab = "Hari")

plot(ts_system,
     main = "Time Series Time In System",
     ylab = "System",
     xlab = "Hari")

# model M/M/1

lambda <- mean(daily_data$Jumlah_Buku)

mu <- 35

rho_mm1 <- lambda/mu

Lq_mm1 <- (lambda^2) /
  (mu * (mu-lambda))

Ls_mm1 <- lambda /
  (mu-lambda)

Wq_mm1 <- lambda /
  (mu * (mu-lambda))

Ws_mm1 <- 1 /
  (mu-lambda)

cat("MODEL M/M/1\n")
## MODEL M/M/1
cat("Lambda :", lambda,"\n")
## Lambda : 22.67397
cat("Mu :", mu,"\n")
## Mu : 35
cat("Rho :", rho_mm1,"\n")
## Rho : 0.6478278
cat("Lq :", Lq_mm1,"\n")
## Lq : 1.191692
cat("Ls :", Ls_mm1,"\n")
## Ls : 1.83952
cat("Wq :", Wq_mm1,"\n")
## Wq : 0.05255771
cat("Ws :", Ws_mm1,"\n")
## Ws : 0.08112914
# model M/M/c

c <- 3

rho_mmc <- lambda/(c*mu)

cat("MODEL M/M/c\n")
## MODEL M/M/c
cat("Jumlah Server :", c,"\n")
## Jumlah Server : 3
cat("Rho :", rho_mmc,"\n")
## Rho : 0.2159426
# model M/G/1

var_service <- var(data_penerbitan$Service_Time)

rho_mg1 <- lambda/mu

Wq_mg1 <- (lambda*var_service +
             rho_mg1^2) /
  (2*(1-rho_mg1))

cat("MODEL M/G/1\n")
## MODEL M/G/1
cat("Rho :", rho_mg1,"\n")
## Rho : 0.6478278
cat("Variance Service :", var_service,"\n")
## Variance Service : 0.02012514
cat("Wq :", Wq_mg1,"\n")
## Wq : 1.243707
# boxplot model M/M/1

# data model M/M/1
mm1_data <- data.frame(
  Model = "M/M/1",
  Waiting_Time = data_penerbitan$Waiting_Time,
  Service_Time = data_penerbitan$Service_Time,
  Time_In_System = data_penerbitan$Time_In_System
)

# boxplot Waiting Time
ggplot(mm1_data,
       aes(x = Model,
           y = Waiting_Time,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Boxplot Waiting Time Model M/M/1") +
  ylab("Waiting Time")

# boxplot Service Time
ggplot(mm1_data,
       aes(x = Model,
           y = Service_Time,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Boxplot Service Time Model M/M/1") +
  ylab("Service Time")

# boxplot Time In System
ggplot(mm1_data,
       aes(x = Model,
           y = Time_In_System,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Boxplot Time In System Model M/M/1") +
  ylab("Time In System")

# boxplot model M/M/c

# simulasi tambahan untuk M/M/c
c <- 3

waiting_mmc <- data_penerbitan$Waiting_Time / c

system_mmc <- data_penerbitan$Time_In_System / c

mmc_data <- data.frame(
  Model = "M/M/c",
  Waiting_Time = waiting_mmc,
  Service_Time = data_penerbitan$Service_Time,
  Time_In_System = system_mmc
)

# boxplot Waiting Time
ggplot(mmc_data,
       aes(x = Model,
           y = Waiting_Time,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Boxplot Waiting Time Model M/M/c") +
  ylab("Waiting Time")

# boxplot Service Time
ggplot(mmc_data,
       aes(x = Model,
           y = Service_Time,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Boxplot Service Time Model M/M/c") +
  ylab("Service Time")

# boxplot Time In System
ggplot(mmc_data,
       aes(x = Model,
           y = Time_In_System,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Boxplot Time In System Model M/M/c") +
  ylab("Time In System")

# boxplot model M/G/1

# simulasi M/G/1
# pelayanan general distribution

service_mg1 <- rgamma(
  nrow(data_penerbitan),
  shape = 2,
  rate = 2
)

waiting_mg1 <- data_penerbitan$Waiting_Time +
  rnorm(nrow(data_penerbitan),
        mean = 0.5,
        sd = 0.2)

system_mg1 <- waiting_mg1 +
  service_mg1

mg1_data <- data.frame(
  Model = "M/G/1",
  Waiting_Time = waiting_mg1,
  Service_Time = service_mg1,
  Time_In_System = system_mg1
)

# Boxplot Waiting Time
ggplot(mg1_data,
       aes(x = Model,
           y = Waiting_Time,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Boxplot Waiting Time Model M/G/1") +
  ylab("Waiting Time")

# Boxplot Service Time
ggplot(mg1_data,
       aes(x = Model,
           y = Service_Time,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Boxplot Service Time Model M/G/1") +
  ylab("Service Time")

# Boxplot Time In System
ggplot(mg1_data,
       aes(x = Model,
           y = Time_In_System,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Boxplot Time In System Model M/G/1") +
  ylab("Time In System")

# boxplot perbandingan semua model

# gabungkan semua model
comparison_data <- rbind(
  data.frame(
    Model = "M/M/1",
    Waiting_Time = mm1_data$Waiting_Time
  ),
  
  data.frame(
    Model = "M/M/c",
    Waiting_Time = mmc_data$Waiting_Time
  ),
  
  data.frame(
    Model = "M/G/1",
    Waiting_Time = mg1_data$Waiting_Time
  )
)

# Boxplot perbandingan
ggplot(comparison_data,
       aes(x = Model,
           y = Waiting_Time,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Perbandingan Waiting Time Semua Model") +
  ylab("Waiting Time")

# perbandingan service time

comparison_service <- rbind(
  data.frame(
    Model = "M/M/1",
    Service_Time = mm1_data$Service_Time
  ),
  
  data.frame(
    Model = "M/M/c",
    Service_Time = mmc_data$Service_Time
  ),
  
  data.frame(
    Model = "M/G/1",
    Service_Time = mg1_data$Service_Time
  )
)

ggplot(comparison_service,
       aes(x = Model,
           y = Service_Time,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Perbandingan Service Time Semua Model") +
  ylab("Service Time")

# perbandingan time in system

comparison_system <- rbind(
  data.frame(
    Model = "M/M/1",
    Time_In_System = mm1_data$Time_In_System
  ),
  
  data.frame(
    Model = "M/M/c",
    Time_In_System = mmc_data$Time_In_System
  ),
  
  data.frame(
    Model = "M/G/1",
    Time_In_System = mg1_data$Time_In_System
  )
)

ggplot(comparison_system,
       aes(x = Model,
           y = Time_In_System,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Perbandingan Time In System Semua Model") +
  ylab("Time In System")

# boxplot model M/M/1

# data model M/M/1
mm1_data <- data.frame(
  Model = "M/M/1",
  Waiting_Time = data_penerbitan$Waiting_Time,
  Service_Time = data_penerbitan$Service_Time,
  Time_In_System = data_penerbitan$Time_In_System
)

# boxplot Waiting Time
ggplot(mm1_data,
       aes(x = Model,
           y = Waiting_Time,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Boxplot Waiting Time Model M/M/1") +
  ylab("Waiting Time")

# boxplot Service Time
ggplot(mm1_data,
       aes(x = Model,
           y = Service_Time,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Boxplot Service Time Model M/M/1") +
  ylab("Service Time")

# boxplot Time In System
ggplot(mm1_data,
       aes(x = Model,
           y = Time_In_System,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Boxplot Time In System Model M/M/1") +
  ylab("Time In System")

# boxplot model M/M/c

# simulasi tambahan untuk M/M/c
c <- 3

waiting_mmc <- data_penerbitan$Waiting_Time / c

system_mmc <- data_penerbitan$Time_In_System / c

mmc_data <- data.frame(
  Model = "M/M/c",
  Waiting_Time = waiting_mmc,
  Service_Time = data_penerbitan$Service_Time,
  Time_In_System = system_mmc
)

# boxplot Waiting Time
ggplot(mmc_data,
       aes(x = Model,
           y = Waiting_Time,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Boxplot Waiting Time Model M/M/c") +
  ylab("Waiting Time")

# boxplot Service Time
ggplot(mmc_data,
       aes(x = Model,
           y = Service_Time,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Boxplot Service Time Model M/M/c") +
  ylab("Service Time")

# boxplot Time In System
ggplot(mmc_data,
       aes(x = Model,
           y = Time_In_System,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Boxplot Time In System Model M/M/c") +
  ylab("Time In System")

# boxplot model M/G/1

# simulasi M/G/1
# pelayanan general distribution

service_mg1 <- rgamma(
  nrow(data_penerbitan),
  shape = 2,
  rate = 2
)

waiting_mg1 <- data_penerbitan$Waiting_Time +
  rnorm(nrow(data_penerbitan),
        mean = 0.5,
        sd = 0.2)

system_mg1 <- waiting_mg1 +
  service_mg1

mg1_data <- data.frame(
  Model = "M/G/1",
  Waiting_Time = waiting_mg1,
  Service_Time = service_mg1,
  Time_In_System = system_mg1
)

# boxplot waiting time
ggplot(mg1_data,
       aes(x = Model,
           y = Waiting_Time,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Boxplot Waiting Time Model M/G/1") +
  ylab("Waiting Time")

# boxplot service time
ggplot(mg1_data,
       aes(x = Model,
           y = Service_Time,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Boxplot Service Time Model M/G/1") +
  ylab("Service Time")

# boxplot time in system
ggplot(mg1_data,
       aes(x = Model,
           y = Time_In_System,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Boxplot Time In System Model M/G/1") +
  ylab("Time In System")

# boxplot perbandingan semua model

# gabungkan semua model
comparison_data <- rbind(
  data.frame(
    Model = "M/M/1",
    Waiting_Time = mm1_data$Waiting_Time
  ),
  
  data.frame(
    Model = "M/M/c",
    Waiting_Time = mmc_data$Waiting_Time
  ),
  
  data.frame(
    Model = "M/G/1",
    Waiting_Time = mg1_data$Waiting_Time
  )
)
# Boxplot perbandingan
ggplot(comparison_data,
       aes(x = Model,
           y = Waiting_Time,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Perbandingan Waiting Time Semua Model") +
  ylab("Waiting Time")

# perbandingan service time

comparison_service <- rbind(
  data.frame(
    Model = "M/M/1",
    Service_Time = mm1_data$Service_Time
  ),
  
  data.frame(
    Model = "M/M/c",
    Service_Time = mmc_data$Service_Time
  ),
  
  data.frame(
    Model = "M/G/1",
    Service_Time = mg1_data$Service_Time
  )
)

ggplot(comparison_service,
       aes(x = Model,
           y = Service_Time,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Perbandingan Service Time Semua Model") +
  ylab("Service Time")

# perbandingan time in system

comparison_system <- rbind(
  data.frame(
    Model = "M/M/1",
    Time_In_System = mm1_data$Time_In_System
  ),
  
  data.frame(
    Model = "M/M/c",
    Time_In_System = mmc_data$Time_In_System
  ),
  
  data.frame(
    Model = "M/G/1",
    Time_In_System = mg1_data$Time_In_System
  )
)

ggplot(comparison_system,
       aes(x = Model,
           y = Time_In_System,
           fill = Model)) +
  geom_boxplot() +
  ggtitle("Perbandingan Time In System Semua Model") +
  ylab("Time In System")

cat("\n")
cat("kesimpulan hasil simulasi antrian penerbitan buku\n\n")
## kesimpulan hasil simulasi antrian penerbitan buku
cat("jumlah data simulasi\n\n")
## jumlah data simulasi
cat("total naskah/buku yang diproses : ",
    nrow(data_penerbitan), " data\n", sep = "")
## total naskah/buku yang diproses : 8276 data
cat("jumlah hari pengamatan : ",
    length(unique(data_penerbitan$Tanggal)),
    " hari\n\n", sep = "")
## jumlah hari pengamatan : 365 hari
cat("rata-rata penerbitan buku\n\n")
## rata-rata penerbitan buku
avg_buku <- mean(daily_data$Jumlah_Buku)

max_buku <- max(daily_data$Jumlah_Buku)

min_buku <- min(daily_data$Jumlah_Buku)

cat("rata-rata buku per hari : ",
    round(avg_buku,2), "\n", sep = "")
## rata-rata buku per hari : 22.67
cat("jumlah maksimum buku per hari : ",
    max_buku, "\n", sep = "")
## jumlah maksimum buku per hari : 50
cat("jumlah minimum buku per hari : ",
    min_buku, "\n\n", sep = "")
## jumlah minimum buku per hari : 5
# analisis model m/m/1
cat("analisis model m/m/1\n\n")
## analisis model m/m/1
cat("nilai utilisasi (rho) : ",
    round(rho_mm1,4), "\n", sep = "")
## nilai utilisasi (rho) : 0.6478
cat("rata-rata pelanggan dalam antrian (lq) : ",
    round(Lq_mm1,4), "\n", sep = "")
## rata-rata pelanggan dalam antrian (lq) : 1.1917
cat("rata-rata pelanggan dalam sistem (ls) : ",
    round(Ls_mm1,4), "\n", sep = "")
## rata-rata pelanggan dalam sistem (ls) : 1.8395
cat("rata-rata waktu tunggu (wq) : ",
    round(Wq_mm1,4), "\n", sep = "")
## rata-rata waktu tunggu (wq) : 0.0526
cat("rata-rata waktu dalam sistem (ws) : ",
    round(Ws_mm1,4), "\n\n", sep = "")
## rata-rata waktu dalam sistem (ws) : 0.0811
if(rho_mm1 < 1){
  
  cat("interpretasi\n\n")
  
  cat("sistem m/m/1 berada dalam kondisi stabil\n")
  cat("pelayanan masih mampu menangani kedatangan naskah\n")
  cat("tidak terjadi overload pada sistem\n\n")
  
} else{
  
  cat("interpretasi\n\n")
  
  cat("sistem m/m/1 tidak stabil\n")
  cat("kedatangan lebih besar daripada pelayanan\n")
  cat("terjadi penumpukan antrian\n\n")
}
## interpretasi
## 
## sistem m/m/1 berada dalam kondisi stabil
## pelayanan masih mampu menangani kedatangan naskah
## tidak terjadi overload pada sistem
# analisis model m/m/c
cat("analisis model m/m/c\n\n")
## analisis model m/m/c
cat("jumlah server : ",
    c, "\n", sep = "")
## jumlah server : 3
cat("utilisasi sistem : ",
    round(rho_mmc,4), "\n\n", sep = "")
## utilisasi sistem : 0.2159
cat("interpretasi\n\n")
## interpretasi
cat("penambahan server mampu mengurangi antrian\n")
## penambahan server mampu mengurangi antrian
cat("waktu tunggu menjadi lebih kecil\n")
## waktu tunggu menjadi lebih kecil
cat("sistem lebih optimal dibanding m/m/1\n\n")
## sistem lebih optimal dibanding m/m/1
# analisis model m/g/1
cat("analisis model m/g/1\n\n")
## analisis model m/g/1
cat("variance service time : ",
    round(var_service,4), "\n", sep = "")
## variance service time : 0.0201
cat("rata-rata waktu tunggu : ",
    round(Wq_mg1,4), "\n\n", sep = "")
## rata-rata waktu tunggu : 1.2437
cat("interpretasi\n\n")
## interpretasi
cat("waktu pelayanan tidak selalu konstan\n")
## waktu pelayanan tidak selalu konstan
cat("variasi pelayanan menyebabkan waiting time berubah\n")
## variasi pelayanan menyebabkan waiting time berubah
cat("sistem lebih realistis untuk proses penerbitan buku\n")
## sistem lebih realistis untuk proses penerbitan buku
cat("karena setiap buku memiliki tingkat kesulitan berbeda\n\n")
## karena setiap buku memiliki tingkat kesulitan berbeda
# analisis time series
cat("analisis time series\n\n")
## analisis time series
cat("data penerbitan buku menunjukkan pola yang berubah\n")
## data penerbitan buku menunjukkan pola yang berubah
cat("setiap hari sehingga jumlah buku tidak konstan\n\n")
## setiap hari sehingga jumlah buku tidak konstan
cat("peningkatan jumlah buku terjadi pada hari kerja\n")
## peningkatan jumlah buku terjadi pada hari kerja
cat("serta bulan tertentu seperti juni juli dan desember\n\n")
## serta bulan tertentu seperti juni juli dan desember
cat("hal ini menunjukkan adanya pola musiman\n")
## hal ini menunjukkan adanya pola musiman
cat("pada proses penerbitan buku\n\n")
## pada proses penerbitan buku
# analisis forecasting
cat("analisis forecasting\n\n")
## analisis forecasting
cat("model arima digunakan untuk melakukan forecasting\n")
## model arima digunakan untuk melakukan forecasting
cat("jumlah buku pada periode berikutnya\n\n")
## jumlah buku pada periode berikutnya
cat("hasil forecasting menunjukkan bahwa\n")
## hasil forecasting menunjukkan bahwa
cat("jumlah penerbitan buku cenderung fluktuatif\n")
## jumlah penerbitan buku cenderung fluktuatif
cat("sistem perlu menyesuaikan kapasitas pelayanan\n")
## sistem perlu menyesuaikan kapasitas pelayanan
cat("penambahan server diperlukan saat permintaan meningkat\n\n")
## penambahan server diperlukan saat permintaan meningkat
# analisis boxplot
cat("analisis boxplot\n\n")
## analisis boxplot
cat("berdasarkan boxplot diperoleh bahwa\n\n")
## berdasarkan boxplot diperoleh bahwa
cat("model m/m/1 memiliki penyebaran waiting time\n")
## model m/m/1 memiliki penyebaran waiting time
cat("yang lebih besar dibanding model m/m/c\n\n")
## yang lebih besar dibanding model m/m/c
cat("model m/m/c memberikan distribusi waiting time\n")
## model m/m/c memberikan distribusi waiting time
cat("yang lebih stabil karena menggunakan beberapa server\n\n")
## yang lebih stabil karena menggunakan beberapa server
cat("model m/g/1 memiliki variasi service time paling tinggi\n")
## model m/g/1 memiliki variasi service time paling tinggi
cat("karena pelayanan mengikuti distribusi umum\n\n")
## karena pelayanan mengikuti distribusi umum
# kesimpulan akhir
cat("kesimpulan akhir\n\n")
## kesimpulan akhir
cat("berdasarkan hasil simulasi dapat disimpulkan bahwa\n\n")
## berdasarkan hasil simulasi dapat disimpulkan bahwa
cat("sistem penerbitan buku mengalami perubahan jumlah\n")
## sistem penerbitan buku mengalami perubahan jumlah
cat("naskah setiap hari sehingga membentuk pola antrian\n\n")
## naskah setiap hari sehingga membentuk pola antrian
cat("model m/m/1 masih dapat digunakan apabila jumlah\n")
## model m/m/1 masih dapat digunakan apabila jumlah
cat("kedatangan lebih kecil dibanding pelayanan\n\n")
## kedatangan lebih kecil dibanding pelayanan
cat("model m/m/c merupakan model terbaik karena\n")
## model m/m/c merupakan model terbaik karena
cat("mampu mengurangi waiting time dengan penambahan server\n\n")
## mampu mengurangi waiting time dengan penambahan server
cat("model m/g/1 paling realistis untuk proses penerbitan\n")
## model m/g/1 paling realistis untuk proses penerbitan
cat("karena waktu pelayanan tiap buku berbeda-beda\n\n")
## karena waktu pelayanan tiap buku berbeda-beda
cat("forecasting menunjukkan bahwa sistem perlu\n")
## forecasting menunjukkan bahwa sistem perlu
cat("meningkatkan kapasitas pelayanan pada periode tertentu\n")
## meningkatkan kapasitas pelayanan pada periode tertentu
cat("agar tidak terjadi penumpukan antrian\n\n")
## agar tidak terjadi penumpukan antrian
cat("simulasi selesai\n")
## simulasi selesai