# How to answer questions

## How to approach a question

- Look for question words, i.e. words that
demand answers.
*derive, explain, write down, prove, define, describe, etc.* - Scan for key words and phrases that hint which part of the lecture
notes this question draws on. There may be several sections that
seem relevant: maybe the question really does draw on several
sections, or maybe some of these are red herrings.
*stability, error bars, equilibrium distribution, hitting time, processor sharing link, ρ, fit parameters, etc..* - Most questions will ask you to apply a learnt method to a new situation. You need to learn methods, not just formulae.
- Many questions are split into sub-parts, and often the sub-parts build on each other. Read the whole question and try to work out which parts depend on which other parts. This may help you understand what the question is asking.
- Go through the words of the question carefully and
methodically. Read the setup carefully—I write precise setups
and questions, and everything I tell you is relevant. Be calm,
steady, and literal-minded.
*You may find it helpful to write out everything the question setup tells you, plus a few relevant results from notes, at the top of your answer. This will remind you of the "ingredients" that are likely to come into play in your answer.* - At the end, double-check you've answered all the question words. It's surprising how many students simply forget to answer some part of a question.

- explain PRECISELY in English words what you mean
*e.g. "the probability that a packet transmission fails is the probability that at least one of the other currently-backlogged packets is currently being transmitted"* - you can mix words and symbols in equations
*e.g. "P(packet transmission fails) = P(≥1 of the other B packets are currently being transmitted)"* - write out a description of what you would do if you had the
mathematical skill, as if you're
explaining the problem to someone who is good at maths but knows
nothing at all about network modelling
*e.g. "Solve these two simultaneous equations for**B*_{1}and*B*_{2}"

## What good answers look like

When answering questions for this course, as for every other piece of work you do, write your answers so that the reader can see that there is an intelligent and creative mind behind the work.

**Knowing.**Do you know the standard models, the assumptions behind them, the relevant definitions, and the conclusions?**Applying.**Can you match the problem in question to a model or technique that you have been taught? Can you translate a wordy vague problem description into a precise problem statement? I want to see that you understand*why*the specific technique you are using is the right way to approach this class of problem. I don't want you to blindly apply formulae that you vaguely remember, since you will probably apply them wrongly. A good way to prove to me that you know what you're doing is to write out a one-line outline of the setup & technique behind any result that you use.Here is an example of an answer that clearly states a standard result then explains how the result is going to be applied:By Little's Law,*N*=λ*W*, where*N*=average number in the system, λ=arrival rate,*W*=average wait. In this question, we want to find the average number of active calls, where the arrival rate (λ) is given by λ(1-*B*), and the average wait (*W*) is given by 1/μ. Hence the average number of active calls is λ(1-*B*)/μ.**Understanding.**Which aspects of this problem are hard and interesting? I don't want to see "boilerplate" text that applies to everything in networking research, I want you to spend your time explaining the tricky bits that are unique to this problem and that an ignorant reader could easily get wrong.Text that is so generic it could be written anywhere:My simulator is event-driven. The events are flow arrivals and flow departures. After each event, it computes the time until the next event, and which event occurs. If the next event is an arrival then the new job is added to the list; if the next event is a departure then the departing job is removed from the list.Text that applies specifically to this problem, and that gives useful modeling insight, and which would explain what you are doing to someone who doesn't know any networking terminology:My simulator maintains state as a list`waiting`

of length 3, where`waiting[i]`

is a list which records, for each flow that is currently active at source`i`

, its start time and its residual file size. When a new flow starts at source`i`

, I add a new item to`waiting[i]`

: I record the start time as now, and I generate a random residual file size by calling the`rand_filesize()`

function.**Judging.**At these hard points, what led you to choose the answer you did? What alternatives did you consider? What evidence do you have that you made the right choice?I considered creating a class

`Flow`

, and making each flow keep track of how much it has left to send, and which path it's on, and using a single list to store all active flows in the system. But this would require me to repeatedly iterate through the list to identify for each path how many flows it has active, and this would be inefficient. Furthermore, given that for each flow all I need to store is its start time and its residual file size, it is overkill to create a whole class.**Justifying.**When a question asks you for an answer, you need to back up your answer. There may be different types of evidence that could apply. Why did you choose to offer one sort of evidence, rather than another?The question asks for what value of arrival rate

*x*the system is unstable. There are two sorts of instability: random fluctuations, and "explosive behaviour". In the case of a bandwidth-sharing model, we expect that there will be random fluctuations becase the arrival process and the flow sizes are all random, so the sort of instability I will look for is "explosive behaviour", i.e. when a backlog builds up and it grows steadily.In the unipath model there might be a backlog on any of the 6 paths; in the coupled and uncoupled models, there might be backlogs at any of the 3 sources. I will therefore plot the backlog as a function of time, and see whether or not the backlog is increasing. I shall plot all the possible backlogs (6 in the unipath case, 3 in the other cases) since it may be that one is stable while another is unstable.

Obviously, I need to run my simulation for long enough to decide whether or not the backlog is growing, i.e. long enough that the random fluctuations don't matter. I observed that for runs of length 1000 or more, the backlog graph is pretty much a straight line, so I am confident that runs of length 1000 are sufficient to detect backlog.

**Investigating.**For the longer coursework questions, I may expect you to explore and investigate, and I may expect you to do this without prompting.For a simulation question, this probably means running your simulator in different scenarios, visualizing the outcome, thinking up a conjecture about what you are seeing, running more simulations to test your conjecture, etc. For a maths question, this perhaps means thinking up different types of model, different ways to write down the state space, different analysis methods. Try out several different methods, and pick the one that is most helpful.The question asks how to deal with run-in. In order to investigate the problem of run-in, I first ran the simulation for 100, 500, 1000, 5000 and 10000 seconds of simulation time, in order to see if the behaviour is any different at the beginning versus later on. To visualize this, I plotted graphs showing the number of active flows as a function of time.

I observed that at

*x=5*, all of the graphs show fluctuations over close to the maximal range of fluctuations within the first 50 seconds. Therefore, any run-in effects have disappeared by 50 seconds. I then investigated how this time period depends on*x*. I observed ...**Evaluating.**Have you thought about the limitations of your approach? Have you realized why I set the question in the first place—the practical questions for which this piece of work can give useful answers, or the insight I want you to acquire by answering this question?I used a small Markov chain model to calculate the pagerank of a small website. My Markov chain model did not take full account of all the entirety of the web, so it does not correspond to the true Google pagerank algorithm. However, the hitting times for my small Markov chain, and the hitting times for the true Google pagerank algorithm, should give very nearly the same answer. I found that the mean duration of a visit to my website increased by a factor of 3 for my small Markov chain, therefore the mean duration of a visit to my website will increase by a factor of 3 for the true Google pagerank Markov chain, therefore the my true pagerank should increase by ...