# Python Coursework 2017

Problem Solving with Python

This coursework is worth 40% of the total marks available for this module. The penalty for late or non submission is an award of zero marks. You are reminded of the need to comply with University’s

Student Guide to Academic Integrity. Your work should be submitted using the official Coursework Submission Cover sheet.

Problem definition

A small, local branch of a bank employs a single teller. The manager is considering ways to improve customer satisfaction by reducing queuing times. This coursework will use computer simulation to provide

the necessary evidence to support their decision.

Deliverables

You must submit:

1. A single source code file based on the template provided for Question 1. This file should also contain

your code to answer Question 2.

2. A pdf file with the figure to answer Question 2.

3. A Word file (based on the template provided) of no more than 2 pages that answers Question 3, and

any source code used (this can be combined with your answer to 1 if desired).

Description Type Name

Cover sheet One pdf file [Student number].pdf

Answer to Q2 One pdf file Figure_[Student number].pdf

Answer to Q3 One Word or pdf file Report_[Student number].pdf

Source code for Q1, 2 and 3 One or more Python files No restriction

(may be contained in a single zip file)

## Python: Simulating a single queue

1. The key parameters in this simulation are the rate at which customers arrive, and the length of time

each customer takes with the teller.

2. Let α be the mean gap between customers arriving.

3. Let β be the mean time that a teller will take to serve a customer.

4. A function nextTime is provided for you that will generate appropriate random times when passed

a desired mean.

5. The following algorithm can be used to simulate a single queue over a period of simTime minutes. It

uses variables:

• c to store the current time (measured in minutes) within the simulation

• ta to store the time to the next customer arrival

• ts to store the time until the current customer has finished being served

• Q to store the current length of the queue

• maxQ to store the size of the longest queue

The algorithm progresses by repeatedly incrementing the current time to the time of the next critical

event – either a customer arriving, or a customer leaving after their service has finished.

2

Initialise: ta, ts, c,

maxQ to 0; Q to 1

ta < ts ?

ts = ts – ta

c = c + ta

Q = Q + 1

ta = random arrival

time

ta = ta – ts

c = c + ts

Q = Q – 1

ts = random service

time

Q = 0 ?

YES NO

YES NO

Next event is an

arrival – joins queue

Next event is current

services finishing –

reduces queue

c <

simTime

?

Return NO

maxQ

YES

Update maxQ

## Problem Solving with Python Questions

1. Complete the Python source code template provided to answer the questions below. You will be

given a functionality mark for each question that will be largely based on how well your code satisfies

a range of doctests (some of these are provided for you – others may also be used).

There will be an additional mark covering the general quality and style of your code:

• Is the code readable and easy to follow?

• Is the code elegant and well-written?

• Is the code simplified by the use of built-in language features where appropriate?

[Code quality: 5 marks]

(a) Assume the time between customer arrivials is generated by the function nextTime with mean

α, and the time taken to serve a customer is generated by the function nextTime with mean

β. Mathematical theory then states that (over a suitably long period) the mean queue length is

equal to:

βα

1 – β

α

Complete the function theoreticalMeanQueueLength so that it calculates this value given parameters α and β.

[Functionality: 3 marks]

(b) Complete the function checkMean so that it calls the function nextTime a specified number of

times for a desired mean, and calculates the actual mean of the random times returned.

[Functionality: 3 marks]

(c) Suppose you are required to perform simulations for a number of scenarios whose parameters

are given in a csv file with the format:

alpha (m), beta (m), simTime, time unit,

10, 2, 480,,

5, 3, 480,,

20, 15, 240,,

20, 2, 8, h,

15, 2.5, 360,,

where the first column specifies the mean customer arrival time; the second specifies the mean

service time; and column three specifies the simulation time in minutes unless there is a h in

column 4 – in this case the value in column 3 contains a number of hours.

Complete the function readcsv readExperimentParameters so that it reads in a csv file of this

format and returns a list of tuples with 3 elements containing the parameter sets with all times

given in minutes.

[Functionality: 3 marks]

(d) Complete the function simulate singleQueue so that it implements the queuing algorithm

above to simulate a queue with the specified parameters, and returns the maximum queue

length.

[Functionality: 6 marks]

4

2. Using matplotlib, plot a line graph that shows how the theoretical mean queue length varies as α

varies between 1.1 and 10 using steps of 0.1 while keeping β = 1 // αβ/////////varies/////////// between////1.1//////and///10////////using

//////steps////of////0.1 . Provide your source code and a pdf file containing the figure, remembering to label the

axes and provide a title.

[Functionality: 5 marks]

3. Produce a scientific report using the supplied template, that demonstrates compares the customer

service benefits that would arise from:

(a) Purchasing new equipment that reduces the mean service time per customer (your answer

should consider a range of different percentage reductions).

(b) Employing a second teller.

Your conclusions should be based on an appropriate number of simulations for an appropriate range

of experimental parameters, and consider average vs worst case customer experience.

If you modify the algorithm, you do not need to include the modified pseudocode in your report.

[Report: 6 marks; Achievement: 4 marks; Code quality: 5 – see template for more detail]

Python Feedback

Feedback on your coursework will address the above criteria.

Individual feedback will be returned by the end of Week 12 (i.e. after 12 University working days).

Group feedback will be provided in the revision lecture in week 12 and via model solutions to question 1

directly after all student submissions have been made.

Problem Solving with Python

Order your python assignment now and get a discount!