Project: Multi-Server Single Queue Simulation

advertisement
Project: Multi-Server Single Queue Simulation
Overview:
The goal of this project is use the knowledge we have studied to simulate single queue multiple
server problems. Specifically, this project is to simulate scenario of Barber Shop where there are
five barbers cutting hair for customers who come over time. After customers come, they will
wait in one queue for their turns. If one barber is available, then the first customer in the queue
will be served immediately. Make sure that all the customers are served in the rule of “first
come, first service”.
Your Task
Your simulation structure should be event-driven simulation, which is the most common
simulation model. At any given time, the simulation is in a single state. The simulation state can
ONLY change at event times, where an event is defined as an occurrence that MAY change the
state of the system. Events in this BarberShop simulation are the following: customer arrival,
barber available(finished cutting hair) and the transition of a system state.
Each event occurs at a specified time. Since the simulation state only changes at an event, the
clock can be advanced to the next most recently scheduled event. (Thus the term next event
simulation model.)
Events are scheduled via an event queue. The event queue is a sorted queue which contains
"future" events; the queue is sorted by the time of these "future" events. The event queue is
initialized to contain the arrival of the customers and the first occurrence of finished cutting. The
main loop of the simulation consists of processing the next event, perhaps adding more future
events in the queue as a result, advancing the clock, and so on until all customers terminate.
In the end, you should print the details of the events in the system
Input Format
The simulator input includes the number of customers that require hair cutting, and, for each
customer, the arrival time and the time needed for hair cutting (Note: each customer’s hair
cutting time is same for all the barbers, though different customers have different hair cutting
time).
All these simulation parameters are integers. Your simulator obtains these parameters from the
input file, which is in the following format.
number_of_customers
process_number arrival_time hair-cutting-time
process_number arrival_time hair-cutting-time
....
The following is an example input file to your simulation (time units = minutes):
10
1 0 30
2 15 60
3 5 25
4 30 100
5 32 20
6 25 90
7 50 40
8 12 35
9 4 150
10 31 50
You should create your own input file. Your program should generate at least 20 customers. You
can assume no time is delayed when the barber switches from one customer to another
customer.
Output Format
There are two mode to display the output depending the user’s input:
-d: detail mode
-v: verbose mode
In detailed information mode (i.e., -d flag is given), the output of the simulation consists of the
information about each customers including: arrival time, service time(hair-cutting-time),
waiting time, finish time. See the following example.
$sim -d input_file
Customer 1:
arrival time: 0
service time: 30 minutes
waiting time: 0 minutes
finish time: 30 units
Customer 2:
arrival time: 15
service time: 60 units
waiting time: 0 units
finish time: 75 units
Customer 3:
arrival time: 5
service time: 25 units
waiting time: 0 units
finish time: 30 units
….
In verbose mode, the output of the simulation includes the scheduling decisions and the
switching of the processes. Specifically, the output includes every event that occurs, the time of
the event, and the state transition:
At time 0: Customer {1} moves from {arrival state} to {waiting state}
At time 0: Barber {1} is available and starts to cut hair for Customer {1}
….
At time X: Barber {1} finish the hair cutting for Customer {i}, Customer {i} leaves, then Barber
{1} starts to cut hair for Customer {j}
….
Each state transition should be given as above on a separate line. (Be sure to include events that
occur at the same time.)
Submit:
Write a 1-2 page paper describing your project, what problems you've faced and how
you've overcome them. What are practical limitations on that algorithm?
What to submit:
(1) Submit your test data.
(2) Submit ALL source code with detailed instructions on how and where to compile it, and how
to make it run. If possible, please submit a Makefile to build your code under C++, GCC,
Java, or whatever language you use. You may use any language you wish, but you need to
document what language you're using and how to compile code somewhere in your
submission. Also comment your code! If I can't read it, it's wrong!
(3) Submit your paper describing the project.
(4) Submit a file named: description.txt that describes what and where all the information is
stored. (which file does what, which file contains results of the algorithm, etc.). This is
mostly needed so that I don't get lost in your project directory.
Note: All descriptions and text should be in TEXT format. Do NOT submit MS Word
documents, etc. Everything has to be readable without any special programs. (If something "has"
to be formated, use PDF).
When submitting, you're very likely to have many files. You can compress them into a .zip, .rar,
or .tar.gz and submit that.
Tips: Organize and design the project and know what you're doing before you start coding. (and
don't wait until the last weekend to do it).
Good Luck!
Download