From bc9be09e94a9c5c1c87c73b1d6c13acbcaa272de Mon Sep 17 00:00:00 2001 From: Sungho Shin Date: Thu, 28 Aug 2025 22:15:34 -0400 Subject: [PATCH 1/2] Gurobi options added --- Project.toml | 2 +- src/QuadraticModelsGurobi.jl | 25 +++---------------------- 2 files changed, 4 insertions(+), 23 deletions(-) diff --git a/Project.toml b/Project.toml index 7dc3578..2bb2658 100644 --- a/Project.toml +++ b/Project.toml @@ -12,7 +12,7 @@ SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" SparseMatricesCOO = "fa32481b-f100-4b48-8dc8-c62f61b13870" [compat] -Gurobi = "0.10, 0.11" +Gurobi = "1" QuadraticModels = "0.9" SolverCore = "0.3" SparseMatricesCOO = "0.2" diff --git a/src/QuadraticModelsGurobi.jl b/src/QuadraticModelsGurobi.jl index 0d18b92..5ea6202 100644 --- a/src/QuadraticModelsGurobi.jl +++ b/src/QuadraticModelsGurobi.jl @@ -67,28 +67,9 @@ gurobi(QM::QuadraticModel{T, S}; kwargs...) where {T, S} = gurobi( kwargs... ) -function gurobi(QM::QuadraticModel{T, S, M1, M2}; - method=2, kwargs...) where {T, S, M1 <: SparseMatrixCOO, M2 <: SparseMatrixCOO} - env = Gurobi.Env() - # -1=automatic, 0=primal simplex, 1=dual simplex, 2=barrier, - # 3=concurrent, 4=deterministic concurrent, 5=deterministic concurrent simplex. - # default to barrier - GRBsetintparam(env, "Method", method) - # use kwargs change to presolve, scaling and crossover mode - # example: gurobi(QM, presolve=0) (see gurobi doc for other options) - for (k, v) in kwargs - if k==:presolve - GRBsetintparam(env, "Presolve", v) # 0 = no presolve - elseif k==:scaling - GRBsetintparam(env, "ScaleFlag", v) # 0 = no scaling - elseif k==:crossover - GRBsetintparam(env, "Crossover", v) # 0 = no crossover - elseif k==:display - GRBsetintparam(env, "OutputFlag", v) # 0 = no display - elseif k==:threads - GRBsetintparam(env, "Threads", v) - end - end +function gurobi(QM::QuadraticModel{T, S, M1, M2}; kwargs...) where {T, S, M1 <: SparseMatrixCOO, M2 <: SparseMatrixCOO} + + env = Gurobi.Env(Dict{String,Any}(string(k) => v for (k,v) in kwargs)) model = Ref{Ptr{Cvoid}}() GRBnewmodel(env, model, "", QM.meta.nvar, QM.data.c, QM.meta.lvar, QM.meta.uvar, C_NULL, C_NULL) From 21d0cd519476add0e35792c75874aa735b48ea57 Mon Sep 17 00:00:00 2001 From: Sungho Shin Date: Thu, 28 Aug 2025 22:18:59 -0400 Subject: [PATCH 2/2] options testing --- test/runtests.jl | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test/runtests.jl b/test/runtests.jl index 509559d..9dc7a02 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -43,7 +43,9 @@ using Test c0 = 0.0, name = "QM_dense", ) - stats_dense = gurobi(qp_dense) - @test isapprox(stats_dense.objective, 1.1249999990782493, atol = 1e-2) - @test stats_dense.status == :acceptable -end \ No newline at end of file + for method in [1,2] + stats_dense = gurobi(qp_dense, Method = method) + @test isapprox(stats_dense.objective, 1.1249999990782493, atol = 1e-2) + @test stats_dense.status == :acceptable + end +end