Simpack
A C++ library to create simple simulations
Simpack
•
Message passing system
•
Basic components to handle and pass messages
Components
Message
Message generator
Message Queue
Message Server
Message
•
Messages are units that are passed around in the
system
•
Messages can thus represent, customers at a
bank, data packets in a data network, etc.
•
A message has the following properties:
•
Length
•
Creation time
Message generator
•
Generates messages
•
Uses two number generators:
•
Message length
•
Message inter arrival time
Number generator
•
Generates fixed or random numbers
•
Random numbers can be generated from the
following distributions:
•
•
Normal
•
Exponential
•
Uniform
Are used in message generators
int main()
{
RandomGenerator r1( 41 );
Messages
RandomGenerator r2( 15 );
RndExpon e1( &r1 , 20.0 );
Inter-arrival generator
RndNormal e2( &r2 , 10.0, 5.0 );
MsgGenerator<SelectRandom> gen( 200 , &e1 , &e2);
Message length generator
gen
Message queue
•
An ordinary FIFO queue
•
Maximum queue length
int main()
{
RandomGenerator r1( 41 );
RandomGenerator r2( 15 );
RndExpon e1( &r1 , 20.0 );
RndNormal e2( &r2 , 10.0, 5.0 );
MsgGenerator<SelectRandom> gen( 200 , &e1 , &e2);
MsgQueue<SelectFirst> q1( 30 );
Max queue length
gen
q1
Message server
•
A message server handles messages
•
The time to handle a message is given by:
•
t = time, l = message length, f = server work factor
•
Higher work factor ==> Better efficiency
int main()
{
RandomGenerator r1( 41 );
RandomGenerator r2( 15 );
RndExpon e1( &r1 , 20.0 );
RndNormal e2( &r2 , 10.0, 5.0 );
MsgGenerator<SelectRandom> gen( 200 , &e1 , &e2);
MsgQueue<SelectFirst> q1( 30 );
MsgServer<SelectFirst> s1( 1.0 );
Work factor
MsgServer<SelectFirst> s2( 1.1 );
s1
gen
q1
s2
Connecting components
Generator to queue
Generator to server
Queue to queue
Queue to server
Server to server
int main()
{
MsgGenerator<SelectRandom> gen( 200 , &e1 , &e2);
MsgQueue<SelectRandom> q1( 30 );
MsgServer<SelectFirst> s1( 1.0 );
MsgServer<SelectFirst> s2( 1.1 );
connect( &gen , &q1 );
connect( &q1 , &s1 );
connect( &q1 , &s2 );
s1
gen
q1
s2
Routing policies
10
•
To select the next
component to receive a message
90
•
SelectFirst pick the first available
•
SelectPrio pick the one with highest priority
•
SelectRandom pick randomly uniform
•
SelectRoutingProb use routing probabilities
connect( &s1 , &q1 , 0.1);
connect( &s1 , &q1 , 0.9);
Results
•
printStats print statistics to the screen
•
Number of received messages
•
Discarded messages
•
Maximum queue length
•
Average service & idle time
•
...
int main()
{
MsgGenerator<SelectRandom> gen( 200 , &e1 , &e2);
MsgQueue<SelectRandom> q1( 30 );
MsgServer<SelectFirst> s1( 1.0 );
MsgServer<SelectFirst> s2( 1.1 );
connect( &s1 , &q1 );
connect( &q1 , &s1 );
connect( &q1 , &s2 );
EventHandler::getInstance().run();
gen.printStats();
}
s1
s1
q1
s2
Assignment 1, part 1
•
Average waiting time?
•
How many has to wait more than 5 minutes ?
•
How many terminals are needed to guarantee
that 90 has to wait less than 4 minutes ?
Assignment 1, part 2
•
How many channels are needed ?
•
Maximum of 5
•
Old system vs new system
blocked calls
© Copyright 2026 Paperzz