# Gradient of expression with JuMP variables

**URL:** <https://discourse.julialang.org/t/gradient-of-expression-with-jump-variables/66259>\
**Category:** Optimization (Mathematical)\
**Tags:** package, jump\
**Created:** [August 12, 2021, 11:34am UTC](https://discourse.julialang.org/t/gradient-of-expression-with-jump-variables/66259 "2021-08-12T11:34:21Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![ver\_kh](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ver_kh/32/27595_2.png) [@ver\_kh](https://discourse.julialang.org/u/ver_kh)\
**Post date:** [August 12, 2021, 11:34am UTC](https://discourse.julialang.org/t/gradient-of-expression-with-jump-variables/66259/1 "2021-08-12T11:34:22Z")

</div>

Hi!

I have a complex nonlinear expression built with JuMP variables. And now I want to find gradient of this expression with respect to these variables.

What package will be helpful in this situation?

---

<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:** [August 12, 2021, 8:14pm UTC](https://discourse.julialang.org/t/gradient-of-expression-with-jump-variables/66259/2 "2021-08-12T20:14:02Z")

</div>

There is no good way to do this in JuMP.

What are you trying to do? You could just write a function and use ForwardDiff.jl?

---

<div class="post-metadata">

**Author:** ![ver\_kh](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ver_kh/32/27595_2.png) [@ver\_kh](https://discourse.julialang.org/u/ver_kh)\
**Post date:** [August 13, 2021, 6:36am UTC](https://discourse.julialang.org/t/gradient-of-expression-with-jump-variables/66259/3 "2021-08-13T06:36:41Z")

</div>

I’m trying to write the code for transforming bilevel optimization problem to one level using KKT conditions. And I need to pass as a constraint a condition that gradient of Lagrangian of lower level problem with respect to decision variables equals to 0.

---

<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:** [August 13, 2021, 7:16am UTC](https://discourse.julialang.org/t/gradient-of-expression-with-jump-variables/66259/4 "2021-08-13T07:16:53Z")

</div>

Have you seen

[https://github.com/joaquimg/BilevelJuMP.jl](https://github.com/joaquimg/BilevelJuMP.jl)

It’s a little hard to do this with JuMPs nonlinear interface. But if the subproblems are convex you could just formulate it as a conic program.
