Considering water head in SDDP.jl

Hi everyone,

I’m using SDDP.jl to model hydropower production and want to include the effect of water head in the production constraint, which is typically formulated as

P = release×water head×efficiency parameter.

Here, the release is a control variable, and the water head is calculated from state variables, making the constraint nonlinear and thus challenging for SDDP. I’m considering using interpolation to linearize this constraint by predefining production functions at several water head levels (grid values) and reformulating it as
Pnew​=interpolate(P,water head,grid values).
However, I’m unsure if using interpolation within SDDP violates the convexity assumptions required by the algorithm. Does anyone have experience with incorporating interpolation in SDDP or suggestions for a better way to include water head in the production function while maintaining convexity? Any advice would be greatly appreciated.

Thank you!

I’m unsure if using interpolation within SDDP violates the convexity assumptions required by the algorithm

It depends on the interpolation. If your interpolation forms a non-convex function, then yes. Since you have a bilinearity, I assume the answer is yes.

for a better way to include water head in the production function while maintaining convexity

If the production function is non-convex, then you need some way of approximating it so that the result is convex. The simplest way is to use an average head level.

You could also introduce some binary variables to model the non-convexity.

One relevant question is: does the non-convexity matter? This depends on the specifics of the reservoirs that you are modeling. Sometimes yes, sometimes no.

If you look up SDDP+head+noncovex then you should find a number of papers on this topic. Places to start include Redirecting and Medium-Term Hydropower Scheduling with Variable Head under Inflow, Energy and Reserve Capacity Price Uncertainty

You might consider doing something like this: Alternative forward models · SDDP.jl. Your forward model could have the true production function, and your backward model could have the convexified one.