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.

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.

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

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.