Skip to content

Error messages with integer constraint vectors #528

Open
@baggepinnen

Description

@baggepinnen

The following throws an error, reproduced below, due to lb = fill(-10, length(params)) being a vector of Ints instead of floats. Could automatic conversion be applied, alternatively, a better error message be thrown? The only clue as to what is wrong is in MathOptInterface.GreaterThan{Int64}, but this is still far from obvious

using Ipopt, OptimizationMOI, Optimization
params = randn(2)
fopt = OptimizationFunction((x, _)->x'x)
prob = OptimizationProblem(fopt, params;
    lb = fill(-10, length(params)),
    ub = fill(10, length(params)),
)
solver = Ipopt.Optimizer()
res = solve(prob, solver)
julia> res = solve(prob, solver)
ERROR: MathOptInterface.UnsupportedConstraint{MathOptInterface.VariableIndex, MathOptInterface.GreaterThan{Int64}}: `MathOptInterface.VariableIndex`-in-`MathOptInterface.GreaterThan{Int64}` constraint is not supported by the model.
Stacktrace:
  [1] correct_throw_add_constraint_error_fallback(model::Ipopt.Optimizer, func::MathOptInterface.VariableIndex, set::MathOptInterface.GreaterThan{Int64}; error_if_supported::MathOptInterface.AddConstraintNotAllowed{MathOptInterface.VariableIndex, MathOptInterface.GreaterThan{Int64}})
    @ MathOptInterface ~/.julia/packages/MathOptInterface/8f6oN/src/constraints.jl:211
  [2] correct_throw_add_constraint_error_fallback(model::Ipopt.Optimizer, func::MathOptInterface.VariableIndex, set::MathOptInterface.GreaterThan{Int64})
    @ MathOptInterface ~/.julia/packages/MathOptInterface/8f6oN/src/constraints.jl:202
  [3] throw_add_constraint_error_fallback(model::Ipopt.Optimizer, func::MathOptInterface.VariableIndex, set::MathOptInterface.GreaterThan{Int64}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ MathOptInterface ~/.julia/packages/MathOptInterface/8f6oN/src/constraints.jl:160
  [4] throw_add_constraint_error_fallback(model::Ipopt.Optimizer, func::MathOptInterface.VariableIndex, set::MathOptInterface.GreaterThan{Int64})
    @ MathOptInterface ~/.julia/packages/MathOptInterface/8f6oN/src/constraints.jl:154
  [5] add_constraint(model::Ipopt.Optimizer, func::MathOptInterface.VariableIndex, set::MathOptInterface.GreaterThan{Int64})
    @ MathOptInterface ~/.julia/packages/MathOptInterface/8f6oN/src/constraints.jl:148
  [6] __solve(prob::OptimizationProblem{true, OptimizationFunction{true, SciMLBase.NoAD, var"#25#26", Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED_NO_TIME), Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}, Vector{Float64}, SciMLBase.NullParameters, Vector{Int64}, Vector{Int64}, Nothing, Nothing, Nothing, Nothing, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}}, opt::Ipopt.Optimizer; maxiters::Nothing, maxtime::Nothing, abstol::Nothing, reltol::Nothing, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ OptimizationMOI ~/.julia/packages/OptimizationMOI/08JM7/src/OptimizationMOI.jl:358
  [7] __solve

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions