Contoh: Time-shared computer and multi-teller bank Catatan diambil dari “Simulation Modeling and Analysis” by A. Law and W. Kelton, Third edition, McGraw Hill, 2000.
Tujuan Contoh simulasi Model komputer time-shared Multi-teller bank dengan jockey Model job shop
Model komputer Time-Shared
Spesifikasi masalah Terminal “berpikir”, kemudian meng-isukan job Think time terdistribusi eksponensial - 25 detik Job service time juga terdistribusi eksponensial - 0.8 detik Aturan pemrosesan job processing rule: round-robin Waktu setiap kali diproses CPU q = 0.1 detik. (quantum) Jika sisa waktu pemrosesan > q detik, akan diberikan q detik, kemudian dikeluarkan kembali Jika sisa waktu pemrosesan q detik, akan diberikan selama yang diperlukan, kemudian dikembalikan ke terminalnya Cara lain pemrosesan job: FIFO, SJF, LIFO dsb. Swap time: = 0.15 detik. Diperlukan pada saat job memasuki CPU sebelum pemrosesan dimulai
Spesifikasi masalah Waktu Respon satu job = (waktu job kembali ke terminal) – (waktu job meninggalkan terminalnya). Pada awalnya, komputer kosong dan tidak bekerja, seluruh n job pada think state di terminal mereka. Aturan penghentian: dikumpulkan 1000 waktu respon Output: Rata-rata waktu respon Rata-rata jumlah job pada antrian CPU Utilisasi CPU Pertanyaan: berapa terminal (n) dapat dimuati job dan memiliki waktu respon rata-rata di bawah 30 detik?
Mengubah spesifikasi menjadi program Kedatangan Job Pemrosesan CPU Akhiri simulasi Terminal
Event, list Event list, atribut: 1 = Kedatangan job di komputer (di akhir think time) 2 = Job meninggalkan CPU (selesai atau dikeluarkan sementara) 3 = Akhir simulasi (dijadwalkan setelah job ke-1000 selesai) list, atribut: 1 = queue, attributes = [waktu kedatangan job pada komputer, waktu layanan yang tersisa] 2 = CPU, attributes = [waktu kedatangan job pada komputer, waktu layanan yang tersisa] Dalam CPU, jika waktu layanan yang tersisa > 0 maka job membutuhkan waktu CPU sebesar ini setelah lewat di CPU terakhir kali; jika waktu layanan yang tersisa 0, job akan selesai setelah lewat di CPU kali ini 25 = event list, attributes = [event time, event type]
Variable, random stream variable: waktu respon Random-number stream: 1 = think time, 2 = service time
arrive() function Function arrive() Letakkan job pada antrian CPU idle? Ya Tidak Return Start CPU run
start_CPU_run() function
end_CPU_run() function
Multi-teller Bank Kedatangan baru: Pada awalnya kosong dan idle Waktu antar kedatangan: Exp (mean = 1 mnt.) Waktu layanan: Exp (mean = 4.5 mnt.) Kedatangan baru: Jika ada teller yang idle (tidak bekerja), pilih teller idle yang paling kiri Jika semua teller sibuk, pilih antrian paling pendek Pada awalnya kosong dan idle Penghentian: Pintu tutup setelah 480 menit. Jika semua teller idle pada saat itu, langsung stop. Jika ada teller yang masih bekerja, tetap beroperasi hingga semua nasabah meninggalkan pelayanan.
Aturan Jockey Misalkan teller i (i tertentu) selesai melayani — misalnya, i = 3 pada gambar di atas. Maka teller i menjadi idle, atau antrian i berkurang 1. Mungkin seorang nasabah pada antrian lain, j ( i) pindah ke teller i (jika sekarang idle) atau ke ujung antrian i yang sekarang lebih pendek Untuk setiap teller/antrian k, nk = jumlah nasabah yang menghadapi (antri + yang dilayani) teller k segera setelah teller i selesai melayani Prosedur: Jika nj > ni + 1 untuk j i, maka jockey akan terjaadi Jika nj > ni + 1 untuk beberapa nilai j i, pilih j yang paling dekat (min |j – i|) Jika nj > ni + 1 untuk dua nilai j i yang sama dekat (kiri dan kanan), pilih yang kiri (nilai j yang lebih kecil)
Ukuran Kinerja Estimasi Bagaimana efek jumlah teller? Rata-rata jumlah nasabah pada (semua) antrian per satuan waktu Rata-rata dan maksimum delay nasabah pada antrian Bagaimana efek jumlah teller?
Event, list Event list, atribut (n = jumlah teller): 1 = Kedatangan nasabah ke bank 2 = Kepergian nasabah dari teller (harus diketahui teller #) 3 = Tutup pintu pada menit ke-480. (mungkin merupakan Akhir, mungkin juga belum) (Gunakan juga “utility” non-event function jockey jika ada yang ingin jockey, dan, jika ya, lakukan) list, atribut (n = jumlah teller): 1, …, n = queues, attributes = [waktu kedatangan pada antrian] n + 1, …, 2n = tellers, no attributes = (dummy list untuk utilisasi) 25 = event list, attributes = [event time, event type, nomer teller jika event type = 2]
Variabel, stream variable: 1 = delay nasabah pada antrian (s) Random-number streams: 1 = interarrival time, 2 = service time
arrive() function
depart() function
jockey() function
Model Job Shop Model Lima workstation Tiga type job Jumlah mesin yang identik pada setiap workstation seperti pada gambar Jaringan antrian multiserver Tiga type job Waktu antar kedatangan (semua type job digabungkan) exp. (mean = 0.25 jam) Type job ditentukan setelah kedatangan Type 1, 2, 3 w.p. 0.3, 0.5, 0.2 Rute workstation untuk type job: Type 1: 3 1 2 5 (lihat gb.) Type 2: 4 1 3 Type 3: 2 5 1 4 3 Mean service time (2-Erlang distrib.): Type 1: 0.50 0.60 0.85 0.50 Type 2: 1.10 0.80 0.75 Type 3: 1.20 0.25 0.70 0.90 1.0 Pada awalnya kosong dan idle Stop pada waktu 365 8 jam
Model Job Shop (lanjutan) Estimasi Total delay rata-rata pada antrian untuk setiap type job secara terpisah Total delay rata-rata pada antrian secara menyeluruh meliputi semua type job, dibebani oleh probabilitas kejadian (yang telah diketahui) Untuk setiap kelompok mesin secara terpisah: Delay rata-rata pada antrian (semua type job dikumpulkan) Jumlah rata-rata job pada antrian per satuan waktu (semua type job) Utilisasi grup = Jumlah mesin dalam grup Pertanyaan: Jika Anda dapat menambahkan satu mesin ke shop, ke grup mana mesin tersebut harus ditambahkan? Rata-rata jumlah mesin yang bekerja per satuan waktu Jumlah mesin dalam grup
Event, list, dst Event list, atribut: 1 = Kedatangan job pada sistem 2 = Kepergian job dari satu station tertentu 3 = Akhir simulasi list, atribut: 1, …, 5 = queues, attributes = [waktu kedatangan pada station, job type, task number ] 25 = event list, attributes = [event time, event type, job type (jika event type = 2), task number (jika event type = 2)] (Task number sebuah job adalah jarak pada rutenya, diukur dalam stations, sehingga mulailah dari 1, kemudian di-inkremen sebesar 1 untuk setiap station)
variable variable: delay antrian pada grup mesin 1, …, 5 total delay antrian untuk type job 1, 2, 3 Jumlah mesin busy pada grup mesin 1, …, 5 Random-number stream: 1 = interarrival time, 2 = job-type coin flip, 3 = service time