# =====================================================
# LATIHAN 1A
# Prediksi Permintaan Es Teh 5 Hari ke Depan
# =====================================================

permintaan1 <- c(50, 60, 70, 80, 90)
frekuensi1 <- c(10, 20, 40, 20, 10)

total1 <- sum(frekuensi1)

prob1 <- frekuensi1 / total1
prob_kum1 <- cumsum(prob1)

interval_atas1 <- floor(prob_kum1 * 100)
interval_bawah1 <- c(1, head(interval_atas1, -1) + 1)

tabel1 <- data.frame(
  Permintaan = permintaan1,
  Frekuensi = frekuensi1,
  Probabilitas = prob1,
  Prob_Kumulatif = prob_kum1,
  Interval_Bawah = interval_bawah1,
  Interval_Atas = interval_atas1
)

cat("=== LATIHAN 1A ===\n")
## === LATIHAN 1A ===
print(tabel1)
##   Permintaan Frekuensi Probabilitas Prob_Kumulatif Interval_Bawah Interval_Atas
## 1         50        10          0.1            0.1              1            10
## 2         60        20          0.2            0.3             11            30
## 3         70        40          0.4            0.7             31            70
## 4         80        20          0.2            0.9             71            90
## 5         90        10          0.1            1.0             91           100
set.seed(123)

n <- 5

bil_acak <- sample(1:100, n, replace = TRUE)

index <- findInterval(bil_acak, interval_atas1) + 1
index[index > length(permintaan1)] <- length(permintaan1)

hasil <- permintaan1[index]

simulasi1a <- data.frame(
  Hari = 1:n,
  Bilangan_Acak = bil_acak,
  Permintaan_Simulasi = hasil
)

print(simulasi1a)
##   Hari Bilangan_Acak Permintaan_Simulasi
## 1    1            31                  70
## 2    2            79                  80
## 3    3            51                  70
## 4    4            14                  60
## 5    5            67                  70
cat("Total Prediksi 5 Hari =", sum(hasil), "\n")
## Total Prediksi 5 Hari = 350
cat("Rata-rata =", mean(hasil), "\n\n")
## Rata-rata = 70
# =====================================================
# LATIHAN 1B
# Prediksi Permintaan Es Teh 20 Hari ke Depan
# =====================================================

cat("=== LATIHAN 1B ===\n")
## === LATIHAN 1B ===
set.seed(123)

n <- 20

bil_acak <- sample(1:100, n, replace = TRUE)

index <- findInterval(bil_acak, interval_atas1) + 1
index[index > length(permintaan1)] <- length(permintaan1)

hasil <- permintaan1[index]

simulasi1b <- data.frame(
  Hari = 1:n,
  Bilangan_Acak = bil_acak,
  Permintaan_Simulasi = hasil
)

print(simulasi1b)
##    Hari Bilangan_Acak Permintaan_Simulasi
## 1     1            31                  70
## 2     2            79                  80
## 3     3            51                  70
## 4     4            14                  60
## 5     5            67                  70
## 6     6            42                  70
## 7     7            50                  70
## 8     8            43                  70
## 9     9            14                  60
## 10   10            25                  60
## 11   11            90                  90
## 12   12            91                  90
## 13   13            69                  70
## 14   14            91                  90
## 15   15            57                  70
## 16   16            92                  90
## 17   17             9                  50
## 18   18            93                  90
## 19   19            99                  90
## 20   20            72                  80
cat("Total Prediksi 20 Hari =", sum(hasil), "\n")
## Total Prediksi 20 Hari = 1490
cat("Rata-rata =", mean(hasil), "\n\n")
## Rata-rata = 74.5
# =====================================================
# LATIHAN 2
# Distribusi Eksponensial dan Normal
# =====================================================

cat("=== LATIHAN 2 ===\n")
## === LATIHAN 2 ===
set.seed(123)

n_data <- 10

permintaan2 <- rexp(n_data, rate = 0.1)
frekuensi2 <- rnorm(n_data, mean = 50, sd = 5)

data_awal <- data.frame(
  Hari = 1:n_data,
  Permintaan = round(permintaan2, 2),
  Frekuensi = round(frekuensi2, 2)
)

print(data_awal)
##    Hari Permintaan Frekuensi
## 1     1       8.43     47.77
## 2     2       5.77     56.12
## 3     3      13.29     51.80
## 4     4       0.32     52.00
## 5     5       0.56     50.55
## 6     6       3.17     47.22
## 7     7       3.14     58.93
## 8     8       1.45     52.49
## 9     9      27.26     40.17
## 10   10       0.29     53.51
lambda <- 1 / mean(permintaan2)
mu <- mean(frekuensi2)
sigma <- sd(frekuensi2)

cat("Lambda =", lambda, "\n")
## Lambda = 0.1570279
cat("Mean Frekuensi =", mu, "\n")
## Mean Frekuensi = 51.05667
cat("SD Frekuensi =", sigma, "\n\n")
## SD Frekuensi = 5.180642
# =====================================================
# Fungsi Monte Carlo
# =====================================================

simulasi_MC <- function(hari, iterasi = 10000){

  hasil <- numeric(iterasi)

  for(i in 1:iterasi){

    permintaan_sim <- rexp(hari, rate = lambda)

    hasil[i] <- sum(permintaan_sim)
  }

  return(hasil)
}


# =====================================================
# LATIHAN 2A
# Prediksi 5 Hari
# =====================================================

pred5 <- simulasi_MC(5)

cat("=== LATIHAN 2A (5 Hari) ===\n")
## === LATIHAN 2A (5 Hari) ===
cat("Rata-rata =", mean(pred5), "\n")
## Rata-rata = 31.95008
cat("Minimum =", min(pred5), "\n")
## Minimum = 2.253334
cat("Maksimum =", max(pred5), "\n\n")
## Maksimum = 119.0174
# =====================================================
# LATIHAN 2B
# Prediksi 20 Hari
# =====================================================

pred20 <- simulasi_MC(20)

cat("=== LATIHAN 2B (20 Hari) ===\n")
## === LATIHAN 2B (20 Hari) ===
cat("Rata-rata =", mean(pred20), "\n")
## Rata-rata = 126.8202
cat("Minimum =", min(pred20), "\n")
## Minimum = 44.67145
cat("Maksimum =", max(pred20), "\n\n")
## Maksimum = 250.612
# =====================================================
# LATIHAN 2C
# Prediksi 100 Hari
# =====================================================

pred100 <- simulasi_MC(100)

cat("=== LATIHAN 2C (100 Hari) ===\n")
## === LATIHAN 2C (100 Hari) ===
cat("Rata-rata =", mean(pred100), "\n")
## Rata-rata = 636.8261
cat("Minimum =", min(pred100), "\n")
## Minimum = 443.4087
cat("Maksimum =", max(pred100), "\n\n")
## Maksimum = 938.2492
# =====================================================
# LATIHAN 2D
# Prediksi 1000 Hari
# =====================================================

pred1000 <- simulasi_MC(1000)

cat("=== LATIHAN 2D (1000 Hari) ===\n")
## === LATIHAN 2D (1000 Hari) ===
cat("Rata-rata =", mean(pred1000), "\n")
## Rata-rata = 6366.431
cat("Minimum =", min(pred1000), "\n")
## Minimum = 5583.896
cat("Maksimum =", max(pred1000), "\n")
## Maksimum = 7114.382