Skip to content

Conversation

@guimarqu
Copy link
Contributor

@guimarqu guimarqu commented Dec 2, 2025

This is a fix for a bug when checking the primal feasibility of a model that involves parameters.

MRE:

using JuMP
using Ipopt

# Create the model with Ipopt solver
model = Model(Ipopt.Optimizer)

# Parameter
@variable(model, a in Parameter(2.0))

# Variable (continuous by default)
@variable(model, x >= 0)

# Objective: minimize (x - a)^2
@objective(model, Min, (x - a)^2)

# Constraint: x <= 5
@constraint(model, x <= 5)

# Solve
optimize!(model)

# Display results
println("Status: ", termination_status(model))
println("Optimal x: ", value(x))
println("Objective value: ", objective_value(model))

@show is_solved_and_feasible(model)
@show primal_feasibility_report(model)

Output:

is_solved_and_feasible(model) = true
ERROR: LoadError: distance_to_set using the distance metric MathOptInterface.Utilities.ProjectionUpperBoundDistance() for set type MathOptInterface.Parameter{Float64} has not been implemented yet.
Stacktrace:
  [1] error(s::String)
    @ Base ./error.jl:44
  [2] distance_to_set(d::MathOptInterface.Utilities.ProjectionUpperBoundDistance, ::Float64, set::MathOptInterface.Parameter{Float64})
    @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/distance_to_set.jl:75
  [3] distance_to_set(point::Float64, set::MathOptInterface.Parameter{Float64})
    @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/distance_to_set.jl:71
  [4] _distance_to_set(point::Float64, set::MathOptInterface.Parameter{Float64}, ::Type)
    @ JuMP ~/.julia/packages/JuMP/e83v9/src/feasibility_checker.jl:214
  [5] _add_infeasible_constraints(model::Model, ::Type{VariableRef}, ::Type{MathOptInterface.Parameter{Float64}}, violated_constraints::Dict{Any, Float64}, point_f::Function, atol::Float64)
    @ JuMP ~/.julia/packages/JuMP/e83v9/src/feasibility_checker.jl:143
  [6] primal_feasibility_report(point::Function, model::Model; atol::Float64, skip_missing::Bool)
    @ JuMP ~/.julia/packages/JuMP/e83v9/src/feasibility_checker.jl:107
  [7] primal_feasibility_report
    @ ~/.julia/packages/JuMP/e83v9/src/feasibility_checker.jl:99 [inlined]
  [8] #primal_feasibility_report#114
    @ ~/.julia/packages/JuMP/e83v9/src/feasibility_checker.jl:58 [inlined]
  [9] primal_feasibility_report
    @ ~/.julia/packages/JuMP/e83v9/src/feasibility_checker.jl:52 [inlined]
 [10] primal_feasibility_report(model::Model)
    @ JuMP ~/.julia/packages/JuMP/e83v9/src/feasibility_checker.jl:52
 [11] top-level scope
    @ ~/xps_to_rm/simple_jump_model.jl:28
 [12] macro expansion
    @ show.jl:1270 [inlined]
 [13] include(mod::Module, _path::String)
    @ Base ./Base.jl:306
 [14] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:317
 [15] _start()
    @ Base ./client.jl:550
in expression starting at /home/guimarqu/xps_to_rm/simple_jump_model.jl:28

Tests:

Test Summary:      | Pass  Total  Time
distance_to_set.jl |  124    124  3.0s

Copy link
Contributor Author

@guimarqu guimarqu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

format

@odow odow merged commit 1effd93 into jump-dev:master Dec 2, 2025
28 of 30 checks passed
@guimarqu guimarqu deleted the bugfix/distance_to_parameter_set branch December 2, 2025 21:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants