From e2906a0a7e3b2e895ba87754186890a39b6f8438 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Fri, 8 Aug 2025 21:49:41 -0500 Subject: [PATCH] FisSal2011: Accelerate creation of obj function --- src/Cuts/tableau/gmi_dual.jl | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/Cuts/tableau/gmi_dual.jl b/src/Cuts/tableau/gmi_dual.jl index c20a242..4795315 100644 --- a/src/Cuts/tableau/gmi_dual.jl +++ b/src/Cuts/tableau/gmi_dual.jl @@ -389,20 +389,26 @@ function collect_gmi_FisSal2011( log_should_print = false if round > 1 - @timeit "Update objective function" begin - # Build Lagrangian term - v = sparse(pool.lhs * multipliers_curr) - lagr_term = AffExpr(dot(multipliers_curr, pool.lb)) - for offset in 1:nnz(v) - var_idx = v.nzind[offset] - add_to_expression!( - lagr_term, - vars_s[var_idx], - - v.nzval[offset], - ) + @timeit "Build Lagrangian term" begin + @timeit "mul" begin + active_idx = findall(multipliers_curr .> 1e-6) + v = sparse(pool.lhs[:, active_idx] * multipliers_curr[active_idx]) end - - # Update objective + @timeit "dot" begin + lagr_term = AffExpr(dot(multipliers_curr, pool.lb)) + end + @timeit "add_to_expression!" begin + for offset in 1:nnz(v) + var_idx = v.nzind[offset] + add_to_expression!( + lagr_term, + vars_s[var_idx], + - v.nzval[offset], + ) + end + end + end + @timeit "Update objective" begin set_objective_function( model_s, orig_obj_s + lagr_term,