Upload
manon
View
98
Download
2
Embed Size (px)
DESCRIPTION
DISCRETE-EVENT SIMULATION MODEL. KOMPONEN & SUSUNAN D-E SM. System state : koleksi variabel state yang diperlukan untuk menggambarkan sistem pada saat tertentu. Simulation clock : variabel yang menghasilkan nilai terbaru saat itu ( current ) dari waktu tersimulasi. - PowerPoint PPT Presentation
Citation preview
DISCRETE-EVENT SIMULATION MODEL
System state : koleksi variabel state yang diperlukan untuk menggambarkan sistem pada saat tertentu.
Simulation clock : variabel yang menghasilkan nilai terbaru saat itu (current) dari waktu tersimulasi.
Event list : daftar yang memuat waktu berikutnya ketika masing-masing event akan muncul.
KOMPONEN & SUSUNAN D-E SM
Statistical counters : variabel yang digunakan untuk menyimpan informasi statistik tentang kinerja sistem.
Initialization routine : subprogram untuk menginisialisasi model pada saat t = 0.
Timing routine : subprogram yang menentukan event berikutnya dari event list dan kemudian memajukan simulation clock ke waktu di mana event berikutnya tersebut muncul.
KOMPONEN & SUSUNAN D-E SM
Event routine : subprogram yang meng-update state sistem ketika tipe event tertentu muncul (masing-masing tipe event mempunyai satu event routine).
Library routine : himpunan subprogram untuk menghasilkan (generate) observasi-observasi random dari distribusi probabilitas yang ditentukan sebagai bagian model simulasi.
KOMPONEN & SUSUNAN D-E SM
Report generator : subprogram yang menghitung estimasi (dari statistical counters) dari ukuran kinerja yang diinginkan dan menghasilkan laporan (reports) ketika simulasi selesai.
Main program : subprogram yang memanggil (call – invoke) timing routine untuk menentukan next event dan kemudian mentrasfer kontrol ke event routine yang bersesuaian untuk meng-update state sistem secara tepat. Main program mungkin juga memeriksa terminasi (pemberhentian) dan invokes report generator ketika simulasi berakhir.
KOMPONEN & SUSUNAN D-E SM
ALUR KONTROL UNTUK D-E SM
Initialization routine1. Set simulation clock
= 02. Initialize system
state & statistical counters
3. Initialize event list
Main Program Timing routine0. Invoke the initialization
routine1. Invoke the timing routine2. Invoke event routine i(1 dan 2 diulang-ulang)
1. Menentukan next event type, sebut i
2. Memajukan simulation clock
Event routine i1. Update system state2. Update statistical
counters3. Generate future events
& add to event list
Generate random variates
0
2
1
i
Library routine
Start
ALUR KONTROL UNTUK D-E SM
Apakah simulasi selesai
?
Report generator1. Hitung estimasi-estimasi yang
dibutuhkan2. Tulis report
Stop
Interarrival times A1, A2, … independent, identically distributed (IID) random variables.
Identically distributed : interarrival times mempunyai distribusi probailitas yang sama.
Customer yang tiba (arrives) dan menjumpai server idle akan langsung di-serve, dan service times S1, S2, … dari customer yang berurutan merupakan variabel-variabel random IID yang independent terhadap nilai-nilai Ai.
Customer yang tiba dan menjumpai server busy akan bergabung di akhir queue (antrian).
Server memilih customer dari queue menggunakan cara (manner) FIFO.
SINGLE-SERVER QUEUEING SYSTEM
SINGLE-SERVER QUEUEING SYSTEM
Customer yang
arrives
Customers dalam queue
Customer sedang di-serve
Server Customer yang
departs Simulasi akan mulai dalam keadaan (state) “empty-and-
idle”, yaitu suatu keadaan di mana tidak ada customer yang datang dan server idle.
Pada saat t = 0, menunggu kedatangan customer pertama yang akan terjadi setelah interarrival time pertama A1 (bukan di t = 0).
Simulasi akan berhenti ketika customer ke-n memasuki services.
Waktu berakhirnya simulasi merupakan variabel random.
FLOWCHART UNTUK ARRIVAL ROUTINE, QUEUEING SYSTEM
Arrival event
Schedule the next arrival
event
Is the server busy
?
Add 1 to the number in
queue
Set delay = 0 for this customer and gather statistics
FLOWCHART UNTUK ARRIVAL ROUTINE, QUEUEING SYSTEM
Is the queue full ?
Write error message &
stop simulation
Store time of arrival of this
customer
Add 1 to the number of customer
delayed
Make the server busy
Schedule a departure event for this customer
Return
FLOWCHART UNTUK DEPARTURE ROUTINE, QUEUEING SYSTEM
Departure event
Is the queue
empty ?
Make the server idle
Subtract 1 from the number in queue
Compute delay of customer entering service and gather
statistics
Eliminate departure event from
consideration
FLOWCHART UNTUK DEPARTURE ROUTINE, QUEUEING SYSTEM
Add 1 to the number of customer
delayed
Return
Schedule a departure event for this customer
Move each customer in queue (if any) up
one place
PROGRAM SingleServerQ(Input, Output);CONST
QLimit = 100;Busy = 1;Idle = 0;
VARNextEventType, NumCustsDelayed, NumDelaysRequired, NumEvents, NumInQ, ServerStatus : Integer;AreaNumInQ, AreaServerStatus, MeanInterarrival, MeanService, Tijme, TimeLastEvent, TotalOfDelays : Real;Timearrival : ARRAY[1..QLimit] of Real;TimeNextEvent : ARRAY[1..2] of Real;
Zrng : ARRAY[1..100] of Integer;
PROCEDURE Initialize; FORWARD;PROCEDURE Timing; FORWARD;PROCEDURE Arrive; FORWARD;PROCEDURE Depart; FORWARD;PROCEDURE Report; FORWARD;PROCEDURE UpdateTimeAvgStats; FORWARD;FUNCTION Expon(Mean : Real) : Real; FORWARD;
PROCEDURE Randdf; FORWARD;FUNCTION Rand(Stream : Integer) : Real; FORWARD;PROCEDURE Randst(Zset : Integer; Stream : Integer); FORWARD;FUNCTION Randgt(Stream : Integer) : Integer; FORWARD;
PROGRAM PASCAL
Procedure Initialize;Begin
{simulation clock}Time := 0.0; {state variables}ServerStatus := Idle;NumInQ := 0;TimeLastEvent := 0.0;{statistical counters}NumCustDelayed := 0;TotalOfDelays := 0.0;AreaNumInQ := 0.0;AreaServerStatus := 0.0;{event list}TimeNextEvent[1] := Time +
Expon(MeanInterArrival);TimeNextEvent[2] := 1.0E+30
End;
PROGRAM PASCAL
Procedure Timing;Var
I : Integer;MinTimeNextEvent : Real;
BeginMinTimeNextEvent := 1.0E+29;NextEventType := 0;{ menentukan tipe event dari next event yang muncul }For I := 1 To NumEvent Do Begin
If TimeNextEvent[I] < MinTimeNextEvent Then Begin MinTimeNextEvent := TimeNextEvent[I];NextEventType := I
EndEnd;{ melihat apakah event list kosong }If NextEventType = 0 Then Begin{ event list kosong, hentikan simulasi }
writeln(‘Event list kosong pada pukul : ‘, Time);Halt
End;{ event list tidak kosong, majukan simulation clock }Time := MinTimeNextEvent
End;
PROGRAM PASCAL
Procedure Arrive;Var
Delay : Real;Begin
{ schedule next event }TimeNextEvent[1] := Time + Expon(MeanInterArrival);{ melihat apakah server busy }If ServerStatus = Busy Then BeginNumInQ := NumInQ + 1;If NumInQ > QLimit Then BeginWriteln(‘Queue overload pada waktu :’,Time);HaltEnd;TimeArrival[NumInQ] := TimeEnd Else (* dilanjutkan … *)
PROGRAM PASCAL
(* … lanjutan *)Else Begin
{ server idle }Delay := 0.0;TotalOfDelays := TotalOfDelays + Delay;{ rubah status server menjadi busy }NumCustDelayed := NumCustDelayed + 1;ServerStatus := Busy;{ schedule departure (service completion) }TimeNextEvent[2] := Time + Expon(MeanService)
EndEnd { end dari procedure arrival }
PROGRAM PASCAL
Procedure Depart;Var
I : Integer;Delay : Real;
BeginIf NumInQ = 0 Then Begin
ServerStatus := Idle;TimeNextEvent[2] := 1.0E+30;
End Else BeginNumInQ := NumInQ - 1;Delay := Time – TimeArrival[1];TotalOfDelays := TotalOfDelays + Delay;NumCustDelayed := NumCustDelayed + 1;TimeNextEvent[2] := Time + Expon(MeanService);For I := 1 To NumInQ Do
TimeArrival[I] := TimeArrival[I + 1]End
End;
PROGRAM PASCAL
Procedure Report;Var
AvgDelayInQ, AvgNumInQ, ServerUtilization : Real;
BeginAvgDelayInQ := TotalOfDelays / NumCustDelayed;AvgNumInQ := AreaNumInQ / Time;ServerUtilization := AreaServerStatus / Time;Writeln;Writeln(‘Rata-rata delay dalam queue ‘, AvgDelayInQ:11:3, ‘ menit’);Writeln(‘Rata-rata panjang queue ‘, AvgNumInQ:10:3);Writeln(‘Server Utilization ‘, ServerUtilization:10:3);Writeln(‘Waktu akhir simulasi : ‘,Time:12:3)
End;
PROGRAM PASCAL
Procedure UpdateTimeAvgStats;Var
TimeSinceLastEvent : Real;Begin
{ menghitung waktu sejak event terakhir, dan meng- update last-event-time marker }
TimeSinceLastEvent := Time – TimeLastEvent;TimeLastEvent := Time;
AreaNumInQ := AreaNumInQ + NumInQ * TimeSinceLastEvent;
AreaServerStatus := AreaServerStatus + ServerStatus * TimeSinceLastEvent
End;
PROGRAM PASCAL
Function Expon; { fungsi pembentukan variabel eksponensial }
VarU : Real;
Begin{ men-generate variabel random U(0,1) }U := Rand(1);Expon := -Mean * Ln(U)
End;
PROGRAM PASCAL
{ Single server Queuing Main Program }Begin (* Mulai Main Program *)
{ Inisialisasi pembangkit bilangan acak }Randdf;{ Menentukan banyaknya event untuk prosedur timing }NumEvents := 2;Readln(MeanInterArrival, MeanService, NumDelaysRequired);{ Menulis report heading dan input parameters }writeln(‘Single Server Queuing System’);writeln;…
PROGRAM PASCAL
…………….. lanjutan { Inisialisasi Simulasi }
Initialize;While NumCustDelayed < NumDelaysRequired Do Begin
Timing;UpdateTimeAvgStats;Case NextEventType Of
1 : Arrive;2 : Depart;
EndEnd;Report
End. (* Akhir Main Program *)
PROGRAM PASCAL
#include <stdio.h>#include <math.h>#include “rand.h” /* header file untuk random-number generator */#define Q_LIMIT 100#define BUSY 1#define IDLE 0
int next_event_type, num_custs_delayed, num_delays_required, num_events, num_in_q, server_status;
float area_num_in_q, area_server_status, mean_interarrival, mean_service, time, time_arrival[Q_LIMIT+1], time_last_event, time_next_event[3], total_of_delays;
FILE *infile, *outfile;
void initialize(void);void timing(void);void arrive(void);void depart(void);void report(void);void update_time_avg_stats(void);float expon(float mean);
C Program