# ==============================================================================
# 1. PERHITUNGAN ANALITIS MODEL ANTRIAN M/M/5
# ==============================================================================

# Input Parameter
total_pelanggan_normal <- 205
total_waktu_detik <- 45100
durasi_observasi_menit <- 120
c <- 5  # Jumlah kasir aktif

# A. Menghitung Parameter Dasar (Laju Kedatangan & Pelayanan)
lambda <- (total_pelanggan_normal + 15) / durasi_observasi_menit # Total pelanggan (normal + insiden) / waktu
W_s_nyata <- total_waktu_detik / total_pelanggan_normal / 60     # Waktu di sistem nyata (menit)
S <- 0.60 * W_s_nyata                                            # Estimasi waktu pelayanan (menit)
mu <- 1 / S                                                      # Laju pelayanan per kasir (pelanggan/menit)

cat("--- PARAMETER SISTEM M/M/5 ---\n")
## --- PARAMETER SISTEM M/M/5 ---
cat(sprintf("Laju Kedatangan (lambda)    : %.4f pelanggan/menit\n", lambda))
## Laju Kedatangan (lambda)    : 1.8333 pelanggan/menit
cat(sprintf("Laju Pelayanan (mu)         : %.4f pelanggan/menit\n", mu))
## Laju Pelayanan (mu)         : 0.4545 pelanggan/menit
cat(sprintf("Waktu Pelayanan (S)         : %.4f menit\n\n", S))
## Waktu Pelayanan (S)         : 2.2000 menit
# B. Perhitungan Kinerja Antrean M/M/5
# 1. Utilisasi Sistem (rho)
rho <- lambda / (c * mu)

# 2. Probabilitas Semua Server Kosong (P0)
# Bagian Penjumlahan (Sigma) untuk n = 0 hingga c-1 (0 sampai 4)
ratio <- lambda / mu
sum_terms <- 0
for (n in 0:(c - 1)) {
  sum_terms <- sum_terms + (ratio^n / factorial(n))
}

# Bagian batas limit server
limit_term <- (ratio^c) / (factorial(c) * (1 - rho))

# Nilai P0
P0 <- 1 / (sum_terms + limit_term)

# 3. Rata-rata Panjang Antrean (Lq)
Lq <- (P0 * (ratio^c) * rho) / (factorial(c) * (1 - rho)^2)

# 4. Rata-rata Waktu Tunggu dalam Antrean (Wq)
Wq <- Lq / lambda

# 5. Rata-rata Waktu Total dalam Sistem (W)
W <- Wq + S

# 6. Rata-rata Jumlah Pelanggan dalam Sistem (L)
L <- lambda * W

# Cetak Hasil Analisis Keefektifan
cat("--- METRIK UKURAN KEEFEKTIFAN ---\n")
## --- METRIK UKURAN KEEFEKTIFAN ---
cat(sprintf("Utilisasi Server (rho)            : %.4f (%.2f%%)\n", rho, rho * 100))
## Utilisasi Server (rho)            : 0.8067 (80.67%)
cat(sprintf("Probabilitas Sistem Kosong (P0)   : %.4f (%.2f%%)\n", P0, P0 * 100))
## Probabilitas Sistem Kosong (P0)   : 0.0123 (1.23%)
cat(sprintf("Rata-rata Panjang Antrean (Lq)    : %.4f pelanggan\n", Lq))
## Rata-rata Panjang Antrean (Lq)    : 2.3659 pelanggan
cat(sprintf("Rata-rata Waktu Tunggu (Wq)       : %.4f menit (%.2f detik)\n", Wq, Wq * 60))
## Rata-rata Waktu Tunggu (Wq)       : 1.2905 menit (77.43 detik)
cat(sprintf("Rata-rata Waktu di Sistem (W)     : %.4f menit (%.2f detik)\n", W, W * 60))
## Rata-rata Waktu di Sistem (W)     : 3.4905 menit (209.43 detik)
cat(sprintf("Rata-rata Jumlah di Sistem (L)    : %.4f pelanggan\n", L))
## Rata-rata Jumlah di Sistem (L)    : 6.3992 pelanggan