# Data permintaan
tabel_permintaan <- data.frame(
  permintaan = c(50, 60, 70, 80, 90),
  probabilitas = c(0.10, 0.20, 0.40, 0.20, 0.10)
)
# Probabilitas kumulatif
tabel_permintaan$prob_kumulatif <- cumsum(tabel_permintaan$probabilitas)
# Interval bilangan acak
tabel_permintaan$bawah <- c(0, head(tabel_permintaan$prob_kumulatif, -1))
tabel_permintaan$atas <- tabel_permintaan$prob_kumulatif
# Ekspektasi teoritis
nilai_ekspektasi <- sum(
  tabel_permintaan$permintaan *
  tabel_permintaan$probabilitas
)

cat("Ekspektasi Teoritis =", nilai_ekspektasi, "\n\n")
## Ekspektasi Teoritis = 70
permintaan_simulasi <- function(n_hari, tabel){
  angka_acak <- runif(n_hari)
  hasil <- numeric(n_hari)
  for(i in 1:n_hari){
    hasil[i] <-
      tabel$permintaan[
        which(
          angka_acak[i] >= tabel$bawah &
          angka_acak[i] < tabel$atas
        )
      ]
  }

  data.frame(
    hari = 1:n_hari,
    angka_acak = angka_acak,
    prediksi_permintaan = hasil
  )

}
set.seed(150)

sim_1000 <- permintaan_simulasi(1000, tabel_permintaan)
sim_5000 <- permintaan_simulasi(5000, tabel_permintaan)
sim_20000 <- permintaan_simulasi(20000, tabel_permintaan)
hasil <- data.frame(
  Metode = c(
    "Ekspektasi Teoritis",
    "Simulasi 1000",
    "Simulasi 5000",
    "Simulasi 20000"
  ),

  Nilai = c(
    nilai_ekspektasi,
    mean(sim_1000$prediksi_permintaan),
    mean(sim_5000$prediksi_permintaan),
    mean(sim_20000$prediksi_permintaan)
  )
)

print(hasil)
##                Metode  Nilai
## 1 Ekspektasi Teoritis 70.000
## 2       Simulasi 1000 70.030
## 3       Simulasi 5000 70.164
## 4      Simulasi 20000 70.025

Berdasarkan hasil simulasi, nilai ekspektasi teoritis adalah 70. Hasil simulasi sebanyak 1.000 menghasilkan nilai ekspektasi 70,030, simulasi 5.000 menghasilkan 70,164, sedangkan simulasi 20.000 menghasilkan 70,025. Ketiga hasil tersebut memiliki selisih yang kecil terhadap nilai teoritis, sehingga menunjukkan bahwa simulasi Monte Carlo mampu memberikan estimasi yang mendekati nilai ekspektasi sebenarnya. Jika dibandingkan, hasil simulasi 20.000 merupakan yang paling dekat dengan nilai teoritis karena hanya memiliki selisih sekitar 0,025, diikuti simulasi 1.000 dengan selisih 0,030, sedangkan simulasi 5.000 memiliki selisih terbesar yaitu sekitar 0,164. Perbedaan ini terjadi karena adanya unsur acak (randomness) dalam setiap simulasi. Secara umum, semakin besar jumlah simulasi, estimasi yang dihasilkan cenderung semakin stabil dan mendekati nilai teoritis. Hal ini disebabkan karena semakin banyak percobaan yang dilakukan, pengaruh variasi acak akan semakin kecil sehingga rata-rata hasil simulasi semakin mendekati nilai ekspektasi sebenarnya.