# How to pass 'ADNLPModels.ReverseDiffAD() as the adbackend keyword argument to the ADNLPModel or ADNLSModel constructor.'

**URL:** <https://discourse.julialang.org/t/how-to-pass-adnlpmodels-reversediffad-as-the-adbackend-keyword-argument-to-the-adnlpmodel-or-adnlsmodel-constructor/79442>\
**Category:** Optimization (Mathematical)\
**Tags:** question\
**Created:** [April 13, 2022, 4:36pm UTC](https://discourse.julialang.org/t/how-to-pass-adnlpmodels-reversediffad-as-the-adbackend-keyword-argument-to-the-adnlpmodel-or-adnlsmodel-constructor/79442 "2022-04-13T16:36:58Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![Gummala\_Navneeth](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gummala_navneeth/32/35311_2.png) [@Gummala\_Navneeth](https://discourse.julialang.org/u/Gummala_Navneeth)\
**Post date:** [April 13, 2022, 4:36pm UTC](https://discourse.julialang.org/t/how-to-pass-adnlpmodels-reversediffad-as-the-adbackend-keyword-argument-to-the-adnlpmodel-or-adnlsmodel-constructor/79442/1 "2022-04-13T16:36:59Z")

</div>

Hi all, I’m trying to minimize a function which has constraint as nonlinear vector function. input of constraint function is vector and output of constraint function is a vector of large size ( more than 500 elements )

‘’'julia

```
N=51;
cons1(x::Vector{Float64})=f123(x) # Constraint function

x0=vcat([xguess;yguess;[tfinal]]); # Initial guess vector
obj1(x)=x[1]+x[3]; # Objective function

xlower=push!(-3*ones(2*N),pi);
xupper=push!(3*ones(2*N),1.5*pi);

consLower=-ones(4*N)*Inf
consUpper=zeros(4*N)

model=ADNLPModel(obj1, x0, xlower, xupper, cons1, consLower, consUpper)

println("cx = $(cons(model, model.meta.x0))")
# println("Jx = $(jac(model, model.meta.x0))")

output=ipopt(model)
xstar=output.solution
fstar=output.objective

```

‘’’  
I want to change default option of ADNLPModel → “ForwardDiff” to “ReverseDiff”. As suggested [here](https://github.com/JuliaSmoothOptimizers/ADNLPModels.jl) . Thank you.

---

<div class="post-metadata">

**Author:** ![dpo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dpo/32/3335_2.png) [@dpo](https://discourse.julialang.org/u/dpo)\
**Post date:** [April 13, 2022, 6:13pm UTC](https://discourse.julialang.org/t/how-to-pass-adnlpmodels-reversediffad-as-the-adbackend-keyword-argument-to-the-adnlpmodel-or-adnlsmodel-constructor/79442/2 "2022-04-13T18:13:53Z")

</div>

Hi. `ReverseDiff` is an optional dependency. The `ReverseDiff` backend only becomes available after you have imported `ReverseDiff`. Is that what you were asking?

---

<div class="post-metadata">

**Author:** ![Gummala\_Navneeth](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gummala_navneeth/32/35311_2.png) [@Gummala\_Navneeth](https://discourse.julialang.org/u/Gummala_Navneeth)\
**Post date:** [April 14, 2022, 3:31am UTC](https://discourse.julialang.org/t/how-to-pass-adnlpmodels-reversediffad-as-the-adbackend-keyword-argument-to-the-adnlpmodel-or-adnlsmodel-constructor/79442/3 "2022-04-14T03:31:01Z")

</div>

I imported it. I don’t know how to change the default option of ADNLPMode .  
l want ADNLPMode to use ReverseDiff instead of ForwardDiff. Kindly provide my the syntaxes

---

<div class="post-metadata">

**Author:** ![dpo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dpo/32/3335_2.png) [@dpo](https://discourse.julialang.org/u/dpo)\
**Post date:** [April 14, 2022, 4:03am UTC](https://discourse.julialang.org/t/how-to-pass-adnlpmodels-reversediffad-as-the-adbackend-keyword-argument-to-the-adnlpmodel-or-adnlsmodel-constructor/79442/4 "2022-04-14T04:03:24Z")

</div>

There are several examples in the tests, e.g., [https://github.com/JuliaSmoothOptimizers/ADNLPModels.jl/blob/main/test/nlp/basic.jl#L30](https://github.com/JuliaSmoothOptimizers/ADNLPModels.jl/blob/main/test/nlp/basic.jl#L30).

Define your model as you did, import `ReverseDiff`, and add the argument `backend = ReverseDiffAD`.

---

<div class="post-metadata">

**Author:** ![Gummala\_Navneeth](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gummala_navneeth/32/35311_2.png) [@Gummala\_Navneeth](https://discourse.julialang.org/u/Gummala_Navneeth)\
**Post date:** [April 14, 2022, 4:28am UTC](https://discourse.julialang.org/t/how-to-pass-adnlpmodels-reversediffad-as-the-adbackend-keyword-argument-to-the-adnlpmodel-or-adnlsmodel-constructor/79442/5 "2022-04-14T04:28:00Z")

</div>

Thanks a lot, sorry for the trouble caused. Next time i will go through the document throughly.

---

<div class="post-metadata">

**Author:** ![dpo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dpo/32/3335_2.png) [@dpo](https://discourse.julialang.org/u/dpo)\
**Post date:** [April 14, 2022, 4:34am UTC](https://discourse.julialang.org/t/how-to-pass-adnlpmodels-reversediffad-as-the-adbackend-keyword-argument-to-the-adnlpmodel-or-adnlsmodel-constructor/79442/6 "2022-04-14T04:34:55Z")

</div>

No trouble! Don’t hesitate.

---

<div class="post-metadata">

**Author:** ![Gummala\_Navneeth](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gummala_navneeth/32/35311_2.png) [@Gummala\_Navneeth](https://discourse.julialang.org/u/Gummala_Navneeth)\
**Post date:** [April 14, 2022, 7:22am UTC](https://discourse.julialang.org/t/how-to-pass-adnlpmodels-reversediffad-as-the-adbackend-keyword-argument-to-the-adnlpmodel-or-adnlsmodel-constructor/79442/7 "2022-04-14T07:22:36Z")

</div>

@dpo, I have go through the link which you provided. I’m getting error, I have already installed the packages of Zygote and ReverseDiff

‘’’ julia

```
using ReverseDiff
using Zygote

using ADNLPModels
using Test

ADNLPModels.ADNLPModel

function test_autodiff_backend_error()
  @testset "Error without loading package - $adbackend" for adbackend in (ZygoteAD, ReverseDiffAD)
    adbackend = if adbackend == ZygoteAD
      eval(adbackend)(0, 0)
    else
      eval(adbackend){Nothing}(0, 0, nothing)
    end
    @test_throws ArgumentError gradient(adbackend, sum, [1.0])
    @test_throws ArgumentError gradient!(adbackend, [1.0], sum, [1.0])
  end
end

test_autodiff_backend_error()

```

‘’’

error message looks like  
‘’’ julia

```
ERROR: UndefVarError: ZygoteAD not defined
Stacktrace:
 [1] macro expansion
   @ /opt/julia-1.7.2/share/julia/stdlib/v1.7/Test/src/Test.jl:1378 [inlined]
 [2] test_autodiff_backend_error()
   @ Main ~/Navneeth_Research/Julia_Navneth_Code/testing1.jl:11
 [3] top-level scope
   @ ~/Navneeth_Research/Julia_Navneth_Code/testing1.jl:25

```

‘’’

I’m running my julia code in VScode. Any guidance is highly appreciated.

---

<div class="post-metadata">

**Author:** ![dpo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dpo/32/3335_2.png) [@dpo](https://discourse.julialang.org/u/dpo)\
**Post date:** [April 14, 2022, 2:09pm UTC](https://discourse.julialang.org/t/how-to-pass-adnlpmodels-reversediffad-as-the-adbackend-keyword-argument-to-the-adnlpmodel-or-adnlsmodel-constructor/79442/8 "2022-04-14T14:09:30Z")

</div>

Sorry, you probably have to be using the `master` branch. We’re preparing a new release now.

---

<div class="post-metadata">

**Author:** ![Gummala\_Navneeth](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gummala_navneeth/32/35311_2.png) [@Gummala\_Navneeth](https://discourse.julialang.org/u/Gummala_Navneeth)\
**Post date:** [April 14, 2022, 4:05pm UTC](https://discourse.julialang.org/t/how-to-pass-adnlpmodels-reversediffad-as-the-adbackend-keyword-argument-to-the-adnlpmodel-or-adnlsmodel-constructor/79442/9 "2022-04-14T16:05:27Z")

</div>

I’m very new to julia, if you don’t mind kindly ,show how to fix this issue.

---

<div class="post-metadata">

**Author:** ![tmigot](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tmigot/32/23914_2.png) [@tmigot](https://discourse.julialang.org/u/tmigot)\
**Post date:** [April 14, 2022, 4:40pm UTC](https://discourse.julialang.org/t/how-to-pass-adnlpmodels-reversediffad-as-the-adbackend-keyword-argument-to-the-adnlpmodel-or-adnlsmodel-constructor/79442/10 "2022-04-14T16:40:35Z")

</div>

Hi @Gummala_Navneeth ,  
As @dpo said we rework the constructor for ADNLPModel to make the change of backend more smooth.

```julia
using Pkg
Pkg.update()

```

should update `ADNLPModels` to the version `0.3.2` (you can check with `Pkg.status()`)

Then, you can follow what is in the updated doc here [Reference · ADNLPModels.jl](https://juliasmoothoptimizers.github.io/ADNLPModels.jl/dev/reference/)

```julia
using ADNLPModels
f(x) = sum(x)
x0 = ones(3)
c(x) = [1x[1] + x[2]; x[2]]
nvar, ncon = 3, 2
ADNLPModel(f, x0, c, zeros(ncon), zeros(ncon)) # uses the default ForwardDiffAD backend.

using ReverseDiff
ADNLPModel(f, x0, c, zeros(ncon), zeros(ncon); backend = ADNLPModels.ReverseDiffAD)

using Zygote
ADNLPModel(f, x0, c, zeros(ncon), zeros(ncon); backend = ADNLPModels.ZygoteAD)

```

---

<div class="post-metadata">

**Author:** ![Gummala\_Navneeth](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gummala_navneeth/32/35311_2.png) [@Gummala\_Navneeth](https://discourse.julialang.org/u/Gummala_Navneeth)\
**Post date:** [April 14, 2022, 8:49pm UTC](https://discourse.julialang.org/t/how-to-pass-adnlpmodels-reversediffad-as-the-adbackend-keyword-argument-to-the-adnlpmodel-or-adnlsmodel-constructor/79442/11 "2022-04-14T20:49:42Z")

</div>

Thanks a lot for this
