The first few sentences should give a quick overview of the entire project. Then, elaborate with a description of the problem that will be solved, a brief history (with citations) of how the problem came about, why it's important/interesting, and any other interesting facts you'd like to talk about. You should address and explain where the problem data is coming from (research? the internet? synthetically generated?) Also give an outline of the rest of the report.
This section should be 300-600 words long, and should be accessible to a general audience (don't assume your reader has taken the class!). Feel free to include images if you think it'll be helpful:
For more help on using Markdown, see this reference.
A discussion of the modeling assumptions made in the problem (e.g. is it from physics? economics? something else?). Explain the decision variables, the constraints, and the objective function. Finally, show the optimization problem written in standard form. Discuss the model type (LP, QP, MIP, etc.). Equations should be formatted in $\LaTeX$ within the IJulia notebook. For this section you may assume the reader is familiar with the material covered in class.
Here is an example of an equation:
$$ \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} 5 \\ 6 \end{bmatrix} $$And here is an example of an optimization problem in standard form:
$$ \begin{aligned} \underset{x \in \mathbb{R^n}}{\text{maximize}}\qquad& f_0(x) \\ \text{subject to:}\qquad& f_i(x) \le 0 && i=1,\dots,m\\ & h_j(x) = 0 && j=1,\dots,r \end{aligned} $$For some quick tips on using $\LaTeX$, see this cheat sheet.
Here, you should code up your model in Julia + JuMP and solve it. Your code should be clean, easy to read, well annotated and commented, and it should compile! You are not allowed to use other programming languages or DCP packages such as convex.jl
. I will be running your code. I suggest having multiple code blocks separated by text blocks that explain the various parts of your solution. You may also solve several versions of your problem with different models/assumptions.
It's fine to call external packages such as Gurobi
, but try to minimize the use of exotic libraries.
# this is a code block
using JuMP, Clp
m = Model(solver = ClpSolver())
things = [:horses, :donkeys, :goats] # these are the things
@variable(m, x[things] >= 0) # the quantities of each of the things (can't be negative)
@constraint(m, sum(x) <= 10) # we can't have any more than 10 things total
@objective(m, Max, x[:horses]) # we want to maximize the number of horses
solve(m)
for i in things
println("The total number of ", i, " is: ", getvalue(x[i])) # print result
end
The total number of horses is: 10.0 The total number of donkeys is: 0.0 The total number of goats is: 0.0
Remember to make sure your code compiles! I will be running your code!
Here, you display and discuss the results. Show figures, plots, images, trade-off curves, or whatever else you can think of to best illustrate your results. The discussion should explain what the results mean, and how to interpret them. You should also explain the limitations of your approach/model and how sensitive your results are to the assumptions you made.
Use plots (see PyPlot
examples from class), or you can display results in a table like this:
Tables | Are | Cool |
---|---|---|
col 3 is | right-aligned | $1600 |
col 2 is | centered | $12 |
zebra stripes | are neat | $1 |
Summarize your findings and your results, and talk about at least one possible future direction; something that might be interesting to pursue as a follow-up to your project.