set.seed(123)
x_1 <- runif(10000, min = 0, max = 1)
ex2_approx_1 <- mean(x_1^2)
# Menampilkan Hasil
cat("Pendekatan E[X^2] =", ex2_approx_1, "\n")
## Pendekatan E[X^2] = 0.3297405
set.seed(321)
mean_true_2 <- 100
sd_true_2 <- 15
n_values_2 <- c(100, 1000, 10000)
for (n_2 in n_values_2) {
data_2 <- rnorm(n_2, mean = mean_true_2, sd = sd_true_2)
rata2_2 <- mean(data_2)
simpangan_baku_2 <- sd(data_2)
# Menampilkan hasil
cat("\nUntuk n =", n_2, "\n")
cat("Rata-rata:", round(rata2_2, 4), "\n")
cat("Simpangan baku:", round(simpangan_baku_2, 4), "\n")
# Plot histogram
hist(data_2,
main = paste("Histogram untuk n =", n_2),
xlab = "Nilai",
col = "cyan",
border = "black",
breaks = 30)
}
##
## Untuk n = 100
## Rata-rata: 100.136
## Simpangan baku: 14.3365
##
## Untuk n = 1000
## Rata-rata: 100.6492
## Simpangan baku: 14.9364
##
## Untuk n = 10000
## Rata-rata: 99.9522
## Simpangan baku: 14.9591
Berdasarkan hasil tersebut dapat disimpulkan bahwa, semakin besar nilai n maka:
Rata-rata hasil simulasi semakin mendekati nilai teoretis (100)
Simpangan baku juga semakin mendekati 15
Histogram semakin halus dan menyerupai kurva normal
set.seed(111)
x_3 <- rbinom(5000, size = 30, prob = 0.25)
estimasi_prob_3 <- mean(x_3 >= 15)
# Menampilkan hasil
cat("Estimasi P(X >= 15) =", estimasi_prob_3, "\n")
## Estimasi P(X >= 15) = 0.0026
# Membuat fungsi rumus
hitung_s_4 <- function(x) {
n_4 <- length(x)
sum_x_4 <- sum(x)
sum_x2_4 <- sum(x^2)
s_4 <- sqrt((sum_x2_4 - (sum_x_4^2) / n_4) / (n_4 - 1))
return(s_4)
}
set.seed(222)
data_4 <- rnorm(1000, mean = 89, sd = 10)
s_hasil_4 <- hitung_s_4(data_4)
cat("Nilai s =", round(s_hasil_4, 4), "\n")
## Nilai s = 9.9325
library(ggplot2)
set.seed(333)
lambda <- 5/60
mu <- 1/8
jam_kerja <- 360
n_hari <- 20
sim_bank <- function(n_teller) {
total_tunggu <- 0
total_nasabah <- 0
total_sibuk <- 0
antrian_harian <- matrix(0, n_hari, 6)
for(hari in 1:n_hari) {
n <- rpois(1, lambda * jam_kerja)
kedatangan <- sort(runif(n, 0, jam_kerja))
pelayanan <- rexp(n, mu)
teller_selesai <- rep(0, n_teller)
tunggu <- numeric(n)
for(i in 1:n) {
teller_idx <- which.min(teller_selesai)
mulai <- max(kedatangan[i], teller_selesai[teller_idx])
tunggu[i] <- mulai - kedatangan[i]
teller_selesai[teller_idx] <- mulai + pelayanan[i]
}
total_tunggu <- total_tunggu + sum(tunggu)
total_nasabah <- total_nasabah + n
total_sibuk <- total_sibuk + sum(pmin(teller_selesai, jam_kerja))
for(jam in 1:6) {
start_t <- (jam-1) * 60
end_t <- jam * 60
dalam_jam <- kedatangan >= start_t & kedatangan < end_t
if(sum(dalam_jam) > 0) {
antrian_harian[hari, jam] <- mean(tunggu[dalam_jam] > 0)
}
}
}
list(
rata_tunggu = total_tunggu / total_nasabah,
utilisasi = total_sibuk / (n_teller * jam_kerja * n_hari),
antrian_jam = colMeans(antrian_harian)
)
}
hasil_2 <- sim_bank(2)
cat("Simulasi 20 hari dengan 2 teller selesai\n")
## Simulasi 20 hari dengan 2 teller selesai
cat("Total nasabah dilayani rata-rata:", round(rpois(1, lambda * jam_kerja)), "orang/hari\n")
## Total nasabah dilayani rata-rata: 32 orang/hari
cat("Utilisasi teller:", round(hasil_2$utilisasi * 100, 1), "%\n")
## Utilisasi teller: 96.5 %
set.seed(777)
hasil_3 <- sim_bank(3)
perbandingan <- data.frame(
Metrik = c("Waktu tunggu (menit)", "Utilisasi (%)", "Efisiensi"),
Teller_2 = c(round(hasil_2$rata_tunggu, 2),
round(hasil_2$utilisasi * 100, 1),
round(hasil_2$rata_tunggu / hasil_2$utilisasi, 2)),
Teller_3 = c(round(hasil_3$rata_tunggu, 2),
round(hasil_3$utilisasi * 100, 1),
round(hasil_3$rata_tunggu / hasil_3$utilisasi, 2))
)
print(perbandingan)
## Metrik Teller_2 Teller_3
## 1 Waktu tunggu (menit) 0.67 0.11
## 2 Utilisasi (%) 96.50 95.10
## 3 Efisiensi 0.69 0.11
penurunan <- (hasil_2$rata_tunggu - hasil_3$rata_tunggu) / hasil_2$rata_tunggu * 100
cat("\nPenurunan waktu tunggu:", round(penurunan, 1), "%\n")
##
## Penurunan waktu tunggu: 84 %
cat("Kesimpulan:", ifelse(penurunan > 25, "EFISIEN - tambah teller", "KURANG EFISIEN"))
## Kesimpulan: EFISIEN - tambah teller
jam_data <- data.frame(
Jam = 1:6,
Teller_2 = hasil_2$antrian_jam,
Teller_3 = hasil_3$antrian_jam
)
library(reshape2)
## Warning: package 'reshape2' was built under R version 4.4.3
jam_long <- melt(jam_data, id.vars = "Jam", variable.name = "Skenario", value.name = "Panjang")
ggplot(jam_long, aes(x = Jam, y = Panjang, fill = Skenario)) +
geom_bar(stat = "identity", position = "dodge", alpha = 0.7) +
labs(title = "Rata-rata Panjang Antrian per Jam",
x = "Jam ke-", y = "Proporsi Waktu Ada Antrian") +
theme_minimal() +
scale_x_continuous(breaks = 1:6)
set.seed(444)
simulasi_stok <- function(hari = 60, stok_awal = 100, frekuensi_pesan = 5, jumlah_pesan = 50) {
stok <- numeric(hari)
stok[1] <- stok_awal
lost_sales <- numeric(hari)
for (i in 2:hari) {
penjualan <- round(runif(1, min = 8, max = 15))
# Kurangi stok
if (stok[i - 1] >= penjualan) {
stok[i] <- stok[i - 1] - penjualan
} else {
lost_sales[i] <- penjualan - stok[i - 1]
stok[i] <- 0
}
# Tambah stok bila hari pemesanan
if ((i %% frekuensi_pesan) == 0) {
stok[i] <- stok[i] + jumlah_pesan
}
}
return(data.frame(hari = 1:hari, stok = stok, lost_sales = lost_sales))
}
sim_6 <- simulasi_stok()
head(sim_6)
## hari stok lost_sales
## 1 1 100 0
## 2 2 91 0
## 3 3 82 0
## 4 4 71 0
## 5 5 110 0
## 6 6 102 0
jumlah_kehabisan <- sum(sim_6$lost_sales > 0)
kerugian <- sum(sim_6$lost_sales) * 50000
cat("Toko kehabisan stok setiap", jumlah_kehabisan, "hari.\n")
## Toko kehabisan stok setiap 1 hari.
cat("Total kerugian: Rp", kerugian, "\n")
## Total kerugian: Rp 50000
strategi <- c(40, 50, 60)
for (jumlah in strategi) {
sim_6 <- simulasi_stok(jumlah_pesan = jumlah)
rugi <- sum(sim_6$lost_sales) * 50000
cat("Pesan", jumlah, "karung → Kerugian: Rp", rugi, "\n")
}
## Pesan 40 karung → Kerugian: Rp 6150000
## Pesan 50 karung → Kerugian: Rp 2600000
## Pesan 60 karung → Kerugian: Rp 0
frekuensi <- c(3, 5, 7)
for (freq in frekuensi) {
sim_6 <- simulasi_stok(frekuensi_pesan = freq)
rugi <- sum(sim_6$lost_sales) * 50000
cat("Pesan setiap", freq, "hari → Kerugian: Rp", rugi, "\n")
}
## Pesan setiap 3 hari → Kerugian: Rp 0
## Pesan setiap 5 hari → Kerugian: Rp 850000
## Pesan setiap 7 hari → Kerugian: Rp 9350000
library(ggplot2)
sim_6 <- simulasi_stok()
ggplot(sim_6, aes(x = hari, y = stok)) +
geom_line(color = "forestgreen") +
geom_point(aes(y = lost_sales * 5), color = "red", size = 1.5) +
labs(title = "Grafik Pergerakan Stok Beras Bu Sari",
y = "Jumlah Karung (stok)",
x = "Hari") +
theme_minimal()