NOMOR 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
# total frekuensi
total_frekuensi <- sum(tabel_permintaan$frekuensi)

# peluang
total_frekuensi <- sum(tabel_permintaan$frekuensi)
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
# 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
# interval dengan +1 untuk lower bound
tabel_permintaan$batas_bawah<- c(1, head(tabel_permintaan$probabilitas_kumulatif, -1) * 100 + 1)
tabel_permintaan$batas_atas <- tabel_permintaan$probabilitas_kumulatif * 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
# ekspektasi Berdasarkan distribusi peluang yang sudah dihitung sebelumnya
nilai_ekspektasi <- sum(tabel_permintaan$permintaan * tabel_permintaan$probabilitas)
cat("Ekspektasi permintaan:", nilai_ekspektasi, "\n")
## Ekspektasi permintaan: 70
permintaan_simulasi <- function(n, tabel_permintaan) {
  # Bilangan acak dari 1 sampai 100 (diskrit sesuai interval)
  bilangan_acak <- sample(1:100, n, replace = TRUE)
  
  # Fungsi bantu untuk menentukan demand berdasarkan interval
  get_demand <- function(x) {
    index <- which(x >= tabel_permintaan$batas_bawah & x <= tabel_permintaan$batas_atas)
    if (length(index) == 0) {
      return(NA)  # atau fallback ke 70 jika mau pakai nilai tengah
    } else {
      return(tabel_permintaan$permintaan[index])
    }
  }
  
  prediksi_permintaan <- sapply(bilangan_acak, get_demand)
  
  # Hapus NA jika ada
  result <- data.frame(
    bilangan_acak = bilangan_acak,
    prediksi_permintaan = prediksi_permintaan
  )
  result <- na.omit(result)
  
  return(result)
}
# a. 5 hari
sim_5 <- permintaan_simulasi(5, tabel_permintaan)
print(head(sim_5, 10))
##   bilangan_acak prediksi_permintaan
## 1            78                  80
## 2            95                  90
## 3            54                  70
## 4             7                  50
## 5            12                  60
cat("Rata-rata permintaan:", mean(sim_5$prediksi_permintaan), "\n")
## Rata-rata permintaan: 70
# b. 20 hari
sim_20 <- permintaan_simulasi(20, tabel_permintaan)
print(head(sim_20, 10))
##    bilangan_acak prediksi_permintaan
## 1             98                  90
## 2             16                  60
## 3             94                  90
## 4             95                  90
## 5              1                  50
## 6             16                  60
## 7             63                  70
## 8             89                  80
## 9             72                  80
## 10            64                  70
cat("Rata-rata permintaan:", mean(sim_20$prediksi_permintaan), "\n")
## Rata-rata permintaan: 72.5
# c. 100 hari
sim_100 <- permintaan_simulasi(100, tabel_permintaan)
print(head(sim_100, 10))
##    bilangan_acak prediksi_permintaan
## 1             68                  70
## 2             58                  70
## 3             38                  70
## 4             53                  70
## 5             84                  80
## 6              9                  50
## 7             20                  60
## 8             29                  60
## 9             52                  70
## 10            46                  70
cat("Rata-rata permintaan:", mean(sim_100$prediksi_permintaan), "\n")
## Rata-rata permintaan: 71.31313
# d. 1000 hari
sim_1000 <- permintaan_simulasi(1000, tabel_permintaan)
print(head(sim_1000, 10))
##    bilangan_acak prediksi_permintaan
## 1             95                  90
## 2             61                  70
## 3             41                  70
## 4             29                  60
## 5             19                  60
## 6             78                  80
## 7             17                  60
## 8             84                  80
## 9             91                  90
## 10            88                  80
cat("Rata-rata permintaan:", mean(sim_1000$prediksi_permintaan), "\n")
## Rata-rata permintaan: 70.12121
perbandingan <- data.frame(
  Metode = c("Ekspektasi Teoritis", "Simulasi 5 hari", "Simulasi 20 hari", "Simulasi 100 hari", "Simulasi 1000 hari"),
  Permintaan_Rata_Rata = c(
    round(nilai_ekspektasi, 2),
    round(mean(sim_5$prediksi_permintaan), 2),
    round(mean(sim_20$prediksi_permintaan), 2),
    round(mean(sim_100$prediksi_permintaan), 2),
    round(mean(sim_1000$prediksi_permintaan), 2)
  )
)

# Tampilkan tabel
print(perbandingan)
##                Metode Permintaan_Rata_Rata
## 1 Ekspektasi Teoritis                70.00
## 2     Simulasi 5 hari                70.00
## 3    Simulasi 20 hari                72.50
## 4   Simulasi 100 hari                71.31
## 5  Simulasi 1000 hari                70.12

NOMOR 2

# Data awal
set.seed(123)
data <- data.frame( 
  permintaan = round(rexp(10,0.01234)),
  frekuensi = ceiling(rnorm(10,10,5))
  )
