Skip to content

Commit ec25e80

Browse files
committed
Update to MathOptInterface v1.0
1 parent f9c0baa commit ec25e80

File tree

2 files changed

+15
-23
lines changed

2 files changed

+15
-23
lines changed

src/solve/moi.jl

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -89,23 +89,13 @@ end
8989
function __map_optimizer_args(prob::OptimizationProblem, opt::Union{MOI.AbstractOptimizer, MOI.OptimizerWithAttributes};
9090
maxiters::Union{Number, Nothing}=nothing,
9191
maxtime::Union{Number, Nothing}=nothing,
92-
abstol::Union{Number, Nothing}=nothing,
92+
abstol::Union{Number, Nothing}=nothing,
9393
reltol::Union{Number, Nothing}=nothing,
9494
kwargs...)
95-
96-
mapped_args = Vector{Pair{String, Any}}[]
97-
mapped_args = [mapped_args..., [Pair(string(j.first),j.second) for j = kwargs]...]
98-
99-
if isa(opt, MOI.AbstractOptimizer)
100-
if length(mapped_args) > 0
101-
opt = MOI.OptimizerWithAttributes(typeof(opt), mapped_args...)
102-
else
103-
opt = typeof(opt)
104-
end
105-
end
106-
10795
optimizer = MOI.instantiate(opt)
108-
96+
for (key, value) in kwargs
97+
MOI.set(optimizer, MOI.RawOptimizerattribute("$(key)"), value)
98+
end
10999
if !isnothing(maxtime)
110100
MOI.set(optimizer, MOI.TimeLimitSec(), maxtime)
111101
end
@@ -121,40 +111,42 @@ function __map_optimizer_args(prob::OptimizationProblem, opt::Union{MOI.Abstract
121111
if !isnothing(maxiters)
122112
@warn "common maxiters argument is currently not used by $(optimizer). Set number of interations via optimizer specific keyword aguments."
123113
end
124-
114+
125115
return optimizer
126116
end
127117

128118
function __solve(prob::OptimizationProblem, opt::Union{MOI.AbstractOptimizer, MOI.OptimizerWithAttributes};
129119
maxiters::Union{Number, Nothing}=nothing,
130120
maxtime::Union{Number, Nothing}=nothing,
131-
abstol::Union{Number, Nothing}=nothing,
121+
abstol::Union{Number, Nothing}=nothing,
132122
reltol::Union{Number, Nothing}=nothing,
133123
kwargs...)
134124

135125
maxiters = _check_and_convert_maxiters(maxiters)
136126
maxtime = _check_and_convert_maxtime(maxtime)
137127

138128
opt_setup = __map_optimizer_args(prob, opt; abstol=abstol, reltol=reltol, maxiters=maxiters, maxtime=maxtime, kwargs...)
139-
129+
140130
num_variables = length(prob.u0)
141131
θ = MOI.add_variables(opt_setup, num_variables)
142132
if prob.lb !== nothing
143133
@assert eachindex(prob.lb) == Base.OneTo(num_variables)
144134
for i in 1:num_variables
145-
MOI.add_constraint(opt_setup, MOI.SingleVariable(θ[i]), MOI.GreaterThan(prob.lb[i]))
135+
MOI.add_constraint(opt_setup, θ[i], MOI.GreaterThan(prob.lb[i]))
146136
end
147137
end
148138
if prob.ub !== nothing
149139
@assert eachindex(prob.ub) == Base.OneTo(num_variables)
150140
for i in 1:num_variables
151-
MOI.add_constraint(opt_setup, MOI.SingleVariable(θ[i]), MOI.LessThan(prob.ub[i]))
141+
MOI.add_constraint(opt_setup, θ[i], MOI.LessThan(prob.ub[i]))
152142
end
153143
end
154144
@assert eachindex(prob.u0) == Base.OneTo(num_variables)
155-
for i in 1:num_variables
156-
MOI.set(opt_setup, MOI.VariablePrimalStart(), θ[i], prob.u0[i])
157-
end
145+
if MOI.supports(opt_setup, MOI.VariablePrimalStart(), MOI.VariableIndex)
146+
for i in 1:num_variables
147+
MOI.set(opt_setup, MOI.VariablePrimalStart(), θ[i], prob.u0[i])
148+
end
149+
end
158150
MOI.set(opt_setup, MOI.ObjectiveSense(), prob.sense === MaxSense ? MOI.MAX_SENSE : MOI.MIN_SENSE)
159151
if prob.lcons === nothing
160152
@assert prob.ucons === nothing

test/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ ForwardDiff = ">= 0.10.19"
4848
GCMAES = ">= 0.1.25"
4949
Ipopt = ">= 0.7.0"
5050
IterTools = ">= 1.3.0"
51-
MathOptInterface = ">= 0.9.22"
51+
MathOptInterface = ">= 1"
5252
Metaheuristics = ">=3.0.2"
5353
ModelingToolkit = ">= 6.4.7"
5454
MultistartOptimization = ">= 0.1.2"

0 commit comments

Comments
 (0)