Simulasi Komputer
| Nama | Agung Wijaya Putra Zein |
| Kelas | 3C |
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('Agg')
np.random.seed(42)
JUMLAH_PELANGGAN = 100
RATA_RATA_PELAYANAN = 10 # menit
waktu_pelayanan = np.random.exponential(scale=RATA_RATA_PELAYANAN,
size=JUMLAH_PELANGGAN)
rata_rata = np.mean(waktu_pelayanan)
median = np.median(waktu_pelayanan)
std_dev = np.std(waktu_pelayanan)
minimum = np.min(waktu_pelayanan)
maksimum = np.max(waktu_pelayanan)
total_waktu = np.sum(waktu_pelayanan)
print("=" * 55)
print(" SIMULASI DISTRIBUSI WAKTU PELAYANAN PELANGGAN")
print("=" * 55)
print(f" Jumlah pelanggan : {JUMLAH_PELANGGAN}")
print(f" Rata-rata (parameter) : {RATA_RATA_PELAYANAN} menit")
print("-" * 55)
print(f" Rata-rata simulasi : {rata_rata:.2f} menit")
print(f" Median : {median:.2f} menit")
print(f" Standar deviasi : {std_dev:.2f} menit")
print(f" Minimum : {minimum:.2f} menit")
print(f" Maksimum : {maksimum:.2f} menit")
print(f" Total waktu pelayanan : {total_waktu:.2f} menit")
print("=" * 55)
print("\n 10 Pelanggan Pertama:")
print(" " + "-" * 35)
print(f" {'No.':<6}{'Waktu Pelayanan (menit)'}")
print(" " + "-" * 35)
for i in range(10):
print(f" {i+1:<6}{waktu_pelayanan[i]:.2f}")
print(" " + "-" * 35)
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
ax1 = axes[0]
bins = np.linspace(0, max(waktu_pelayanan) + 5, 20)
ax1.hist(waktu_pelayanan, bins=bins, density=True, alpha=0.7,
color='#4C72B0', edgecolor='white', label='Hasil Simulasi')
x = np.linspace(0, max(waktu_pelayanan) + 5, 300)
pdf_teoritis = (1 / RATA_RATA_PELAYANAN) * np.exp(-x / RATA_RATA_PELAYANAN)
ax1.plot(x, pdf_teoritis, 'r-', linewidth=2.5, label='PDF Teoritis (Eksponensial)')
ax1.axvline(rata_rata, color='#DD8452', linestyle='--', linewidth=2,
label=f'Rata-rata = {rata_rata:.2f} menit')
ax1.axvline(median, color='#55A868', linestyle=':', linewidth=2,
label=f'Median = {median:.2f} menit')
ax1.set_xlabel('Waktu Pelayanan (menit)', fontsize=12)
ax1.set_ylabel('Densitas', fontsize=12)
ax1.set_title('Distribusi Waktu Pelayanan\n(Histogram + PDF Teoritis)', fontsize=13, fontweight='bold')
ax1.legend(fontsize=9, loc='upper right')
ax1.grid(axis='y', alpha=0.3)
ax2 = axes[1]
sorted_waktu = np.sort(waktu_pelayanan)
cdf_empiris = np.arange(1, JUMLAH_PELANGGAN + 1) / JUMLAH_PELANGGAN
ax2.step(sorted_waktu, cdf_empiris, where='post', color='#4C72B0',
linewidth=2, label='CDF Empiris')
cdf_teoritis = 1 - np.exp(-x / RATA_RATA_PELAYANAN)
ax2.plot(x, cdf_teoritis, 'r-', linewidth=2, label='CDF Teoritis')
ax2.axhline(0.5, color='gray', linestyle=':', alpha=0.5)
ax2.axvline(median, color='#55A868', linestyle=':', linewidth=1.5,
label=f'Median = {median:.2f} menit')
ax2.set_xlabel('Waktu Pelayanan (menit)', fontsize=12)
ax2.set_ylabel('Probabilitas Kumulatif', fontsize=12)
ax2.set_title('Fungsi Distribusi Kumulatif (CDF)', fontsize=13, fontweight='bold')
ax2.legend(fontsize=9, loc='lower right')
ax2.grid(alpha=0.3)
plt.tight_layout()
plt.savefig('distribusi_waktu_pelayanan.png', dpi=150, bbox_inches='tight')
print(f"\n Grafik disimpan: distribusi_waktu_pelayanan.png")
print("=" * 55)
Gambar 1. Histogram waktu pelayanan 100 pelanggan dengan kurva PDF eksponensial teoritis. Garis oranye = rata-rata, garis hijau = median.
Gambar 2. CDF empiris (tangga biru) vs CDF teoritis (garis merah).
Gambar 3. Box plot sebaran waktu pelayanan.
Rata-rata simulasi (9.15 menit) berbeda 0.85 menit dari parameter teoritis (10 menit). Perbedaan ini masuk dalam rentang variasi sampling yang wajar untuk n = 100.
Standar deviasi (9.15 menit) hampir sama dengan rata-rata (9.15 menit), konsisten dengan sifat distribusi eksponensial di mana σ = μ.
CDF empiris pada Gambar 2 berhimpit dengan CDF teoritis, mengkonfirmasi bahwa data simulasi mengikuti distribusi eksponensial.
Histogram menunjukkan distribusi menceng kanan (right-skewed): sebagian besar pelanggan dilayani dalam waktu singkat, sementara sebagian kecil membutuhkan waktu jauh lebih lama (hingga 43.34 menit).
Median (6.24 menit) lebih kecil dari rata-rata (9.15 menit). Artinya lebih dari separuh pelanggan selesai dilayani dalam waktu kurang dari 6.24 menit, tetapi pelanggan dengan waktu pelayanan panjang menarik rata-rata ke atas.
| Temuan | Konsekuensi |
|---|---|
| Mayoritas pelanggan selesai kurang dari 7 menit | Satu loket memadai untuk kasus umum |
| Sebagian kecil pelanggan di atas 30 menit | Kasus kompleks menghambat antrian, perlu loket terpisah atau eskalasi |
| Total waktu 915 menit (15.2 jam) untuk 100 pelanggan | Satu loket (8 jam/hari) membutuhkan sekitar 1.9 hari kerja |
| Variabilitas tinggi (σ mendekati μ) | Waktu tunggu individual sulit diprediksi |