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