# ERROR: The provided \`optimizer\_constructor\` is invalid

**URL:** <https://discourse.julialang.org/t/error-the-provided-optimizer-constructor-is-invalid/98607>\
**Category:** Optimization (Mathematical)\
**Created:** [May 10, 2023, 11:33am UTC](https://discourse.julialang.org/t/error-the-provided-optimizer-constructor-is-invalid/98607 "2023-05-10T11:33:35Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Gianmarco\_Montillo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gianmarco_montillo/32/49458_2.png) [@Gianmarco\_Montillo](https://discourse.julialang.org/u/Gianmarco_Montillo)\
**Post date:** [May 10, 2023, 11:33am UTC](https://discourse.julialang.org/t/error-the-provided-optimizer-constructor-is-invalid/98607/1 "2023-05-10T11:33:35Z")

</div>

Hello everyone, I am trying to solve a math model using [Alpine.jl](https://github.com/lanl-ansi/Alpine.jl). Given n arrays of different dimension, n constraint of strict equalities (one for each sum of the whole array i.e. sum(x)==X, sum(y)==Y, sum(z)==Z), one upper-bound constraint for the sum of the n arrays, my objective function will be to maximize the sum of the arrays.  
I use Binary variables to set to 0 when a condition of equality can’t be respected.

From this code:

> using Alpine, JuMP, GLPK, MadNLP, SCIP, Ipopt, Gurobi, Juniper  
> include(“…/examples/JuMP\_models.jl”)  
> include(“…/examples/optimizers.jl”)  
> nlp\_solver = get\_ipopt() # local continuous solver  
> mip\_solver = get\_gurobi() # convex mip solver  
> minlp\_solver = get\_juniper(mip\_solver, nlp\_solver)  
> const alpine = JuMP.optimizer\_with\_attributes(  
> Alpine.Optimizer,  
> “minlp\_solver” =\> minlp\_solver,  
> #“nlp\_solver” =\> nlp\_solver,  
> #“mip\_solver” =\> mip\_solver,  
> “presolve\_bt” =\> false,  
> “apply\_partitioning” =\> true,  
> “partition\_scaling\_factor” =\> 10,  
> )

> model = JuMP.Model(alpine)  
> @variable(model, x[1:9])  
> nx = length(x)  
> @variable(model, y[1:7])  
> ny = length(y)  
> @variable(model, z[1:10])  
> nz = length(z)  
> @variable(model, i[1:3, 1:max(nx, ny, nz)], Bin)  
> @constraint(model, sum(x’\*i[1,1:nx]) == 500)  
> @constraint(model, sum(y’\*i[2,1:ny]) == 1000)  
> @constraint(model, sum(z’\*i[3,1:nz]) == 650)  
> @constraint(model, sum(x’\*i[1,1:nx]) + sum(y’\*i[2,1:ny]) + sum(z’\*i[3,1:nz]) \<= 1600)

> @objective(model, Max, sum(x’\*i[1,1:nx]) + sum(y’\*i[2,1:ny]) + sum(z’\*i[3,1:nz]))  
> JuMP.optimize!(model)

I get this error:

> ERROR: The provided `optimizer_constructor` is invalid. It must be callable with zero arguments. For example, “Ipopt.Optimizer” or “() → ECOS.Optimizer()”. It should not be an instantiated optimizer like “Ipopt.Optimizer()” or “ECOS.Optimizer()”. (Note the difference in parentheses!)

Can someone please help me to solve this problem?

---

<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:** [May 10, 2023, 11:12pm UTC](https://discourse.julialang.org/t/error-the-provided-optimizer-constructor-is-invalid/98607/2 "2023-05-10T23:12:13Z")

</div>

I can’t reproduce your code because I don’t know what the `get_ipopt` function is, etc.

I haven’t tested locally so I might have made a typo, but something like this should work:

```plaintext
using JuMP, Alpine, Ipopt, Gurobi, Juniper

gurobi = optimizer_with_attributes(Gurobi.Optimizer)
ipopt = optimizer_with_attributes(Ipopt.Optimizer)
juniper = optimizer_with_attributes(
    Juniper.Optimizer,
    "nl_solver" => ipopt,
    "mip_solver" => gurobi,
)
alpine = optimizer_with_attributes(
    Alpine.Optimizer,
    "mip_solver" => gurobi,
    "nl_solver" => ipopt
    "minlp_solver" => juniper,
)
model = Model(alpine)

```
