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..74bf819 100644 --- a/test/MOI_wrapper.jl +++ b/test/MOI_wrapper.jl @@ -136,6 +136,31 @@ 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) + KNITRO.KN_get_double_param(model.inner, KNITRO.KN_PARAM_MIP_MAXTIMECPU, p) + @test p[] == 30.0 + return +end + +function test_outname() + model = KNITRO.Optimizer() + attr = MOI.RawOptimizerAttribute("outname") + @test MOI.supports(model, attr) + MOI.set(model, attr, "new_name.log") + MOI.set(model, MOI.RawOptimizerAttribute("outmode"), 1) + MOI.add_variable(model) + MOI.optimize!(model) + @test isfile("new_name.log") + @test occursin("Artelys", read("new_name.log", String)) + rm("new_name.log") + return +end + end TestMOIWrapper.runtests()