Sistem Antrian dengan Server Tunggal (M/M/1)

Notasi M/M/1 (notasi Kendall) berarti: waktu antar kedatangan berdistribusi eksponensial/Markovian (M pertama), waktu layanan juga berdistribusi eksponensial/Markovian (M kedua), dan jumlah server = 1.

Waktu antar kedatangan nasabah adalah variabel random IID (independent identically distributed — mempunyai distribusi yang sama). Nasabah yang datang segera dilayani bila server kosong, dengan waktu layanan (juga IID). Bila server busy, nasabah masuk ke antrian. Sistem antrian bersifat FIFO (first-in first-out) — yang paling depan dilayani terlebih dahulu.

Performansi yang Dihitung

  • Rata-rata delay nasabah , dimana adalah delay nasabah ke-.
  • Rata-rata panjang antrian , dimana adalah selang waktu di mana panjang antrian sama dengan , dan adalah lamanya waktu simulasi sampai nasabah ke-. (Catatan: )
  • Utilisasi server , dimana jika server busy pada saat , dan jika idle.

Ilustrasi Perhitungan

Misalkan jumlah nasabah :

  • Inter-arrival time:
  • Service time:

Dari sini bisa dihitung waktu kedatangan kumulatif tiap nasabah, delay masing-masing (dimulai dari karena nasabah pertama langsung dilayani), rata-rata panjang antrian (dengan menghitung = total waktu antrian berisi tepat nasabah, lalu ), serta utilisasi server dari grafik (total waktu server busy dibagi total waktu simulasi). Pada contoh ini didapat dan .

Diagram Alir Event Kedatangan dan Keberangkatan

Simulasi M/M/1 berbasis event-driven, dieksekusi lewat dua rutin event: Arrival dan Departure.

Alur event kedatangan: jadwalkan kedatangan berikutnya → cek apakah server sedang busy → jika busy: tambah antrian (cek dulu apakah antrian penuh, jika penuh hentikan simulasi dengan pesan error) dan simpan waktu kedatangan nasabah tersebut → jika idle: delay = 0, catat statistik, tambah jumlah nasabah yang sudah dilayani, set server jadi busy, dan jadwalkan event keberangkatan untuk nasabah ini.

Alur event keberangkatan: cek apakah antrian kosong → jika kosong: set server jadi idle → jika tidak kosong: kurangi jumlah antrian, hitung delay nasabah yang mulai dilayani beserta statistiknya, jadwalkan event keberangkatan berikutnya, dan geser posisi tiap nasabah dalam antrian maju satu tempat.

Implementasi Program dalam C

Waktu antar kedatangan dan waktu layanan terdistribusi eksponensial. Untuk membangkitkan bilangan random dengan distribusi ini digunakan inverse transform:

Struktur program C terdiri atas fungsi-fungsi utama:

  • initialize() — inisialisasi simclock, status server (IDLE), jumlah antrian (0), variabel statistik (semua 0), serta jadwal event kedatangan pertama.
  • timing() — menentukan tipe event berikutnya (kedatangan atau keberangkatan) dengan mencari time_next_event[i] yang paling kecil, lalu memajukan simclock.
  • arrive() — memproses event kedatangan: jadwalkan kedatangan berikutnya; jika server busy, tambah antrian (num_in_q) dan cek overflow terhadap Q_LIMIT; jika idle, delay = 0, tambah num_custs_delayed, set server busy, jadwalkan keberangkatan.
  • depart() — memproses event keberangkatan: jika antrian kosong, server jadi idle; jika tidak, kurangi antrian, hitung delay nasabah yang mulai dilayani (simclock - time_arrival[1]), jadwalkan keberangkatan berikutnya, dan geser array time_arrival.
  • update_time_avg_stats() — mengakumulasi area dari num_in_q dan server_status terhadap waktu (untuk menghitung rata-rata panjang antrian & utilisasi di akhir).
  • report() — mencetak rata-rata delay antrian, rata-rata jumlah dalam antrian, utilisasi server, dan waktu akhir simulasi.
  • expon(mean) — membangkitkan variate eksponensial: -mean * log(1 - u) dimana u adalah bilangan random [0,1].
float expon(float mean)
{
  float u;
  u = (float) random()/ (float) INT_MAX;
  return (-mean * log(1-u));
}

Sumber

  • Materi kuliah IF4021 Model dan Simulasi, minggu 3, “Contoh M/M/1” — berbasis Law & Kelton, Simulation Modeling and Analysis.

Flashcard

flashcards Apa yang dimaksud sistem antrian M/M/1, dan apa arti FIFO di dalamnya? :: Sistem antrian server tunggal dengan waktu antar kedatangan dan waktu layanan yang IID; FIFO berarti nasabah yang datang paling awal dilayani terlebih dahulu (first-in first-out). Bagaimana rumus rata-rata panjang antrian q̂(n), dan apa arti T_i di dalamnya? :: q̂(n) = (Σ i·T_i) / T(n), dimana T_i adalah total selang waktu di mana panjang antrian tepat berisi i nasabah, dan T(n) adalah lamanya waktu simulasi sampai nasabah ke-n. Distribusi apa yang dipakai untuk waktu antar kedatangan dan waktu layanan pada implementasi M/M/1 di materi ini, dan bagaimana rumus pembangkitannya? :: Distribusi eksponensial, dibangkitkan dengan inverse transform: X = -mean * ln(1 - U), dimana U adalah bilangan random uniform [0,1]. Pada event kedatangan (arrive), apa yang terjadi jika server dalam keadaan busy vs idle? :: Jika busy: nasabah ditambahkan ke antrian (num_in_q bertambah, dicek terhadap Q_LIMIT untuk overflow) dan waktu kedatangannya disimpan. Jika idle: delay = 0, nasabah langsung dilayani (server jadi busy), dan event keberangkatannya langsung dijadwalkan. Pada event keberangkatan (depart), apa yang dilakukan jika antrian tidak kosong? :: Jumlah antrian dikurangi 1, delay nasabah yang mulai dilayani dihitung (simclock dikurangi waktu kedatangannya), event keberangkatan berikutnya dijadwalkan, dan seluruh nasabah dalam antrian digeser maju satu posisi. Apa fungsi dari update_time_avg_stats() dalam program simulasi M/M/1? :: Mengakumulasi luas area (integral) dari jumlah dalam antrian dan status server terhadap waktu sejak event terakhir, sebagai dasar penghitungan rata-rata panjang antrian dan utilisasi server di akhir simulasi.