maintaining monotonicity in an optimization problem

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

답변 (1개)

Alan Weiss
Alan Weiss 2015년 1월 22일

0 개 추천

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

댓글 수: 1

Thank you Alan for the reply. I have seen a similar example in the past where there are discreet levels of power generation and only off min and max are modeled. The reason I didnt go down this road is that there is a case where the price of selling electricity is lower than the costs of running the plant but where I still have to run a generator because I need to meet the electricity demand. In this case the generator output would be somewhere in between min and max capacity.

댓글을 달려면 로그인하십시오.

카테고리

태그

질문:

2015년 1월 22일

댓글:

2015년 1월 22일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by