Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
Diterbitkan olehAsrul Arif Telah diubah "9 tahun yang lalu
2
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.
3
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.
4
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.
5
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.
6
Initialization routine 1.Set simulation clock = 0 2.Initialize system state & statistical counters 3.Initialize event list Main ProgramTiming routine 0. Invoke the initialization routine 1.Invoke the timing routine 2.Invoke event routine i (1 dan 2 diulang-ulang) 1.Menentukan next event type, sebut i 2.Memajukan simulation clock Event routine i 1.Update system state 2.Update statistical counters 3.Generate future events & add to event list Generate random variates 0 2 1 i Library routine Start
7
Apakah simulasi selesai ? Report generator 1.Hitung estimasi-estimasi yang dibutuhkan 2.Tulis report Stop
8
Interarrival times A 1, A 2, … 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 S 1, S 2, … dari customer yang berurutan merupakan variabel-variabel random IID yang independent terhadap nilai-nilai A i. Customer yang tiba dan menjumpai server busy akan bergabung di akhir queue (antrian). Server memilih customer dari queue menggunakan cara (manner) FIFO.
9
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 A 1 (bukan di t = 0). Simulasi akan berhenti ketika customer ke-n memasuki services. Waktu berakhirnya simulasi merupakan variabel random.
10
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
11
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
12
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
13
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
14
PROGRAM SingleServerQ(Input, Output); CONST QLimit = 100; Busy = 1; Idle = 0; VAR NextEventType, 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;
15
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;
16
Procedure Timing; Var I : Integer; MinTimeNextEvent : Real; Begin MinTimeNextEvent := 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 End End; { 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;
17
Procedure Arrive; Var Delay : Real; Begin { schedule next event } TimeNextEvent[1] := Time + Expon(MeanInterArrival); { melihat apakah server busy } If ServerStatus = Busy Then Begin NumInQ := NumInQ + 1; If NumInQ > QLimit Then Begin Writeln(‘Queue overload pada waktu :’,Time); Halt End; TimeArrival[NumInQ] := Time End Else (* dilanjutkan … *)
18
(* … 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) End End { end dari procedure arrival }
19
Procedure Depart; Var I : Integer; Delay : Real; Begin If NumInQ = 0 Then Begin ServerStatus := Idle; TimeNextEvent[2] := 1.0E+30; End Else Begin NumInQ := 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;
20
Procedure Report; Var AvgDelayInQ, AvgNumInQ, ServerUtilization : Real; Begin AvgDelayInQ := 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;
21
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;
22
Function Expon; { fungsi pembentukan variabel eksponensial } Var U : Real; Begin { men-generate variabel random U(0,1) } U := Rand(1); Expon := -Mean * Ln(U) End;
23
{ 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; …
24
…………….. lanjutan { Inisialisasi Simulasi } Initialize; While NumCustDelayed < NumDelaysRequired Do Begin Timing; UpdateTimeAvgStats; Case NextEventType Of 1 : Arrive; 2 : Depart; End End; Report End. (* Akhir Main Program *)
25
#include #include “rand.h” /* header file untuk random-number generator */ #define Q_LIMIT100 #define BUSY1 #define IDLE0 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);
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.