@@ -19,7 +19,7 @@ struct Solution
1919end
2020Solution () = Solution (0 , Float64[], Float64[], Float64[], Float64[], NaN , NaN )
2121
22- # Used to build the data with allocate-load during `copy! `.
22+ # Used to build the data with allocate-load during `copy_to `.
2323# When `optimize!` is called, a the data is used to build `ECOSMatrix`
2424# and the `ModelData` struct is discarded
2525mutable struct ModelData
6161mutable struct Optimizer <: MOI.AbstractOptimizer
6262 cone:: ConeData
6363 maxsense:: Bool
64- data:: Union{Nothing, ModelData} # only non-Nothing between MOI.copy! and MOI.optimize!
64+ data:: Union{Nothing, ModelData} # only non-Nothing between MOI.copy_to and MOI.optimize!
6565 sol:: Solution
6666 options
6767 function Optimizer (; kwargs... )
6868 new (ConeData (), false , nothing , Solution (), kwargs)
6969 end
7070end
7171
72- if VERSION >= v " 0.7-"
73- # TODO remove when updating to MOI v0.6
74- Base. broadcastable (optimizer:: Optimizer ) = Ref (optimizer)
75- end
76-
77- function MOI. isempty (instance:: Optimizer )
72+ function MOI. is_empty (instance:: Optimizer )
7873 ! instance. maxsense && instance. data === nothing
7974end
8075
8176function MOI. empty! (instance:: Optimizer )
8277 instance. maxsense = false
83- instance. data = nothing # It should already be nothing except if an error is thrown inside copy!
78+ instance. data = nothing # It should already be nothing except if an error is thrown inside copy_to
8479end
8580
86- MOIU. needsallocateload (instance:: Optimizer ) = true
87-
88- function MOI. supports (optimizer:: Optimizer ,
89- :: Union {MOI. ConstraintFunction,
90- MOI. ConstraintSet},
91- :: Type{<:CI} )
92- return true
93- end
94- function MOI. set! (optimizer:: Optimizer ,
95- attr:: Union {MOI. ConstraintFunction,
96- MOI. ConstraintSet},
97- :: CI ,
98- value)
99- throw (MOI. CannotSetAttribute (attr))
100- end
81+ MOIU. needs_allocate_load (instance:: Optimizer ) = true
10182
10283function MOI. supports (:: Optimizer ,
10384 :: Union {MOI. ObjectiveSense,
10485 MOI. ObjectiveFunction{MOI. ScalarAffineFunction{Float64}}})
10586 return true
10687end
107- function MOI. set! (:: Optimizer ,
108- attr:: Union {MOI. ObjectiveSense,
109- MOI. ObjectiveFunction{MOI. ScalarAffineFunction{Float64}}},
110- value)
111- throw (MOI. CannotSetAttribute (attr))
112- end
113-
114- MOI. supportsconstraint (:: Optimizer , :: Type{<:SF} , :: Type{<:SS} ) = true
115- function MOI. addconstraint! (:: Optimizer ,
116- func:: SF ,
117- set:: SS )
118- throw (MOI. CannotAddConstraint {typeof(func), typeof(set)} ())
119- end
12088
89+ MOI. supports_constraint (:: Optimizer , :: Type{<:SF} , :: Type{<:SS} ) = true
12190
122- MOI. copy! (dest:: Optimizer , src:: MOI.ModelLike ; copynames= true ) = MOIU. allocateload! (dest, src, copynames)
91+ function MOI. copy_to (dest:: Optimizer , src:: MOI.ModelLike ; copy_names = true )
92+ return MOIU. allocate_load (dest, src, copy_names)
93+ end
12394
12495using Compat. SparseArrays
12596
@@ -128,33 +99,33 @@ const LPCones = Union{MOI.GreaterThan, MOI.LessThan, MOI.Nonnegatives, MOI.Nonpo
12899
129100# Computes cone dimensions
130101constroffset (cone:: ConeData , ci:: CI{<:MOI.AbstractFunction, <:ZeroCones} ) = ci. value
131- function _allocateconstraint! (cone:: ConeData , f, s:: ZeroCones )
102+ function _allocate_constraint (cone:: ConeData , f, s:: ZeroCones )
132103 ci = cone. f
133104 cone. f += MOI. dimension (s)
134105 ci
135106end
136107constroffset (cone:: ConeData , ci:: CI{<:MOI.AbstractFunction, <:LPCones} ) = ci. value
137- function _allocateconstraint! (cone:: ConeData , f, s:: LPCones )
108+ function _allocate_constraint (cone:: ConeData , f, s:: LPCones )
138109 ci = cone. l
139110 cone. l += MOI. dimension (s)
140111 ci
141112end
142113constroffset (cone:: ConeData , ci:: CI{<:MOI.AbstractFunction, <:MOI.SecondOrderCone} ) = cone. l + ci. value
143- function _allocateconstraint! (cone:: ConeData , f, s:: MOI.SecondOrderCone )
114+ function _allocate_constraint (cone:: ConeData , f, s:: MOI.SecondOrderCone )
144115 push! (cone. qa, s. dimension)
145116 ci = cone. q
146117 cone. q += MOI. dimension (s)
147118 ci
148119end
149120constroffset (cone:: ConeData , ci:: CI{<:MOI.AbstractFunction, <:MOI.ExponentialCone} ) = cone. l + cone. q + ci. value
150- function _allocateconstraint! (cone:: ConeData , f, s:: MOI.ExponentialCone )
121+ function _allocate_constraint (cone:: ConeData , f, s:: MOI.ExponentialCone )
151122 ci = 3 cone. ep
152123 cone. ep += 1
153124 ci
154125end
155126constroffset (instance:: Optimizer , ci:: CI ) = constroffset (instance. cone, ci:: CI )
156- function MOIU. allocateconstraint! (instance:: Optimizer , f:: F , s:: S ) where {F <: MOI.AbstractFunction , S <: MOI.AbstractSet }
157- CI {F, S} (_allocateconstraint! (instance. cone, f, s))
127+ function MOIU. allocate_constraint (instance:: Optimizer , f:: F , s:: S ) where {F <: MOI.AbstractFunction , S <: MOI.AbstractSet }
128+ CI {F, S} (_allocate_constraint (instance. cone, f, s))
158129end
159130
160131# Build constraint matrix
@@ -173,8 +144,8 @@ constrrows(instance::Optimizer, ci::CI{<:MOI.AbstractVectorFunction, <:MOI.Abstr
173144matrix (data:: ModelData , s:: ZeroCones ) = data. b, data. IA, data. JA, data. VA
174145matrix (data:: ModelData , s:: Union{LPCones, MOI.SecondOrderCone, MOI.ExponentialCone} ) = data. h, data. IG, data. JG, data. VG
175146matrix (instance:: Optimizer , s) = matrix (instance. data, s)
176- MOIU. loadconstraint! (instance:: Optimizer , ci, f:: MOI.SingleVariable , s) = MOIU. loadconstraint! (instance, ci, MOI. ScalarAffineFunction {Float64} (f), s)
177- function MOIU. loadconstraint! (instance:: Optimizer , ci, f:: MOI.ScalarAffineFunction , s:: MOI.AbstractScalarSet )
147+ MOIU. load_constraint (instance:: Optimizer , ci, f:: MOI.SingleVariable , s) = MOIU. load_constraint (instance, ci, MOI. ScalarAffineFunction {Float64} (f), s)
148+ function MOIU. load_constraint (instance:: Optimizer , ci, f:: MOI.ScalarAffineFunction , s:: MOI.AbstractScalarSet )
178149 a = sparsevec (variable_index_value .(f. terms), coefficient .(f. terms))
179150 # sparsevec combines duplicates with + but does not remove zeros created so we call dropzeros!
180151 dropzeros! (a)
@@ -196,7 +167,7 @@ function MOIU.loadconstraint!(instance::Optimizer, ci, f::MOI.ScalarAffineFuncti
196167 append! (J, a. nzind)
197168 append! (V, scalecoef (row, a. nzval, true , s))
198169end
199- MOIU. loadconstraint! (instance:: Optimizer , ci, f:: MOI.VectorOfVariables , s) = MOIU. loadconstraint! (instance, ci, MOI. VectorAffineFunction {Float64} (f), s)
170+ MOIU. load_constraint (instance:: Optimizer , ci, f:: MOI.VectorOfVariables , s) = MOIU. load_constraint (instance, ci, MOI. VectorAffineFunction {Float64} (f), s)
200171# SCS orders differently than MOI the second and third dimension of the exponential cone
201172orderval (val, s) = val
202173function orderval (val, s:: Union{MOI.ExponentialCone, Type{MOI.ExponentialCone}} )
@@ -207,7 +178,7 @@ expmap(i) = (1, 3, 2)[i]
207178function orderidx (idx, s:: MOI.ExponentialCone )
208179 expmap .(idx)
209180end
210- function MOIU. loadconstraint! (instance:: Optimizer , ci, f:: MOI.VectorAffineFunction , s:: MOI.AbstractVectorSet )
181+ function MOIU. load_constraint (instance:: Optimizer , ci, f:: MOI.VectorAffineFunction , s:: MOI.AbstractVectorSet )
211182 A = sparse (output_index .(f. terms), variable_index_value .(f. terms), coefficient .(f. terms))
212183 # sparse combines duplicates with + but does not remove zeros created so we call dropzeros!
213184 dropzeros! (A)
@@ -229,12 +200,12 @@ function MOIU.loadconstraint!(instance::Optimizer, ci, f::MOI.VectorAffineFuncti
229200 append! (Vs, scalecoef (I, V, true , s))
230201end
231202
232- function MOIU. allocatevariables! (instance:: Optimizer , nvars:: Integer )
203+ function MOIU. allocate_variables (instance:: Optimizer , nvars:: Integer )
233204 instance. cone = ConeData ()
234205 VI .(1 : nvars)
235206end
236207
237- function MOIU. loadvariables! (instance:: Optimizer , nvars:: Integer )
208+ function MOIU. load_variables (instance:: Optimizer , nvars:: Integer )
238209 cone = instance. cone
239210 m = cone. l + cone. q + 3 cone. ep
240211 IA = Int[]
@@ -249,13 +220,13 @@ function MOIU.loadvariables!(instance::Optimizer, nvars::Integer)
249220 instance. data = ModelData (m, nvars, IA, JA, VA, b, IG, JG, VG, h, 0. , c)
250221end
251222
252- function MOIU. allocate! (instance:: Optimizer , :: MOI.ObjectiveSense , sense:: MOI.OptimizationSense )
223+ function MOIU. allocate (instance:: Optimizer , :: MOI.ObjectiveSense , sense:: MOI.OptimizationSense )
253224 instance. maxsense = sense == MOI. MaxSense
254225end
255- function MOIU. allocate! (:: Optimizer , :: MOI.ObjectiveFunction , :: MOI.ScalarAffineFunction ) end
226+ function MOIU. allocate (:: Optimizer , :: MOI.ObjectiveFunction , :: MOI.ScalarAffineFunction ) end
256227
257- function MOIU. load! (:: Optimizer , :: MOI.ObjectiveSense , :: MOI.OptimizationSense ) end
258- function MOIU. load! (instance:: Optimizer , :: MOI.ObjectiveFunction , f:: MOI.ScalarAffineFunction )
228+ function MOIU. load (:: Optimizer , :: MOI.ObjectiveSense , :: MOI.OptimizationSense ) end
229+ function MOIU. load (instance:: Optimizer , :: MOI.ObjectiveFunction , f:: MOI.ScalarAffineFunction )
259230 c0 = Vector (sparsevec (variable_index_value .(f. terms), coefficient .(f. terms), instance. data. n))
260231 instance. data. objconstant = f. constant
261232 instance. data. c = instance. maxsense ? - c0 : c0
@@ -298,7 +269,6 @@ function MOI.optimize!(instance::Optimizer)
298269end
299270
300271# Implements getter for result value and statuses
301- MOI. canget (instance:: Optimizer , :: MOI.TerminationStatus ) = true
302272function MOI. get (instance:: Optimizer , :: MOI.TerminationStatus )
303273 flag = instance. sol. ret_val
304274 if flag == ECOS. ECOS_OPTIMAL
@@ -316,14 +286,9 @@ function MOI.get(instance::Optimizer, ::MOI.TerminationStatus)
316286 end
317287end
318288
319- MOI. canget (instance:: Optimizer , :: MOI.ObjectiveValue ) = true
320289MOI. get (instance:: Optimizer , :: MOI.ObjectiveValue ) = instance. sol. objval
321- MOI. canget (instance:: Optimizer , :: MOI.ObjectiveBound ) = true
322290MOI. get (instance:: Optimizer , :: MOI.ObjectiveBound ) = instance. sol. objbnd
323291
324- function MOI. canget (instance:: Optimizer , :: MOI.PrimalStatus )
325- instance. sol. ret_val != ECOS. ECOS_PINF
326- end
327292function MOI. get (instance:: Optimizer , :: MOI.PrimalStatus )
328293 flag = instance. sol. ret_val
329294 if flag == ECOS. ECOS_OPTIMAL
@@ -342,14 +307,11 @@ function MOI.get(instance::Optimizer, ::MOI.PrimalStatus)
342307end
343308# Swapping indices 2 <-> 3 is an involution (it is its own inverse)
344309const reorderval = orderval
345- function MOI. canget (instance:: Optimizer , :: Union{MOI.VariablePrimal, MOI.ConstraintPrimal} , :: Type{<:MOI.Index} )
346- instance. sol. ret_val != ECOS. ECOS_PINF
347- end
348310function MOI. get (instance:: Optimizer , :: MOI.VariablePrimal , vi:: VI )
349311 instance. sol. primal[vi. value]
350312end
351313MOI. get (instance:: Optimizer , a:: MOI.VariablePrimal , vi:: Vector{VI} ) = MOI. get .(instance, Ref (a), vi)
352- # setconstant: Retrieve set constant stored in `ConeData` during `copy! `
314+ # setconstant: Retrieve set constant stored in `ConeData` during `copy_to `
353315setconstant (instance:: Optimizer , offset, :: CI{<:MOI.AbstractFunction, <:MOI.EqualTo} ) = instance. cone. eqsetconstant[offset]
354316setconstant (instance:: Optimizer , offset, :: CI ) = instance. cone. ineqsetconstant[offset]
355317_unshift (instance:: Optimizer , offset, value, :: CI ) = value
@@ -368,9 +330,6 @@ function MOI.get(instance::Optimizer, ::MOI.ConstraintPrimal, ci::CI{<:MOI.Abstr
368330 _unshift (instance, offset, scalecoef (rows, reorderval (instance. sol. slack[offset .+ rows], S), false , S), ci)
369331end
370332
371- function MOI. canget (instance:: Optimizer , :: MOI.DualStatus )
372- instance. sol. ret_val != ECOS. ECOS_DINF
373- end
374333function MOI. get (instance:: Optimizer , :: MOI.DualStatus )
375334 flag = instance. sol. ret_val
376335 if flag == ECOS. ECOS_OPTIMAL
@@ -387,9 +346,6 @@ function MOI.get(instance::Optimizer, ::MOI.DualStatus)
387346 m. solve_stat = MOI. OtherResultStatus
388347 end
389348end
390- function MOI. canget (instance:: Optimizer , :: MOI.ConstraintDual , :: Type{<:CI} )
391- instance. sol. ret_val != ECOS. ECOS_DINF
392- end
393349_dual (instance, ci:: CI{<:MOI.AbstractFunction, <:ZeroCones} ) = instance. sol. dual_eq
394350_dual (instance, ci:: CI ) = instance. sol. dual_ineq
395351function MOI. get (instance:: Optimizer , :: MOI.ConstraintDual , ci:: CI{<:MOI.AbstractFunction, S} ) where S <: MOI.AbstractSet
@@ -398,5 +354,4 @@ function MOI.get(instance::Optimizer, ::MOI.ConstraintDual, ci::CI{<:MOI.Abstrac
398354 scalecoef (rows, reorderval (_dual (instance, ci)[offset .+ rows], S), false , S)
399355end
400356
401- MOI. canget (instance:: Optimizer , :: MOI.ResultCount ) = true
402357MOI. get (instance:: Optimizer , :: MOI.ResultCount ) = 1
0 commit comments