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

Commit bee0606

Browse files
committed
Merge remote-tracking branch 'origin/master' into jg/addsinvar_slow
# Conflicts: # test/runtests.jl
2 parents 6401eb6 + 7a160dc commit bee0606

File tree

6 files changed

+46
-25
lines changed

6 files changed

+46
-25
lines changed

REQUIRE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
julia 0.6
2-
MathOptInterface 0.3 0.4
2+
MathOptInterface 0.4 0.5

src/constraints/scalaraffine.jl

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,8 @@ end
163163
Scalar Coefficient Change of Linear Constraint
164164
=#
165165

166-
MOI.canmodifyconstraint(m::LinQuadOptimizer, c::LCI{<: LinSets}, ::Type{MOI.ScalarCoefficientChange{Float64}}) = true
167-
function MOI.modifyconstraint!(m::LinQuadOptimizer, c::LCI{<: LinSets}, chg::MOI.ScalarCoefficientChange{Float64})
166+
MOI.canmodify(m::LinQuadOptimizer, ::Type{LCI{S}}, ::Type{MOI.ScalarCoefficientChange{Float64}}) where S <: LinSets = true
167+
function MOI.modify!(m::LinQuadOptimizer, c::LCI{S}, chg::MOI.ScalarCoefficientChange{Float64}) where S <: LinSets
168168
col = m.variable_mapping[chg.variable]
169169
change_matrix_coefficient!(m, m[c], col, chg.new_coefficient)
170170
end
@@ -173,13 +173,13 @@ end
173173
Change RHS of linear constraint without modifying sense
174174
=#
175175

176-
MOI.canmodifyconstraint(m::LinQuadOptimizer, c::LCI{S}, ::Type{S}) where S <: Union{LE, GE, EQ} = true
177-
function MOI.modifyconstraint!(m::LinQuadOptimizer, c::LCI{S}, newset::S) where S <: Union{LE, GE, EQ}
176+
MOI.canset(m::LinQuadOptimizer, ::MOI.ConstraintSet, ::Type{LCI{S}}) where S <: Union{LE, GE, EQ} = true
177+
function MOI.set!(m::LinQuadOptimizer, ::MOI.ConstraintSet, c::LCI{S}, newset::S) where S <: Union{LE, GE, EQ}
178178
change_rhs_coefficient!(m, m[c], _getrhs(newset))
179179
end
180180

181-
MOI.canmodifyconstraint(m::LinQuadOptimizer, c::LCI{IV}, ::Type{IV}) = true
182-
function MOI.modifyconstraint!(m::LinQuadOptimizer, c::LCI{IV}, set::IV)
181+
MOI.canset(m::LinQuadOptimizer, ::MOI.ConstraintSet, ::Type{LCI{IV}}) = true
182+
function MOI.set!(m::LinQuadOptimizer, ::MOI.ConstraintSet, c::LCI{IV}, set::IV)
183183
modify_ranged_constraints!(m, [m[c]], [set.lower], [set.upper])
184184
end
185185

@@ -205,17 +205,17 @@ end
205205
Transform scalar constraint
206206
=#
207207

208-
function MOI.cantransformconstraint(m::LinQuadOptimizer, ref::LCI{S}, newset::S) where S
208+
function MOI.cantransform(m::LinQuadOptimizer, ref::LCI{S}, newset::S) where S
209209
false
210210
end
211-
function MOI.transformconstraint!(m::LinQuadOptimizer, ref::LCI{S}, newset::S) where S
212-
error("Cannot transform constraint of same set. use `modifyconstraint!` instead.")
211+
function MOI.transform!(m::LinQuadOptimizer, ::LCI{S}, newset::S) where S
212+
error("Cannot transform constraint of same set. use `set!` instead.")
213213
end
214214

215-
function MOI.cantransformconstraint(m::LinQuadOptimizer, ref::LCI{S1}, newset::S2) where S1 where S2 <: Union{LE, GE, EQ}
215+
function MOI.cantransform(m::LinQuadOptimizer, ref::LCI{S1}, newset::S2) where S1 where S2 <: Union{LE, GE, EQ}
216216
true
217217
end
218-
function MOI.transformconstraint!(m::LinQuadOptimizer, ref::LCI{S1}, newset::S2) where S1 where S2 <: Union{LE, GE, EQ}
218+
function MOI.transform!(m::LinQuadOptimizer, ref::LCI{S1}, newset::S2) where S1 where S2 <: Union{LE, GE, EQ}
219219
dict = constrdict(m, ref)
220220
row = dict[ref]
221221
change_linear_constraint_sense!(m, [row], [backend_type(m,newset)])

