|
60 | 60 | mutable struct SCSOptimizer <: MOI.AbstractOptimizer |
61 | 61 | cone::ConeData |
62 | 62 | maxsense::Bool |
63 | | - data::Union{Void, ModelData} # only non-Void between MOI.copy! and MOI.optimize! |
| 63 | + data::Union{Nothing, ModelData} # only non-Void between MOI.copy! and MOI.optimize! |
64 | 64 | sol::MOISolution |
65 | 65 | function SCSOptimizer() |
66 | 66 | new(ConeData(), false, nothing, MOISolution()) |
@@ -169,7 +169,7 @@ function _scalecoef(rows, coef, minus, ::Type{MOI.PositiveSemidefiniteConeTriang |
169 | 169 | scaling = minus ? -1 : 1 |
170 | 170 | scaling2 = rev ? scaling / √2 : scaling * √2 |
171 | 171 | output = copy(coef) |
172 | | - diagidx = IntSet() |
| 172 | + diagidx = BitSet() |
173 | 173 | for i in 1:d |
174 | 174 | push!(diagidx, trimap(i, i)) |
175 | 175 | end |
@@ -232,11 +232,11 @@ function MOIU.loadconstraint!(optimizer::SCSOptimizer, ci, f::MOI.VectorAffineFu |
232 | 232 | offset = constroffset(optimizer, ci) |
233 | 233 | rows = constrrows(s) |
234 | 234 | optimizer.cone.nrows[offset] = length(rows) |
235 | | - i = offset + rows |
| 235 | + i = offset .+ rows |
236 | 236 | # The SCS format is b - Ax ∈ cone |
237 | 237 | # so minus=false for b and minus=true for A |
238 | 238 | optimizer.data.b[i] = scalecoef(rows, orderval(f.constant, s), false, s) |
239 | | - append!(optimizer.data.I, offset + orderidx(I, s)) |
| 239 | + append!(optimizer.data.I, offset .+ orderidx(I, s)) |
240 | 240 | append!(optimizer.data.J, J) |
241 | 241 | append!(optimizer.data.V, scalecoef(I, V, true, s)) |
242 | 242 | end |
@@ -268,7 +268,7 @@ MOIU.canload(::SCSOptimizer, ::MOI.ObjectiveSense) = true |
268 | 268 | function MOIU.load!(::SCSOptimizer, ::MOI.ObjectiveSense, ::MOI.OptimizationSense) end |
269 | 269 | MOIU.canload(::SCSOptimizer, ::MOI.ObjectiveFunction{MOI.ScalarAffineFunction{Float64}}) = true |
270 | 270 | function MOIU.load!(optimizer::SCSOptimizer, ::MOI.ObjectiveFunction, f::MOI.ScalarAffineFunction) |
271 | | - c0 = full(sparsevec(_varmap(f), f.coefficients, optimizer.data.n)) |
| 271 | + c0 = Vector(sparsevec(_varmap(f), f.coefficients, optimizer.data.n)) |
272 | 272 | optimizer.data.objconstant = f.constant |
273 | 273 | optimizer.data.c = optimizer.maxsense ? -c0 : c0 |
274 | 274 | end |
|
352 | 352 | function MOI.get(optimizer::SCSOptimizer, ::MOI.ConstraintPrimal, ci::CI{<:MOI.AbstractFunction, S}) where S <: MOI.AbstractSet |
353 | 353 | offset = constroffset(optimizer, ci) |
354 | 354 | rows = constrrows(optimizer, ci) |
355 | | - _unshift(optimizer, offset, unscalecoef(rows, reorderval(optimizer.sol.slack[offset + rows], S), S, length(rows)), S) |
| 355 | + _unshift(optimizer, offset, unscalecoef(rows, reorderval(optimizer.sol.slack[offset .+ rows], S), S, length(rows)), S) |
356 | 356 | end |
357 | 357 |
|
358 | 358 | MOI.canget(optimizer::SCSOptimizer, ::MOI.DualStatus) = true |
|
372 | 372 | function MOI.get(optimizer::SCSOptimizer, ::MOI.ConstraintDual, ci::CI{<:MOI.AbstractFunction, S}) where S <: MOI.AbstractSet |
373 | 373 | offset = constroffset(optimizer, ci) |
374 | 374 | rows = constrrows(optimizer, ci) |
375 | | - unscalecoef(rows, reorderval(optimizer.sol.dual[offset + rows], S), S, length(rows)) |
| 375 | + unscalecoef(rows, reorderval(optimizer.sol.dual[offset .+ rows], S), S, length(rows)) |
376 | 376 | end |
377 | 377 |
|
378 | 378 | MOI.canget(optimizer::SCSOptimizer, ::MOI.ResultCount) = true |
|
0 commit comments