Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
7832d49
calculate reduced cost fixing for every incumbent update.
nguidotti Mar 11, 2026
254de15
apply reduced cost fixing locally before branching
nguidotti Mar 12, 2026
237fffd
propagate bound changes at the root to all active workers. split work…
nguidotti Mar 13, 2026
23b9bb9
added missing mutexes.
nguidotti Mar 13, 2026
56fa644
extend reduced cost fixing to diving workers. fix possible race condi…
nguidotti Mar 13, 2026
1862e36
fix worker initialization when the path is invalid after reduced cost…
nguidotti Mar 13, 2026
a5fdf50
fix diving initialization
nguidotti Mar 13, 2026
bd1ad23
add missing mutex
nguidotti Mar 13, 2026
cc63dc6
added comments
nguidotti Mar 16, 2026
e5e7d26
unified reduced root fixing into a single routine.
nguidotti Mar 16, 2026
00576e6
added missing feasibility check.
nguidotti Mar 16, 2026
e591c34
Merge branch 'main' into reduced-cost-fixing
nguidotti Mar 19, 2026
5d8eebf
Fixed duplicated settings
nguidotti Mar 20, 2026
51a7d48
Merge branch 'release/26.04' into reduced-cost-fixing
nguidotti Mar 20, 2026
2aa7b9e
the absolute gap for stopping B&B is now calculated in the user space…
nguidotti Mar 20, 2026
7576aa5
Merge remote-tracking branch 'origin/reduced-cost-fixing' into reduce…
nguidotti Mar 20, 2026
ad05006
small change
nguidotti Mar 24, 2026
22f6265
reduced verbosity for the reduced cost strengthening
nguidotti Mar 24, 2026
f9ae273
fixed incorrect label and lower bound for the node when it violates t…
nguidotti Mar 25, 2026
fe687fb
removed variable bounds check. extended reduced cost strengthening to…
nguidotti Mar 25, 2026
0e7e83b
removed reduced cost strengthening for continuous variables
nguidotti Mar 25, 2026
14a8712
Merge branch 'release/26.04' into reduced-cost-fixing
nguidotti Mar 25, 2026
e9ac674
re-added feasibility checks
nguidotti Mar 30, 2026
da6b8fa
Merge branch 'release/26.04' into reduced-cost-fixing
nguidotti Mar 30, 2026
d1ca630
fix compilation. removed mip_node.cpp (it was just a single, simple f…
nguidotti Mar 30, 2026
a3453be
fixed gap checks in plunging and diving
nguidotti Mar 31, 2026
fe672d3
Merge branch 'release/26.04' into reduced-cost-fixing
nguidotti Mar 31, 2026
18d6474
Merge remote-tracking branch 'cuopt/release/26.04' into reduced-cost-…
nguidotti Apr 1, 2026
c785f08
fix incorrect bounds
nguidotti Apr 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion cpp/src/branch_and_bound/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

set(BRANCH_AND_BOUND_SRC_FILES
${CMAKE_CURRENT_SOURCE_DIR}/branch_and_bound.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mip_node.cpp
${CMAKE_CURRENT_SOURCE_DIR}/pseudo_costs.cpp
${CMAKE_CURRENT_SOURCE_DIR}/diving_heuristics.cpp
)
Expand Down
394 changes: 253 additions & 141 deletions cpp/src/branch_and_bound/branch_and_bound.cpp

Large diffs are not rendered by default.

14 changes: 5 additions & 9 deletions cpp/src/branch_and_bound/branch_and_bound.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@
#pragma once

#include <branch_and_bound/bb_event.hpp>
#include <branch_and_bound/branch_and_bound_worker.hpp>
#include <branch_and_bound/deterministic_workers.hpp>
#include <branch_and_bound/diving_heuristics.hpp>
#include <branch_and_bound/mip_node.hpp>
#include <branch_and_bound/node_queue.hpp>
#include <branch_and_bound/pseudo_costs.hpp>
#include <branch_and_bound/worker.hpp>
#include <branch_and_bound/worker_pool.hpp>

#include <cuts/cuts.hpp>

Expand All @@ -30,8 +30,6 @@
#include <utilities/work_limit_context.hpp>
#include <utilities/work_unit_scheduler.hpp>

#include <omp.h>

#include <atomic>
#include <functional>
#include <future>
Expand Down Expand Up @@ -102,7 +100,7 @@ class branch_and_bound_t {
}
}

// Set a solution based on the user problem during the course of the solve
// Set a solution based on the user problem during solve time
void set_new_solution(const std::vector<f_t>& solution);

// This queues the solution to be processed at the correct work unit timestamp
Expand Down Expand Up @@ -147,10 +145,6 @@ class branch_and_bound_t {
std::vector<i_t>& nonbasic_list,
std::vector<f_t>& edge_norms);

i_t find_reduced_cost_fixings(f_t upper_bound,
std::vector<f_t>& lower_bounds,
std::vector<f_t>& upper_bounds);

// The main entry routine. Returns the solver status and populates solution with the incumbent.
mip_status_t solve(mip_solution_t<i_t, f_t>& solution);

Expand Down Expand Up @@ -325,6 +319,8 @@ class branch_and_bound_t {
dual::status_t lp_status,
logger_t& log);

void root_reduced_cost_fixing(f_t upper_bound);

// ============================================================================
// Deterministic BSP (Bulk Synchronous Parallel) methods for deterministic parallel B&B
// ============================================================================
Expand Down
281 changes: 0 additions & 281 deletions cpp/src/branch_and_bound/branch_and_bound_worker.hpp

This file was deleted.

11 changes: 7 additions & 4 deletions cpp/src/branch_and_bound/deterministic_workers.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
#pragma once

#include <branch_and_bound/bb_event.hpp>
#include <branch_and_bound/branch_and_bound_worker.hpp>
#include <branch_and_bound/diving_heuristics.hpp>
#include <branch_and_bound/node_queue.hpp>
#include <branch_and_bound/worker.hpp>

#include <utilities/work_limit_context.hpp>

Expand Down Expand Up @@ -316,10 +316,13 @@ class deterministic_diving_worker_t
void enqueue_dive_node(mip_node_t<i_t, f_t>* node, const lp_problem_t<i_t, f_t>& original_lp)
{
dive_queue_entry_t<i_t, f_t> entry;
entry.resolved_lower = original_lp.lower;
entry.resolved_upper = original_lp.upper;
std::vector<bool> bounds_changed(original_lp.num_cols, false);
node->get_variable_bounds(entry.resolved_lower, entry.resolved_upper, bounds_changed);
bool feasible = node->get_variable_bounds(original_lp.lower,
original_lp.upper,
entry.resolved_lower,
entry.resolved_upper,
bounds_changed);
if (!feasible) { return; }
entry.node = node->detach_copy();
dive_queue.push_back(std::move(entry));
}
Expand Down
18 changes: 0 additions & 18 deletions cpp/src/branch_and_bound/mip_node.cpp

This file was deleted.

Loading
Loading