maintaining monotonicity in an optimization problem
6 次查看(过去 30 天)
显示 更早的评论
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 个评论
回答(1 个)
Alan Weiss
2015-1-22
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
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Get Started with Optimization Toolbox 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!