Skip to content

Using MOI to Warm Start Duals Values on Nonlinear Constraints #1746

@dsigler1234

Description

@dsigler1234

Hello,

I am trying to warm start a non-linear model that I am solving using Ipopt. I can warm start the primal variables just fine and the dual variables for all constraints except the ones made using the non-linear interface. Here is a simple example:

using JuMP
import Ipopt
using MathOptInterface
const MOI = MathOptInterface

model = JuMP.Model(Ipopt.Optimizer)
@variable(model, x)
@constraint(model, con, x >= 0)
@NLconstraint(model, nl_con, cos(x) >= 1.0 )
@objective(model, Min, x)

JuMP.optimize!(model)

con_dual_val = JuMP.dual(con)
nl_dual_val = JuMP.dual(nl_con)

MOI.set(model, MOI.ConstraintDualStart(), con, con_dual_val) # works just fine
MOI.set(model, MOI.ConstraintDualStart(), nl_con, nl_dual_val) # causes the error below

ERROR: LoadError: MethodError: no method matching throw_set_error_fallback(::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.Bridges.LazyBridgeOptimizer{Ipopt.Optimizer}, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}, ::MathOptInterface.ConstraintDualStart, ::NonlinearConstraintIndex, ::Float64)
Closest candidates are:
throw_set_error_fallback(::MathOptInterface.ModelLike, ::Union{MathOptInterface.AbstractConstraintAttribute, MathOptInterface.AbstractVariableAttribute}, ::Union{MathOptInterface.VariableIndex, MathOptInterface.ConstraintIndex}, ::Any; error_if_supported) at /Users/dsigler/.julia/packages/MathOptInterface/IIN1o/src/attributes.jl:499
throw_set_error_fallback(::MathOptInterface.ModelLike, ::Union{MathOptInterface.AbstractModelAttribute, MathOptInterface.AbstractOptimizerAttribute}, ::Any; error_if_supported) at /Users/dsigler/.julia/packages/MathOptInterface/IIN1o/src/attributes.jl:487
throw_set_error_fallback(::MathOptInterface.ModelLike, ::MathOptInterface.ConstraintFunction, ::MathOptInterface.ConstraintIndex{F, S}, ::F; error_if_supported) where {F<:MathOptInterface.AbstractFunction, S} at /Users/dsigler/.julia/packages/MathOptInterface/IIN1o/src/attributes.jl:1571
...
Stacktrace:
[1] set(::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.Bridges.LazyBridgeOptimizer{Ipopt.Optimizer}, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}, ::MathOptInterface.ConstraintDualStart, ::NonlinearConstraintIndex, ::Float64)
@ MathOptInterface ~/.julia/packages/MathOptInterface/IIN1o/src/attributes.jl:481
[2] set(model::Model, attr::MathOptInterface.ConstraintDualStart, cr::NonlinearConstraintRef{ScalarShape}, value::Float64)
@ JuMP ~/.julia/packages/JuMP/lnUbA/src/JuMP.jl:1321
[3] top-level scope
@ ~/PowerModelsDistribution.jl/examples/issue.jl:18
[4] include(fname::String)
@ Base.MainInclude ./client.jl:444
[5] top-level scope
@ REPL[7]:1
in expression starting at /Users/dsigler/PowerModelsDistribution.jl/examples/issue.jl:18

I was wondering if there is a way to do this or if this is not supported?

Best,

Devon

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions