Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
468 commits
Select commit Hold shift + click to select a range
35e8177
move to work_unit_scheduler to allow for mid-node syncs
aliceb-nv Jan 15, 2026
e06af9f
better debug printouts
aliceb-nv Jan 15, 2026
99e9ec2
improve ins_vector coverage; fix case where instrumeted mem accesses …
aliceb-nv Jan 15, 2026
8fdbff8
fix sync bug on termination
aliceb-nv Jan 15, 2026
b6d7ecc
revert disable heuristics
aliceb-nv Jan 15, 2026
668391e
no presovle when determinsitic
aliceb-nv Jan 15, 2026
3b6d532
restore nondeterminsitc codepath behavior
aliceb-nv Jan 16, 2026
81aaf20
Merge branch 'main' into determinism
aliceb-nv Jan 16, 2026
07cea4d
cleanup work
aliceb-nv Jan 16, 2026
9fb0edd
more cleanup to test for regressions
aliceb-nv Jan 16, 2026
21b5e29
move GPU determinism changes to another PR
aliceb-nv Jan 16, 2026
8ed90ac
restore run_bounds_strengthening=false in DS presolve
aliceb-nv Jan 16, 2026
cdcd101
spring cleaning
aliceb-nv Jan 16, 2026
cd5d073
cleaning
aliceb-nv Jan 16, 2026
14d3911
no bs changes
aliceb-nv Jan 16, 2026
9289be4
memins on
aliceb-nv Jan 16, 2026
c1526b8
fix memins bug
aliceb-nv Jan 16, 2026
a6e18d7
no ins_wrapper for bound strengthening to allow autovectorization (co…
aliceb-nv Jan 18, 2026
ac57402
stripped down ins_wrapper
aliceb-nv Jan 18, 2026
512a960
Revert "stripped down ins_wrapper"
aliceb-nv Jan 18, 2026
fb45144
merge attempt 1, needs cleanup
aliceb-nv Jan 18, 2026
61c1563
initial detemrinistic diving impl
aliceb-nv Jan 18, 2026
bfb6611
separate time limit and work unit parameters
aliceb-nv Jan 18, 2026
2f673e7
fix issue on presolved to optimality instances
aliceb-nv Jan 18, 2026
cfbb99b
restore gpu heurs
aliceb-nv Jan 18, 2026
01747f4
fix BSP b&b getting starved too early
aliceb-nv Jan 19, 2026
e689154
same diving ratio as base solver
aliceb-nv Jan 19, 2026
14eb9a7
cleanup work
aliceb-nv Jan 19, 2026
7755bd7
further cleanup work
aliceb-nv Jan 19, 2026
a63f032
incorporating cpufj into the deterministic framework
aliceb-nv Jan 19, 2026
bc3bfde
fjcpu cleanup
aliceb-nv Jan 20, 2026
50c574e
update terminology
aliceb-nv Jan 20, 2026
2947a23
unify pseudocost computations
aliceb-nv Jan 20, 2026
5f58f6d
parallelized the trial branching
nguidotti Jan 20, 2026
fbc17c9
added debug log
nguidotti Jan 20, 2026
a1eb6b8
solved early termination in CMS750_4. fixed hard coded number of thre…
nguidotti Jan 20, 2026
8c5e9f6
policy system for solve_lp_
aliceb-nv Jan 20, 2026
8116fea
Merge branch 'main' into fix-bugs
nguidotti Jan 20, 2026
c2bab57
Revert policy system to move it to a later PR
aliceb-nv Jan 20, 2026
f16db00
restore fixes
aliceb-nv Jan 20, 2026
2b7859e
log ds features and bounds strenghtening
aliceb-nv Jan 20, 2026
af31388
fix logs
aliceb-nv Jan 20, 2026
f102139
timing stuff
aliceb-nv Jan 20, 2026
5a62393
bump 1
aliceb-nv Jan 20, 2026
fc82a41
bump 2
aliceb-nv Jan 20, 2026
115a0b1
silenced logs from the concurrent mode when running inside MIP. ignor…
nguidotti Jan 21, 2026
d50c064
Merge branch 'main' into fix-bugs
nguidotti Jan 21, 2026
27d0d39
Merge branch 'fix-bugs' into reliability-branching
nguidotti Jan 21, 2026
c47adda
fixed merge errors
nguidotti Jan 21, 2026
261bfc8
add bounds strenghtening predictor (unused yet)
aliceb-nv Jan 21, 2026
c0422ed
fixed crash
nguidotti Jan 21, 2026
a0a1d93
better num thread initialization
nguidotti Jan 21, 2026
9f0fe29
fix compilation
nguidotti Jan 21, 2026
0dcb5ff
Merge branch 'fix-bugs' into reliability-branching
nguidotti Jan 21, 2026
298c68c
moved parameters to simplex_settings. added command line option
nguidotti Jan 21, 2026
8a890fd
handle cli arguments
nguidotti Jan 21, 2026
2c2c515
set additional openmp flags
nguidotti Jan 21, 2026
1aca951
Fix issue with work limits that aren't multiples of the horizon steps
aliceb-nv Jan 21, 2026
e593d36
set the number of tasks for strong branching.
nguidotti Jan 21, 2026
19210f0
propagate solutions to the solver in determinsitic mode
aliceb-nv Jan 21, 2026
92a8705
fix envvar
aliceb-nv Jan 21, 2026
bbc966b
fix some issues with hashes
aliceb-nv Jan 21, 2026
cff46f3
bump1
aliceb-nv Jan 21, 2026
254be07
bump2
aliceb-nv Jan 21, 2026
aa15d8e
added additional information in the logs when solving the root relaxa…
nguidotti Jan 22, 2026
ae98cbd
fix tie-breaking and ins_vector counters not being reset appropriately
aliceb-nv Jan 22, 2026
83e0b37
bump1
aliceb-nv Jan 22, 2026
f6a908d
no CPUFJ
aliceb-nv Jan 22, 2026
5ed3732
bump1
aliceb-nv Jan 22, 2026
ce0586c
Merge branch 'fix-bugs' into reliability-branching
nguidotti Jan 22, 2026
d604cb6
renamed macro
nguidotti Jan 22, 2026
4a5270f
Refactoring, fix incorrect optimality, add tests
aliceb-nv Jan 22, 2026
781dd36
Merge branch 'fix-bugs' into reliability-branching
nguidotti Jan 22, 2026
2ed103c
add work limit as a parameter
aliceb-nv Jan 22, 2026
16dcfa8
Merge branch 'main' into determinism
aliceb-nv Jan 22, 2026
628c22b
changed the number of threads in probing cache
nguidotti Jan 22, 2026
0d2226c
add parameter for MIP seed
aliceb-nv Jan 22, 2026
6956bbc
fix type
nguidotti Jan 22, 2026
409b1ee
restore probing cache
aliceb-nv Jan 22, 2026
addae13
bump1
aliceb-nv Jan 22, 2026
e9a5fac
bump2
aliceb-nv Jan 22, 2026
4f75132
fix compute_hash using the defautl stream and breaking graph capture
aliceb-nv Jan 22, 2026
2fd6859
bump1
aliceb-nv Jan 22, 2026
6bdd587
changed the logs for the root relaxation
nguidotti Jan 23, 2026
6d7007c
Merge branch 'fix-bugs' into reliability-branching
nguidotti Jan 23, 2026
a10ac30
fix concurrent LP solve and probing cache in deterministic mode
aliceb-nv Jan 23, 2026
5000cda
more stats logging
aliceb-nv Jan 23, 2026
fab2ffe
horizon 0.15
aliceb-nv Jan 23, 2026
183e2ce
horizon 0.25
aliceb-nv Jan 23, 2026
24e4192
horizon 0.5
aliceb-nv Jan 23, 2026
48b74c8
horizon step 1.00
aliceb-nv Jan 23, 2026
12f7b87
restore
aliceb-nv Jan 23, 2026
fc1c60a
limited the number of candidates for strong branching. refactoring to…
nguidotti Jan 23, 2026
444b95b
removed try_lock
nguidotti Jan 23, 2026
61c5f77
fix incorrect optimal report
aliceb-nv Jan 23, 2026
a0137d1
Merge branch 'release/26.02' into determinism
aliceb-nv Jan 23, 2026
90dcdc9
removed unused settings
nguidotti Jan 23, 2026
5260b51
adjusted number of workers for rb
nguidotti Jan 23, 2026
87098e3
adjusting number of workers for rb
nguidotti Jan 24, 2026
b66ebae
fix incorrect max tasks
nguidotti Jan 24, 2026
9e8488c
fix pseudocost updates
aliceb-nv Jan 24, 2026
30eb52e
w/ bounds strenght
aliceb-nv Jan 25, 2026
9817131
fix holes in implementation
aliceb-nv Jan 25, 2026
383e69a
no BS
aliceb-nv Jan 25, 2026
585bdf0
no BS typo
aliceb-nv Jan 25, 2026
dcf0542
greater horizon
aliceb-nv Jan 25, 2026
84d0567
removed ramp-up phase
nguidotti Jan 25, 2026
175ffc8
BS back
aliceb-nv Jan 25, 2026
0e89356
with logging
aliceb-nv Jan 25, 2026
15dd371
add numericla restart to diving and lower bound ceiling updates in BSP
aliceb-nv Jan 26, 2026
30a147a
cleanup
aliceb-nv Jan 26, 2026
dc2fd90
Merge branch 'release/26.02' into determinism
aliceb-nv Jan 26, 2026
91c95e2
heap instead of rebuild
aliceb-nv Jan 26, 2026
1fdd13e
fix root relaxation message when the solution is not optimal
nguidotti Jan 26, 2026
5ea1621
cleanup, fix loss of determinism
aliceb-nv Jan 26, 2026
b9960c0
more cleanup
aliceb-nv Jan 26, 2026
6b1bee8
Merge branch 'fix-bugs' into reliability-branching
nguidotti Jan 26, 2026
66f6cfd
increase max_lookahead
nguidotti Jan 26, 2026
2c6e12e
fix determinism test seed
aliceb-nv Jan 26, 2026
be15f63
fix fjcpu bug
aliceb-nv Jan 26, 2026
3b93226
bump
aliceb-nv Jan 26, 2026
9e4b2ee
add comment description
aliceb-nv Jan 26, 2026
1b35ac9
Merge branch 'release/26.02' into determinism
aliceb-nv Jan 26, 2026
deff899
copyright fixes
aliceb-nv Jan 26, 2026
e46eba6
Merge branch 'release/26.02' into reliability-branching
nguidotti Jan 26, 2026
0b0e65b
review comments
aliceb-nv Jan 26, 2026
c5438a4
fix wait_for_producers target
aliceb-nv Jan 26, 2026
31b5285
set the reliable threshold dynamically
nguidotti Jan 26, 2026
433ae0e
no cpufj for bench
aliceb-nv Jan 26, 2026
afd24ad
Merge branch 'release/26.02' into determinism
aliceb-nv Jan 27, 2026
9448dd7
Revert "no cpufj for bench"
aliceb-nv Jan 27, 2026
7bac62d
fixed incorrect threshold formula. fixed time limit violation.
nguidotti Jan 27, 2026
a6e055c
simplified parallel loop
nguidotti Jan 27, 2026
de4389b
added single-threaded mode for rins and submip
nguidotti Jan 27, 2026
799f9f5
more logging for bounds strength
aliceb-nv Jan 27, 2026
eb51080
added missing mutexes
nguidotti Jan 27, 2026
f3567cb
fixed empty vector in shuffle
nguidotti Jan 27, 2026
233933f
reverted some code changes
nguidotti Jan 27, 2026
527754c
replaced with lock_guards
nguidotti Jan 27, 2026
2251b87
fixed crash
nguidotti Jan 27, 2026
7919288
fixed number of threads set to 0
nguidotti Jan 28, 2026
cec6f38
enable reliablity branching by default
nguidotti Jan 28, 2026
6c408f2
fix logging
aliceb-nv Jan 28, 2026
27ee927
set the solve mode based on the number of threads
nguidotti Jan 28, 2026
4d1f684
disable RUNPATH
aliceb-nv Jan 28, 2026
8810401
Revert "fix logging"
aliceb-nv Jan 28, 2026
a811e86
Revert "more logging for bounds strength"
aliceb-nv Jan 28, 2026
b761b22
naive prediction
aliceb-nv Jan 29, 2026
8dfb7c3
scaled mem prediction
aliceb-nv Jan 29, 2026
d550547
no cpufj
aliceb-nv Jan 29, 2026
4d75fb0
Revert "no cpufj"
aliceb-nv Jan 30, 2026
da6dfe0
Revert "disable RUNPATH"
aliceb-nv Jan 30, 2026
25388d8
replace work predictor machinery with mem ops only
aliceb-nv Jan 30, 2026
e88d5ef
remove debug log machinery
aliceb-nv Jan 30, 2026
6202972
Merge branch 'release/26.02' into determinism
aliceb-nv Jan 30, 2026
c91127b
refactoring and simplification work
aliceb-nv Jan 30, 2026
12e095c
switch to openmp for syncs, add infeas test
aliceb-nv Jan 30, 2026
e68941e
minor touchups
aliceb-nv Jan 30, 2026
00158e0
unify update_tree, fix timing issue
aliceb-nv Jan 30, 2026
5f929f4
unify b&b worker struct
aliceb-nv Jan 30, 2026
8c4f417
Revert "unify b&b worker struct"
aliceb-nv Jan 30, 2026
a23d8af
Merge branch 'release/26.02' into determinism
aliceb-nv Feb 2, 2026
f7d0c93
Merge branch 'reliability-branching' into determinism
aliceb-nv Feb 3, 2026
71d1272
replaced locks with atomics
nguidotti Feb 3, 2026
cc14fee
cleanup
aliceb-nv Feb 3, 2026
326037c
Merge branch 'reliability-branching' into determinism
aliceb-nv Feb 3, 2026
70e6c73
cleanup
aliceb-nv Feb 3, 2026
faa4952
fix bsp deadlock on timelimit
aliceb-nv Feb 3, 2026
e23c16c
unify update_tree
aliceb-nv Feb 3, 2026
222cda0
fix pseudocost update
nguidotti Feb 3, 2026
649e295
Merge branch 'release/26.02' into reliability-branching
nguidotti Feb 3, 2026
cf2f577
more cleanup
aliceb-nv Feb 3, 2026
3aab472
Merge branch 'reliability-branching' into determinism
aliceb-nv Feb 3, 2026
ff1aaf4
more cleanup
aliceb-nv Feb 4, 2026
a53b38a
deleted assignment in omp_mutex_t to avoid double destruction.
nguidotti Feb 4, 2026
0826aba
addressing reviewer comments
nguidotti Feb 4, 2026
929e0b5
fix compilation
nguidotti Feb 4, 2026
af718df
update naming
aliceb-nv Feb 4, 2026
36b211b
additional refactoring
nguidotti Feb 4, 2026
5edbfbf
variable renaming
nguidotti Feb 4, 2026
2b9da53
fix compilation
nguidotti Feb 4, 2026
62a058b
coderabbit suggestions
nguidotti Feb 4, 2026
5a54f85
more cleanup
aliceb-nv Feb 4, 2026
0f6df39
fix negative pseudocost
nguidotti Feb 4, 2026
56d5ead
changed initial score
nguidotti Feb 4, 2026
a72c85c
adding more safeguards
nguidotti Feb 4, 2026
0b14897
fix initial value
nguidotti Feb 4, 2026
ebe7aa3
Merge remote-tracking branch 'cuopt/release/26.02' into reliability-b…
nguidotti Feb 5, 2026
d65f258
renaming variables
nguidotti Feb 5, 2026
725363d
split locks in pseudocost
nguidotti Feb 5, 2026
4879d1f
progress
aliceb-nv Feb 5, 2026
46d59b3
fix build
aliceb-nv Feb 5, 2026
d1989cc
fix crash in timtab1 due to double infinite pseudocost
nguidotti Feb 5, 2026
f6d2a94
fix race condition
aliceb-nv Feb 6, 2026
6417074
small tweaks
nguidotti Feb 6, 2026
e5fdae1
Merge branch 'release/26.02' into reliability-branching
nguidotti Feb 6, 2026
9e4b855
Merge branch 'reliability-branching' into determinism
aliceb-nv Feb 6, 2026
d5a7149
Merge branch 'reliability-branching' into determinism
aliceb-nv Feb 6, 2026
91e0168
renamed variable
nguidotti Feb 6, 2026
fd4f5a8
Merge branch 'reliability-branching' into determinism
aliceb-nv Feb 6, 2026
515d17c
fix incorrect lower bounds during the cut passes
nguidotti Feb 6, 2026
d8cde66
cleanup, fix race
aliceb-nv Feb 6, 2026
084072a
Merge branch 'reliability-branching' into determinism
aliceb-nv Feb 6, 2026
1df294b
more cleanup
aliceb-nv Feb 6, 2026
0deb0fd
Merge branch 'release/26.02' into determinism
aliceb-nv Feb 6, 2026
a05d4c2
more cleanup
aliceb-nv Feb 6, 2026
91bb13f
Merge branch 'release/26.02' into determinism
aliceb-nv Feb 6, 2026
6914c8a
bump1
aliceb-nv Feb 6, 2026
ff47875
bump2
aliceb-nv Feb 6, 2026
57129b7
address review comments
aliceb-nv Feb 6, 2026
1332fbd
review comments
aliceb-nv Feb 6, 2026
da6fd11
some attempts at optimizing
aliceb-nv Feb 7, 2026
d801c9e
disable phase2 nvtx
aliceb-nv Feb 7, 2026
b4a8934
more microoptimizing
aliceb-nv Feb 8, 2026
7d2edbd
Merge branch 'release/26.02' into determinism
aliceb-nv Feb 8, 2026
80037ef
fix nvcc build
aliceb-nv Feb 8, 2026
f8021de
address review comments
aliceb-nv Feb 9, 2026
7c92978
address AI comments
aliceb-nv Feb 9, 2026
b099d81
test no sync pruning
aliceb-nv Feb 9, 2026
3cfc0c7
remove redundant bounds strenghtening call in diving
aliceb-nv Feb 9, 2026
a6f98b3
centralize pseudocost logic
aliceb-nv Feb 9, 2026
90ffa81
bump1
aliceb-nv Feb 9, 2026
ac0ca00
bump2
aliceb-nv Feb 9, 2026
c86d753
update naming
aliceb-nv Feb 9, 2026
1cca483
address review comments
aliceb-nv Feb 10, 2026
dec2185
added BB determinism glossary
aliceb-nv Feb 10, 2026
98b8ddd
Merge branch 'release/26.02' into determinism
aliceb-nv Feb 10, 2026
57ad57a
integer objective pruning
aliceb-nv Feb 10, 2026
7fc7c57
test for rational objective function
aliceb-nv Feb 10, 2026
8543b7b
support rational objective functions
aliceb-nv Feb 10, 2026
57ab935
fix rel mip gap output
aliceb-nv Feb 10, 2026
3ded90a
fewer CPUFJ threads
aliceb-nv Feb 10, 2026
92d30c6
bump
aliceb-nv Feb 10, 2026
88e076b
fix bugs on many duplicates in substritute vars
aliceb-nv Feb 11, 2026
9ea8e7a
fix repair queue crushing bug
aliceb-nv Feb 11, 2026
83e1eed
Merge branch 'release/26.02' into integer-objective
aliceb-nv Feb 11, 2026
4cdd204
Revert "fewer CPUFJ threads"
aliceb-nv Feb 11, 2026
0bbe832
Merge branch 'sub-duplicate-fix' into integer-objective
aliceb-nv Feb 11, 2026
f64fada
Merge branch 'main' into integer-objective
aliceb-nv Feb 11, 2026
ef4b090
refactor
aliceb-nv Feb 11, 2026
f90929f
rework objective integer scaling
aliceb-nv Feb 11, 2026
16fadf9
Merge branch 'main' into integer-objective
aliceb-nv Feb 12, 2026
e766e86
stricter tolerances
aliceb-nv Feb 12, 2026
019878b
remove data_ptr
aliceb-nv Feb 12, 2026
7e3f2b0
further cleanup
aliceb-nv Feb 12, 2026
f57cef4
minor cleanup
aliceb-nv Feb 12, 2026
8f17bd4
Merge branch 'cleanup-memins' into integer-objective
aliceb-nv Feb 12, 2026
41dca67
restore deleted comments
aliceb-nv Feb 12, 2026
97958dc
address ai review
aliceb-nv Feb 12, 2026
3589226
increase max size
aliceb-nv Feb 12, 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
4 changes: 2 additions & 2 deletions ci/validate_wheel.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ PYDISTCHECK_ARGS=(
if [[ "${package_dir}" == "python/libcuopt" ]]; then
if [[ "${RAPIDS_CUDA_MAJOR}" == "12" ]]; then
PYDISTCHECK_ARGS+=(
--max-allowed-size-compressed '635Mi'
--max-allowed-size-compressed '645Mi'
)
else
PYDISTCHECK_ARGS+=(
--max-allowed-size-compressed '475Mi'
--max-allowed-size-compressed '485Mi'
Comment thread
rgsl888prabhu marked this conversation as resolved.
)
fi
elif [[ "${package_dir}" != "python/cuopt" ]] && \
Expand Down
31 changes: 23 additions & 8 deletions cpp/src/branch_and_bound/branch_and_bound.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -489,7 +489,7 @@ void branch_and_bound_t<i_t, f_t>::set_new_solution(const std::vector<f_t>& solu
if (is_feasible) { report_heuristic(obj); }
if (attempt_repair) {
mutex_repair_.lock();
repair_queue_.push_back(crushed_solution);
repair_queue_.push_back(solution);
mutex_repair_.unlock();
}
}
Expand Down Expand Up @@ -522,9 +522,11 @@ void branch_and_bound_t<i_t, f_t>::queue_external_solution_deterministic(
mutex_original_lp_.unlock();

if (!is_feasible) {
// Queue for repair
// Queue the uncrushed solution for repair; it will be crushed at
// consumption time so that the crush reflects the current LP state
// (which may have gained slack columns from cuts added after this point).
mutex_repair_.lock();
repair_queue_.push_back(crushed_solution);
repair_queue_.push_back(solution);
mutex_repair_.unlock();
return;
}
Expand Down Expand Up @@ -613,11 +615,14 @@ void branch_and_bound_t<i_t, f_t>::repair_heuristic_solutions()

if (to_repair.size() > 0) {
settings_.log.debug("Attempting to repair %ld injected solutions\n", to_repair.size());
for (const std::vector<f_t>& potential_solution : to_repair) {
for (const std::vector<f_t>& uncrushed_solution : to_repair) {
std::vector<f_t> crushed_solution;
crush_primal_solution<i_t, f_t>(
original_problem_, original_lp_, uncrushed_solution, new_slacks_, crushed_solution);
std::vector<f_t> repaired_solution;
f_t repaired_obj;
bool is_feasible =
repair_solution(edge_norms_, potential_solution, repaired_obj, repaired_solution);
repair_solution(edge_norms_, crushed_solution, repaired_obj, repaired_solution);
if (is_feasible) {
mutex_upper_.lock();

Expand Down Expand Up @@ -1195,6 +1200,9 @@ std::pair<node_status_t, rounding_direction_t> branch_and_bound_t<i_t, f_t>::upd
policy.graphviz(search_tree, node_ptr, "lower bound", leaf_obj);
policy.update_pseudo_costs(node_ptr, leaf_obj);
node_ptr->lower_bound = leaf_obj;
if (original_lp_.objective_is_integral) {
node_ptr->lower_bound = std::ceil(leaf_obj - settings_.integer_tol);
}
policy.on_optimal_callback(leaf_solution.x, leaf_obj);

if (num_frac == 0) {
Expand Down Expand Up @@ -1308,7 +1316,11 @@ dual::status_t branch_and_bound_t<i_t, f_t>::solve_node_lp(

simplex_solver_settings_t lp_settings = settings_;
lp_settings.set_log(false);
lp_settings.cut_off = upper_bound_ + settings_.dual_tol;
if (original_lp_.objective_is_integral) {
lp_settings.cut_off = std::ceil(upper_bound_ - settings_.integer_tol) - 1 + settings_.dual_tol;
} else {
lp_settings.cut_off = upper_bound_ + settings_.dual_tol;
}
lp_settings.inside_mip = 2;
lp_settings.time_limit = settings_.time_limit - toc(exploration_stats_.start_time);
lp_settings.scale_columns = false;
Expand Down Expand Up @@ -3158,11 +3170,14 @@ void branch_and_bound_t<i_t, f_t>::deterministic_sort_replay_events(
if (to_repair.size() > 0) {
settings_.log.debug("Deterministic sync: Attempting to repair %ld injected solutions\n",
to_repair.size());
for (const std::vector<f_t>& potential_solution : to_repair) {
for (const std::vector<f_t>& uncrushed_solution : to_repair) {
std::vector<f_t> crushed_solution;
crush_primal_solution<i_t, f_t>(
original_problem_, original_lp_, uncrushed_solution, new_slacks_, crushed_solution);
std::vector<f_t> repaired_solution;
f_t repaired_obj;
bool success =
repair_solution(edge_norms_, potential_solution, repaired_obj, repaired_solution);
repair_solution(edge_norms_, crushed_solution, repaired_obj, repaired_solution);
if (success) {
// Queue repaired solution with work unit timestamp (...workstamp?)
mutex_heuristic_queue_.lock();
Expand Down
19 changes: 10 additions & 9 deletions cpp/src/dual_simplex/presolve.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -569,15 +569,16 @@ void convert_user_problem(const user_problem_t<i_t, f_t>& user_problem,
}

// Copy info from user_problem to problem
problem.num_rows = user_problem.num_rows;
problem.num_cols = user_problem.num_cols;
problem.A = user_problem.A;
problem.objective = user_problem.objective;
problem.obj_scale = user_problem.obj_scale;
problem.obj_constant = user_problem.obj_constant;
problem.rhs = user_problem.rhs;
problem.lower = user_problem.lower;
problem.upper = user_problem.upper;
problem.num_rows = user_problem.num_rows;
problem.num_cols = user_problem.num_cols;
problem.A = user_problem.A;
problem.objective = user_problem.objective;
problem.obj_scale = user_problem.obj_scale;
problem.obj_constant = user_problem.obj_constant;
problem.objective_is_integral = user_problem.objective_is_integral;
problem.rhs = user_problem.rhs;
problem.lower = user_problem.lower;
problem.upper = user_problem.upper;

// Make a copy of row_sense so we can modify it
std::vector<char> row_sense = user_problem.row_sense;
Expand Down
3 changes: 2 additions & 1 deletion cpp/src/dual_simplex/presolve.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* clang-format off */
/*
* SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*/
/* clang-format on */
Expand Down Expand Up @@ -41,6 +41,7 @@ struct lp_problem_t {
std::vector<f_t> upper;
f_t obj_constant;
f_t obj_scale; // 1.0 for min, -1.0 for max
bool objective_is_integral{false};
};

template <typename i_t, typename f_t>
Expand Down
3 changes: 2 additions & 1 deletion cpp/src/dual_simplex/user_problem.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* clang-format off */
/*
* SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*/
/* clang-format on */
Expand Down Expand Up @@ -47,6 +47,7 @@ struct user_problem_t {
std::vector<std::string> col_names;
f_t obj_constant;
f_t obj_scale; // 1.0 for min, -1.0 for max
bool objective_is_integral{false};
std::vector<variable_type_t> var_types;
std::vector<i_t> Q_offsets;
std::vector<i_t> Q_indices;
Expand Down
40 changes: 19 additions & 21 deletions cpp/src/mip_heuristics/feasibility_jump/fj_cpu.cu
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,14 @@
namespace cuopt::linear_programming::detail {

template <typename i_t, typename f_t, typename ArrayType>
HDI thrust::tuple<f_t, f_t> get_mtm_for_bound(
const typename fj_t<i_t, f_t>::climber_data_t::view_t& fj,
i_t var_idx,
i_t cstr_idx,
f_t cstr_coeff,
f_t bound,
f_t sign,
const ArrayType& assignment,
const ArrayType& lhs_vector)
thrust::tuple<f_t, f_t> get_mtm_for_bound(const typename fj_t<i_t, f_t>::climber_data_t::view_t& fj,
i_t var_idx,
i_t cstr_idx,
f_t cstr_coeff,
f_t bound,
f_t sign,
const ArrayType& assignment,
const ArrayType& lhs_vector)
{
f_t delta_ij = 0;
f_t slack = 0;
Expand All @@ -63,7 +62,7 @@ HDI thrust::tuple<f_t, f_t> get_mtm_for_bound(
}

template <typename i_t, typename f_t, MTMMoveType move_type, typename ArrayType>
HDI thrust::tuple<f_t, f_t, f_t, f_t> get_mtm_for_constraint(
thrust::tuple<f_t, f_t, f_t, f_t> get_mtm_for_constraint(
const typename fj_t<i_t, f_t>::climber_data_t::view_t& fj,
i_t var_idx,
i_t cstr_idx,
Expand Down Expand Up @@ -109,17 +108,16 @@ HDI thrust::tuple<f_t, f_t, f_t, f_t> get_mtm_for_constraint(
}

template <typename i_t, typename f_t>
HDI std::pair<f_t, f_t> feas_score_constraint(
const typename fj_t<i_t, f_t>::climber_data_t::view_t& fj,
i_t var_idx,
f_t delta,
i_t cstr_idx,
f_t cstr_coeff,
f_t c_lb,
f_t c_ub,
f_t current_lhs,
f_t left_weight,
f_t right_weight)
std::pair<f_t, f_t> feas_score_constraint(const typename fj_t<i_t, f_t>::climber_data_t::view_t& fj,
i_t var_idx,
f_t delta,
i_t cstr_idx,
f_t cstr_coeff,
f_t c_lb,
f_t c_ub,
f_t current_lhs,
f_t left_weight,
f_t right_weight)
{
cuopt_assert(isfinite(delta), "invalid delta");
cuopt_assert(cstr_coeff != 0 && isfinite(cstr_coeff), "invalid coefficient");
Expand Down
Loading