LATIHAN 1 – Distribusi Permintaan 🔹 Langkah 1: Membuat Data Permintaan dan Frekuensi
# Data permintaan dan frekuensi selama 100 hari
permintaan <- c(50, 60, 70, 80, 90)
frekuensi <- c(10, 20, 40, 20, 10)
📌 Deskripsi: Kita mendefinisikan data historis permintaan dan frekuensinya selama 100 hari: Nilai permintaan mewakili jumlah unit barang yang diminta (misal: per hari). Nilai frekuensi menunjukkan berapa kali masing-masing tingkat permintaan tersebut terjadi dalam 100 hari.
🔹 Langkah 2: Menghitung Probabilitas dan Probabilitas Kumulatif
# Hitung probabilitas dan probabilitas kumulatif
prob <- frekuensi / sum(frekuensi)
cum_prob <- cumsum(prob)
📌 Deskripsi: prob adalah probabilitas empiris, dihitung dari frekuensi setiap permintaan dibagi total keseluruhan frekuensi (yaitu 100). cum_prob (probabilitas kumulatif) digunakan untuk memetakan bilangan acak ke nilai permintaan yang sesuai dalam simulasi Monte Carlo.
🔹 Langkah 3: Membuat Fungsi Simulasi Permintaan Harian
# Fungsi simulasi permintaan harian
simulasi_permintaan <- function(n_simulasi) {
set.seed(123)
hasil <- numeric(n_simulasi)
for (i in 1:n_simulasi) {
u <- runif(1)
hasil[i] <- permintaan[which(u <= cum_prob)[1]]
}
return(hasil)
}
📌 Deskripsi: Fungsi ini mensimulasikan permintaan barang selama n_simulasi hari. Digunakan bilangan acak uniform antara 0 dan 1 untuk menentukan hasil permintaan per hari. Bilangan acak dipetakan ke rentang cum_prob untuk memilih nilai permintaan yang sesuai.
🔹 Langkah 4: Fungsi Ringkasan Hasil Simulasi
# Fungsi ringkasan hasil simulasi
ringkasan_simulasi <- function(jumlah_hari) {
hasil <- simulasi_permintaan(jumlah_hari)
total <- sum(hasil)
rata2 <- mean(hasil)
cat(sprintf("Prediksi total permintaan untuk %d hari ke depan: %d\n", jumlah_hari, total))
cat(sprintf("Prediksi rata-rata permintaan: %.2f\n", rata2), "\n")
}
📌 Deskripsi: Fungsi ini memberikan ringkasan statistik dari hasil simulasi: total dan rata-rata permintaan dalam jumlah_hari ke depan. Digunakan cat() dan sprintf() agar hasil tampak rapi dan terformat.
🔹 Langkah 5: Menjalankan Simulasi untuk Berbagai Periode
# a. Prediksi untuk 5 hari
ringkasan_simulasi(5)
## Prediksi total permintaan untuk 5 hari ke depan: 380
## Prediksi rata-rata permintaan: 76.00
##
# b. Prediksi untuk 20 hari
ringkasan_simulasi(20)
## Prediksi total permintaan untuk 20 hari ke depan: 1430
## Prediksi rata-rata permintaan: 71.50
##
# c. Prediksi untuk 100 hari
ringkasan_simulasi(100)
## Prediksi total permintaan untuk 100 hari ke depan: 6990
## Prediksi rata-rata permintaan: 69.90
##
# d. Prediksi untuk 1000 hari
ringkasan_simulasi(1000)
## Prediksi total permintaan untuk 1000 hari ke depan: 69920
## Prediksi rata-rata permintaan: 69.92
##
hist(simulasi_permintaan(1000),
main = "Distribusi Permintaan Hasil Simulasi (1000 Hari)",
xlab = "Permintaan",
col = "skyblue",
breaks = 5)
LATIHAN 2 – Simulasi Permintaan dengan Distribusi Acak (Eksponensial & Normal) 🔹 Langkah 1: Membuat Data Permintaan dan Frekuensi
set.seed(123)
# Membuat data permintaan (eksponensial) dan frekuensi (normal)
data_simulasi <- data.frame(
permintaan = round(rexp(10, rate = 0.01234)), # Distribusi eksponensial
frekuensi = ceiling(rnorm(10, mean = 10, sd = 5)) # Distribusi normal
)
print(data_simulasi)
## 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
📌 Deskripsi: Kita membuat data acak: permintaan dibangkitkan dari distribusi eksponensial, yang umum untuk model waktu kedatangan atau keperluan logistik. frekuensi dibangkitkan dari distribusi normal, lalu dibulatkan ke atas agar menjadi bilangan bulat positif. Ini menciptakan data simulasi yang realistis dan variatif.
🔹 Langkah 2: Menghitung Probabilitas dan Probabilitas Kumulatif
# Probabilitas
total_frekuensi <- sum(data_simulasi$frekuensi)
data_simulasi$probabilitas <- round(data_simulasi$frekuensi / total_frekuensi, 2)
# Probabilitas kumulatif
data_simulasi$prob_kumulatif <- cumsum(data_simulasi$probabilitas)
print(data_simulasi)
## permintaan frekuensi probabilitas prob_kumulatif
## 1 68 8 0.07 0.07
## 2 47 17 0.15 0.22
## 3 108 12 0.10 0.32
## 4 3 13 0.11 0.43
## 5 5 11 0.09 0.52
## 6 26 8 0.07 0.59
## 7 25 19 0.16 0.75
## 8 12 13 0.11 0.86
## 9 221 1 0.01 0.87
## 10 2 14 0.12 0.99
🔹📌 Deskripsi: Probabilitas dihitung berdasarkan frekuensi relatif. Probabilitas kumulatif digunakan untuk memetakan bilangan acak ke kategori permintaan selama simulasi. round(…, 2) digunakan untuk membulatkan ke dua desimal agar lebih rapi.
🔹 Langkah 3: Menghitung Nilai Ekspektasi Permintaan
# Ekspektasi nilai permintaan
nilai_ekspektasi <- round(sum(data_simulasi$permintaan * data_simulasi$probabilitas), 2)
cat("Nilai ekspektasi permintaan:", nilai_ekspektasi, "\n")
## Nilai ekspektasi permintaan: 32.98
📌 Deskripsi: Menghitung ekspektasi teoretis dari permintaan berdasarkan distribusi probabilitas yang telah dibuat. Ini menjadi dasar untuk membandingkan hasil simulasi nanti.
🔹 Langkah 4: Membuat Fungsi Simulasi Permintaan
simulasi_permintaan <- function(jumlah_hari, nilai_permintaan, prob_kumulatif) {
set.seed(123)
hasil_simulasi <- data.frame(
hari_ke = 1:jumlah_hari,
bilangan_acak = round(runif(jumlah_hari), 2),
permintaan_simulasi = 0
)
for (i in 1:jumlah_hari) {
for (j in 1:length(prob_kumulatif)) {
if (hasil_simulasi$bilangan_acak[i] <= prob_kumulatif[j]) {
hasil_simulasi$permintaan_simulasi[i] <- nilai_permintaan[j]
break
}
}
}
rata_rata <- mean(hasil_simulasi$permintaan_simulasi)
return(list(data = hasil_simulasi, rata_rata = rata_rata))
}
📌 Deskripsi: Fungsi ini mensimulasikan permintaan untuk sejumlah hari dengan metode Monte Carlo. Setiap bilangan acak dipetakan ke nilai permintaan berdasarkan probabilitas kumulatif. Hasil disimpan dalam data.frame, dan juga dikembalikan rata-ratanya.
🔹 Langkah 5: (Opsional) Fungsi Ringkasan Simulasi
# Fungsi ringkasan hasil simulasi
ringkasan_simulasi_2 <- function(hari) {
hasil <- simulasi_2(hari, data_2$permintaan_2, data_2$probcum_2)
print(hasil$data)
cat(sprintf("Rata-rata permintaan untuk %d hari ke depan: %.2f\n\n", hari, hasil$rata_rata))
}
📌 Deskripsi: Fungsi ini belum digunakan di bawah dan tampaknya tidak sinkron dengan nama fungsi utama (simulasi_permintaan) dan variabel (data_simulasi). Kamu bisa abaikan ini atau ubah agar konsisten jika ingin memakainya.
🔹 Langkah 6: Menjalankan Simulasi untuk Berbagai Jangka Waktu
hasil_5hari <- simulasi_permintaan(5, data_simulasi$permintaan, data_simulasi$prob_kumulatif)
print(hasil_5hari$data)
## hari_ke bilangan_acak permintaan_simulasi
## 1 1 0.29 108
## 2 2 0.79 12
## 3 3 0.41 3
## 4 4 0.88 2
## 5 5 0.94 2
cat("Rata-rata permintaan (5 hari):", hasil_5hari$rata_rata, "\n")
## Rata-rata permintaan (5 hari): 25.4
hasil_20hari <- simulasi_permintaan(20, data_simulasi$permintaan, data_simulasi$prob_kumulatif)
print(head(hasil_20hari$data, 10)) # Hanya tampilkan 10 data pertama
## hari_ke bilangan_acak permintaan_simulasi
## 1 1 0.29 108
## 2 2 0.79 12
## 3 3 0.41 3
## 4 4 0.88 2
## 5 5 0.94 2
## 6 6 0.05 68
## 7 7 0.53 26
## 8 8 0.89 2
## 9 9 0.55 26
## 10 10 0.46 5
cat("Rata-rata permintaan (20 hari):", hasil_20hari$rata_rata, "\n")
## Rata-rata permintaan (20 hari): 27.1
hasil_100hari <- simulasi_permintaan(100, data_simulasi$permintaan, data_simulasi$prob_kumulatif)
print(head(hasil_100hari$data, 10)) # Hanya tampilkan 10 data pertama
## hari_ke bilangan_acak permintaan_simulasi
## 1 1 0.29 108
## 2 2 0.79 12
## 3 3 0.41 3
## 4 4 0.88 2
## 5 5 0.94 2
## 6 6 0.05 68
## 7 7 0.53 26
## 8 8 0.89 2
## 9 9 0.55 26
## 10 10 0.46 5
cat("Rata-rata permintaan (100 hari):", hasil_100hari$rata_rata, "\n")
## Rata-rata permintaan (100 hari): 29.96
hasil_1000hari <- simulasi_permintaan(1000, data_simulasi$permintaan, data_simulasi$prob_kumulatif)
print(head(hasil_1000hari$data, 10)) # Hanya tampilkan 10 data pertama
## hari_ke bilangan_acak permintaan_simulasi
## 1 1 0.29 108
## 2 2 0.79 12
## 3 3 0.41 3
## 4 4 0.88 2
## 5 5 0.94 2
## 6 6 0.05 68
## 7 7 0.53 26
## 8 8 0.89 2
## 9 9 0.55 26
## 10 10 0.46 5
cat("Rata-rata permintaan (1000 hari):", hasil_1000hari$rata_rata, "\n")
## Rata-rata permintaan (1000 hari): 34.072