Simulasi Discrete-Event Catatan diambil dari “Simulation Modeling and Analysis” by A. Law and W. Kelton, Third edition, McGraw Hill, 2000.
Tujuan Mempelajari dasar simulasi discrete-event Fokus pada simple single-server service center. Contoh: Pasar swalayan: pembeli, kasir Bandara: landasan, pesawat Server Pelanggan antri Pelanggan datang pergi Pelanggan sedang dilayani
Apa yang dimaksud dengan Simulasi Discrete-Event (DES)? Pemodelan sistem dalam perubahannya terhadap waktu dengan representasi perubahan variabel status secara instan pada titik waktu waktu yang terpisah. Lebih tepat lagi, status hanya dapat berubah pada sejumlah titik waktu yang dapat dihitung. Titik-titik waktu ini adalah saat ketika events terjadi. Apa yang dimaksud dengan event? Kejadian secara instan yang dapat merubah status sistem. Kedatangan pelanggan Selesainya pelayanan (dan kepergian) pelanggan Akhir simulasi ( event “palsu”)
Single-Server Service Center Pelanggan antri Kedatangan pelanggan Kepergian Pelanggan dilayani Pengukuran kinerja yang diperlukan: Waktu tunggu pelanggan rata-rata Jumlah pelanggan antri rata-rata Utilisasi server rata-rata Bagaimana kita mensimulasi sistem ini dan melakukan pengukuran? Harus mensimulasi “waktu” …
Mekanisme Time Advance Simulation clock: variabel yang menyimpan nilai waktu terkini (simulasi) pada model Satuan waktu harus ditentukan, dan harus konsisten. Biasanya tidak ada hubungan antara waktu simulasi dan waktu (riil) yang diperlukan untuk menjalankan model pada komputer. Dua pendekatan untuk time advance Fixed-increment time advance Next-event time advance
Fixed-Increment Time Advance 3Δt 2Δt 4Δt 5Δt 6Δt e0 e1 e2 Event terjadi pada inkremen yang tetap. Event yang terjadi antara inkremen waktu harus dipindah ke batas inkremen. Sederhana untuk diimplementasikan, tetapi bukan merupakan realisasi yang akurat dari terjadinya event.
Next-event Time Advance Inisialisai simulation clock menjadi 0 Tentukan waktu terjadinya event – event list Clock maju ke event berikutnya (yang paling dekat). Selanjutnya dilakukan eksekusi Eksekusi event bisa melibatkan update event list Terus berlanjut sampai aturan penghentian terpenuhi (harus ditentukan secara eksplisit) Clock “lompat” dari waktu satu event ke waktu event berikutnya, dan tidak “ada” untuk waktu di antara event yang berturutan … periode tidak aktif diabaikan
Next-event time-Advance (lanjutan) Pelajari contoh single-server service center berikut ini ti = waktu kedatangan pelanggan ke-i (t0 = 0) Ai = ti – ti-1 = waktu antara kedatangan pelanggan ke (i-1) dan ke-i Si = waktu untuk melayani pelanggan ke-i Di = delay di antrian yang dialami oleh pelanggan ke-i Ci = ti + Di + Si = waktu pelanggan ke-i selesai dilayani, kemudian pergi
Cara penulisan program next-event Tentukan event dan pahami apa yang terjadi ketika event tersebut berlangsung Buat event dan event list yang urut waktu Berdasarkan list yang urut, kita harus menjadwalkan event Catat informasi yang diperlukan selama simulasi berlangsung Akhirnya, buat report ketika simulasi selesai
Komponen Program DES Simulation clock – nilai terkini dari waktu simulasi. Status sistem – variabel untuk mendeskripsikan status Status server, jumlah pada antrian, waktu kedatangan, dst. Event list – waktu untuk setiap jenis event Pencacah Statistik – untuk akumulasi pengukuran kinerja Waktu tunggu di antrian, utilisasi server, …
Komponen Program DES (lanjutan) Rutin inisialisasi Mulai simulasi pada waktu 0 Rutin Timing Menentukan waktu dan jenis event berikutnya; memajukan clock Rutin event Melaksanakan logika setiap jenis event Rutin Library Rutin utility untuk membangkitkan random variates, dll. Report generator Program utama Menggabungkan semua rutin, dan menjalankannya dengan urutan yang benar
Organisasi Program DES Start Rutin Utama Rutin Event Simulasi selesai? Report Generator Inisialisasi Timing Library Ya Tidak Stop
Alur Program DES Start Rutin Inisialisasi Rutin Utama 1. Set clock = 0 2. Inisialisasi status & pencacah 3. Inisialisasi event list 4. Kembali ke program utama
Alur Program DES Rutin timing Rutin utama 1. Tentukan jenis event berikutnya, i 2. Majukan simulation clock 3. Kembali ke program utama
Alur Program DES Rutin utama Library Routine Event routine i 1. update system state 2. update counters 3. generate future events & add them to the event list
Alur Program DES timing Rutin utama Rutin event Tidak Simulasi selesai? timing Tidak Kembali ke program utama; Invoke timing routine
Simulasi manual untuk Single Server Service Center Waktu antar kedatangan (semua waktu dalam satuan menit): 0.4, 1.2, 0.5, 1.7, 0.2, 1.6, 0.2, 1.4, 1.9, … Waktu layanan: 2.0, 0.7, 0.2, 1.1, 3.7, 0.6, … Diinginkan n = 6 delay pada antrian Simulasi “Manual”: Tampilkan variabel sistem dan status, clock, event list, pencacah statistik … seluruhnya setelah eksekusi setiap event Gunakan list waktu antar kedatangan dan waktu layanan di atas untuk “menjalankan” simulasi Hentikan ketika jumlah delay mencapai n = 6, hitung pengukuran kinerja output.
Pengukuran Kinerja Delay rata-rata “ekspektasi” pada antrian (tidak termasuk waktu layanan) dari n pelanggan yang telah selesai antri Jumlah pelanggan rata-rata ekspektasi pada antrian (tidak termasuk yang sedang dilayani) Rata-rata waktu kontinu Utilisasi ekspektasi (perbandingan dengan waktu kerja) server
Waktu = 0 Status yang ditunjukkan adalah setelah semua perubahan dilakukan untuk setiap kasus … Interarrival times: 0.4, 1.2, 0.5, 1.7, 0.2, 1.6, 0.2, 1.4, 1.9, … Service times: 2.0, 0.7, 0.2, 1.1, 3.7, 0.6, …
Waktu = 0.4 Interarrival times: 0.4, 1.2, 0.5, 1.7, 0.2, 1.6, 0.2, 1.4, 1.9, … Service times: 2.0, 0.7, 0.2, 1.1, 3.7, 0.6, …
Waktu = 1.6 Interarrival times: 0.4, 1.2, 0.5, 1.7, 0.2, 1.6, 0.2, 1.4, 1.9, … Service times: 2.0, 0.7, 0.2, 1.1, 3.7, 0.6, …
Waktu = 2.1 Interarrival times: 0.4, 1.2, 0.5, 1.7, 0.2, 1.6, 0.2, 1.4, 1.9, … Service times: 2.0, 0.7, 0.2, 1.1, 3.7, 0.6, …
Waktu = 2.4 Interarrival times: 0.4, 1.2, 0.5, 1.7, 0.2, 1.6, 0.2, 1.4, 1.9, … Service times: 2.0, 0.7, 0.2, 1.1, 3.7, 0.6, …
Waktu = 3.1 Interarrival times: 0.4, 1.2, 0.5, 1.7, 0.2, 1.6, 0.2, 1.4, 1.9, … Service times: 2.0, 0.7, 0.2, 1.1, 3.7, 0.6, …
Waktu = 3.3 Interarrival times: 0.4, 1.2, 0.5, 1.7, 0.2, 1.6, 0.2, 1.4, 1.9, … Service times: 2.0, 0.7, 0.2, 1.1, 3.7, 0.6, …
Waktu = 3.8 Interarrival times: 0.4, 1.2, 0.5, 1.7, 0.2, 1.6, 0.2, 1.4, 1.9, … Service times: 2.0, 0.7, 0.2, 1.1, 3.7, 0.6, …
Waktu = 4.0 Interarrival times: 0.4, 1.2, 0.5, 1.7, 0.2, 1.6, 0.2, 1.4, 1.9, … Service times: 2.0, 0.7, 0.2, 1.1, 3.7, 0.6, …
Waktu = 4.9 Interarrival times: 0.4, 1.2, 0.5, 1.7, 0.2, 1.6, 0.2, 1.4, 1.9, … Service times: 2.0, 0.7, 0.2, 1.1, 3.7, 0.6, …
Waktu = 5.6 Interarrival times: 0.4, 1.2, 0.5, 1.7, 0.2, 1.6, 0.2, 1.4, 1.9, … Service times: 2.0, 0.7, 0.2, 1.1, 3.7, 0.6, …
Waktu = 5.8 Interarrival times: 0.4, 1.2, 0.5, 1.7, 0.2, 1.6, 0.2, 1.4, 1.9, … Service times: 2.0, 0.7, 0.2, 1.1, 3.7, 0.6, …
Waktu = 7.2 Interarrival times: 0.4, 1.2, 0.5, 1.7, 0.2, 1.6, 0.2, 1.4, 1.9, … Service times: 2.0, 0.7, 0.2, 1.1, 3.7, 0.6, …
Waktu = 8.6 Interarrival times: 0.4, 1.2, 0.5, 1.7, 0.2, 1.6, 0.2, 1.4, 1.9, … Service times: 2.0, 0.7, 0.2, 1.1, 3.7, 0.6, … Pengukuran kinerja output terakhir: Waktu antri (delay) rata-rata = 5.7/6 = 0.95 mnt/pelanggan Jumlah rata-rata pada antrian = 9.9/8.6 = 1.15 pelanggan Utilisasi server = 7.7/8.6 = 0.90 (tidak berdimensi)
Isu Pemrograman DES Aturan penghentian program Jumlah event, waktu total Klien meninggalkan antrian sebelum dilayani Time break selama penjadwalan event Pilih kepergian sebelum kedatangan Dua kedatangan pada saat yang sama? Pilih satu secara acak Aturan lain yang didefinisikan