Skip to content

Commit

Permalink
Fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
rrsadykov committed Dec 7, 2023
1 parent 1f8bd40 commit fb5d898
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 14 deletions.
10 changes: 6 additions & 4 deletions src/Algorithm/presolve/interface.jl
Original file line number Diff line number Diff line change
Expand Up @@ -436,10 +436,9 @@ function propagate_partial_sol_to_global_bounds!(presolve_repr_master, local_rep
end

# You need to update subproblem multiplicity before using this function.
function compute_default_global_bounds(reform::Reformulation, presolve_reform::DwPresolveReform)
function compute_default_global_bounds(dw_pricing_sps, presolve_reform::DwPresolveReform)
global_bounds = Dict{VarId,Tuple{Float64,Float64}}()

dw_pricing_sps = get_dw_pricing_sps(reform)
for (sp_id, sp_presolve_form) in presolve_reform.dw_sps
lm = sp_presolve_form.form.lower_multiplicity
um = sp_presolve_form.form.upper_multiplicity
Expand Down Expand Up @@ -489,15 +488,18 @@ function propagate_partial_sol_into_master!(reform::Reformulation, presolve_refo

# Project local partial solution on the representative master.
local_repr_partial_sol, nb_fixed_columns_per_sp = partial_sol_on_repr(
reform, presolve_reform, local_restr_partial_sol
get_dw_pricing_sps(reform),
presolve_representative_master,
presolve_restricted_master,
local_restr_partial_sol
)

# Update the multiplicity of each subproblem.
update_subproblem_multiplicities!(presolve_reform.dw_sps, nb_fixed_columns_per_sp)

# Compute new default global bounds
master_repr_default_global_bounds = compute_default_global_bounds(
reform, presolve_reform
get_dw_pricing_sps(reform), presolve_reform
)

# Propagate local partial solution from the representative master representation
Expand Down
10 changes: 4 additions & 6 deletions src/Algorithm/presolve/propagation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -148,16 +148,14 @@ function propagate_partial_sol_to_global_bounds!(presolve_sp::PresolveFormulatio
end

function partial_sol_on_repr(
reform::Reformulation,
presolve_reform::DwPresolveReform,
dw_sps,
presolve_master_repr::PresolveFormulation,
presolve_master_restr::PresolveFormulation,
restr_partial_sol
)
dw_sps = get_dw_pricing_sps(reform)
presolve_master_restr = presolve_reform.restricted_master
presolve_master_repr = presolve_reform.representative_master
partial_solution = zeros(Float64, presolve_master_repr.form.nb_vars)

nb_fixed_columns = Dict(spid => 0 for (spid, _) in presolve_reform.dw_sps)
nb_fixed_columns = Dict(spid => 0 for (spid, _) in dw_sps)
new_column_explored = false
for (col, partial_sol_value) in enumerate(restr_partial_sol)
if abs(partial_sol_value) > Coluna.TOL
Expand Down
11 changes: 7 additions & 4 deletions test/unit/Presolve/presolve.jl
Original file line number Diff line number Diff line change
Expand Up @@ -493,11 +493,14 @@ function test_compute_default_global_bounds_and_propagate_partial_sol_into_maste
)

Coluna.Algorithm.update_subproblem_multiplicities!(presolve_pricing_sps, nb_fixed_columns_per_sp)
presolve_reform = Coluna.Algorithm.DwPresolveReform(
presolve_master_repr,
presolve_master_restr,
presolve_pricing_sps
)
global_bounds = Coluna.Algorithm.compute_default_global_bounds(
presolve_master_repr,
presolve_dw_sps,
master,
dw_pricing_sps
dw_pricing_sps,
presolve_reform
)
# new global bounds are computed only using new multiplicity of the subproblems.
@test global_bounds[1] == (0, 1)
Expand Down

0 comments on commit fb5d898

Please sign in to comment.