dept. computer science, tianjin uni. 系统仿真 system simulation 2008

Post on 13-Jan-2016

305 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Dept. Computer Science, Tianjin Uni.

系统仿真 System Simulation

2008

What’s simulation

A simulation is The imitation of the operation of a real-world process or system over time.

A technique, whereby a model of a system, is run in compressed time, to perform experimentation for analyzing system performance.

Whether done by hand or on a computer, simulation involves the generation of an artificial history of a system, and the observation of that artificial history to draw inferences concerning the operating characteristics of the real system.

Discrete system simulation

Simulation Category

General-purpose programming languages FORTRAN, C, C++ “build your own, use someone

else’s“Simulation programming languages ns-2, QualNet/GloMoSim, Opnet, RTSS GPSS/H, SIMAN V

Simulation technology Time-driven simulation

They work on a strictly unit-time basis automatically scanning thousands of fixed

time units to discover the next significant change

Event-driven simulation automatically skip to the next known event saving execute-time

Use Queuing models to Describe the behavior of queuing

systems Evaluate system performance

Model Queuing System

Queuing System

Queue Server

Customers

Time

Time

Arrival event

Delay

Begin service

Begin service

Arrival event

Delay

Activity

Activity

End service

End service

Customer n+1

Customer n

Interarrival

example

Single-server queue simulation Mean Interarrival time 4.5 Mean Service Time 3.2 Standard Deviation of Service Times 0.6 Number of Customers served 1000 Server Utilization 0.68362

Maximum Line Length 9Average Response Time 6.739Proportion who Spend Four Minutes or More in System 0.663Simulation RunLength 4677.74Number of Departures 1000

RTSS Simulator -- A model contains two parts

First, a set of processors The simulation software stores the

processor parameters, such as service rate etc., in a set of arrays – “the processor table”.

Each processor has his own queue to store waiting jobs.

Second, the characterization of the workload (i.e. jobs) The job parameters, such as job arriving

time, job length of a job etc., are stored in a set of arrays - ”the job table”.

The job parameters can be either deterministic or probabilistic.

RTSS Simulator

events

All events can be divided into three types Type 1 marks the arrival of a job in the system Type 2 corresponds to a job’s entering a server Type 3 corresponds to a job’s exiting from a

serverThe event service routines are the arrival routine, the incoming routine and the outgoing routine There is an event list to drive the simulation processEach event has 3 elements in the event list One element is an event identifier which is used

for identifying the event type. The second element is the event time The third element is a pointer to the job table

control routine

The control routine is the heart of the simulator, its loop is executed once for each event handledAt the start of each loop, the control routine selects the earliest event in the event list calls the corresponding event service routine advances the simulation clock to the event

time, removes the event from the event listThe event service routine performs the required processing for the job determines its next event, calculates the event

time and inserts the next event in the event list

returns control to the control routine

arrival routine

the arrival routine corresponds to event type 1, and does the following things:1. The next event (type 2) for the arriving job is inserted in the event list. 2. If the arriving job belongs to a job sequence and it is not the last job of the sequence, a new job of the sequence is generated and inserted in the job table. 3. The event (type 1) for the new job is inserted in the event list.Random-variant generators Routines to generate samples from

desired probability distributions

incoming routine

The incoming routine corresponds to event type 2, and simulates a job entering a processor; it does the following things:1. If the processor is busy, the input job enters a processor queue.2. If the processor is not busy, it serves the input job. The next event (type 3) to occur for the input job is inserted in the event list.3. The states of the job and processor are updatedRandom-variant generators Routines to generate samples from

desired probability distributions

outgoing routine

The outgoing routine corresponds to event type 3, and simulates a job exiting from a processor; it does the following things:1. The processor is released by the output job,2. Then, the queue of the released processor is examined; if there are jobs waiting, the one which has the highest priority is selected from the queue and scheduled to be served

report routine

A group of variables describes the simulator state when the simulation clock is advanced by the occurrence of a series of events. The report routine records these variables, so that analysis and statistic programs give the final simulation result.

Simulation in C++

Main program Provides overall control of the

event-scheduling algorithmClock

A variable defining simulated time

Initialization subroutine A routine to define the system state

at time 0Min-time event subroutine A routine that identifies the

imminent event, FEL

Simulation in C++

Event subroutines For each event type, a subroutine to

update system state (and cumulative statistics) when that event occurs

Random-variant generators Routines to generate samples from

desired probability distributionsReport generator A routine that computers summary

statistics from cumulative statistics and prints a report at the end of the simulation

