Skip to content

Commit e38ae9b

Browse files
authored
Merge pull request #323 from JuliaOpt/bl/parammt
Parametrize CachingOptimizer and MockOptimizer on model type
2 parents b634ecd + 366089e commit e38ae9b

File tree

3 files changed

+23
-4
lines changed

3 files changed

+23
-4
lines changed

perf/cachingoptimizer.jl

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# See https://github.com/JuliaOpt/MathOptInterface.jl/issues/321 and https://github.com/JuliaOpt/MathOptInterface.jl/pull/323
2+
3+
using BenchmarkTools
4+
using MathOptInterface
5+
const MOI = MathOptInterface
6+
const MOIU = MOI.Utilities
7+
8+
@MOIU.model Model () (Interval,) () () () (ScalarAffineFunction,) () ()
9+
optimizer = MOIU.MockOptimizer(Model{Float64}())
10+
caching_optimizer = MOIU.CachingOptimizer(Model{Float64}(), optimizer)
11+
MOIU.resetoptimizer!(caching_optimizer) # detach optimizer
12+
v = MOI.addvariables!(caching_optimizer, 2)
13+
cf = MOI.ScalarAffineFunction(v, [0.0, 0.0], 0.0)
14+
c = MOI.addconstraint!(caching_optimizer, cf, MOI.Interval(-Inf, 1.0))
15+
@btime MOI.modifyconstraint!($caching_optimizer, $c, $(MOI.Interval(0.0, 2.0)))
16+
MOIU.attachoptimizer!(caching_optimizer)
17+
@btime MOI.modifyconstraint!($caching_optimizer, $c, $(MOI.Interval(0.0, 2.0)))
18+
@btime MOI.modifyconstraint!($(caching_optimizer.model_cache), $c, $(MOI.Interval(0.0, 2.0)))
19+
@btime MOI.modifyconstraint!($(caching_optimizer.optimizer), $(caching_optimizer.model_to_optimizer_map[c]), $(MOI.Interval(0.0, 2.0)))

src/Utilities/cachingoptimizer.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ A `CachingOptimizer` has two modes of operation (`CachingOptimizerMode`):
2222
- `Manual`: The only methods that change the state of the `CachingOptimizer` are [`resetoptimizer!`](@ref), [`dropoptimizer!`](@ref), and [`attachoptimizer!`](@ref). Attempting to perform an operation in the incorrect state results in an error.
2323
- `Automatic`: The `CachingOptimizer` changes its state when necessary. For example, `optimize!` will automatically call `attachoptimizer!` (an optimizer must have been previously set). Attempting to add a constraint or perform a modification not supported by the optimizer results in a drop to `EmptyOptimizer` mode.
2424
"""
25-
mutable struct CachingOptimizer <: MOI.AbstractOptimizer
26-
model_cache::MOI.ModelLike
25+
mutable struct CachingOptimizer{MT<:MOI.ModelLike} <: MOI.AbstractOptimizer
26+
model_cache::MT
2727
optimizer::Union{Void,MOI.AbstractOptimizer}
2828
state::CachingOptimizerState
2929
mode::CachingOptimizerMode

src/Utilities/mockoptimizer.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ struct MockConstraintAttribute <: MOI.AbstractConstraintAttribute
1212
end
1313

1414
# A mock optimizer used for testing.
15-
mutable struct MockOptimizer <: MOI.AbstractOptimizer
16-
inner_model::MOI.ModelLike
15+
mutable struct MockOptimizer{MT<:MOI.ModelLike} <: MOI.AbstractOptimizer
16+
inner_model::MT
1717
attribute::Int # MockModelAttribute
1818
varattribute::Dict{MOI.VariableIndex,Int} # MockVariableAttribute
1919
conattribute::Dict{MOI.ConstraintIndex,Int} # MockConstraintAttribute

0 commit comments

Comments
 (0)