src/constraints/singlevariable.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ function MOI.get(m::LinQuadOptimizer, ::MOI.ConstraintFunction, c::SVCI{<: LinSe
120120
end
121121

122122
# modify
123-
MOI.canmodifyconstraint(::LinQuadOptimizer, ::SVCI{S}, ::Type{S}) where S <: LinSets = true
124-
function MOI.modifyconstraint!(m::LinQuadOptimizer, c::SVCI{S}, newset::S) where S <: LinSets
123+
MOI.canset(::LinQuadOptimizer, ::MOI.ConstraintSet, ::Type{SVCI{S}}) where S <: LinSets = true
124+
function MOI.set!(m::LinQuadOptimizer, ::MOI.ConstraintSet, c::SVCI{S}, newset::S) where S <: LinSets
125125
setvariablebound!(m, SinVar(m[c]), newset)
126126
end
127127

src/constraints/vectoraffine.jl

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,23 @@ function addlinearconstraint!(m::LinQuadOptimizer, func::VecLin, sense::Cchar)
5050
add_linear_constraints!(m, A, fill(sense, length(func.constants)), -func.constants)
5151
end
5252

53-
MOI.canmodifyconstraint(m::LinQuadOptimizer, ::VLCI{<: VecLinSets}, ::Type{MOI.VectorConstantChange{Float64}}) = true
54-
function MOI.modifyconstraint!(m::LinQuadOptimizer, ref::VLCI{<: VecLinSets}, chg::MOI.VectorConstantChange{Float64})
53+
MOI.canmodify(m::LinQuadOptimizer, ::Type{VLCI{S}}, ::Type{MOI.VectorConstantChange{Float64}}) where S <: VecLinSets = true
54+
function MOI.modify!(m::LinQuadOptimizer, ref::VLCI{<: VecLinSets}, chg::MOI.VectorConstantChange{Float64})
5555
@assert length(chg.new_constant) == length(m[ref])
5656
for (r, v) in zip(m[ref], chg.new_constant)
5757
change_rhs_coefficient!(m, r, -v)
5858
m.constraint_constant[r] = v
5959
end
6060
end
6161

62+
MOI.canmodify(m::LinQuadOptimizer, ::Type{VLCI{S}}, ::Type{MOI.MultirowChange{Float64}}) where S <: VecLinSets = true
63+
function MOI.modify!(m::LinQuadOptimizer, ref::VLCI{<: VecLinSets}, chg::MOI.MultirowChange{Float64})
64+
col = m.variable_mapping[chg.variable]
65+
for (row, coef) in chg.new_coefficients
66+
change_matrix_coefficient!(m, row, col, coef)
67+
end
68+
end
69+
6270
MOI.candelete(m::LinQuadOptimizer, c::VLCI{<:VecLinSets}) = MOI.isvalid(m, c)
6371
function MOI.delete!(m::LinQuadOptimizer, c::VLCI{<:VecLinSets})
6472
deleteconstraintname!(m, c)

src/objective.jl

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,13 +141,26 @@ end
141141
Modify objective function
142142
=#
143143

144-
MOI.canmodifyobjective(m::LinQuadOptimizer, ::Type{MOI.ScalarCoefficientChange{Float64}}) = true
145-
function MOI.modifyobjective!(m::LinQuadOptimizer, chg::MOI.ScalarCoefficientChange{Float64})
144+
function MOI.canmodify(m::LinQuadOptimizer, ::MOI.ObjectiveFunction{F}, ::Type{MOI.ScalarCoefficientChange{Float64}}) where F
145+
if F <: MOI.ScalarQuadraticFunction
146+
return m.obj_type == QuadraticObjective
147+
elseif F <: MOI.ScalarAffineFunction
148+
return m.obj_type == AffineObjective
149+
end
150+
return false
151+
end
152+
function MOI.modify!(m::LinQuadOptimizer, ::MOI.ObjectiveFunction{F}, chg::MOI.ScalarCoefficientChange{Float64}) where F
146153
if m.obj_type == SingleVariableObjective
147154
m.obj_type = AffineObjective
148155
m.single_obj_var = nothing
149156
end
150157
col = m.variable_mapping[chg.variable]
151-
# 0 row is the objective
152158
change_objective_coefficient!(m, col, chg.new_coefficient)
153159
end
160+
161+
function MOI.canmodify(m::LinQuadOptimizer, ::MOI.ObjectiveFunction{F}, ::Type{MOI.ScalarConstantChange{Float64}}) where F
162+
return !(F == MOI.SingleVariable)
163+
end
164+
function MOI.modify!(m::LinQuadOptimizer, ::MOI.ObjectiveFunction{F}, chg::MOI.ScalarConstantChange{Float64}) where F
165+
m.objective_constant = chg.new_constant
166+
end

test/runtests.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
1-
push!(Base.LOAD_PATH,joinpath(dirname(@__FILE__),"..",".."))
2-
31
using Base.Test, MathOptInterface
42
using LinQuadOptInterface
53

64
const MOI= MathOptInterface
75
const MOIT = MathOptInterface.Test
86
const LQOI = LinQuadOptInterface
97

10-
118
@testset "LinQuadOptInterface" begin
129
@testset "Unit Tests" begin
1310
config = MOIT.TestConfig(solve = false)
@@ -22,9 +19,13 @@ const LQOI = LinQuadOptInterface
2219
]
2320
)
2421
MOIT.unittest(solver, config, [
25-
"solve_affine_interval"
22+
"solve_affine_interval",
23+
"solve_qp_edge_cases",
24+
"solve_qcp_edge_cases",
25+
"solve_affine_deletion_edge_cases"
2626
])
2727
end
28+
2829
@testset "Linear tests" begin
2930
linconfig = MOIT.TestConfig(solve = false)
3031
solver = LQOI.MockLinQuadOptimizer()
@@ -60,7 +61,7 @@ const LQOI = LinQuadOptInterface
6061
MOIT.emptytest(solver)
6162
end
6263
@testset "orderedindicestest" begin
63-
MOIT.orderedindicestest(solver)
64+
# MOIT.orderedindicestest(solver)
6465
end
6566
@testset "canaddconstrainttest" begin
6667
MOIT.canaddconstrainttest(solver, Float64, Complex{Float64})
@@ -71,4 +72,3 @@ const LQOI = LinQuadOptInterface
7172
end
7273
end
7374
end
74-
;

0 commit comments

Comments
 (0)