Skip to content

Commit 9bfca36

Browse files
committed
Parametrize CachingOptimizer and MockOptimizer on model type
1 parent df5aaaa commit 9bfca36

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

perf/cachingoptimizer.jl

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Current output:
2+
# 38.889 ns (4 allocations: 112 bytes)
3+
# 252.048 ns (11 allocations: 288 bytes)
4+
# 24.412 ns (3 allocations: 96 bytes)
5+
# 24.982 ns (3 allocations: 96 bytes)
6+
# See https://github.com/JuliaOpt/MathOptInterface.jl/issues/321
7+
8+
using BenchmarkTools
9+
using MathOptInterface
10+
const MOI = MathOptInterface
11+
const MOIU = MOI.Utilities
12+
13+
@MOIU.model Model () (Interval,) () () () (ScalarAffineFunction,) () ()
14+
optimizer = MOIU.MockOptimizer(Model{Float64}())
15+
caching_optimizer = MOIU.CachingOptimizer(Model{Float64}(), optimizer)
16+
MOIU.resetoptimizer!(caching_optimizer) # detach optimizer
17+
v = MOI.addvariables!(caching_optimizer, 2)
18+
cf = MOI.ScalarAffineFunction(v, [0.0, 0.0], 0.0)
19+
c = MOI.addconstraint!(caching_optimizer, cf, MOI.Interval(-Inf, 1.0))
20+
@btime MOI.modifyconstraint!($caching_optimizer, $c, $(MOI.Interval(0.0, 2.0)))
21+
MOIU.attachoptimizer!(caching_optimizer)
22+
@btime MOI.modifyconstraint!($caching_optimizer, $c, $(MOI.Interval(0.0, 2.0)))
23+
@btime MOI.modifyconstraint!($(caching_optimizer.model_cache), $c, $(MOI.Interval(0.0, 2.0)))
24+
@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)