maintaining monotonicity in an optimization problem
6 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I have written a program for optimizing a set of generators. I have hourly price and cost data and need to figure out when a generator should run or just stay off. I describe the problem in more detail below. The first description is of the current optimization which only deals with a single generator. Following I show a WIP formulation for dealing with multiple generators and an additional demand constraint.
In the first formulation, it is possible to optimize for income6 using a non linear solver, and then optimize revenue6 using an integer solver. This is since revenue6 is a monotonic function of income6. Thus x_1 is optimized first, then x_2 and x_3.
Part 1
Problem Description 1
- x_1 is the generator output at any one point in time and is constrained to be between a min and max capacity
- x_2 is an integer variable used simply to turn the generator off completely
- x_3 lastly is another integer variable used to apply a startup cost whenever the generator is switched on.
- x_1, x_2 and x_3 are vectors where the index of the vector (eg. x_1(1:5) is the data for the first 5 hours)
Objective Function (totrevenue6):
- efficiency6 = 0.2621*x_1 - 0.1229*x_1^2 + 0.2543
- income6 = {(x_1)*(AC_1 + FC_1 - P_1 + FC_1/{el_efficiency6})}
- revenue6 = - SC_1*x_3 + x_2*(income6)
- totrevenue6 = -sum(revenue6)
Constraints:
- min_capacity <= generator6 power (x_1) <= max_capacity
- 0 <= generator6 toggle (x_2)<= 1
- The startup constraint (x_3) is x_2-x_{2-1}<=x_3
- 0 <= (x_3)<= 1
Part 2
New Formulation
I have continued to develop the program to optimize the set of generators and I now need to add the profit from two additional blocks to the objective function.
Objective Function (totrevenue):
income6 = {(x_16)*(AC_1 + FC_1 - P_1 + FC_1/{el_efficiency6})}
revenue6 = - SC_16*x_36 + x_26*(income6)
income7 = {(x_17)*(AC_1 + FC_1 - P_1 + FC_1/{el_efficiency7})}
revenue7 = - SC_17*x_37 + x_27*(income6)
income8 = {(x_18)*(AC_1 + FC_1 - P_1 + FC_1/{el_efficiency8})}
revenue8 = - SC_18*x_38 + x_28*(income6)
**totrevenue** = -sum(revenue6+revenue7+revenue8)
Constraints
- x_16 + x_17 + x_18 >= demand at time t
- x_26*x_16 + x_27*x_17 + x_28*x_18 >= demand at time t
Essentially I need to make sure that both optimizations meet the demand for each time step. (x_16 is generator electricity output for block 6, x_17 is for block 7, etc.)
Question:
Will it be possible to optimize the sum of (income6 + income7 + income8) using a non linear solver first, and then optimize totalrevenue using an integer solver, and in this way maintain monotonicity? I would like to maintain monotonicity so that I dont have to use a non linear integer solver.
Many thanks, Jesse
0 Kommentare
Antworten (1)
Alan Weiss
am 22 Jan. 2015
Firstly, I don't know the answer to your question off the top of my head, sorry.
Secondly, I wonder if you can reformulate your problem to have it be an entirely linear MILP problem, along the lines of this example. Instead of having a purely continuous set of levels for x_1, perhaps you can choose a small set of levels, and have costs associated with the various levels, as in the example. Then perhaps the entire problem can be solved in one MILP call, without using a nonlinear solver at all.
Good luck,
Alan Weiss
MATLAB mathematical toolbox documentation
Siehe auch
Kategorien
Mehr zu Get Started with Optimization Toolbox finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!