Tugas 4 - Continuous Time Markov Chain (CTMC)

Nama: Zahrina Putri Nur Amalia
NRP: 5003221162
Mata Kuliah: Proses Stokastik A


a) Jika X(t) dapat dimodelkan dengan suatu CTMC, gambarkan rate diagram untuk X(t) dan berikan penjelasan untuk kondisi setiap state.

b) Tentukan rate matrix dan generator matrix untuk X(t).

c) Jika cucian mobil buka pada pukul 08:00 dan belum ada pelanggan yang datang, berapa peluang bahwa terdapat satu pelanggan yang sedang dilayani dan satu pelanggan yang sedang mengantri pada pukul 09:00?

d) Jika cucian mobil tutup pada pukul 20:00, hitung rata-rata waktu antrian penuh dan rata-rata sistem idle (tidak ada pelanggan).

e) Tentukan peluang bahwa, pada kondisi long run, antrian mobil yang akan dicuci selalu dalam keadaan penuh.

f) Diketahui bahwa pada kondisi awal tidak terdapat mobil yang antre, tentukan rata-rata waktu yang diperlukan hingga antrian mobil dalam keadaan penuh untuk pertama kali.

library(expm)
library(markovchain)
library(DiagrammeR)

#Parameter dasar
lambda <- 4   # arrival rate (mobil/jam)
mu     <- 2   # service rate (mobil/jam)

#Jawaban bagian A

#Diagram transisi antar state
grViz("
digraph CTMC_CuciMobil {
  rankdir = LR;
  node [shape = circle, fontsize = 12, fixedsize = true, width = 1.2];

  0 [label = '0\\nKosong'];
  1 [label = '1\\nCuci'];
  2 [label = '2\\nCuci+1'];
  3 [label = '3\\nCuci+2\\n(Penuh)'];

  0 -> 1 [label = 'λ = 4'];
  1 -> 2 [label = 'λ = 4'];
  2 -> 3 [label = 'λ = 4'];

  1 -> 0 [label = 'μ = 2'];
  2 -> 1 [label = 'μ = 2'];
  3 -> 2 [label = 'μ = 2'];
}
")
##Jawaban bagian B 

#Jumlah maksimum state: 0, 1, 2, 3
K <- 3

#Inisialisasi matriks generator Q
Q <- matrix(0, nrow = K + 1, ncol = K + 1)

#Nilai transisi antar state
for (i in 0:K) {
  if (i < K) {
    Q[i + 1, i + 2] <- lambda   #masuk
  }
  if (i > 0) {
    Q[i + 1, i] <- mu           #keluar
  }
}

#Nilai diagonal
for (i in 0:K) {
  Q[i + 1, i + 1] <- -sum(Q[i + 1, ])
}

#Menambahkan nama baris dan kolom agar jelas
rownames(Q) <- colnames(Q) <- as.character(0:K)

cat("Generator Matrix Q:")
## Generator Matrix Q:
print(Q)
##    0  1  2  3
## 0 -4  4  0  0
## 1  2 -6  4  0
## 2  0  2 -6  4
## 3  0  0  2 -2
##Jawaban Bagian C

##Probabilitas transient: P(X(1 jam) = 2 | X(0)=0)
t <- 1  #jam
P_t <- expm(Q * t)     #matriks probabilitas transisi
p02 <- P_t["0","2"]    #peluang dari state 0 ke state 2

cat(sprintf(
  "P(1 dicuci & 1 antre pada pukul 09:00) \nP = %.4f",
  p02))
## P(1 dicuci & 1 antre pada pukul 09:00) 
## P = 0.2650
##Jawaban Bagian D

##Steady‑state & waktu idle/penuh
##Cari π sehingga πQ = 0 dan Σπ = 1
A <- t(Q);  A[4, ] <- 1          #ganti baris terakhir dg constraint Σπ = 1
b <- c(0, 0, 0, 1)
pi <- solve(A, b)                #vektor steady‑state
names(pi) <- paste0("π", 0:3)

cat("Steady‑state Probabilities")
## Steady‑state Probabilities
print(round(pi, 4))
##     π0     π1     π2     π3 
## 0.0667 0.1333 0.2667 0.5333
jam_operasional <- 12            #08:00–20:00
idle_hours  <- pi["π0"] * jam_operasional
full_hours  <- pi["π3"] * jam_operasional

cat(sprintf(
  "Rata‑rata waktu sistem idle  (kosong) : %.2f jam/hari", idle_hours))
## Rata‑rata waktu sistem idle  (kosong) : 0.80 jam/hari
cat(sprintf(
  "Rata‑rata waktu sistem penuh (3 mobil): %.2f jam/hari", full_hours))
## Rata‑rata waktu sistem penuh (3 mobil): 6.40 jam/hari
##Jawaban Bagian E

##Peluang long‑run antrian penuh
cat(sprintf(
  "P(sistem penuh pada long‑run) P = %.4f",
  pi["π3"]))
## P(sistem penuh pada long‑run) P = 0.5333
##Jawaban Bagian F
##Expected first‑passage time ke state 3
##Sub‑Q untuk state transien {0,1,2}
Q_T <- Q[1:3, 1:3]           #state 0,1,2
N   <- solve(-Q_T)           #Fundamental matrix
e   <- rep(1, 3)
Tfp <- N %*% e               #E[waktu ke state 3]
t0  <- Tfp[1]                #dari state 0

cat(sprintf(
  "Ekspektasi waktu hingga pertama kali penuh E[T] = %.4f jam",
  t0))
## Ekspektasi waktu hingga pertama kali penuh E[T] = 1.0625 jam