系统仿真 system simulation
Post on 20-Jan-2016
105 Views
Preview:
DESCRIPTION
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