@@ -19,7 +19,7 @@ struct Solution
19
19
end
20
20
Solution () = Solution (0 , Float64[], Float64[], Float64[], Float64[], NaN , NaN )
21
21
22
- # Used to build the data with allocate-load during `copy! `.
22
+ # Used to build the data with allocate-load during `copy_to `.
23
23
# When `optimize!` is called, a the data is used to build `ECOSMatrix`
24
24
# and the `ModelData` struct is discarded
25
25
mutable struct ModelData
61
61
mutable struct Optimizer <: MOI.AbstractOptimizer
62
62
cone:: ConeData
63
63
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!
65
65
sol:: Solution
66
66
options
67
67
function Optimizer (; kwargs... )
68
68
new (ConeData (), false , nothing , Solution (), kwargs)
69
69
end
70
70
end
71
71
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 )
78
73
! instance. maxsense && instance. data === nothing
79
74
end
80
75
81
76
function MOI. empty! (instance:: Optimizer )
82
77
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
84
79
end
85
80
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
101
82
102
83
function MOI. supports (:: Optimizer ,
103
84
:: Union {MOI. ObjectiveSense,
104
85
MOI. ObjectiveFunction{MOI. ScalarAffineFunction{Float64}}})
105
86
return true
106
87
end
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
120
88
89
+ MOI. supports_constraint (:: Optimizer , :: Type{<:SF} , :: Type{<:SS} ) = true
121
90
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
123
94
124
95
using Compat. SparseArrays
125
96
@@ -128,33 +99,33 @@ const LPCones = Union{MOI.GreaterThan, MOI.LessThan, MOI.Nonnegatives, MOI.Nonpo
128
99
129
100
# Computes cone dimensions
130
101
constroffset (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 )
132
103
ci = cone. f
133
104
cone. f += MOI. dimension (s)
134
105
ci
135
106
end
136
107
constroffset (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 )
138
109
ci = cone. l
139
110
cone. l += MOI. dimension (s)
140
111
ci
141
112
end
142
113
constroffset (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 )
144
115
push! (cone. qa, s. dimension)
145
116
ci = cone. q
146
117
cone. q += MOI. dimension (s)
147
118
ci
148
119
end
149
120
constroffset (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 )
151
122
ci = 3 cone. ep
152
123
cone. ep += 1
153
124
ci
154
125
end
155
126
constroffset (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))
158
129
end
159
130
160
131
# Build constraint matrix
@@ -173,8 +144,8 @@ constrrows(instance::Optimizer, ci::CI{<:MOI.AbstractVectorFunction, <:MOI.Abstr
173
144
matrix (data:: ModelData , s:: ZeroCones ) = data. b, data. IA, data. JA, data. VA
174
145
matrix (data:: ModelData , s:: Union{LPCones, MOI.SecondOrderCone, MOI.ExponentialCone} ) = data. h, data. IG, data. JG, data. VG
175
146
matrix (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 )
178
149
a = sparsevec (variable_index_value .(f. terms), coefficient .(f. terms))
179
150
# sparsevec combines duplicates with + but does not remove zeros created so we call dropzeros!
180
151
dropzeros! (a)
@@ -196,7 +167,7 @@ function MOIU.loadconstraint!(instance::Optimizer, ci, f::MOI.ScalarAffineFuncti
196
167
append! (J, a. nzind)
197
168
append! (V, scalecoef (row, a. nzval, true , s))
198
169
end
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)
200
171
# SCS orders differently than MOI the second and third dimension of the exponential cone
201
172
orderval (val, s) = val
202
173
function orderval (val, s:: Union{MOI.ExponentialCone, Type{MOI.ExponentialCone}} )
@@ -207,7 +178,7 @@ expmap(i) = (1, 3, 2)[i]
207
178
function orderidx (idx, s:: MOI.ExponentialCone )
208
179
expmap .(idx)
209
180
end
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 )
211
182
A = sparse (output_index .(f. terms), variable_index_value .(f. terms), coefficient .(f. terms))
212
183
# sparse combines duplicates with + but does not remove zeros created so we call dropzeros!
213
184
dropzeros! (A)
@@ -229,12 +200,12 @@ function MOIU.loadconstraint!(instance::Optimizer, ci, f::MOI.VectorAffineFuncti
229
200
append! (Vs, scalecoef (I, V, true , s))
230
201
end
231
202
232
- function MOIU. allocatevariables! (instance:: Optimizer , nvars:: Integer )
203
+ function MOIU. allocate_variables (instance:: Optimizer , nvars:: Integer )
233
204
instance. cone = ConeData ()
234
205
VI .(1 : nvars)
235
206
end
236
207
237
- function MOIU. loadvariables! (instance:: Optimizer , nvars:: Integer )
208
+ function MOIU. load_variables (instance:: Optimizer , nvars:: Integer )
238
209
cone = instance. cone
239
210
m = cone. l + cone. q + 3 cone. ep
240
211
IA = Int[]
@@ -249,13 +220,13 @@ function MOIU.loadvariables!(instance::Optimizer, nvars::Integer)
249
220
instance. data = ModelData (m, nvars, IA, JA, VA, b, IG, JG, VG, h, 0. , c)
250
221
end
251
222
252
- function MOIU. allocate! (instance:: Optimizer , :: MOI.ObjectiveSense , sense:: MOI.OptimizationSense )
223
+ function MOIU. allocate (instance:: Optimizer , :: MOI.ObjectiveSense , sense:: MOI.OptimizationSense )
253
224
instance. maxsense = sense == MOI. MaxSense
254
225
end
255
- function MOIU. allocate! (:: Optimizer , :: MOI.ObjectiveFunction , :: MOI.ScalarAffineFunction ) end
226
+ function MOIU. allocate (:: Optimizer , :: MOI.ObjectiveFunction , :: MOI.ScalarAffineFunction ) end
256
227
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 )
259
230
c0 = Vector (sparsevec (variable_index_value .(f. terms), coefficient .(f. terms), instance. data. n))
260
231
instance. data. objconstant = f. constant
261
232
instance. data. c = instance. maxsense ? - c0 : c0
@@ -298,7 +269,6 @@ function MOI.optimize!(instance::Optimizer)
298
269
end
299
270
300
271
# Implements getter for result value and statuses
301
- MOI. canget (instance:: Optimizer , :: MOI.TerminationStatus ) = true
302
272
function MOI. get (instance:: Optimizer , :: MOI.TerminationStatus )
303
273
flag = instance. sol. ret_val
304
274
if flag == ECOS. ECOS_OPTIMAL
@@ -316,14 +286,9 @@ function MOI.get(instance::Optimizer, ::MOI.TerminationStatus)
316
286
end
317
287
end
318
288
319
- MOI. canget (instance:: Optimizer , :: MOI.ObjectiveValue ) = true
320
289
MOI. get (instance:: Optimizer , :: MOI.ObjectiveValue ) = instance. sol. objval
321
- MOI. canget (instance:: Optimizer , :: MOI.ObjectiveBound ) = true
322
290
MOI. get (instance:: Optimizer , :: MOI.ObjectiveBound ) = instance. sol. objbnd
323
291
324
- function MOI. canget (instance:: Optimizer , :: MOI.PrimalStatus )
325
- instance. sol. ret_val != ECOS. ECOS_PINF
326
- end
327
292
function MOI. get (instance:: Optimizer , :: MOI.PrimalStatus )
328
293
flag = instance. sol. ret_val
329
294
if flag == ECOS. ECOS_OPTIMAL
@@ -342,14 +307,11 @@ function MOI.get(instance::Optimizer, ::MOI.PrimalStatus)
342
307
end
343
308
# Swapping indices 2 <-> 3 is an involution (it is its own inverse)
344
309
const 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
348
310
function MOI. get (instance:: Optimizer , :: MOI.VariablePrimal , vi:: VI )
349
311
instance. sol. primal[vi. value]
350
312
end
351
313
MOI. 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 `
353
315
setconstant (instance:: Optimizer , offset, :: CI{<:MOI.AbstractFunction, <:MOI.EqualTo} ) = instance. cone. eqsetconstant[offset]
354
316
setconstant (instance:: Optimizer , offset, :: CI ) = instance. cone. ineqsetconstant[offset]
355
317
_unshift (instance:: Optimizer , offset, value, :: CI ) = value
@@ -368,9 +330,6 @@ function MOI.get(instance::Optimizer, ::MOI.ConstraintPrimal, ci::CI{<:MOI.Abstr
368
330
_unshift (instance, offset, scalecoef (rows, reorderval (instance. sol. slack[offset .+ rows], S), false , S), ci)
369
331
end
370
332
371
- function MOI. canget (instance:: Optimizer , :: MOI.DualStatus )
372
- instance. sol. ret_val != ECOS. ECOS_DINF
373
- end
374
333
function MOI. get (instance:: Optimizer , :: MOI.DualStatus )
375
334
flag = instance. sol. ret_val
376
335
if flag == ECOS. ECOS_OPTIMAL
@@ -387,9 +346,6 @@ function MOI.get(instance::Optimizer, ::MOI.DualStatus)
387
346
m. solve_stat = MOI. OtherResultStatus
388
347
end
389
348
end
390
- function MOI. canget (instance:: Optimizer , :: MOI.ConstraintDual , :: Type{<:CI} )
391
- instance. sol. ret_val != ECOS. ECOS_DINF
392
- end
393
349
_dual (instance, ci:: CI{<:MOI.AbstractFunction, <:ZeroCones} ) = instance. sol. dual_eq
394
350
_dual (instance, ci:: CI ) = instance. sol. dual_ineq
395
351
function 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
398
354
scalecoef (rows, reorderval (_dual (instance, ci)[offset .+ rows], S), false , S)
399
355
end
400
356
401
- MOI. canget (instance:: Optimizer , :: MOI.ResultCount ) = true
402
357
MOI. get (instance:: Optimizer , :: MOI.ResultCount ) = 1
0 commit comments