Permasalahan

Dalam sebuah pabrik, untuk mendapatkan barang jadi, barang harus melewati beberapa pos kerja secara berturut-turut. Jumlah mesin pada tiap pos kerja berbeda-beda:

Pos kerjaJumlah mesin
13
22
34
43
51

Setiap pos kerja terdiri atas sejumlah mesin sejenis dengan antrian tunggal. Job datang dengan waktu antar kedatangan eksponensial, mean 0.25 jam. Ada 3 tipe job dengan probabilitas 0.3, 0.5, 0.2, masing-masing punya rute (urutan pos kerja) berbeda:

TipeRuteJumlah task
13, 1, 2, 54
24, 1, 33
32, 5, 1, 4, 35

Sistem ini sebenarnya adalah jaringan dari antrian multiserver. Jika produk sampai di suatu pos kerja, produk dikerjakan pada mesin yang sedang idle di pos itu. Distribusi waktu proses tiap mesin adalah Erlang-2 (distribusi Erlang orde 2 — setara jumlah dari 2 variabel eksponensial independen dengan mean sama; dipakai agar waktu proses lebih “teratur”/kurang variatif dibanding eksponensial murni), dengan waktu proses rata-rata bergantung tipe produk:

TipeWaktu proses per task (jam)
10.50, 0.60, 0.85, 0.50
21.10, 0.80, 0.75
31.20, 0.25, 0.70, 0.90, 1.00

Yang Ingin Diketahui

  • Delay rata-rata di antrian untuk tiap tipe job
  • Delay rata-rata pada setiap pos kerja
  • Panjang antrian rata-rata di depan setiap pos kerja
  • Utilitas rata-rata setiap pos kerja
  • Di pos kerja mana terjadi bottleneck — jika ada alokasi dana untuk membeli sebuah mesin tambahan, mesin di pos kerja mana yang perlu dibeli (asumsi harga antar mesin tidak jauh berbeda)

Event

  • Arrival produk ke pos kerja — bisa berarti “baru” (mulai awal produk dikerjakan) atau “setelah selesai dari sebuah task” (pindah ke pos kerja berikutnya sesuai rute).
  • Departure dari sebuah pos kerja — membangkitkan arrival ke pos kerja berikutnya, jika task yang harus dilalui belum selesai.

Awal simulasi: semua mesin di semua pos kerja idle, semua antrian kosong. Akhir simulasi: setelah satu siklus kerja selesai (mis. 1 minggu, 1 bulan, atau 1 tahun — pada implementasi textbook: 365 hari × 8 jam).

Rancangan Program

Input: lama waktu simulasi, rata-rata waktu antar kedatangan job, rata-rata waktu pelayanan task untuk job tipe , jumlah pos kerja (=5), jumlah mesin di pos kerja ke-, jumlah task untuk job tipe , jumlah tipe job (=3), probabilitas job tipe .

Output: rata-rata total delay di antrian untuk job tipe , rata-rata delay di antrian pos kerja ke-, rata-rata utilisasi mesin pos kerja ke-, rata-rata jumlah antrian pos kerja ke-, keseluruhan rata-rata delay job di antrian.

Subprogram Utama (FORTRAN)

SubprogramFungsi
ARRIVE(NEW)Memproses arrival job — NEW=1 jika kedatangan baru ke shop (event tipe 1), NEW=2 jika job baru selesai dari suatu machine group dan dirutekan ke pos berikutnya
DEPARTMemproses event tipe 2 (keberangkatan dari suatu pos kerja)
REPORTMenghasilkan laporan saat simulasi berakhir
ERLANG(M, RMEAN, ISTRM)Membangkitkan random variate Erlang- dengan mean RMEAN; ISTRM adalah indeks stream bilangan random (aliran generator angka acak independen) yang dipakai, agar tiap pembangkitan random punya stream sendiri

Variabel pemodelan kunci: ROUTE(I,J) (nomor machine group untuk task dari job tipe ), NBUSY(I) (jumlah mesin busy di group ), MSERVT(I,J) (rata-rata waktu layanan task job tipe ), TASK/TASKQ (nomor task job saat ini).

Alur Subroutine ARRIVE

Jika kedatangan baru (NEW=1): jadwalkan kedatangan berikutnya, bangkitkan tipe job & set TASK=1. Tentukan machine group dari matriks ROUTE. Cek apakah semua mesin di group tersebut busy:

  • Jika semua busy: job ditempatkan di akhir antrian group tersebut (disimpan: waktu arrival, tipe job, nomor task).
  • Jika ada yang idle: mulai layani job (delay=0), tambah NBUSY, jadwalkan event service completion dengan ERLANG(2, MSERVT(JOBTYP,TASK), 3).

Alur Subroutine DEPART

Tentukan machine group tempat job berangkat dari ROUTE(JOBTYP,TASK). Cek apakah antrian group tersebut kosong:

  • Jika kosong: kurangi NBUSY (mesin jadi idle).
  • Jika tidak kosong: ambil job pertama dari antrian, hitung delay-nya (tally untuk machine group & untuk tipe job), jadwalkan service completion berikutnya.
  • Jika job yang baru berangkat masih punya task tersisa (TASK < NTASKS(JOBTYP)): tambah TASK, panggil ARRIVE(2) untuk merutekan ke machine group berikutnya.

Sumber

  • Materi kuliah IF4021 Model dan Simulasi, minggu 5 (kasus antrian job-shop).
  • A.M. Law & W.D. Kelton, Simulation Modeling and Analysis, McGraw-Hill — Bab 2 (Modeling Complex Systems), model job-shop.

Flashcard

flashcards Mengapa sistem job-shop pada kasus ini disebut sebagai “jaringan dari antrian multiserver”? :: Karena job harus melewati beberapa pos kerja secara berturut-turut sesuai rutenya, dan setiap pos kerja sendiri adalah antrian dengan banyak mesin identik (multiserver) — job berpindah dari satu antrian multiserver ke antrian multiserver lain. Apa perbedaan NEW=1 dan NEW=2 pada subroutine ARRIVE? :: NEW=1 berarti job baru datang ke shop (arrival pertama); NEW=2 berarti job sudah menyelesaikan satu task di suatu machine group dan sedang dirutekan ke machine group berikutnya sesuai rutenya. Distribusi apa yang dipakai untuk waktu proses tiap mesin pada kasus job-shop ini? :: Distribusi Erlang-2, dengan rata-rata waktu proses bergantung pada tipe produk/job. Bagaimana logika subroutine ARRIVE saat job tiba di suatu machine group? :: Cek apakah semua mesin di group tersebut busy; jika ya, job masuk antrian di akhir (simpan waktu arrival, tipe job, nomor task); jika ada mesin idle, job langsung dilayani (delay=0), NBUSY bertambah, dan dijadwalkan event service completion. Bagaimana subroutine DEPART menentukan apakah job yang baru berangkat perlu dirutekan lagi? :: Dengan mengecek apakah TASK (nomor task saat ini) masih kurang dari NTASKS(JOBTYP) — jika ya, TASK ditambah 1 dan ARRIVE dipanggil dengan NEW=2 untuk merutekan job ke machine group berikutnya sesuai ROUTE. Apa dua pertanyaan analisis utama yang ingin dijawab dari simulasi job-shop ini terkait investasi mesin? :: Di pos kerja mana terjadi bottleneck, dan jika ada dana untuk membeli satu mesin tambahan, mesin di pos kerja mana yang sebaiknya dibeli (dengan asumsi harga antar mesin tidak jauh berbeda).