1. Data Awal
tabel_permintaan <- data.frame(
permintaan = c(50, 60, 70, 80, 90),
frekuensi = c(10, 20, 40, 20, 10)
)
print(tabel_permintaan)
## permintaan frekuensi
## 1 50 10
## 2 60 20
## 3 70 40
## 4 80 20
## 5 90 10
2. Menghitung Total Frekuensi
total_frekuensi <- sum(
tabel_permintaan$frekuensi
)
3. Menghitung Probabilitas
tabel_permintaan$probabilitas <-
tabel_permintaan$frekuensi /
total_frekuensi
print(tabel_permintaan)
## permintaan frekuensi probabilitas
## 1 50 10 0.1
## 2 60 20 0.2
## 3 70 40 0.4
## 4 80 20 0.2
## 5 90 10 0.1
4. Probabilitas Kumulatif
tabel_permintaan$probabilitas_kumulatif <-
cumsum(
tabel_permintaan$probabilitas
)
print(tabel_permintaan)
## permintaan frekuensi probabilitas probabilitas_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
5. Menentukan Interval Bilangan Acak
tabel_permintaan$batas_bawah <- c(
1,
11,
31,
71,
91
)
tabel_permintaan$batas_atas <- c(
10,
30,
70,
90,
100
)
print(tabel_permintaan)
## permintaan frekuensi probabilitas probabilitas_kumulatif batas_bawah
## 1 50 10 0.1 0.1 1
## 2 60 20 0.2 0.3 11
## 3 70 40 0.4 0.7 31
## 4 80 20 0.2 0.9 71
## 5 90 10 0.1 1.0 91
## batas_atas
## 1 10
## 2 30
## 3 70
## 4 90
## 5 100
6. Menghitung Nilai Ekspektasi Manual
nilai_ekspektasi <- sum(
tabel_permintaan$permintaan *
tabel_permintaan$probabilitas
)
cat(
"Ekspektasi permintaan:",
nilai_ekspektasi,
"\n"
)
## Ekspektasi permintaan: 70
7. Fungsi Simulasi Permintaan
permintaan_simulasi <- function(
n,
tabel_permintaan
) {
# Bilangan acak 1 sampai 100
bilangan_acak <- sample(
1:100,
n,
replace = TRUE
)
# Fungsi menentukan permintaan
get_demand <- function(x) {
index <- which(
x >= tabel_permintaan$batas_bawah &
x <= tabel_permintaan$batas_atas
)
if (length(index) == 0) {
return(NA)
} else {
return(
tabel_permintaan$permintaan[index]
)
}
}
prediksi_permintaan <- sapply(
bilangan_acak,
get_demand
)
result <- data.frame(
bilangan_acak = bilangan_acak,
prediksi_permintaan = prediksi_permintaan
)
result <- na.omit(result)
return(result)
}
8. Simulasi 1000 Hari
set.seed(1000)
sim_1000 <- permintaan_simulasi(
1000,
tabel_permintaan
)
print(head(sim_1000, 10))
## bilangan_acak prediksi_permintaan
## 1 68 70
## 2 43 70
## 3 86 80
## 4 51 70
## 5 88 80
## 6 29 60
## 7 99 90
## 8 61 70
## 9 18 60
## 10 22 60
cat(
"Rata-rata permintaan 1000 hari:",
mean(sim_1000$prediksi_permintaan),
"\n"
)
## Rata-rata permintaan 1000 hari: 70.12
9. Simulasi 5000 Hari
set.seed(5000)
sim_5000 <- permintaan_simulasi(
5000,
tabel_permintaan
)
print(head(sim_5000, 10))
## bilangan_acak prediksi_permintaan
## 1 63 70
## 2 40 70
## 3 5 50
## 4 53 70
## 5 50 70
## 6 35 70
## 7 97 90
## 8 100 90
## 9 52 70
## 10 53 70
cat(
"Rata-rata permintaan 5000 hari:",
mean(sim_5000$prediksi_permintaan),
"\n"
)
## Rata-rata permintaan 5000 hari: 70.088
10. Simulasi 20000 Hari
set.seed(20000)
sim_20000 <- permintaan_simulasi(
20000,
tabel_permintaan
)
print(head(sim_20000, 10))
## bilangan_acak prediksi_permintaan
## 1 87 80
## 2 27 60
## 3 28 60
## 4 76 80
## 5 23 60
## 6 36 70
## 7 11 60
## 8 12 60
## 9 63 70
## 10 78 80
cat(
"Rata-rata permintaan 20000 hari:",
mean(sim_20000$prediksi_permintaan),
"\n"
)
## Rata-rata permintaan 20000 hari: 69.892
11. Perbandingan Hasil
perbandingan <- data.frame(
Metode = c(
"Ekspektasi Teoritis",
"Simulasi 1000 Hari",
"Simulasi 5000 Hari",
"Simulasi 20000 Hari"
),
Permintaan_Rata_Rata = c(
round(nilai_ekspektasi, 2),
round(mean(sim_1000$prediksi_permintaan), 2),
round(mean(sim_5000$prediksi_permintaan), 2),
round(mean(sim_20000$prediksi_permintaan), 2)
)
)
print(perbandingan)
## Metode Permintaan_Rata_Rata
## 1 Ekspektasi Teoritis 70.00
## 2 Simulasi 1000 Hari 70.12
## 3 Simulasi 5000 Hari 70.09
## 4 Simulasi 20000 Hari 69.89
12. Analisis Hasil