SDDP.jl: Can it model nonconvex multistage SPs?

As the title says, I want to know if the package SDDP.jl models nonconvex multistage stochastic programs? The documentation says it works for convex multistage SPs; however, to make sure I don’t reinvent the wheel, I just want to know if it can handle nonconvexity.

It depends on the nonconvexity.

You can use binary and integer variables. But we’ll find a suboptimal policy, although for many practical problems it’s usually pretty good.

But if you have a non convex function like sin(x), then no, it will not work, and you’ll likely get a policy that makes little sense.

1 Like

Do you have a generic solution approach for non-convex problems???

If you have SDDP-related questions, feel free to open an issue, Issues · odow/SDDP.jl · GitHub, and we can discuss there.

1 Like

The nonconvexity, in my case, arises mostly from bilinear terms (maybe other polynomial terms but definitely not sin(x) or something similar). Something similar to what we have in pooling problems. By reinventing the wheel, I meant implementing SDDP for my problem, which I would want to avoid if your package can already do that. I want to minimize the effort of extending a deterministic nonconvex multi-time period problem to a multistage stochastic case and solve it using SDDP. I probably need to do a little more reading on SDDP, but I will surely reach out to you on GitHub as I have more questions about how to use your package. Thanks :slight_smile:

arises mostly from bilinear terms

SDDP.jl will “solve,” but you’ll get a suboptimal policy because SDDP.jl uses tangent cuts to approximate the cost-to-go function.

I meant implementing SDDP for my problem, which I would want to avoid if your package can already do that

SDDP.jl can solve problems with bilinear terms. But it won’t find an optimal solution. But this is an algorithmic limitation, not a limitation of the particular library.

I want to minimize the effort of extending a deterministic nonconvex multi-time period problem to a multistage stochastic case and solve it using SDDP

It’s not clear that you could or should do this.

I will surely reach out to you on GitHub as I have more questions about how to use your package

Yeah this might be better than discourse. The details are somewhat niche.

1 Like