Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
77c22ce
Add general mod-2 zero-half separation
akifcorduk Jul 29, 2026
cdd0e19
Bound root cut work and report work units
akifcorduk Aug 4, 2026
1c8acca
Merge branch 'main' of github.com:NVIDIA/cuopt into test/cut-ab-cliqu…
akifcorduk Aug 4, 2026
8b6907a
Coarsen zero-half work accounting
akifcorduk Aug 5, 2026
f1b72ce
Isolate mod-2 zero-half cut generation
akifcorduk Aug 5, 2026
6c68304
few more cleanup
akifcorduk Aug 6, 2026
1227a48
more clean up
akifcorduk Aug 6, 2026
1bfaf18
Pin papilo to the change_coefficient capacity-guard fix
akifcorduk Aug 7, 2026
0d39a0f
remove work unit related changes
akifcorduk Aug 10, 2026
25f4923
bound cut generation and B&B timeout work
akifcorduk Aug 11, 2026
7958c6f
Merge branch 'main' of github.com:NVIDIA/cuopt into test/cut-ab-cliqu…
akifcorduk Aug 11, 2026
db89ce1
Bound long-running cut generation work
akifcorduk Aug 12, 2026
f17b650
Merge remote-tracking branch 'upstream/main' into test/cut-ab-clique-…
akifcorduk Aug 12, 2026
7c2ed26
Remove cut pool size limits
akifcorduk Aug 12, 2026
ee7ce6b
Reduce mod-2 zero-half work budget
akifcorduk Aug 12, 2026
9772b75
Revert \"Reduce mod-2 zero-half work budget\"
akifcorduk Aug 13, 2026
85c0d55
Merge branch 'main' of github.com:NVIDIA/cuopt into test/cut-ab-cliqu…
akifcorduk Aug 14, 2026
4e373e2
cleanups and revert some changes
akifcorduk Aug 14, 2026
eb1b2fd
Merge branch 'main' of github.com:NVIDIA/cuopt into test/cut-ab-cliqu…
akifcorduk Aug 14, 2026
cb33aff
restore cut scoring timer
akifcorduk Aug 14, 2026
75117f1
centralize node halt signaling and clean casts
akifcorduk Aug 19, 2026
d11984c
prevent worker reuse after search termination
akifcorduk Aug 19, 2026
f799e24
Merge branch 'main' of github.com:NVIDIA/cuopt into test/cut-ab-cliqu…
akifcorduk Aug 21, 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
2 changes: 1 addition & 1 deletion cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ FetchContent_Declare(
# This is the reason we are using the development branch
# from Oct 12, 2025. Once these changes are merged into the main branch,
#we can switch to the main branch.
GIT_TAG "32b3a87dbf4955d5a2803be74145c389ea31434d"
GIT_TAG "55d5edece584885061639ecf3a6eb8a4629be9f2"
GIT_PROGRESS TRUE
EXCLUDE_FROM_ALL
SYSTEM
Expand Down
25 changes: 19 additions & 6 deletions cpp/src/branch_and_bound/branch_and_bound.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1565,8 +1565,9 @@ dual_status_t branch_and_bound_t<i_t, f_t>::solve_node_lp(
} else {
lp_settings.cut_off = cutoff + settings_.dual_tol;
}
lp_settings.inside_mip = 2;
lp_settings.time_limit = settings_.time_limit - toc(exploration_stats_.start_time);
lp_settings.inside_mip = 2;
lp_settings.time_limit = settings_.time_limit - toc(exploration_stats_.start_time);
if (lp_settings.time_limit <= 0.0) { return dual_status_t::TIME_LIMIT; }
lp_settings.scale_columns = false;
lp_settings.iteration_limit = iter_limit;

Expand Down Expand Up @@ -1823,6 +1824,10 @@ void branch_and_bound_t<i_t, f_t>::plunge_with(bfs_worker_t<i_t, f_t>* worker,
abs_gap = compute_user_abs_gap(original_lp_, upper_bound, lower_bound);
}

if (solver_status_ == mip_status_t::TIME_LIMIT || solver_status_ == mip_status_t::OPTIMAL) {
node_concurrent_halt_ = 1;
}

// If the solver exits early without consuming the local stack, or converged according to
// the gap rules while nodes are still pending, put those nodes back into the global queue
// before returning.
Expand All @@ -1840,6 +1845,9 @@ void branch_and_bound_t<i_t, f_t>::plunge_with(bfs_worker_t<i_t, f_t>* worker,
template <typename i_t, typename f_t>
void branch_and_bound_t<i_t, f_t>::launch_bfs_worker(bfs_worker_t<i_t, f_t>* worker)
{
// The status may change after the caller checks its search-loop condition.
if (solver_status_ != mip_status_t::UNSET) { return; }

Comment thread
coderabbitai[bot] marked this conversation as resolved.
bfs_worker_t<i_t, f_t>* idle_worker = bfs_worker_pool_.pop_idle_worker();
if (!idle_worker) return;

Expand Down Expand Up @@ -1976,8 +1984,7 @@ void branch_and_bound_t<i_t, f_t>::best_first_search_with(bfs_worker_t<i_t, f_t>
rel_gap = user_relative_gap(user_obj, user_lower);

if (abs_gap <= settings_.absolute_mip_gap_tol || rel_gap <= settings_.relative_mip_gap_tol) {
node_concurrent_halt_ = 1;
solver_status_ = mip_status_t::OPTIMAL;
solver_status_ = mip_status_t::OPTIMAL;
break;
}

Expand All @@ -1987,6 +1994,10 @@ void branch_and_bound_t<i_t, f_t>::best_first_search_with(bfs_worker_t<i_t, f_t>
}
}

if (solver_status_ == mip_status_t::TIME_LIMIT || solver_status_ == mip_status_t::OPTIMAL) {
node_concurrent_halt_ = 1;
}

// If the worker has still nodes in the queue (this can happen if it was stopped due to
// time limit, small gap or other reason), then do not add back to the pool to avoid
// constantly trying to start it again
Expand Down Expand Up @@ -2044,7 +2055,8 @@ void branch_and_bound_t<i_t, f_t>::dive_with(diving_worker_t<i_t, f_t>* worker,
}

if (toc(exploration_stats_.start_time) > settings_.time_limit) {
solver_status_ = mip_status_t::TIME_LIMIT;
node_concurrent_halt_ = 1;
solver_status_ = mip_status_t::TIME_LIMIT;
break;
}
if (dive_stats.nodes_explored >= diving_node_limit) { break; }
Expand All @@ -2063,7 +2075,8 @@ void branch_and_bound_t<i_t, f_t>::dive_with(diving_worker_t<i_t, f_t>* worker,
++dive_stats.nodes_explored;

if (lp_status == dual_status_t::TIME_LIMIT) {
solver_status_ = mip_status_t::TIME_LIMIT;
node_concurrent_halt_ = 1;
solver_status_ = mip_status_t::TIME_LIMIT;
break;
}
if (lp_status == dual_status_t::CONCURRENT_LIMIT) { break; }
Expand Down
1 change: 1 addition & 0 deletions cpp/src/cuts/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
set(CUTS_SRC_FILES
${CMAKE_CURRENT_SOURCE_DIR}/cuts.cpp
${CMAKE_CURRENT_SOURCE_DIR}/objective_step.cpp
${CMAKE_CURRENT_SOURCE_DIR}/zero_half_mod2.cpp
)

set(CUOPT_SRC_FILES ${CUOPT_SRC_FILES}
Expand Down
Loading
Loading