Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
5205471
Add constraints and adjust dual simplex to warm start from the curren…
chris-maes Nov 17, 2025
0584337
Style fixes
chris-maes Nov 17, 2025
74fff99
Remove debugging
chris-maes Nov 17, 2025
099a1df
Merge remote-tracking branch 'cuopt-nvidia/main' into cuts
chris-maes Nov 17, 2025
1882892
Fix issues in adding cuts. Add gomory cuts. Temporarily disable MIP h…
chris-maes Nov 25, 2025
96ed386
Fix unit test
chris-maes Nov 25, 2025
6ff7952
Fix issue when computing nonzeros in C_B
chris-maes Nov 25, 2025
20b5777
Check solution values at end of unit test
chris-maes Nov 25, 2025
ca571a0
Enable c-MIR cuts
chris-maes Nov 25, 2025
9dea7ce
Add integer infeasibility info. Remove inactive cuts. Add mip_cut_pas…
chris-maes Nov 26, 2025
42af00c
Remove small coefficients from cut
chris-maes Dec 2, 2025
dddf42d
CI crash fixes (#691)
aliceb-nv Dec 11, 2025
d97ff6b
REL v25.12.00 release
AyodeAwe Dec 11, 2025
f341e34
Fix incorrect infeasible list
chris-maes Dec 12, 2025
b8e9959
Style fixes
chris-maes Dec 12, 2025
3c36836
Separate out cuts logic into several classes
chris-maes Dec 18, 2025
369e755
Only perform cuts on the original variables. Substitute out slack var…
chris-maes Dec 19, 2025
b48e05b
Knapsack cuts from before the winter break
chris-maes Jan 5, 2026
78cb1dc
Turn off sub-mip. Fix edge norms which was leading to crazy depth on …
chris-maes Jan 6, 2026
1e17743
Check for reduced cost variable fixings
chris-maes Jan 6, 2026
ec883a0
Merge remote-tracking branch 'cuopt-nvidia/main' into cuts
chris-maes Jan 6, 2026
3744548
Also try to improve continuous variables with reduced cost strengthening
chris-maes Jan 6, 2026
f8e6fbe
Fix performance bug in set_quadratic_objective_matrix
chris-maes Jan 7, 2026
6fc7e99
Fix cut scoring when keeping around old cuts that may not be violated
chris-maes Jan 7, 2026
67b57c7
Reenable MIR cuts. Print out types of cut after root node.
chris-maes Jan 8, 2026
b704390
Fix bug in crossover leading to crash on glass-sc. Add node_limit and…
chris-maes Jan 8, 2026
89dafc2
More info on primal infeasibility and trial branching
chris-maes Jan 9, 2026
49bdd7f
Merge branch 'fix_incorrect_infeasible_list' into cuts
chris-maes Jan 9, 2026
f11838d
Add aggregation for MIR cuts
chris-maes Jan 13, 2026
fb85947
Fix bug in knapsack cuts
chris-maes Jan 14, 2026
62606f8
Generate CG cuts. In prep for adding strong-CG cuts
chris-maes Jan 16, 2026
bfaf95c
Call CG cut generation from aggregation. Refactor/clean up
chris-maes Jan 16, 2026
be4e181
Add strong cg cuts. Clean up logs. Add timing info
chris-maes Jan 20, 2026
377ffb1
Clean up disabling of MIP presolve in solver.cu. Set default max_cut_…
chris-maes Jan 20, 2026
425f289
More fixes to enable cut_passes=0
chris-maes Jan 21, 2026
98a8c57
Re-enable RINS
chris-maes Jan 21, 2026
a2b845d
Re-enable sub-MIP
chris-maes Jan 21, 2026
94a191f
Swap exit for assert in basis_updates
chris-maes Jan 21, 2026
1f09143
Merge in main. Make B&B time consecutive. Print Papilo hash. Print cu…
chris-maes Jan 21, 2026
8635cc3
Fix an issue with crossover. Add options to turn off individual cuts
chris-maes Jan 22, 2026
61e5a2c
Fix bugs in concurrent root relaxation and phase2
chris-maes Jan 22, 2026
8b9225a
Merge remote-tracking branch 'cuopt-nvidia/main' into cuts
chris-maes Jan 22, 2026
2c68d94
Fix issue in strong CG where rocI-4-11 was incorrectly declared infea…
chris-maes Jan 23, 2026
89d73e7
Declare optimal in cut passes if abs/rel gap satisified. Clean up cut…
chris-maes Jan 23, 2026
5954aa0
Be more conservative with the strong-CG cut to avoid wrong answer on …
chris-maes Jan 23, 2026
350e0a7
Silence warning about negative lower bounds
chris-maes Jan 23, 2026
121af29
Silence MIR aggregation count
chris-maes Jan 23, 2026
59d4ac0
Fix bug in MIR cut generation when slack variable had negative coeffi…
chris-maes Jan 23, 2026
c52b065
Same bug with MIR inequalities and ranged rows. Another fix
chris-maes Jan 24, 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
89 changes: 48 additions & 41 deletions cpp/include/cuopt/linear_programming/constants.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,47 +20,54 @@
#define CUOPT_INSTANTIATE_INT64 0

/* @brief LP/MIP parameter string constants */
#define CUOPT_ABSOLUTE_DUAL_TOLERANCE "absolute_dual_tolerance"
#define CUOPT_RELATIVE_DUAL_TOLERANCE "relative_dual_tolerance"
#define CUOPT_ABSOLUTE_PRIMAL_TOLERANCE "absolute_primal_tolerance"
#define CUOPT_RELATIVE_PRIMAL_TOLERANCE "relative_primal_tolerance"
#define CUOPT_ABSOLUTE_GAP_TOLERANCE "absolute_gap_tolerance"
#define CUOPT_RELATIVE_GAP_TOLERANCE "relative_gap_tolerance"
#define CUOPT_INFEASIBILITY_DETECTION "infeasibility_detection"
#define CUOPT_STRICT_INFEASIBILITY "strict_infeasibility"
#define CUOPT_PRIMAL_INFEASIBLE_TOLERANCE "primal_infeasible_tolerance"
#define CUOPT_DUAL_INFEASIBLE_TOLERANCE "dual_infeasible_tolerance"
#define CUOPT_ITERATION_LIMIT "iteration_limit"
#define CUOPT_TIME_LIMIT "time_limit"
#define CUOPT_PDLP_SOLVER_MODE "pdlp_solver_mode"
#define CUOPT_METHOD "method"
#define CUOPT_PER_CONSTRAINT_RESIDUAL "per_constraint_residual"
#define CUOPT_SAVE_BEST_PRIMAL_SO_FAR "save_best_primal_so_far"
#define CUOPT_FIRST_PRIMAL_FEASIBLE "first_primal_feasible"
#define CUOPT_LOG_FILE "log_file"
#define CUOPT_LOG_TO_CONSOLE "log_to_console"
#define CUOPT_CROSSOVER "crossover"
#define CUOPT_FOLDING "folding"
#define CUOPT_AUGMENTED "augmented"
#define CUOPT_DUALIZE "dualize"
#define CUOPT_ORDERING "ordering"
#define CUOPT_BARRIER_DUAL_INITIAL_POINT "barrier_dual_initial_point"
#define CUOPT_ELIMINATE_DENSE_COLUMNS "eliminate_dense_columns"
#define CUOPT_CUDSS_DETERMINISTIC "cudss_deterministic"
#define CUOPT_PRESOLVE "presolve"
#define CUOPT_DUAL_POSTSOLVE "dual_postsolve"
#define CUOPT_MIP_ABSOLUTE_TOLERANCE "mip_absolute_tolerance"
#define CUOPT_MIP_RELATIVE_TOLERANCE "mip_relative_tolerance"
#define CUOPT_MIP_INTEGRALITY_TOLERANCE "mip_integrality_tolerance"
#define CUOPT_MIP_ABSOLUTE_GAP "mip_absolute_gap"
#define CUOPT_MIP_RELATIVE_GAP "mip_relative_gap"
#define CUOPT_MIP_HEURISTICS_ONLY "mip_heuristics_only"
#define CUOPT_MIP_SCALING "mip_scaling"
#define CUOPT_MIP_PRESOLVE "mip_presolve"
#define CUOPT_SOLUTION_FILE "solution_file"
#define CUOPT_NUM_CPU_THREADS "num_cpu_threads"
#define CUOPT_NUM_GPUS "num_gpus"
#define CUOPT_USER_PROBLEM_FILE "user_problem_file"
#define CUOPT_ABSOLUTE_DUAL_TOLERANCE "absolute_dual_tolerance"
#define CUOPT_RELATIVE_DUAL_TOLERANCE "relative_dual_tolerance"
#define CUOPT_ABSOLUTE_PRIMAL_TOLERANCE "absolute_primal_tolerance"
#define CUOPT_RELATIVE_PRIMAL_TOLERANCE "relative_primal_tolerance"
#define CUOPT_ABSOLUTE_GAP_TOLERANCE "absolute_gap_tolerance"
#define CUOPT_RELATIVE_GAP_TOLERANCE "relative_gap_tolerance"
#define CUOPT_INFEASIBILITY_DETECTION "infeasibility_detection"
#define CUOPT_STRICT_INFEASIBILITY "strict_infeasibility"
#define CUOPT_PRIMAL_INFEASIBLE_TOLERANCE "primal_infeasible_tolerance"
#define CUOPT_DUAL_INFEASIBLE_TOLERANCE "dual_infeasible_tolerance"
#define CUOPT_ITERATION_LIMIT "iteration_limit"
#define CUOPT_TIME_LIMIT "time_limit"
#define CUOPT_PDLP_SOLVER_MODE "pdlp_solver_mode"
#define CUOPT_METHOD "method"
#define CUOPT_PER_CONSTRAINT_RESIDUAL "per_constraint_residual"
#define CUOPT_SAVE_BEST_PRIMAL_SO_FAR "save_best_primal_so_far"
#define CUOPT_FIRST_PRIMAL_FEASIBLE "first_primal_feasible"
#define CUOPT_LOG_FILE "log_file"
#define CUOPT_LOG_TO_CONSOLE "log_to_console"
#define CUOPT_CROSSOVER "crossover"
#define CUOPT_FOLDING "folding"
#define CUOPT_AUGMENTED "augmented"
#define CUOPT_DUALIZE "dualize"
#define CUOPT_ORDERING "ordering"
#define CUOPT_BARRIER_DUAL_INITIAL_POINT "barrier_dual_initial_point"
#define CUOPT_ELIMINATE_DENSE_COLUMNS "eliminate_dense_columns"
#define CUOPT_CUDSS_DETERMINISTIC "cudss_deterministic"
#define CUOPT_PRESOLVE "presolve"
#define CUOPT_DUAL_POSTSOLVE "dual_postsolve"
#define CUOPT_MIP_ABSOLUTE_TOLERANCE "mip_absolute_tolerance"
#define CUOPT_MIP_RELATIVE_TOLERANCE "mip_relative_tolerance"
#define CUOPT_MIP_INTEGRALITY_TOLERANCE "mip_integrality_tolerance"
#define CUOPT_MIP_ABSOLUTE_GAP "mip_absolute_gap"
#define CUOPT_MIP_RELATIVE_GAP "mip_relative_gap"
#define CUOPT_MIP_HEURISTICS_ONLY "mip_heuristics_only"
#define CUOPT_MIP_SCALING "mip_scaling"
#define CUOPT_MIP_PRESOLVE "mip_presolve"
#define CUOPT_MIP_CUT_PASSES "mip_cut_passes"
#define CUOPT_MIP_MIR_CUTS "mip_mir_cuts"
#define CUOPT_MIP_MIXED_INTEGER_GOMORY_CUTS "mip_mixed_integer_gomory_cuts"
#define CUOPT_MIP_KNAPSACK_CUTS "mip_knapsack_cuts"
#define CUOPT_MIP_STRONG_CHVATAL_GOMORY_CUTS "mip_strong_chvatal_gomory_cuts"
#define CUOPT_MIP_NODE_LIMIT "mip_node_limit"
#define CUOPT_MIP_RELIABILITY_BRANCHING "mip_reliability_branching"
#define CUOPT_SOLUTION_FILE "solution_file"
#define CUOPT_NUM_CPU_THREADS "num_cpu_threads"
#define CUOPT_NUM_GPUS "num_gpus"
#define CUOPT_USER_PROBLEM_FILE "user_problem_file"

/* @brief LP/MIP termination status constants */
#define CUOPT_TERIMINATION_STATUS_NO_TERMINATION 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,15 @@ class mip_solver_settings_t {
tolerances_t tolerances;

f_t time_limit = std::numeric_limits<f_t>::infinity();
i_t node_limit = std::numeric_limits<i_t>::max();
i_t reliability_branching = -1;
bool heuristics_only = false;
i_t num_cpu_threads = -1; // -1 means use default number of threads in branch and bound
i_t max_cut_passes = 0; // number of cut passes to make
i_t mir_cuts = -1;
i_t mixed_integer_gomory_cuts = -1;
i_t knapsack_cuts = -1;
i_t strong_chvatal_gomory_cuts = -1;
i_t num_gpus = 1;
bool log_to_console = true;
std::string log_file;
Expand Down
3 changes: 2 additions & 1 deletion cpp/src/dual_simplex/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ set(DUAL_SIMPLEX_SRC_FILES
${CMAKE_CURRENT_SOURCE_DIR}/basis_updates.cpp
${CMAKE_CURRENT_SOURCE_DIR}/bound_flipping_ratio_test.cpp
${CMAKE_CURRENT_SOURCE_DIR}/branch_and_bound.cpp
${CMAKE_CURRENT_SOURCE_DIR}/cuts.cpp
${CMAKE_CURRENT_SOURCE_DIR}/crossover.cpp
${CMAKE_CURRENT_SOURCE_DIR}/folding.cpp
${CMAKE_CURRENT_SOURCE_DIR}/initial_basis.cpp
Expand All @@ -35,7 +36,7 @@ set(DUAL_SIMPLEX_SRC_FILES
)

# Uncomment to enable debug info
#set_source_files_properties(${DUAL_SIMPLEX_SRC_FILES} DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTIES COMPILE_OPTIONS "-g1")
set_source_files_properties(${DUAL_SIMPLEX_SRC_FILES} DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTIES COMPILE_OPTIONS "-g1")
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Must be removed before merging


set(CUOPT_SRC_FILES ${CUOPT_SRC_FILES}
${DUAL_SIMPLEX_SRC_FILES} PARENT_SCOPE)
4 changes: 2 additions & 2 deletions cpp/src/dual_simplex/basis_solves.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@ i_t factorize_basis(const csc_matrix_t<i_t, f_t>& A,
S_perm_inv);
if (settings.concurrent_halt != nullptr && *settings.concurrent_halt == 1) {
settings.log.printf("Concurrent halt\n");
return -1;
return -2;
}
if (Srank != Sdim) {
// Get the rank deficient columns
Expand Down Expand Up @@ -582,7 +582,7 @@ i_t factorize_basis(const csc_matrix_t<i_t, f_t>& A,
}
if (settings.concurrent_halt != nullptr && *settings.concurrent_halt == 1) {
settings.log.printf("Concurrent halt\n");
return -1;
return -2;
}
if (verbose) {
printf("Right Lnz+Unz %d t %.3f\n", L.col_start[m] + U.col_start[m], toc(fact_start));
Expand Down
Loading