LATIHAN 1

# Data awal
permintaan <- c(50, 60, 70, 80, 90)
frekuensi <- c(10, 20, 40, 20, 10)

# Total observasi
total <- sum(frekuensi)

# Probabilitas
prob <- frekuensi / total

# Probabilitas kumulatif
prob_kum <- cumsum(prob)

# Menampilkan tabel distribusi
data.frame(
  Permintaan = permintaan,
  Frekuensi = frekuensi,
  Probabilitas = prob,
  Prob_Kumulatif = prob_kum
)
##   Permintaan Frekuensi Probabilitas Prob_Kumulatif
## 1         50        10          0.1            0.1
## 2         60        20          0.2            0.3
## 3         70        40          0.4            0.7
## 4         80        20          0.2            0.9
## 5         90        10          0.1            1.0
# Fungsi simulasi Monte Carlo

simulasi_mc <- function(hari){

  bil_acak <- runif(hari)

  hasil <- sapply(bil_acak, function(x){
    if(x <= prob_kum[1]) return(permintaan[1])
    else if(x <= prob_kum[2]) return(permintaan[2])
    else if(x <= prob_kum[3]) return(permintaan[3])
    else if(x <= prob_kum[4]) return(permintaan[4])
    else return(permintaan[5])
  })

  data.frame(
    Hari = 1:hari,
    Bilangan_Acak = round(bil_acak,4),
    Prediksi_Permintaan = hasil
  )
}

a. Prediksi 5 hari ke depan

set.seed(123)
prediksi_5 <- simulasi_mc(5)
print(prediksi_5)
##   Hari Bilangan_Acak Prediksi_Permintaan
## 1    1        0.2876                  60
## 2    2        0.7883                  80
## 3    3        0.4090                  70
## 4    4        0.8830                  80
## 5    5        0.9405                  90
cat("Rata-rata permintaan 5 hari:",
    mean(prediksi_5$Prediksi_Permintaan), "\n")
## Rata-rata permintaan 5 hari: 76

b. Prediksi 20 hari ke depan

set.seed(123)
prediksi_20 <- simulasi_mc(20)
print(prediksi_20)
##    Hari Bilangan_Acak Prediksi_Permintaan
## 1     1        0.2876                  60
## 2     2        0.7883                  80
## 3     3        0.4090                  70
## 4     4        0.8830                  80
## 5     5        0.9405                  90
## 6     6        0.0456                  50
## 7     7        0.5281                  70
## 8     8        0.8924                  80
## 9     9        0.5514                  70
## 10   10        0.4566                  70
## 11   11        0.9568                  90
## 12   12        0.4533                  70
## 13   13        0.6776                  70
## 14   14        0.5726                  70
## 15   15        0.1029                  60
## 16   16        0.8998                  80
## 17   17        0.2461                  60
## 18   18        0.0421                  50
## 19   19        0.3279                  70
## 20   20        0.9545                  90
cat("Rata-rata permintaan 20 hari:",
    mean(prediksi_20$Prediksi_Permintaan), "\n")
## Rata-rata permintaan 20 hari: 71.5

LATIHAN 2

set.seed(123)

# Permintaan (eksponensial)
permintaan <- round(rexp(10, rate = 0.05))

# Frekuensi (normal)
frekuensi <- round(abs(rnorm(10, mean = 50, sd = 15)))

# Tampilkan data
data_awal <- data.frame(
  Permintaan = permintaan,
  Frekuensi = frekuensi
)

print(data_awal)
##    Permintaan Frekuensi
## 1          17        43
## 2          12        68
## 3          27        55
## 4           1        56
## 5           1        52
## 6           6        42
## 7           6        77
## 8           3        57
## 9          55        21
## 10          1        61
# Probabilitas
prob <- frekuensi / sum(frekuensi)
prob_kum <- cumsum(prob)

tabel_simulasi <- data.frame(
  Permintaan = permintaan,
  Frekuensi = frekuensi,
  Probabilitas = round(prob,4),
  Prob_Kumulatif = round(prob_kum,4)
)

print(tabel_simulasi)
##    Permintaan Frekuensi Probabilitas Prob_Kumulatif
## 1          17        43       0.0808         0.0808
## 2          12        68       0.1278         0.2086
## 3          27        55       0.1034         0.3120
## 4           1        56       0.1053         0.4173
## 5           1        52       0.0977         0.5150
## 6           6        42       0.0789         0.5940
## 7           6        77       0.1447         0.7387
## 8           3        57       0.1071         0.8459
## 9          55        21       0.0395         0.8853
## 10          1        61       0.1147         1.0000
# Fungsi simulasi
simulasi_mc <- function(hari){

  bil_acak <- runif(hari)

  hasil <- sapply(bil_acak, function(x){
    permintaan[min(which(prob_kum >= x))]
  })

  data.frame(
    Hari = 1:hari,
    Bilangan_Acak = round(bil_acak,4),
    Prediksi = hasil
  )
}

a. Prediksi 5 hari

pred_5 <- simulasi_mc(5)
print(pred_5)
##   Hari Bilangan_Acak Prediksi
## 1    1        0.3182        1
## 2    2        0.2316       27
## 3    3        0.1428       12
## 4    4        0.4145        1
## 5    5        0.4137        1
cat("Rata-rata 5 hari:", mean(pred_5$Prediksi), "\n\n")
## Rata-rata 5 hari: 8.4

b. Prediksi 20 hari

pred_20 <- simulasi_mc(20)
print(pred_20)
##    Hari Bilangan_Acak Prediksi
## 1     1        0.3688        1
## 2     2        0.1524       12
## 3     3        0.1388       12
## 4     4        0.2330       27
## 5     5        0.4660        1
## 6     6        0.2660       27
## 7     7        0.8578       55
## 8     8        0.0458       17
## 9     9        0.4422        1
## 10   10        0.7989        3
## 11   11        0.1219       12
## 12   12        0.5609        6
## 13   13        0.2065       12
## 14   14        0.1275       12
## 15   15        0.7533        3
## 16   16        0.8950        1
## 17   17        0.3745        1
## 18   18        0.6651        6
## 19   19        0.0948       12
## 20   20        0.3840        1
cat("Rata-rata 20 hari:", mean(pred_20$Prediksi), "\n\n")
## Rata-rata 20 hari: 11.1

c. Prediksi 100 hari

pred_100 <- simulasi_mc(100)
cat("Rata-rata 100 hari:", mean(pred_100$Prediksi), "\n\n")
## Rata-rata 100 hari: 8.24

d. Prediksi 1000 hari

pred_1000 <- simulasi_mc(1000)
cat("Rata-rata 1000 hari:", mean(pred_1000$Prediksi), "\n")
## Rata-rata 1000 hari: 9.946