nomer 1
set.seed(123)
x <- runif(10000)
E_X2 <- mean(x^2)
E_X2
## [1] 0.3297405
nome 2
set.seed(123)
n1 <- rnorm(100, mean = 100, sd = 15)
n2 <- rnorm(1000, mean = 100, sd = 15)
n3 <- rnorm(10000, mean = 100, sd = 15)
hist(n1, main="Histogram n=100", xlab="Value")

hist(n2, main="Histogram n=1000", xlab="Value")

hist(n3, main="Histogram n=10000", xlab="Value")

mean(n1); sd(n1)
## [1] 101.3561
## [1] 13.69224
mean(n2); sd(n2)
## [1] 100.2862
## [1] 15.06891
mean(n3); sd(n3)
## [1] 99.96336
## [1] 14.98314
nomer 3
set.seed(123)
sim <- rbinom(5000, size = 30, prob = 0.25)
mean(sim >= 15)
## [1] 0.0024
nomer 4
s_custom <- function(x) {
n <- length(x)
sqrt((sum(x^2) - (sum(x)^2)/n) / (n - 1))
}
set.seed(123)
data <- rnorm(1000, mean = 89, sd = 10)
s_custom(data)
## [1] 9.91695
nomer 5
library(simmer)
library(simmer.plot)
## Loading required package: ggplot2
##
## Attaching package: 'simmer.plot'
## The following objects are masked from 'package:simmer':
##
## get_mon_arrivals, get_mon_attributes, get_mon_resources
library(dplyr)
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:simmer':
##
## select
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
bank_simulation <- function(teller_count = 2, days = 20) {
env <- simmer("Bank")
lambda <- 5 / 60 # 5 nasabah per jam → per menit
mu <- 1 / 8 # rata-rata pelayanan 8 menit
customer <- trajectory("Nasabah") %>%
seize("teller", 1) %>%
timeout(function() rexp(1, rate = mu)) %>%
release("teller", 1)
env %>%
add_resource("teller", teller_count) %>%
add_generator("nasabah", customer, function() rexp(1, rate = lambda), mon = TRUE) %>%
run(until = 360 * days)
return(env)
}
sim <- bank_simulation(teller_count = 2, days = 20)
5b
arrivals <- get_mon_arrivals(sim)
arrivals$waiting_time <- (arrivals$end_time - arrivals$start_time) - arrivals$activity_time
mean(arrivals$waiting_time)
## [1] 1.175034
5c
sim_2 <- bank_simulation(teller_count = 2)
resources <- get_mon_resources(sim_2)
total_time <- max(resources$time)
busy_time <- resources %>%
filter(resource == "teller") %>%
group_by(resource) %>%
summarize(total_busy = sum(server))
busy_time$utilization <- busy_time$total_busy / (2 * total_time)
busy_time
## # A tibble: 1 × 3
## resource total_busy utilization
## <chr> <int> <dbl>
## 1 teller 1210 0.0840
5d
sim_3 <- bank_simulation(teller_count = 3)
arrivals_3 <- get_mon_arrivals(sim_3)
arrivals_3$waiting_time <- (arrivals_3$end_time - arrivals_3$start_time) - arrivals_3$activity_time
mean(arrivals_3$waiting_time)
## [1] 0.1823506
5e
sim_harian <- bank_simulation(teller_count = 2, days = 1)
resources <- get_mon_resources(sim_harian)
antrian_df <- resources %>%
filter(resource == "teller") %>%
select(time, queue)
ggplot(antrian_df, aes(x = time, y = queue)) +
geom_line(color = "steelblue", linewidth = 1) +
labs(
title = "Panjang Antrian Nasabah Sepanjang Hari (2 Teller)",
x = "Waktu (menit)",
y = "Jumlah Nasabah dalam Antrian"
) +
theme_minimal()

### 6
simulasi_stok <- function(jumlah_pesan = 50, hari = 60, stok_awal = 100, frekuensi_pesan = 5) {
penjualan <- round(runif(hari, min = 8, max = 15))
stok <- numeric(hari)
kehabisan <- numeric(hari)
rugi <- numeric(hari)
stok[1] <- stok_awal - penjualan[1]
for (i in 2:hari) {
if (i %% frekuensi_pesan == 1) {
stok[i - 1] <- stok[i - 1] + jumlah_pesan
}
sisa <- stok[i - 1] - penjualan[i]
if (sisa < 0) {
stok[i] <- 0
kehabisan[i] <- 1
rugi[i] <- abs(sisa) * 50000
} else {
stok[i] <- sisa
}
}
return(data.frame(
Hari = 1:hari,
Penjualan = penjualan,
Stok_Tersisa = stok,
Kehabisan = kehabisan,
Kerugian = rugi
))
}
set.seed(123)
df_stok <- simulasi_stok()
6b
sum(df_stok$Kehabisan)
## [1] 9
6c
hasil_40 <- simulasi_stok(jumlah_pesan = 40)
hasil_50 <- simulasi_stok(jumlah_pesan = 50)
hasil_60 <- simulasi_stok(jumlah_pesan = 60)
strategi_jumlah <- data.frame(
Jumlah_Pesan = c(40, 50, 60),
Kehabisan = c(sum(hasil_40$Kehabisan), sum(hasil_50$Kehabisan), sum(hasil_60$Kehabisan)),
Total_Rugi = c(sum(hasil_40$Kerugian), sum(hasil_50$Kerugian), sum(hasil_60$Kerugian))
)
strategi_jumlah
## Jumlah_Pesan Kehabisan Total_Rugi
## 1 40 18 7900000
## 2 50 5 1850000
## 3 60 0 0
6d
df_3 <- simulasi_stok(frekuensi_pesan = 3)
df_5 <- simulasi_stok(frekuensi_pesan = 5)
df_7 <- simulasi_stok(frekuensi_pesan = 7)
strategi_frekuensi <- data.frame(
Frekuensi = c(3, 5, 7),
Kehabisan = c(sum(df_3$Kehabisan), sum(df_5$Kehabisan), sum(df_7$Kehabisan)),
Total_Rugi = c(sum(df_3$Kerugian), sum(df_5$Kerugian), sum(df_7$Kerugian))
)
strategi_frekuensi
## Frekuensi Kehabisan Total_Rugi
## 1 3 0 0
## 2 5 5 1950000
## 3 7 19 9050000
6e
df_3$strategi <- "Setiap 3 Hari"
df_5$strategi <- "Setiap 5 Hari"
df_7$strategi <- "Setiap 7 Hari"
df_all <- rbind(df_3, df_5, df_7)
# Plot
ggplot(df_all, aes(x = Hari, y = Stok_Tersisa, color = strategi)) +
geom_line(linewidth = 1) +
labs(
title = "Pergerakan Stok Beras Bu Sari Selama 60 Hari",
x = "Hari ke-",
y = "Sisa Stok (karung)",
color = "Strategi Pemesanan"
) +
theme_minimal()
