From 55ed9609e7858e8e78eec6acfef146211e900b12 Mon Sep 17 00:00:00 2001 From: odow Date: Mon, 22 Jul 2024 16:01:02 +1200 Subject: [PATCH 1/4] 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() From 61f396d8a3b42d5166e2aafe8c308ad71fed1b80 Mon Sep 17 00:00:00 2001 From: odow Date: Mon, 22 Jul 2024 16:26:22 +1200 Subject: [PATCH 2/4] Update --- test/MOI_wrapper.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/MOI_wrapper.jl b/test/MOI_wrapper.jl index 4102696..5e809eb 100644 --- a/test/MOI_wrapper.jl +++ b/test/MOI_wrapper.jl @@ -142,7 +142,7 @@ function test_maxtime_cpu() @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) + KNITRO.KN_get_double_param(model.inner, KNITRO.KN_PARAM_MIP_MAXTIMECPU, p) @test p == 30.0 return end From c06a0dad603ad582073a215bdf5050d78b75d154 Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Mon, 22 Jul 2024 16:36:24 +1200 Subject: [PATCH 3/4] Update test/MOI_wrapper.jl --- test/MOI_wrapper.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/MOI_wrapper.jl b/test/MOI_wrapper.jl index 5e809eb..8dc0626 100644 --- a/test/MOI_wrapper.jl +++ b/test/MOI_wrapper.jl @@ -143,7 +143,7 @@ function test_maxtime_cpu() 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 + @test p[] == 30.0 return end From c5ef1578cfb9c3aae33e7499f344c8d022a3f706 Mon Sep 17 00:00:00 2001 From: odow Date: Mon, 22 Jul 2024 17:07:49 +1200 Subject: [PATCH 4/4] Add test --- test/MOI_wrapper.jl | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/MOI_wrapper.jl b/test/MOI_wrapper.jl index 8dc0626..74bf819 100644 --- a/test/MOI_wrapper.jl +++ b/test/MOI_wrapper.jl @@ -147,6 +147,20 @@ function test_maxtime_cpu() 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()