data
##    permintaan frekuensi
## 1          68         8
## 2          47        17
## 3         108        12
## 4           3        13
## 5           5        11
## 6          26         8
## 7          25        19
## 8          12        13
## 9         221         1
## 10          2        14
# total frekuensi
total_frekuensi <- sum(tabel_permintaan$frekuensi)

# peluang
total_frekuensi <- sum(tabel_permintaan$frekuensi)
tabel_permintaan$probabilitas <- tabel_permintaan$frekuensi / total_frekuensi

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
# Probabilitas kumulatif
tabel_permintaan$probabilitas_kumulatif <- cumsum(tabel_permintaan$probabilitas)
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
# interval dengan +1 untuk lower bound
tabel_permintaan$batas_bawah<- c(1, head(tabel_permintaan$probabilitas_kumulatif, -1) * 100 + 1)
tabel_permintaan$batas_atas <- tabel_permintaan$probabilitas_kumulatif * 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
# ekspektasi Berdasarkan distribusi peluang yang sudah dihitung sebelumnya
nilai_ekspektasi <- sum(tabel_permintaan$permintaan * tabel_permintaan$probabilitas)
cat("Ekspektasi permintaan:", nilai_ekspektasi, "\n")
## Ekspektasi permintaan: 70
permintaan_simulasi <- function(n, tabel_permintaan) {
  # Bilangan acak dari 1 sampai 100 (diskrit sesuai interval)
  bilangan_acak <- sample(1:100, n, replace = TRUE)
  
  # Fungsi bantu untuk menentukan demand berdasarkan interval
  get_demand <- function(x) {
    index <- which(x >= tabel_permintaan$batas_bawah & x <= tabel_permintaan$batas_atas)
    if (length(index) == 0) {
      return(NA)  # atau fallback ke 70 jika mau pakai nilai tengah
    } else {
      return(tabel_permintaan$permintaan[index])
    }
  }
  
  prediksi_permintaan <- sapply(bilangan_acak, get_demand)
  
  # Hapus NA jika ada
  result <- data.frame(
    bilangan_acak = bilangan_acak,
    prediksi_permintaan = prediksi_permintaan
  )
  result <- na.omit(result)
  
  return(result)
}
# a. 5 hari
sim_5 <- permintaan_simulasi(5, tabel_permintaan)
print(head(sim_5, 10))
##   bilangan_acak prediksi_permintaan
## 1            76                  80
## 2            15                  60
## 3            32                  70
## 4             7                  50
## 5             9                  50
cat("Rata-rata permintaan:", mean(sim_5$prediksi_permintaan), "\n")
## Rata-rata permintaan: 62
# b. 20 hari
sim_20 <- permintaan_simulasi(20, tabel_permintaan)
print(head(sim_20, 10))
##    bilangan_acak prediksi_permintaan
## 1             41                  70
## 2             74                  80
## 3             23                  60
## 4             27                  60
## 5             60                  70
## 6             53                  70
## 7              7                  50
## 8             53                  70
## 9             27                  60
## 10            96                  90
cat("Rata-rata permintaan:", mean(sim_20$prediksi_permintaan), "\n")
## Rata-rata permintaan: 71.5
# c. 100 hari
sim_100 <- permintaan_simulasi(100, tabel_permintaan)
print(head(sim_100, 10))
##    bilangan_acak prediksi_permintaan
## 1             97                  90
## 2             91                  90
## 3             25                  60
## 4             38                  70
## 5             21                  60
## 6             79                  80
## 7             41                  70
## 8             47                  70
## 9             90                  80
## 10            60                  70
cat("Rata-rata permintaan:", mean(sim_100$prediksi_permintaan), "\n")
## Rata-rata permintaan: 71.42857
# d. 1000 hari
sim_1000 <- permintaan_simulasi(1000, tabel_permintaan)
print(head(sim_1000, 10))
##    bilangan_acak prediksi_permintaan
## 1              1                  50
## 2             40                  70
## 3             30                  60
## 4             94                  90
## 5             89                  80
## 6             16                  60
## 7             88                  80
## 8             54                  70
## 9             75                  80
## 10            48                  70
cat("Rata-rata permintaan:", mean(sim_1000$prediksi_permintaan), "\n")
## Rata-rata permintaan: 70.17172
perbandingan <- data.frame(
  Metode = c("Ekspektasi Teoritis", "Simulasi 5 hari", "Simulasi 20 hari", "Simulasi 100 hari", "Simulasi 1000 hari"),
  Permintaan_Rata_Rata = c(
    round(nilai_ekspektasi, 2),
    round(mean(sim_5$prediksi_permintaan), 2),
    round(mean(sim_20$prediksi_permintaan), 2),
    round(mean(sim_100$prediksi_permintaan), 2),
    round(mean(sim_1000$prediksi_permintaan), 2)
  )
)

# Tampilkan tabel
print(perbandingan)
##                Metode Permintaan_Rata_Rata
## 1 Ekspektasi Teoritis                70.00
## 2     Simulasi 5 hari                62.00
## 3    Simulasi 20 hari                71.50
## 4   Simulasi 100 hari                71.43
## 5  Simulasi 1000 hari                70.17