From 55ed9609e7858e8e78eec6acfef146211e900b12 Mon Sep 17 00:00:00 2001 From: odow Date: Mon, 22 Jul 2024 16:01:02 +1200 Subject: [PATCH] Fix setting params to use id and type instead of string --- src/MOI_wrapper.jl | 21 ++++++++++++++------- test/MOI_wrapper.jl | 11 +++++++++++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/MOI_wrapper.jl b/src/MOI_wrapper.jl index 4f40317..8bbfc27 100644 --- a/src/MOI_wrapper.jl +++ b/src/MOI_wrapper.jl @@ -312,14 +312,21 @@ function MOI.set(model::Optimizer, attr::MOI.RawOptimizerAttribute, value) @_checked KN_load_tuner_file(model.inner, value) elseif attr.name == "free" @_checked KN_free(model.inner) - elseif !MOI.supports(model, attr) + end + pId = Ref{Cint}(0) + ret = KN_get_param_id(model.inner, attr.name, pId) + if ret == KN_RC_BAD_PARAMINPUT || pId[] <= 0 throw(MOI.UnsupportedAttribute(attr)) - elseif value isa Integer - @_checked KN_set_int_param_by_name(model.inner, attr.name, value) - elseif value isa Cdouble - @_checked KN_set_double_param_by_name(model.inner, attr.name, value) - elseif value isa AbstractString - @_checked KN_set_char_param_by_name(model.inner, attr.name, value) + end + pType = Ref{Cint}() + @_checked KN_get_param_type(model.inner, pId[], pType) + if pType[] == KN_PARAMTYPE_INTEGER + @_checked KN_set_int_param(model.inner, pId[], value) + elseif pType[] == KN_PARAMTYPE_FLOAT + @_checked KN_set_double_param(model.inner, pId[], value) + else + @assert pType[] == KN_PARAMTYPE_STRING + @_checked KN_set_char_param(model.inner, pId[], value) end model.options[attr.name] = value return diff --git a/test/MOI_wrapper.jl b/test/MOI_wrapper.jl index f629a2b..4102696 100644 --- a/test/MOI_wrapper.jl +++ b/test/MOI_wrapper.jl @@ -136,6 +136,17 @@ function test_get_nlp_block() return end +function test_maxtime_cpu() + model = KNITRO.Optimizer() + attr = MOI.RawOptimizerAttribute("mip_maxtimecpu") + @test MOI.supports(model, attr) + MOI.set(model, attr, 30) + p = Ref{Cdouble}(0.0) + KN_get_double_param(model.inner, KN_PARAM_MIP_MAXTIMECPU, p) + @test p == 30.0 + return +end + end TestMOIWrapper.runtests()