# Convergence of SDDP with nonlinear objective and mixed-integer variables

**URL:** <https://discourse.julialang.org/t/convergence-of-sddp-with-nonlinear-objective-and-mixed-integer-variables/127947>\
**Category:** Optimization (Mathematical)\
**Tags:** gurobi, sddp\
**Created:** [April 10, 2025, 1:02pm UTC](https://discourse.julialang.org/t/convergence-of-sddp-with-nonlinear-objective-and-mixed-integer-variables/127947 "2025-04-10T13:02:34Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Engr\_Moiz\_Ahmad](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/engr_moiz_ahmad/32/214621_2.png) [@Engr\_Moiz\_Ahmad](https://discourse.julialang.org/u/Engr_Moiz_Ahmad)\
**Post date:** [April 10, 2025, 1:02pm UTC](https://discourse.julialang.org/t/convergence-of-sddp-with-nonlinear-objective-and-mixed-integer-variables/127947/1 "2025-04-10T13:02:34Z")

</div>

@odow what reference should I cite if I want to claim that due to the simultaneous occurrence of exponential terms in the objective and mixed integer decision space, SDDP can not be used?

---

<div class="post-metadata">

**Author:** ![WalterMadelim](https://avatars.discourse-cdn.com/v4/letter/w/3e96dc/32.png) [@WalterMadelim](https://discourse.julialang.org/u/WalterMadelim)\
**Post date:** [April 10, 2025, 2:14pm UTC](https://discourse.julialang.org/t/convergence-of-sddp-with-nonlinear-objective-and-mixed-integer-variables/127947/2 "2025-04-10T14:14:30Z")

</div>

What is meant by “reference” and “cite”? Are you writing a paper?  
Gurobi can solve MINLP with the `exp` function, but presumably only small scaled ones.

---

<div class="post-metadata">

**Author:** ![Engr\_Moiz\_Ahmad](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/engr_moiz_ahmad/32/214621_2.png) [@Engr\_Moiz\_Ahmad](https://discourse.julialang.org/u/Engr_Moiz_Ahmad)\
**Post date:** [April 10, 2025, 2:18pm UTC](https://discourse.julialang.org/t/convergence-of-sddp-with-nonlinear-objective-and-mixed-integer-variables/127947/3 "2025-04-10T14:18:32Z")

</div>

I am writing a paper. In this regard, are there any SDDP convergence guarantees for mixed-integer programming with exponential terms in the objective?

---

<div class="post-metadata">

**Author:** ![WalterMadelim](https://avatars.discourse-cdn.com/v4/letter/w/3e96dc/32.png) [@WalterMadelim](https://discourse.julialang.org/u/WalterMadelim)\
**Post date:** [April 10, 2025, 2:46pm UTC](https://discourse.julialang.org/t/convergence-of-sddp-with-nonlinear-objective-and-mixed-integer-variables/127947/4 "2025-04-10T14:46:07Z")

</div>

Do you mean the famous algorithm SDDP, or do you mean SDDP.jl?  
If you mean the former, then just as its name, it could not. SDDP is for continuous multistage linear. There are standard references.

---

<div class="post-metadata">

**Author:** ![Engr\_Moiz\_Ahmad](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/engr_moiz_ahmad/32/214621_2.png) [@Engr\_Moiz\_Ahmad](https://discourse.julialang.org/u/Engr_Moiz_Ahmad)\
**Post date:** [April 10, 2025, 3:01pm UTC](https://discourse.julialang.org/t/convergence-of-sddp-with-nonlinear-objective-and-mixed-integer-variables/127947/5 "2025-04-10T15:01:39Z")

</div>

I meant the latter, and about the convergence guarantees of it, when it comes to mixed-integer nonlinear (exponential terms in the objective) multi-stage programs.

---

<div class="post-metadata">

**Author:** ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)\
**Post date:** [April 10, 2025, 8:01pm UTC](https://discourse.julialang.org/t/convergence-of-sddp-with-nonlinear-objective-and-mixed-integer-variables/127947/6 "2025-04-10T20:01:21Z")

</div>

Hi @Engr_Moiz_Ahmad, in future, please start a new topic if you have a new question, instead of posting on an old thread. (For this question, I’ve moved these posts to a new topic.)

You can use SDDP if you have a nonlinear objective and mixed-integer decisions, but you probably shouldn’t.

Convergence is guaranteed only if you have a pure binary state-space and you use `SDDP.train(model; duality_handler = SDDP.LagrangianDuality())`.

You may want to look at the following:

- Girardeau P, Lecl`ere V, Philpott AB (2015) On the Convergence of Decomposition Methods for Multistage Stochastic Convex Programs. Mathematics of Operations Research 40(1):130–145.
- Zou J, Ahmed S, Sun XA (2019) Stochastic dual dynamic integer programming. Mathematical Programming. 175(1-2):461–502.

Edit: okay, one code issue for SDDP.jl is that Gurobi can’t provide duals for NLP. I’ve opened an issue: [Which solver can solve a MINLP · Issue #844 · odow/SDDP.jl · GitHub](https://github.com/odow/SDDP.jl/issues/844)

---

<div class="post-metadata">

**Author:** ![Engr\_Moiz\_Ahmad](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/engr_moiz_ahmad/32/214621_2.png) [@Engr\_Moiz\_Ahmad](https://discourse.julialang.org/u/Engr_Moiz_Ahmad)\
**Post date:** [April 11, 2025, 4:06am UTC](https://discourse.julialang.org/t/convergence-of-sddp-with-nonlinear-objective-and-mixed-integer-variables/127947/7 "2025-04-11T04:06:13Z")

</div>

Got it @odow, I will start a new topic for posting a new question. The problem I had is now resolved and I think I should either linearized or use SDDiP to find the upper bound (in case of minimization).

---

<div class="post-metadata">

**Author:** ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)\
**Post date:** [April 11, 2025, 4:15am UTC](https://discourse.julialang.org/t/convergence-of-sddp-with-nonlinear-objective-and-mixed-integer-variables/127947/8 "2025-04-11T04:15:28Z")

</div>

You might want to read [Does SDDP.jl implement the SDDiP algorithm?](https://sddp.dev/stable/guides/add_integrality/#Does-SDDP.jl-implement-the-SDDiP-algorithm?)

You can always find a valid upper bound (if minimizing) by simulating the policy.

Similarly, you can always find a valid lower bound by training using SDDP.jl.

The claim is that these are guaranteed to converge only if you satisfy all of the assumptions of SDDP, which, if you have integrality, means having a pure binary state space and using `LagrangianDuality`.

But if you have a mixed-integer state-space, and you train using the SDDP default, you can still find valid lower and upper bounds, they just might never converge.

---

<div class="post-metadata">

**Author:** ![WalterMadelim](https://avatars.discourse-cdn.com/v4/letter/w/3e96dc/32.png) [@WalterMadelim](https://discourse.julialang.org/u/WalterMadelim)\
**Post date:** [April 11, 2025, 4:50am UTC](https://discourse.julialang.org/t/convergence-of-sddp-with-nonlinear-objective-and-mixed-integer-variables/127947/9 "2025-04-11T04:50:10Z")

</div>

> [@odow](#):
>
> You can always find a valid upper bound

is this a _statistical_ upper bound?

> [@odow](#):
>
> only if you satisfy all of the assumptions of SDDP

you meant SDDiP?

> [@odow](#):
>
> they just might never converge

maybe can converge, but with a nontrivial gap. Maybe you want to say this?

---

<div class="post-metadata">

**Author:** ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)\
**Post date:** [April 11, 2025, 7:55am UTC](https://discourse.julialang.org/t/convergence-of-sddp-with-nonlinear-objective-and-mixed-integer-variables/127947/10 "2025-04-11T07:55:30Z")

</div>

> is this a _statistical_ upper bound?

Yes

> you meant SDDiP?

I dislike calling SDDiP a separate algorithm. It’s the same algorithm. The paper is about a convergence result. See the link above.

> maybe can converge, but with a nontrivial gap. Maybe you want to say this?

Sure, the upper bound will converge to something, and the lower bound will converge to something, but they might not converge together with a zero gap.
