Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
109 commits
Select commit Hold shift + click to select a range
2970a07
Migrate RMM usage to CCCL MR design
bdice Apr 3, 2026
e77dbc2
split worker and worker pool in separated file. code cleanup.
nguidotti Mar 13, 2026
62d0452
simplified logic for pseudo cost (and its snapshot) for the regular a…
nguidotti Apr 1, 2026
a517f13
fixed compilation
nguidotti Apr 7, 2026
f31599c
added missing header
nguidotti Apr 7, 2026
202738f
fixed guard against no incumbent when calling guided diving
nguidotti Apr 7, 2026
4aed76c
addressing code rabbit comments. replaced AT in pseudo_costs_t with a…
nguidotti Apr 7, 2026
a5c111d
missing dereference
nguidotti Apr 7, 2026
919e445
Merge branch 'main' into simplify-pseudocost
nguidotti Apr 8, 2026
76ce1bb
split best-first and diving worker into separated objects
nguidotti Apr 8, 2026
c433e41
increase the wheel size limit
nguidotti Apr 8, 2026
52db538
fixed rng offset
nguidotti Apr 8, 2026
3676432
increasing wheel size limit for CUDA 12
nguidotti Apr 8, 2026
d2f6eb7
first version of the B&B workers with local heaps
nguidotti Apr 8, 2026
6a39187
implemented a lock-free stack to track the idle workers. fix potentia…
nguidotti Apr 9, 2026
dec671c
fixed lower bound calculation at end of the B&B. reverted to locking …
nguidotti Apr 10, 2026
1b3a282
correctly handles the node in the stack when the solver stops if they…
nguidotti Apr 10, 2026
e108a54
added atomic in node queue to track size and lower bound without a lock.
nguidotti Apr 10, 2026
315aca6
replaced `std::deque` with a circular buffer.
nguidotti Apr 10, 2026
536a692
Merge remote-tracking branch 'upstream/main' into rmm-cccl-migration
bdice Apr 15, 2026
31a6eab
Inline upstream memory resource variable in test fixture MR composition
bdice Apr 15, 2026
f889d28
Replace deprecated rmm::mr set_*_resource_ref calls with set_*_resource
bdice Apr 15, 2026
3469026
renamed method
nguidotti Apr 16, 2026
8e8c794
Merge branch 'main' into simplify-pseudocost
nguidotti Apr 16, 2026
3e6aa83
Merge branch 'main' into simplify-pseudocost
nguidotti Apr 16, 2026
e0444c2
merging with main branch
nguidotti Apr 16, 2026
f3e863f
fixed compilation
nguidotti Apr 16, 2026
76c9ece
Merge remote-tracking branch 'upstream/main' into rmm-cccl-migration
bdice Apr 17, 2026
56bf9ed
fixed small bugs
nguidotti Apr 17, 2026
18e1e83
added cleanup routine for the diving heap
nguidotti Apr 17, 2026
17db46c
bfs workers now can launch diving workers
nguidotti Apr 17, 2026
24d3036
Use RAFT_CUDA_TRY for cudaMemGetInfo.
bdice Apr 19, 2026
86a2b65
Merge branch 'main' into simplify-pseudocost
nguidotti Apr 20, 2026
bba7777
removed scheduler thread. bfs workers are responsible for launching t…
nguidotti Apr 20, 2026
e6b19f3
fixed deterministic code path
nguidotti Apr 20, 2026
6135616
set the worker 0 to be the main one. node_queue must be manually lock…
nguidotti Apr 20, 2026
70b7549
small fixes
nguidotti Apr 21, 2026
e6c2bc5
added a flag to conditionally build the remote execution (gRPC). remo…
nguidotti Apr 21, 2026
1bf94ba
Merge branch 'refs/heads/skip-grpc-build' into bnb-local-heap
nguidotti Apr 21, 2026
a200663
Merge remote-tracking branch 'cuopt/pull-request/1035' into bnb-local…
nguidotti Apr 21, 2026
d14bea8
fixed deadlock
nguidotti Apr 21, 2026
978fefd
added asserts to ensure correctness
nguidotti Apr 22, 2026
22201db
Merge branch 'main' into bnb-local-heap
nguidotti Apr 22, 2026
c243d00
added work stealing
nguidotti Apr 22, 2026
4fa6ba0
added environment variable for tuning
nguidotti Apr 22, 2026
5daa24a
fixed AB/BA hazard when stealing nodes. fixed data race when activati…
nguidotti Apr 22, 2026
1d12f90
simplified bfs worker launch to avoid nested mutexes. simplified lowe…
nguidotti Apr 22, 2026
c57d306
Merge branch 'main' into bnb-local-heap
nguidotti Apr 23, 2026
d936e05
added comments. revert changes to default constructor of circular_deque
nguidotti Apr 23, 2026
b221521
Merge branch 'main' into simplify-pseudocost
nguidotti Apr 23, 2026
90eac3d
Merge branch 'main' into simplify-pseudocost
nguidotti Apr 27, 2026
3e4023f
added ability to launch a new bfs worker with more than one node. fix…
nguidotti Apr 27, 2026
f452639
fixed assert
nguidotti Apr 27, 2026
284d5a3
correctly clean the vstatus buffer in the mip_node after branching
nguidotti Apr 28, 2026
a67f644
Merge branch 'main' into bnb-local-heap
nguidotti Apr 28, 2026
93e8347
cleaning code
nguidotti Apr 28, 2026
7df7aa1
each mip node now stores vstatus in a compressed format to save memor…
nguidotti Apr 28, 2026
2cd842a
fixed assert
nguidotti Apr 28, 2026
226968d
fixed NONBASIC_FIXED encoding
nguidotti Apr 28, 2026
56c8cff
Merge branch 'main' into bnb-local-heap
nguidotti Apr 28, 2026
54d3f66
fix missing decompression for deterministic diving
nguidotti Apr 28, 2026
488ed8a
Merge branch 'main' into simplify-pseudocost
nguidotti Apr 28, 2026
14abf17
addresses reviewer's comments
nguidotti Apr 29, 2026
fce0415
Merge branch 'main' into simplify-pseudocost
nguidotti Apr 29, 2026
8b27e1b
benchmarking the impact of atomics and mutexes in the deterministic mode
nguidotti May 1, 2026
8a088f7
revert changes to calculate_pseudocost
nguidotti May 1, 2026
5e21d9a
break down long expression for batch pdlp
nguidotti May 1, 2026
ec4514f
eliminated bnb mode in pseudocost. replace types into runtime checks
nguidotti May 1, 2026
34b6a40
simplified code to only contain the path with atomics
nguidotti May 3, 2026
2adec89
Merge branch 'simplify-pseudocost' into bnb-local-heap
nguidotti May 5, 2026
bc3d50b
fixed compilation
nguidotti May 5, 2026
3c2f46d
Merge branch 'main' into bnb-local-heap
nguidotti May 11, 2026
e1ddd8e
merged main branch
nguidotti May 11, 2026
e1b81c7
fixed missing unexplored counter
nguidotti May 11, 2026
60de4ad
fixed determinism mode using just a single thread.
nguidotti May 11, 2026
67f539c
added taskwait before returning a bfs worker to the pool (so all divi…
nguidotti May 12, 2026
ef450ba
removed taskwait as it is not necessary
nguidotti May 12, 2026
4bf24f2
fix lower bound calculation
nguidotti May 18, 2026
aa2b7da
fix type for min
nguidotti May 18, 2026
4460b3d
added function for index range calculation. fixed max stack size for …
nguidotti May 19, 2026
24a1b78
merged main
nguidotti May 19, 2026
8b3ecb6
Merge branch 'main' into bnb-local-heap
nguidotti May 19, 2026
d1f4c12
set omp task priorities based on a fixed set of values. fix stack siz…
nguidotti May 19, 2026
4048f02
fixed compilation after recent raft changes
nguidotti May 19, 2026
3d072ce
Merge branch 'fix-compilation' into bnb-local-heap
nguidotti May 19, 2026
5a6cfab
modified raft handler constness for data_model_view for routing due t…
nguidotti May 19, 2026
3f22813
Merge branch 'fix-handle-constness' into bnb-local-heap
nguidotti May 19, 2026
5ff3738
keep const version as well
nguidotti May 19, 2026
944d7de
Merge branch 'main' into fix-handle-constness
nguidotti May 19, 2026
35cc92c
propagate non-const to generator
nguidotti May 19, 2026
cba083d
fix mismatch in the arguments for `generate_vehicle_time_windows`
nguidotti May 19, 2026
49dba03
Merge branch 'fix-handle-constness' into bnb-local-heap
nguidotti May 19, 2026
029ec30
Merge branch 'main' into bnb-local-heap
nguidotti May 20, 2026
f17a0cd
implemented farkas diving as described in the paper.
nguidotti May 8, 2026
19f8cfd
added vector length diving. added "obj dynamism" guard similar to SCIP.
nguidotti May 11, 2026
5691e9e
removed debug code
nguidotti May 12, 2026
8f005d8
fix incorrect diving setting when calculating the number of diving wo…
nguidotti May 18, 2026
bc7656d
expose hyper parameters for the diving heuristics
nguidotti May 20, 2026
cbaae26
Merge branch 'release/26.06' into bnb-local-heap
nguidotti May 21, 2026
bd4c631
fixed missing time limit status
nguidotti May 24, 2026
d4921b5
Merge branch 'bnb-local-heap' into diving-heuristics-2
nguidotti May 24, 2026
27fbcea
rename hyper parameter
nguidotti May 24, 2026
8f587d9
Merge branch 'release/26.06' into bnb-local-heap
nguidotti May 24, 2026
207fab3
merge with release/26.06 branch
nguidotti May 24, 2026
bd1e729
investigating missing timeout log line
nguidotti May 26, 2026
e7d3628
removed debug prints
nguidotti May 26, 2026
cddb787
Merge branch 'release/26.06' into bnb-local-heap
nguidotti May 26, 2026
2c545ea
Merge branch 'bnb-local-heap' into diving-heuristics-2
nguidotti May 26, 2026
883a04e
Merge branch 'main' into diving-heuristics-2
nguidotti May 27, 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
15 changes: 15 additions & 0 deletions cpp/include/cuopt/linear_programming/constants.h
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,21 @@
#define CUOPT_MIP_HYPER_HEURISTIC_RELATED_VARS_TIME_LIMIT \
"mip_hyper_heuristic_related_vars_time_limit"

/* @brief Diving heuristic toggles: -1 automatic, 0 disabled, 1 enabled */
#define CUOPT_MIP_HYPER_DIVING_LINE_SEARCH "mip_hyper_diving_line_search"
#define CUOPT_MIP_HYPER_DIVING_PSEUDOCOST "mip_hyper_diving_pseudocost"
#define CUOPT_MIP_HYPER_DIVING_GUIDED "mip_hyper_diving_guided"
#define CUOPT_MIP_HYPER_DIVING_COEFFICIENT "mip_hyper_diving_coefficient"
#define CUOPT_MIP_HYPER_DIVING_FARKAS "mip_hyper_diving_farkas"
#define CUOPT_MIP_HYPER_DIVING_VECTOR_LENGTH "mip_hyper_diving_vector_length"
/* @brief Diving heuristic limits */
#define CUOPT_MIP_HYPER_DIVING_MIN_NODE_DEPTH "mip_hyper_diving_min_node_depth"
#define CUOPT_MIP_HYPER_DIVING_NODE_LIMIT "mip_hyper_diving_node_limit"
#define CUOPT_MIP_HYPER_DIVING_ITERATION_LIMIT_FACTOR "mip_hyper_diving_iteration_limit_factor"
#define CUOPT_MIP_HYPER_DIVING_BACKTRACK_LIMIT "mip_hyper_diving_backtrack_limit"
/* @brief Show per-strategy diving symbol in logs (true) instead of a generic 'D' */
#define CUOPT_MIP_HYPER_DIVING_SHOW_DIVING_TYPE "mip_hyper_diving_show_diving_type"

/* @brief MIP determinism mode constants */
#define CUOPT_MODE_OPPORTUNISTIC 0
#define CUOPT_MODE_DETERMINISTIC 1
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/* clang-format off */
/*
* SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*/
/* clang-format on */

#pragma once

namespace cuopt::linear_programming {

/**
* @brief Tuning knobs for the dual-simplex diving heuristics used in MIP B&B.
*
* Mirrors dual_simplex::diving_heuristics_settings_t — fields are copied
* verbatim into branch_and_bound_settings.diving_settings before solve. These
* are registered in the unified parameter framework via solver_settings_t and
* can be loaded from a config file with load_parameters_from_file().
*/
struct mip_diving_hyper_params_t {
// -1 automatic, 0 disabled, 1 enabled
int line_search_diving = -1;
int pseudocost_diving = -1;
int guided_diving = -1;
int coefficient_diving = -1;
int farkas_diving = -1;
int vector_length_diving = -1;

// The minimum depth to start diving from.
int min_node_depth = 10;

// The maximum number of nodes when performing a dive.
int node_limit = 500;

// The maximum number of dual simplex iteration allowed
// in a single dive. This set in terms of the total number of
// iterations in the best-first threads.
double iteration_limit_factor = 0.05;

// The maximum backtracking allowed.
int backtrack_limit = 5;

// For the Farkas diving to be effective, the coefficients in the objective function
// must have distinct values. The low tolerance here disables Farkas diving for
// set covering/partitioning, where all coefficients have the same value.
double farkas_obj_dynamism_tol = 1E-4;

// If a given diving heuristic found a new incumbent, show the corresponding
// symbol in the first column of the log row. When false, every dive collapses
// to 'D'. Otherwise,
// B = best-first
// H = heuristics
// C = coefficient diving
// L = line-search diving
// P = pseudocost diving
// G = guided diving
// F = Farkas diving
// V = vector-length diving
// U = unknown
bool show_diving_type = false;
};

} // namespace cuopt::linear_programming
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <vector>

#include <cuopt/linear_programming/constants.h>
#include <cuopt/linear_programming/mip/diving_hyper_params.hpp>
#include <cuopt/linear_programming/mip/heuristics_hyper_params.hpp>
#include <cuopt/linear_programming/pdlp/pdlp_hyper_params.cuh>
#include <cuopt/linear_programming/utilities/internals.hpp>
Expand Down Expand Up @@ -162,6 +163,8 @@ class mip_solver_settings_t {

mip_heuristics_hyper_params_t heuristic_params;

mip_diving_hyper_params_t diving_params;

private:
std::vector<internals::base_solution_callback_t*> mip_callbacks_;
std::optional<i_t> semi_continuous_original_num_variables_;
Expand Down
Loading
Loading