diff --git a/Exercise 7 - Assignment 2 Preparation (Week 8)/Ex7.pdf b/Exercise 7 - Assignment 2 Preparation (Week 8)/Ex7.pdf new file mode 100644 index 0000000..fbb7eea Binary files /dev/null and b/Exercise 7 - Assignment 2 Preparation (Week 8)/Ex7.pdf differ diff --git a/Exercise 7 - Assignment 2 Preparation (Week 8)/ex7.txt b/Exercise 7 - Assignment 2 Preparation (Week 8)/ex7.txt new file mode 100644 index 0000000..cf90055 --- /dev/null +++ b/Exercise 7 - Assignment 2 Preparation (Week 8)/ex7.txt @@ -0,0 +1,65 @@ +Q1. Main program function (loop explained in detail in Q3). + +- Input file name + +- try opening file, print error and exit if fails + +- read two integers i.e. no. of business class and tourist class servers (these serve as artificial limits on respective idle server queues) + +- read (float, integer, float) and initialise min-heap with this event + +- start simulation loop in which event at the top min-heap is processed (explained in part Q3.) + +- seek to the top of the file for second scenario simulation + +- read (float, integer, float) and initialize min-heap with this event + +- start simulation loop in which event at the top min-heap is processed (explained in part Q3.). This time, business servers can serve tourist customers if free and business customer queue is empty (explained in Part Q3.) + + + +Q2. Event can be either arrival of new customer or completion of serving a customer + + + +Q3. Each event (element in min-heap) has event ID. If id == 0 than event type is new customer arrival, else event is completion of serving a customer by a server. Server type is identified by server id no. Business class servers are in range 1-20 and tourist class servers in range 21-40. [Alternatively, business class server are in the range 1 to no. of business customers and tourist servers are above business customer servers.] + +- simulation while loop + - if heap[0].id == 0 i.e. event type is customer arrival than: + - save heap[0] in current_customer variable + - read next customer arrival in heap[0] + - if next read is (0, 0, 0) i.e. no more customers than: + - swap heap[0] with heap[-1] + - reduce heap size by 1 + - else: + - replace heap[0] with next arrival record + - shiftdown(heap[0]) + - (current_customer variable) if any of it's class server free i.e its idle server queue is not empty than: + - assign customer to that server + - add it to the back of heap + - Set its event time current time + service time (when the server will be finished with current customer) + - extend heap size by 1 + - shiftup(Heap[-1]) + - else if no server free + - add customer to respective queue + - else if heap[0].id != 0 i.e. event type is a server finished with serving a customer + - if respective queue isEmpty() == true: + - replace heap[0] with queue.pop() (first customer in queue) + - shiftdown(heap[0]) + - else if respective isEmpty() == false: + - free server and add it to respective idle servers queue + - swap heap[0] with heap[-1] and reduce heap size by 1 + - shift down heap[0] + - if heap_size == 0: + - break loop + +For second of simulation, all will be same except when business customer server finishes serving and business customer queue is empty: +- if tourist customer queue is not empty + - server that tourist customer + +And: +- if arrival is tourist customer: + - if no idle tourist server and tourist queue is empty: + - if any idle business server: + - assign customer to business server +