Start simulationObtain input parameters

Initialize subroutine:

Call the time-advancesubroutine

A

B

Call appropriateevent subroutine

Simulationover?

Reportgenerator

A

B

Yes

No

Initialize subroutine:1. Set CLOCK = 02. Set cumulative statistics to 03. Generate initial events andplace on FEL4. Define initial system state

Time-advance subroutine:1. Find imminent event, say i2. Advance CLOCK to imminentevent time

Event subroutine i :1. Execute event i : updatesystem state, entity2. Collect cumulative statistics3. Generate future events andplace on FEL

Report generator:1. Compute summarystatistics2. print report

example

Single-server queue simulation

main() programStart simulation

Call Initialization()Initialize the model

Remove Imminent eventfrom FutureEventList

Advance time to event time

A

B

Call event routinebased on event type

Simulation over?

Call ReportGeneration()Generate final report

A

B

Yes

No

Definitions tab. 4.6, p. 108

Variables System state

QueueLengthNumberInService

Entity attributes and setsCustomers

Variables(cont’d)

Future event listFutureEventList

Activity durationService time

Variables(cont’d)

Input ParametersMeanInterarrivalTimeMeanServiceTimeSIGMA, Standard deviation of service

timeTotalCustomers, stopping criteria

Variables(cont’d)

Simulation variablesClock

Statistical AccumulatorsLastEventTimeTotalBusyMaxQueueLength

Statistical Accumulators

SumResponseTimeNumberOfDeparturesLongService, Number of customers

who spend 4 or more minutes

Variables(cont’d)

Summary statistics RHO = BusyTime/Clock AVGR : average response time PC4 : Proportion of customers who

spend 4 or more minutes at the checkout counter

Functions

exponential ( mu )normal ( xmu, SIGMA )

Subroutines

InitializationProcessArrivalProcessDepartureReportGeneration

Class Event{Friend bool operator < (const Event& e1,

const Event& e2);Friend bool operator == (const Event& e1,

const Event& e2);public: Event(){};enum EvtType { arrival, departure };

Event ( EvtType type, double etime) : _type(type), _etime(etime){};

EvtType get_type() { return _type;} double get_time() { return _etime;}protected: EvtType _type; double _etime;};

……priority_queue<Event> FutureEventListQueue<Event> Customers

Main( int argc, char* argv[ ] ){MeanInterArrivalTime = 4.5……Long seed = atoi ( argv[1] );SetSeed(seed);Initialization();

While ( NumberOfDeparture < TotalCustomers ){

Event evt = FutureEventList.top();FutureEventList.pop();Clock = evt.get_time();If ( evt.get_type() == Event::arrival )

ProcessArrival ( evt );Else ProcessDeparture ( evt );}ReportGeneration();}

Void Initialization (){ Clock = 0;QueueLength = 0;……Event evt( Event::arrival, exponential

( MeanInterArrivalTime ) );FutureEventList.push ( evt );}

Void ProcessArrival( Event evt ){Customer.push ( evt );QueueLength ++;If ( NumberInService == 0 )

ScheduleDeparture ();Else TotalBusy += ( Clock – LastEventTime );If ( MaxQueueLength < QueueLength )

MaxQueueLength = QueueLength;

Event next_arrival ( Event::arrival, Clock + exponential ( MeanInterArrivalTime )

); FutureEventList.push ( next_arrival ); LastEventTime = Clock;}

Void scheduleDeparture () {double ServiceTime;while( ( ServiceTime = normal ( MeanServiceTime, SIGMA ))

< 0 );Event depart ( Event::departure, Clock + ServiceTime );FutureEventList.push ( depart );NumberInservice = 1;QueueLength --;

}

Void ProcessDeparture ( Evevt evt) {Event finished = Customers.front ();Customers.pop ();if ( QueueLength ) ScheduleDeparture ();else NumberInService = 0;

double response = Clock – finished.get_time ();

SumResponseTime + = response; …… NumberOfDepartures ++; LastEventTime = Clock;}

Void ReportGeneration (){ double RHO = TotalBusy/Clock; double AVGR = SumResponseTime/

TotalCustomers; double PC4 = ((double)LongService)/

TotalCustomers;……}

Mean Interarrival time 4.5Mean Service Time 3.2Standard Deviation of Service Times

0.6Number of Customers served

1000Server Utilization 0.68362Maximum Line Length 9Average Response Time 6.739

Proportion who Spend Four Minutes or More in System

0.663Simulation RunLength 4677.74Number of Departures 1000

top related