diff --git a/src/BARON.jl b/src/BARON.jl index 70669e7..b10e201 100644 --- a/src/BARON.jl +++ b/src/BARON.jl @@ -64,7 +64,7 @@ mutable struct SolutionStatus end mutable struct BaronModel - options::Dict{Symbol, Any} + options::Dict{String, Any} variable_info::Vector{VariableInfo} constraint_info::Vector{ConstraintInfo} @@ -80,7 +80,7 @@ mutable struct BaronModel solution_info::Union{Nothing, SolutionStatus} function BaronModel(; kwargs...) - options = Dict{Symbol, Any}(key => val for (key,val) in kwargs) + options = Dict{String, Any}(string(key) => val for (key,val) in kwargs) model = new() model.options = options model.variable_info = VariableInfo[] @@ -89,10 +89,10 @@ mutable struct BaronModel model.objective_expr = nothing temp_dir = mktempdir() model.temp_dir_name = temp_dir - model.problem_file_name = get!(options, :ProName, joinpath(temp_dir, "baron_problem.bar")) - model.times_file_name = get!(options, :TimName, joinpath(temp_dir, "tim.lst")) - model.summary_file_name = get!(options, :SumName, joinpath(temp_dir, "sum.lst")) - model.result_file_name = get!(options, :ResName, joinpath(temp_dir, "res.lst")) + model.problem_file_name = get!(options, "ProName", joinpath(temp_dir, "baron_problem.bar")) + model.times_file_name = get!(options, "TimName", joinpath(temp_dir, "tim.lst")) + model.summary_file_name = get!(options, "SumName", joinpath(temp_dir, "sum.lst")) + model.result_file_name = get!(options, "ResName", joinpath(temp_dir, "res.lst")) model.solution_info = nothing return model end diff --git a/src/MOI_wrapper.jl b/src/MOI_wrapper.jl index b781524..f1cec18 100644 --- a/src/MOI_wrapper.jl +++ b/src/MOI_wrapper.jl @@ -36,8 +36,9 @@ function MOI.is_empty(model::Optimizer) end function MOI.empty!(model::Optimizer) - model.inner = BaronModel(; model.inner.options...) + model.inner = BaronModel(; ((Symbol(key), val) for (key, val) in model.inner.options)...) model.nlp_block_data = nothing + return end # copy @@ -57,16 +58,28 @@ function MOI.optimize!(model::Optimizer) read_results(model.inner) end +# RawParameter +MOI.supports(::Optimizer, ::MOI.RawParameter) = true +function MOI.set(model::Optimizer, param::MOI.RawParameter, value) + model.inner.options[param.name] = value + return +end +function MOI.get(model::Optimizer, param::MOI.RawParameter) + return get(model.inner.options, param.name) do + throw(ErrorException("Requested parameter $(param.name) is not set.")) + end +end + # TimeLimitSec MOI.supports(::Optimizer, ::MOI.TimeLimitSec) = true function MOI.set(model::Optimizer, ::MOI.TimeLimitSec, val::Real) - model.inner.options[:MaxTime] = Float64(val) + model.inner.options["MaxTime"] = Float64(val) return end # BARON's default time limit is 1000 seconds. function MOI.get(model::Optimizer, ::MOI.TimeLimitSec) - return get(model.inner.options, :MaxTime, 1000.0) + return get(model.inner.options, "MaxTime", 1000.0) end include(joinpath("moi", "util.jl"))