Skip to content

Commit

Permalink
Don't falsely claim that Integer variables are supported
Browse files Browse the repository at this point in the history
They really are not supported, and the claim is only there
to provide a nice diagnostic.

But that prevents MOI `IntegerToZeroOneBridge` from triggering,
and providing Alpine with transparent support for them.

Fixes #244
  • Loading branch information
LebedevRI committed Jun 26, 2024
1 parent 4ab44d4 commit 526389b
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 18 deletions.
4 changes: 3 additions & 1 deletion examples/MINLPs/milp.jl
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
function milp(; solver = nothing)
m = JuMP.Model(solver)

@variable(m, 0 <= objvar <= 20, Int)
@variable(m, objvar, Int)
#@variable(m, 0 <= objvar <= 20, Int)
@constraint(m, objvar in MOI.Interval(0.0, 20.0))
@objective(m, Min, objvar)

return m
Expand Down
12 changes: 0 additions & 12 deletions src/MOI_wrapper/MOI_wrapper.jl
Original file line number Diff line number Diff line change
Expand Up @@ -322,18 +322,6 @@ function MOI.add_constraint(model::Optimizer, vi::MOI.VariableIndex, set::SCALAR
return MOI.ConstraintIndex{typeof(vi),typeof(set)}(vi.value)
end

function MOI.supports_constraint(
::Optimizer,
::Type{MOI.VariableIndex},
::Type{MOI.Integer},
)
return true
end

function MOI.add_constraint(model::Optimizer, f::MOI.VariableIndex, set::MOI.Integer)
model.var_type_orig[f.value] = :Int
return MOI.ConstraintIndex{typeof(f),typeof(set)}(f.value)
end
function MOI.supports_constraint(
::Optimizer,
::Type{MOI.VariableIndex},
Expand Down
4 changes: 0 additions & 4 deletions src/main_algorithm.jl
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,6 @@ function load!(m::Optimizer)
# Populate data to create the bounding MIP model
Alp.recategorize_var(m) # Initial round of variable re-categorization

:Int in m.var_type_orig && error(
"Alpine does not support MINLPs with generic integer (non-binary) variables yet!",
)

# Solver-dependent detection
Alp._fetch_mip_solver_identifier(m)
Alp._fetch_nlp_solver_identifier(m)
Expand Down
6 changes: 5 additions & 1 deletion test/test_algorithm.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1052,5 +1052,9 @@ end
"minlp_solver" => JUNIPER,
)
m = milp(solver = test_solver)
@test_throws "Alpine does not support MINLPs with generic integer (non-binary) variables yet!" JuMP.optimize!(m)
JuMP.optimize!(m)

@test termination_status(m) == MOI.OPTIMAL
@test isapprox(objective_value(m), 0; atol = 1e-4)
@test MOI.get(m, Alpine.NumberOfIterations()) == 0
end

0 comments on commit 526389b

Please sign in to comment.