Uploaded by sayleee24

LODS GurobiAssignment 2023

advertisement
JBM035: Linear Optimization for Data Science 2023
Pieter Kleer
P. S . KLEER @ TILBURGUNIVERSITY. EDU
Gurobi Assignment
Deadline: Friday, July 7, 23:59 (CEST), 2023
General instructions
◦ This assignment is made individually. You can discuss it with other students, but you
have to write the code yourself1 , and you should be able to explain what was handed in
upon request. Plagiarism or fraude (of any kind) will result in a grade of 0, possible
exclusion from the course, and reported to the Examination Board.
◦ You are allowed to use all functionality that Gurobi and Python have to offer.
◦ Apart from correctly solving the problems, your submission is also assessed on coding
style & documentation. This means that you should try to apply the materials from the
tutorials as much as possible to create good, efficient, well-structured Python code. Furthermore, you should add comments to your code explaining what you are doing.
◦ If you have questions, send an e-mail to P. S . KLEER @ TILBURGUNIVERSITY. EDU.
What to hand in?
You have to hand in a Jupyter notebook (.ipynb) file containing your code and documentation.
◦ Clearly indicate where you answer which question!
◦ Clearly explain what you do in your code.
Late submissions automatically get grade 0 (no discussion possible).
1 Meaning
also no help of (AI-driven) chatbots or programs such as ChatGPT.
Decreasing CO2 emissions
Variation on Exercise 6 of Lectures 1-2
The Dutch government wants to decrease CO2 emissions in The Netherlands by an additional
15% in the period 2021–2030. Studies have revealed that there are five key areas where new
government policies will lead to emission reductions, namely: Industry Efficiency Standards,
Carbon Pricing, Industrial Emissions Policies, Power Sector Policies, and Land Use.
Each one of these policy areas could give some reduction in CO2 emissions (as shown in Table
1), and the government has estimates of what each policy will cost to achieve a 1% reduction in
emissions (also shown in Table 1). The government wants to fund the different areas in order
to achieve at least f % of reductions in emissions in total. In order to make sure the money is
spread somewhat evenly, every area can obtain at most g times the amount of funding that any
other area gets. The parameters f and g are general input parameters that will be chosen later.
Industry Efficiency
Standards
Carbon
Pricing
Industrial Emissions
Policies
Power Sector
Policies
Land
Use
16.3
25.8
10.3
11.2
14.7
5.3
7.2
3.8
2.7
6.1
maximum
reduction (%):
Cost of 1%
reduction
(Billion e):
Table 1: Details on the emission reduction policies.
To formulate this problem as an LOP, we introduce the indices
1. Industry Efficiency Standards,
2. Carbon Pricing,
3. Industrial Emissions Policies,
4. Power Sector Policies,
5. Land Use.
We have the following input data
◦ mi : maximum possible reduction from policy i (in %); see Table 1.
◦ ci : cost (billion e) of policy i to reduce a 1% reduction; see Table 1.
◦ f : CO2 emission reduction target (in %); can be chosen by user.
◦ g: Maximal (multiplicative) difference funding between two areas; can be chosen by user.
Decision variables are xi : amount of funding for policy i (in billion e).
The above problem can be modeled with the following LOP:
5
min
∑ xi
i=1
5
subject to
1
∑ ci xi ≥ f
i=1
xi ≤ ci mi
xi ≤ gx j
xi ≥ 0
(1)
i = 1, . . . , 5
i, j = 1, . . . , 5 with i 6= j
i = 1, . . . , 5.
1) [11 points, Tutorials 1 & 2] Write a function POLICY that takes as input values for f and
g and outputs the optimized LOP above for the given values of f and g (together with the
input data as in Table 1). The output should be the optimized LO model.
Try to make efficient use of indices in your code. For example, try to make sure that: If
one of the input values (or policy names) is changed, then ideally you should only have to
change this at ONE point in your code. If you cannot achieve this, that is not a problem,
but this might cost you some points (this is the ”efficiency” part of your code that is also
being assessed).
2) [3 points] Run your function ten times on the input pairs ( f , g) with f = 15 and g ∈
{1, 2, . . . , 10} and give an overview of the objective values (not the variable values) for
every g.
Be efficient in your code, i.e., do not to copy-paste your function call ten times with a
different value of g (this is the ”efficiency” part that is being assessed).
The objective function should decrease as g increases. Explain why this is the case based
on the LOP formulation.
3) [2 points, Tutorial 3] Take f = 15 and g = 10. Argue, by looking at the (correct) shadow
price, how much extra funding would be needed if we raise the value of f to 16.
In order to simplify the funding policy the government is considering always funding an area a
multiple of five billion euros. That is
xi ∈ {0, 5, 10, 15, . . . , } for i = 1, . . . , 5.
(2)
4) [4 points, Tutorial 4] Create a new function POLICY SIMPLIFIED that takes as input
values f and g, and outputs the optimized LO model with the additional constraint (2).
You can copy your solution from 1) and adjust it accordingly. Hint: Introduce new integer
variables yi for i = 1, . . . , 5. Think of an appropriate constraint to link xi to yi so that (2)
is satisfied.
Optimize your function for f = 15 and g = 10. Which policy would you recommend to
the government, the original or the ”simplified” policy based on (2)?
About creating indices:
◦ If you want to create a dictionary like
costs = {
’process-1’: 51,
’process-2’: 11,
’process-3’: 40,
}
as in Tutorial 2, you can create two lists
process = [’process-1’,’process-2’,’process-3’]
cost = [51,11,40]
and then use
dict(zip(process,cost))
to create the desired dictionary. This is useful whenever indices, like the processes in
this case, appear in multiple input data. By cleverly setting up indices like this, you
can write your input data very compactly as dictionaries.
Download