Skip to content
This repository was archived by the owner on Jun 14, 2020. It is now read-only.

Commit 5b7fc34

Browse files
IssamTodow
authored andcommitted
Updates for MOI 0.6 (#64)
* Updates for MOI 0.6 * updated MOI version lowerbound * A few more fixes * updated a test primal status and removed a duplicate function
1 parent b553df3 commit 5b7fc34

File tree

14 files changed

+166
-257
lines changed

14 files changed

+166
-257
lines changed

REQUIRE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
julia 0.6
2-
MathOptInterface 0.5 0.6
2+
MathOptInterface 0.6 0.7
33
Compat 0.59

src/LinQuadOptInterface.jl

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ macro LinQuadOptimizerBase(inner_model_type=Any)
245245
end
246246

247247

248-
function MOI.isempty(m::LinQuadOptimizer)
248+
function MOI.is_empty(m::LinQuadOptimizer)
249249
ret = true
250250
ret = ret && m.name == ""
251251
ret = ret && m.obj_type == AffineObjective
@@ -321,17 +321,16 @@ function MOI.empty!(m::M, env = nothing) where M<:LinQuadOptimizer
321321
nothing
322322
end
323323

324-
MOI.canget(::LinQuadOptimizer, ::MOI.Name) = true
325324
function MOI.get(m::LinQuadOptimizer, ::MOI.Name)
326325
m.name
327326
end
328327

329328
MOI.supports(::LinQuadOptimizer, ::MOI.Name) = true
330-
function MOI.set!(m::LinQuadOptimizer, ::MOI.Name, name::String)
329+
function MOI.set(m::LinQuadOptimizer, ::MOI.Name, name::String)
331330
m.name = name
332331
end
333332

334-
function MOI.supportsconstraint(m::LinQuadOptimizer, ft::Type{F}, st::Type{S}) where F <: MOI.AbstractFunction where S <: MOI.AbstractSet
333+
function MOI.supports_constraint(m::LinQuadOptimizer, ft::Type{F}, st::Type{S}) where F <: MOI.AbstractFunction where S <: MOI.AbstractSet
335334
(ft,st) in supported_constraints(m)
336335
end
337336
function MOI.supports(m::LinQuadOptimizer, ::MOI.ObjectiveFunction{F}) where F <: MOI.AbstractFunction

src/constraints.jl

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,21 @@ function has_integer(model::LinQuadOptimizer)
3535
end
3636

3737
#=
38-
MOI.isvalid
38+
MOI.is_valid
3939
=#
4040

41-
function MOI.isvalid(model::LinQuadOptimizer, index::CI{F,S}) where F where S
41+
function MOI.is_valid(model::LinQuadOptimizer, index::CI{F,S}) where F where S
4242
dict = constrdict(model, index)
4343
return haskey(dict, index)
4444
end
4545

4646
"""
4747
__assert_valid__(model::LinQuadOptimizer, index::MOI.Index)
4848
49-
Throw an MOI.InvalidIndex error if `MOI.isvalid(model, index) == false`.
49+
Throw an MOI.InvalidIndex error if `MOI.is_valid(model, index) == false`.
5050
"""
5151
function __assert_valid__(model::LinQuadOptimizer, index::MOI.Index)
52-
if !MOI.isvalid(model, index)
52+
if !MOI.is_valid(model, index)
5353
throw(MOI.InvalidIndex(index))
5454
end
5555
end
@@ -69,9 +69,6 @@ end
6969
#=
7070
Get number of constraints
7171
=#
72-
function MOI.canget(model::LinQuadOptimizer, ::MOI.NumberOfConstraints{F, S}) where F where S
73-
return (F,S) in supported_constraints(model)
74-
end
7572

7673
function MOI.get(model::LinQuadOptimizer, attribute::MOI.NumberOfConstraints{F, S}) where F where S
7774
__assert_supported_constraint__(model, F, S)
@@ -81,9 +78,6 @@ end
8178
#=
8279
Get list of constraint references
8380
=#
84-
function MOI.canget(model::LinQuadOptimizer, ::MOI.ListOfConstraintIndices{F, S}) where F where S
85-
return (F,S) in supported_constraints(model)
86-
end
8781

8882
function MOI.get(model::LinQuadOptimizer, attribute::MOI.ListOfConstraintIndices{F, S}) where F where S
8983
__assert_supported_constraint__(model, F, S)
@@ -95,9 +89,7 @@ end
9589
#=
9690
Get list of constraint types in model
9791
=#
98-
function MOI.canget(::LinQuadOptimizer, ::MOI.ListOfConstraints)
99-
return true
100-
end
92+
10193
function MOI.get(model::LinQuadOptimizer, ::MOI.ListOfConstraints)
10294
return [(F, S) for (F, S) in supported_constraints(model) if
10395
MOI.get(model, MOI.NumberOfConstraints{F,S}()) > 0]
@@ -106,9 +98,7 @@ end
10698
#=
10799
Get constraint names
108100
=#
109-
function MOI.canget(::LinQuadOptimizer, ::MOI.ConstraintName, ::Type{<:MOI.ConstraintIndex})
110-
return true
111-
end
101+
112102
function MOI.get(model::LinQuadOptimizer, ::MOI.ConstraintName, index::MOI.ConstraintIndex)
113103
if haskey(model.constraint_names, index)
114104
return model.constraint_names[index]
@@ -119,7 +109,7 @@ end
119109
function MOI.supports(::LinQuadOptimizer, ::MOI.ConstraintName, ::Type{<:MOI.ConstraintIndex})
120110
return true
121111
end
122-
function MOI.set!(model::LinQuadOptimizer, ::MOI.ConstraintName,
112+
function MOI.set(model::LinQuadOptimizer, ::MOI.ConstraintName,
123113
index::MOI.ConstraintIndex, name::String)
124114
if haskey(model.constraint_names_rev, name)
125115
if model.constraint_names_rev[name] != index
@@ -141,20 +131,24 @@ end
141131
Get constraint by name
142132
=#
143133

144-
# this covers the non-type-stable get(m, ConstraintIndex) case
145-
function MOI.canget(model::LinQuadOptimizer, ::Type{MOI.ConstraintIndex}, name::String)
146-
return haskey(model.constraint_names_rev, name)
147-
end
148-
function MOI.get(model::LinQuadOptimizer, ::Type{<:MOI.ConstraintIndex}, name::String)
149-
return model.constraint_names_rev[name]
134+
function MOI.get(model::LinQuadOptimizer, ::Type{<:MOI.ConstraintIndex},
135+
name::String)
136+
if haskey(model.constraint_names_rev, name)
137+
return model.constraint_names_rev[name]
138+
else
139+
return nothing
140+
end
150141
end
151142

152143
# this covers the type-stable get(m, ConstraintIndex{F,S}, name)::CI{F,S} case
153-
function MOI.canget(model::LinQuadOptimizer, ::Type{FS}, name::String) where FS <: MOI.ConstraintIndex
154-
return haskey(model.constraint_names_rev, name) && typeof(model.constraint_names_rev[name]) == FS
155-
end
156-
function MOI.get(model::LinQuadOptimizer, ::Type{MOI.ConstraintIndex{F,S}}, name::String) where F where S
157-
model.constraint_names_rev[name]::MOI.ConstraintIndex{F,S}
144+
function MOI.get(model::LinQuadOptimizer, ::Type{MOI.ConstraintIndex{F,S}},
145+
name::String) where F where S
146+
if haskey(model.constraint_names_rev, name) &&
147+
isa(model.constraint_names_rev[name], MOI.ConstraintIndex{F,S})
148+
return model.constraint_names_rev[name]::MOI.ConstraintIndex{F,S}
149+
else
150+
return nothing
151+
end
158152
end
159153

160154

src/constraints/scalaraffine.jl

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ constrdict(model::LinQuadOptimizer, ::LCI{GE}) = cmap(model).greater_than
99
constrdict(model::LinQuadOptimizer, ::LCI{EQ}) = cmap(model).equal_to
1010
constrdict(model::LinQuadOptimizer, ::LCI{IV}) = cmap(model).interval
1111

12-
function MOI.addconstraint!(model::LinQuadOptimizer, func::Linear, set::T) where T <: LinSets
12+
function MOI.add_constraint(model::LinQuadOptimizer, func::Linear, set::T) where T <: LinSets
1313
__assert_supported_constraint__(model, Linear, T)
1414
canonicalized_func = MOIU.canonical(func)
1515
add_linear_constraint(model, canonicalized_func, set)
@@ -53,7 +53,7 @@ end
5353
Add linear constraints (plural)
5454
=#
5555

56-
function MOI.addconstraints!(model::LinQuadOptimizer, func::Vector{Linear},
56+
function MOI.add_constraints(model::LinQuadOptimizer, func::Vector{Linear},
5757
set::Vector{S}) where S <: LinSets
5858
__assert_supported_constraint__(model, Linear, S)
5959
@assert length(func) == length(set)
@@ -155,14 +155,13 @@ end
155155
#=
156156
Constraint set of Linear function
157157
=#
158-
MOI.canget(::LinQuadOptimizer, ::MOI.ConstraintSet, ::Type{LCI{S}}) where S <: Union{LE, GE, EQ} = true
158+
159159
function MOI.get(model::LinQuadOptimizer, ::MOI.ConstraintSet, index::LCI{S}) where S <: Union{LE, GE, EQ}
160160
row = model[index]
161161
rhs = get_rhs(model, row)
162162
S(rhs + model.constraint_constant[row])
163163
end
164164

165-
MOI.canget(::LinQuadOptimizer, ::MOI.ConstraintSet, ::Type{LCI{IV}}) = true
166165
function MOI.get(model::LinQuadOptimizer, ::MOI.ConstraintSet, index::LCI{IV})
167166
row = model[index]
168167
lowerbound, upperbound = get_range(model, row)
@@ -174,7 +173,6 @@ end
174173
Constraint function of Linear function
175174
=#
176175

177-
MOI.canget(::LinQuadOptimizer, ::MOI.ConstraintFunction, ::Type{<:LCI{<: LinSets}}) = true
178176
function MOI.get(model::LinQuadOptimizer, ::MOI.ConstraintFunction, index::LCI{<: LinSets})
179177
row = model[index]
180178
columns, coefficients = get_linear_constraint(model, row)
@@ -190,7 +188,7 @@ end
190188
Scalar Coefficient Change of Linear Constraint
191189
=#
192190

193-
function MOI.modify!(model::LinQuadOptimizer, index::LCI{S}, change::MOI.ScalarCoefficientChange{Float64}) where S <: LinSets
191+
function MOI.modify(model::LinQuadOptimizer, index::LCI{S}, change::MOI.ScalarCoefficientChange{Float64}) where S <: LinSets
194192
row = model[index]
195193
column = get_column(model, change.variable)
196194
change_matrix_coefficient!(model, row, column, change.new_coefficient)
@@ -212,7 +210,7 @@ of this function.
212210
function _replace_with_matching_sparsity!(model::LinQuadOptimizer, previous::Linear, replacement::Linear, row)
213211
rows = fill(row, length(replacement.terms))
214212
cols = [model.variable_mapping[t.variable_index] for t in replacement.terms]
215-
coefs = MOIU.coefficient.(replacement.terms)
213+
coefs = MOI.coefficient.(replacement.terms)
216214
change_matrix_coefficients!(model, rows, cols, coefs)
217215
end
218216

@@ -243,12 +241,12 @@ function _replace_with_different_sparsity!(model::LinQuadOptimizer, previous::Li
243241
# Next, set the new constraint function terms
244242
rows = fill(row, length(replacement.terms))
245243
cols = [model.variable_mapping[t.variable_index] for t in replacement.terms]
246-
coefs = MOIU.coefficient.(replacement.terms)
244+
coefs = MOI.coefficient.(replacement.terms)
247245
change_matrix_coefficients!(model, rows, cols, coefs)
248246
end
249247

250248
MOI.supports(::LinQuadOptimizer, ::MOI.ConstraintFunction, ::Type{LCI{S}}) where {S <: Union{LE, GE, EQ}} = true
251-
function MOI.set!(model::LinQuadOptimizer, attr::MOI.ConstraintFunction, CI::LCI{S}, replacement::Linear) where {S <: Union{LE, GE, EQ}}
249+
function MOI.set(model::LinQuadOptimizer, attr::MOI.ConstraintFunction, CI::LCI{S}, replacement::Linear) where {S <: Union{LE, GE, EQ}}
252250
previous = MOI.get(model, attr, CI)
253251
MOIU.canonicalize!(previous)
254252
replacement = MOIU.canonical(replacement)
@@ -272,14 +270,14 @@ end
272270
Change RHS of linear constraint without modifying sense
273271
=#
274272
MOI.supports(::LinQuadOptimizer, ::MOI.ConstraintSet, ::Type{LCI{S}}) where S <: LinSets = true
275-
function MOI.set!(model::LinQuadOptimizer, ::MOI.ConstraintSet, index::LCI{S},
273+
function MOI.set(model::LinQuadOptimizer, ::MOI.ConstraintSet, index::LCI{S},
276274
new_set::S) where S <: Union{LE, GE, EQ}
277275
row = model[index]
278276
rhs = MOIU.getconstant(new_set) - model.constraint_constant[row]
279277
change_rhs_coefficient!(model, model[index], rhs)
280278
end
281279

282-
function MOI.set!(model::LinQuadOptimizer, ::MOI.ConstraintSet, index::LCI{IV},
280+
function MOI.set(model::LinQuadOptimizer, ::MOI.ConstraintSet, index::LCI{IV},
283281
new_set::IV)
284282
row = model[index]
285283
constant = model.constraint_constant[row]
@@ -291,7 +289,7 @@ end
291289
Delete a linear constraint
292290
=#
293291

294-
function MOI.delete!(model::LinQuadOptimizer, index::LCI{<: LinSets})
292+
function MOI.delete(model::LinQuadOptimizer, index::LCI{<: LinSets})
295293
__assert_valid__(model, index)
296294
delete_constraint_name(model, index)
297295
dict = constrdict(model, index)
@@ -309,7 +307,7 @@ end
309307
Transform scalar constraint
310308
=#
311309

312-
function MOI.transform!(model::LinQuadOptimizer, index::LCI{S1}, new_set::S2) where S1 where S2 <: Union{LE, GE, EQ}
310+
function MOI.transform(model::LinQuadOptimizer, index::LCI{S1}, new_set::S2) where S1 where S2 <: Union{LE, GE, EQ}
313311
__assert_supported_constraint__(model, Linear, S2)
314312
dict = constrdict(model, index)
315313
row = dict[index]

src/constraints/scalarquadratic.jl

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ function canonical_reduction(model::LinQuadOptimizer, func::Quad)
6666
return affine_columns, affine_coefficients, quad_columns_1, quad_columns_2, quad_coefficients
6767
end
6868

69-
function MOI.addconstraint!(model::LinQuadOptimizer, func::Quad, set::S) where S <: Union{LE, GE, EQ}
69+
function MOI.add_constraint(model::LinQuadOptimizer, func::Quad, set::S) where S <: Union{LE, GE, EQ}
7070
add_quadratic_constraint(model, func, set)
7171
model.last_constraint_reference += 1
7272
index = QCI{S}(model.last_constraint_reference)
@@ -91,7 +91,7 @@ function add_quadratic_constraint(model::LinQuadOptimizer, func::Quad, sense, rh
9191
sense, I, J, V)
9292
end
9393

94-
function MOI.delete!(model::LinQuadOptimizer, index::QCI{<: LinSets})
94+
function MOI.delete(model::LinQuadOptimizer, index::QCI{<: LinSets})
9595
__assert_valid__(model, index)
9696
delete_constraint_name(model, index)
9797
dict = constrdict(model, index)
@@ -108,18 +108,15 @@ end
108108
Constraint set of Linear function
109109
=#
110110

111-
MOI.canget(::LinQuadOptimizer, ::MOI.ConstraintSet, ::Type{QCI{S}}) where S <: Union{LE, GE, EQ} = true
112111
function MOI.get(model::LinQuadOptimizer, ::MOI.ConstraintSet, index::QCI{S}) where S <: Union{LE, GE, EQ}
113112
rhs = get_quadratic_rhs(model, model[index])
114113
S(rhs)
115114
end
116-
MOI.canget(::LinQuadOptimizer, ::MOI.ConstraintSet, ::Type{QCI{IV}}) = false
117115

118116
#=
119117
Constraint function of Linear function
120118
=#
121119

122-
MOI.canget(::LinQuadOptimizer, ::MOI.ConstraintFunction, ::Type{<:QCI{<: LinSets}}) = true
123120
function MOI.get(model::LinQuadOptimizer, ::MOI.ConstraintFunction, index::QCI{<: LinSets})
124121
aff_cols, aff_coeffs, Q = get_quadratic_constraint(model, model[index])
125122
affine_terms = map(

0 commit comments

Comments
 (0)