Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
c721556
Extend the barrier solver to SOCP problems
chris-maes May 22, 2026
3e7a526
Add label back to test
chris-maes May 22, 2026
911cb04
Remove barrier specific tolerances. These should not be exposed to th…
chris-maes May 22, 2026
6b2c011
Clean up barrier and presolve. Native -> Direct free variables.
chris-maes May 22, 2026
03918bd
Style fixes
chris-maes May 22, 2026
068ce73
Revert unnecessary changes to simplex_solver_settings.hpp
chris-maes May 22, 2026
3803961
Revert unintentional change to match 26.06
chris-maes May 22, 2026
b94ae44
apply_soc_qcmatrix_conversion_for_simplex -> convert_quadratic_constr…
chris-maes May 23, 2026
3f2f3fc
Clean up scaling and prints
chris-maes May 23, 2026
b128480
More fixes for scaling
chris-maes May 23, 2026
3809495
Add socp files back
yuwenchen95 May 26, 2026
72775bd
update release/26.06
yuwenchen95 May 26, 2026
1ce5e8b
Save the map of bound splitting in user_problem
yuwenchen95 May 26, 2026
48ded44
Renaming rows, cols, vals for quadratic constraints
yuwenchen95 May 26, 2026
a23347b
Address PR #1051 review: template barrier helpers, check_Q warning, u…
yuwenchen95 May 26, 2026
7f4f88f
Auto selection for efficient dual recovery in post-solve
yuwenchen95 May 26, 2026
eef31df
Merge branch 'release/26.06' into socp-barrier-solver-2
Iroy30 May 27, 2026
249b078
Merge branch 'release/26.06' into socp-barrier-solver-2
yuwenchen95 May 27, 2026
869bb48
Remove redundant conversion of quadratic constraints to
yuwenchen95 May 27, 2026
2187593
revert the change of mu computation
yuwenchen95 May 27, 2026
35ee069
adjust the memory cap
yuwenchen95 May 27, 2026
02593bb
Align SOCP barrier presolve tests with production settings
yuwenchen95 May 27, 2026
b20f5e1
Fix uncrush_solution for non-tail free-variable partners
yuwenchen95 May 27, 2026
eacbe3e
Revert change in presolve for uncrushing splitting variables
yuwenchen95 May 27, 2026
d123792
Clean up socp tests in cpp
yuwenchen95 May 28, 2026
1f5aef8
Switch pointer+size to span
yuwenchen95 May 28, 2026
d1c58f6
Unify solve path for qp and socp
yuwenchen95 May 28, 2026
a74a7ed
Merge with release/26.06
yuwenchen95 May 28, 2026
31f19dc
Merge with release/26.06
yuwenchen95 May 28, 2026
04cd4ab
Prolong CI test timeout
yuwenchen95 May 28, 2026
ff412fe
Fix regressions for QP and LP
rg20 May 28, 2026
2cb16d5
Convert auto to explict types in second_order_cone_kernels
chris-maes May 29, 2026
b3dcfb0
Remove unnecessary casts in translate_soc.hpp
chris-maes May 29, 2026
ea7a3c5
Remove unnecessary casts in triples_to_csr_flat
chris-maes May 29, 2026
6dc4003
Simplify and clean up MPS/LP parsing
chris-maes May 29, 2026
4b7338a
Style fixes
chris-maes May 29, 2026
76b88cb
Simplify range for with extra variable to regular for
chris-maes May 29, 2026
9bdf7b1
Fixes to presolve.cpp
chris-maes May 29, 2026
bf47710
Remove unneccessary casts
chris-maes May 29, 2026
afa58d0
Remove unnecessary changes to solve_barrier.cu
chris-maes May 29, 2026
02d40b0
Remove unneccessary change in solve.cpp
chris-maes May 29, 2026
0ff8e41
Remove unneccessary casts
chris-maes May 29, 2026
e727ddc
Rename function in translate_soc
chris-maes May 29, 2026
bfb32f5
Remove QCMATRIX from Python API
chris-maes May 29, 2026
25c8592
Merge remote-tracking branch 'cuopt-nvidia/release/26.06' into socp-b…
chris-maes May 29, 2026
e1c8dab
Avoid linear search when constructing augmented matrix
chris-maes May 29, 2026
47eab1b
Convert while loops to for loops
chris-maes May 29, 2026
32e44eb
Fix log output
chris-maes May 29, 2026
34dceb0
remove redundant integer check for writting QCQP
yuwenchen95 May 29, 2026
b726d57
Clean up comments in barrier.cu and initial point computation of socp
yuwenchen95 May 29, 2026
163092b
barrier update: Refactor barrier helpers into file-scope functions
yuwenchen95 May 29, 2026
8a775ec
--amend
yuwenchen95 May 29, 2026
b693afa
redesign the step-size unit test
yuwenchen95 May 29, 2026
3fc42b7
Remove constraint_row_idx from add_quadratic_constraint in python
yuwenchen95 May 29, 2026
988ece4
stylish precommit
yuwenchen95 May 29, 2026
1362c5b
type change
yuwenchen95 May 29, 2026
4650228
Attempt to fix performance regression
chris-maes May 29, 2026
ef7de64
Fix regression. Add back in regularization on free variables in augme…
chris-maes May 29, 2026
475aa20
Merge remote-tracking branch 'cuopt-nvidia/release/26.06' into socp-b…
chris-maes May 29, 2026
aaefe54
Fix a bug on socp_1 python unit test
chris-maes May 30, 2026
f1711a7
Handle empty A matrix
rg20 May 30, 2026
2736181
Cleanup on the SOCP barrier path: clearer naming for projecting solut…
yuwenchen95 May 30, 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 ci/test_cpp.sh
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ set +e
export RAPIDS_TESTS_DIR

rapids-logger "Run gtests"
timeout 50m ./ci/run_ctests.sh || FAILED_STEPS+=("gtests (run_ctests.sh)")
timeout 60m ./ci/run_ctests.sh || FAILED_STEPS+=("gtests (run_ctests.sh)")

rapids-logger "Generate nightly test report"
source "$(dirname "$(realpath "${BASH_SOURCE[0]}")")/utils/nightly_report_helper.sh"
Expand Down
2 changes: 1 addition & 1 deletion ci/validate_wheel.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ PYDISTCHECK_ARGS=(
if [[ "${package_dir}" == "python/libcuopt" ]]; then
if [[ "${RAPIDS_CUDA_MAJOR}" == "12" ]]; then
PYDISTCHECK_ARGS+=(
--max-allowed-size-compressed '680Mi'
--max-allowed-size-compressed '690Mi'
)
else
PYDISTCHECK_ARGS+=(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

#include <cstdint>
#include <memory>
#include <span>
#include <string>
#include <vector>

Expand Down Expand Up @@ -130,16 +131,11 @@ class cpu_optimization_problem_t : public optimization_problem_interface_t<i_t,
void set_quadratic_constraints(std::vector<quadratic_constraint_t> constraints) override;
void add_quadratic_constraint(char constraint_row_type,
f_t rhs_value,
const f_t* quadratic_values,
i_t size_quadratic_values,
const i_t* quadratic_indices,
i_t size_quadratic_indices,
const i_t* quadratic_offsets,
i_t size_quadratic_offsets,
const f_t* linear_values,
i_t size_linear_values,
const i_t* linear_indices,
i_t size_linear_indices) override;
std::span<const i_t> row_index,
Comment thread
yuwenchen95 marked this conversation as resolved.
std::span<const i_t> col_index,
std::span<const f_t> coeff,
std::span<const f_t> linear_values,
std::span<const i_t> linear_indices) override;
bool has_quadratic_constraints() const override;
const std::vector<quadratic_constraint_t>& get_quadratic_constraints() const override;

Expand Down
6 changes: 3 additions & 3 deletions cpp/include/cuopt/linear_programming/io/data_model_view.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -434,9 +434,9 @@ class data_model_view_t {
std::vector<f_t>(qc.linear_values.begin(), qc.linear_values.end()),
std::vector<i_t>(qc.linear_indices.begin(), qc.linear_indices.end()),
static_cast<f_t>(qc.rhs_value),
std::vector<f_t>(qc.quadratic_values.begin(), qc.quadratic_values.end()),
std::vector<i_t>(qc.quadratic_indices.begin(), qc.quadratic_indices.end()),
std::vector<i_t>(qc.quadratic_offsets.begin(), qc.quadratic_offsets.end())});
std::vector<i_t>(qc.rows.begin(), qc.rows.end()),
std::vector<i_t>(qc.cols.begin(), qc.cols.end()),
std::vector<f_t>(qc.vals.begin(), qc.vals.end())});
}
}

Expand Down
24 changes: 13 additions & 11 deletions cpp/include/cuopt/linear_programming/io/mps_data_model.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ class mps_data_model_t {
* - row identity and type (from ROWS),
* - sparse linear coefficients (from COLUMNS),
* - RHS value (from RHS),
* - quadratic matrix Q in CSR (from QCMATRIX).
* - quadratic matrix Q in COO (SoA: row, col, value) from QCMATRIX — one triplet per nonzero.
*/
struct quadratic_constraint_t {
/** ROWS declaration index (among all constraint rows), not an index into the linear CSR. */
Expand All @@ -251,29 +251,31 @@ class mps_data_model_t {
std::vector<f_t> linear_values{};
std::vector<i_t> linear_indices{};
f_t rhs_value{f_t(0)};
std::vector<f_t> quadratic_values{};
std::vector<i_t> quadratic_indices{};
std::vector<i_t> quadratic_offsets{};
/** Q nonzeros: parallel arrays, same length (COO / SoA). Sorted by (row, col) in append. */
std::vector<i_t> rows{};
std::vector<i_t> cols{};
std::vector<f_t> vals{};
};

/**
* @brief Append one complete quadratic constraint (row + linear + rhs + quadratic Q).
* @note All span inputs are host memory; the model copies this data.
* @param linear_values, linear_indices Same nnz; can be empty for a purely quadratic row (rare).
* @param quadratic_values, quadratic_indices CSR nnz; may be empty if Q is empty.
* @param quadratic_offsets CSR row starts; must be non-empty.
* @param constraint_row_type MPS ROWS type; must be 'L'. 'G' and 'E' quadratic rows are not
* supported.
* @param vals, rows, cols COO triplets for Q; same length; may all be empty if Q is empty.
* Stored sorted by (row, col).
* @param constraint_row_type MPS ROWS type: 'L' (<=) or 'G' (>=). Stored as given; 'G' rows are
* converted to '<=' form when building the SOCP for the barrier solver. Equality ('E') is
* not supported.
*/
void append_quadratic_constraint(i_t constraint_row_index,
const std::string& constraint_row_name,
char constraint_row_type,
std::span<const f_t> linear_values,
std::span<const i_t> linear_indices,
f_t rhs_value,
std::span<const f_t> quadratic_values,
std::span<const i_t> quadratic_indices,
std::span<const i_t> quadratic_offsets);
std::span<const f_t> vals,
std::span<const i_t> rows,
std::span<const i_t> cols);

const std::vector<quadratic_constraint_t>& get_quadratic_constraints() const;

Expand Down
16 changes: 6 additions & 10 deletions cpp/include/cuopt/linear_programming/optimization_problem.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

#include <cstdint>
#include <memory>
#include <span>
#include <string>
#include <vector>

Expand Down Expand Up @@ -212,16 +213,11 @@ class optimization_problem_t : public optimization_problem_interface_t<i_t, f_t>
void set_quadratic_constraints(std::vector<quadratic_constraint_t> constraints) override;
void add_quadratic_constraint(char constraint_row_type,
f_t rhs_value,
const f_t* quadratic_values,
i_t size_quadratic_values,
const i_t* quadratic_indices,
i_t size_quadratic_indices,
const i_t* quadratic_offsets,
i_t size_quadratic_offsets,
const f_t* linear_values,
i_t size_linear_values,
const i_t* linear_indices,
i_t size_linear_indices) override;
std::span<const i_t> row_index,
std::span<const i_t> col_index,
std::span<const f_t> coeff,
std::span<const f_t> linear_values,
std::span<const i_t> linear_indices) override;

/** @copydoc optimization_problem_interface_t::set_variable_lower_bounds */
void set_variable_lower_bounds(const f_t* variable_lower_bounds, i_t size) override;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

#include <cstdint>
#include <memory>
#include <span>
#include <string>
#include <vector>

Expand Down Expand Up @@ -64,9 +65,10 @@ class optimization_problem_interface_t {
std::vector<f_t> linear_values{};
std::vector<i_t> linear_indices{};
f_t rhs_value{f_t(0)};
std::vector<f_t> quadratic_values{};
std::vector<i_t> quadratic_indices{};
std::vector<i_t> quadratic_offsets{};
/** Q in COO: parallel arrays, same length. */
std::vector<i_t> rows{};
std::vector<i_t> cols{};
std::vector<f_t> vals{};
};

virtual ~optimization_problem_interface_t() = default;
Expand All @@ -79,22 +81,17 @@ class optimization_problem_interface_t {
/**
* @brief Append one quadratic constraint x^T Q x + d^T x {<=, >=} rhs.
*
* Quadratic matrix Q is CSR (values, indices, offsets). Linear term d uses parallel
* Quadratic matrix Q is COO (row_index, col_index, coeff spans). Linear term d uses parallel
* linear_values and linear_indices (empty allowed). constraint_row_index is assigned
* automatically as n_linear_constraints + n_existing_quadratic_constraints.
*/
virtual void add_quadratic_constraint(char constraint_row_type,
f_t rhs_value,
const f_t* quadratic_values,
i_t size_quadratic_values,
const i_t* quadratic_indices,
i_t size_quadratic_indices,
const i_t* quadratic_offsets,
i_t size_quadratic_offsets,
const f_t* linear_values,
i_t size_linear_values,
const i_t* linear_indices,
i_t size_linear_indices) = 0;
std::span<const i_t> row_index,
std::span<const i_t> col_index,
std::span<const f_t> coeff,
std::span<const f_t> linear_values,
std::span<const i_t> linear_indices) = 0;
template <typename qc_t,
typename = std::enable_if_t<!std::is_same_v<qc_t, quadratic_constraint_t>>>
void set_quadratic_constraints(const std::vector<qc_t>& constraints)
Expand All @@ -109,9 +106,9 @@ class optimization_problem_interface_t {
std::vector<f_t>(qc.linear_values.begin(), qc.linear_values.end()),
std::vector<i_t>(qc.linear_indices.begin(), qc.linear_indices.end()),
static_cast<f_t>(qc.rhs_value),
std::vector<f_t>(qc.quadratic_values.begin(), qc.quadratic_values.end()),
std::vector<i_t>(qc.quadratic_indices.begin(), qc.quadratic_indices.end()),
std::vector<i_t>(qc.quadratic_offsets.begin(), qc.quadratic_offsets.end())});
std::vector<i_t>(qc.rows.begin(), qc.rows.end()),
std::vector<i_t>(qc.cols.begin(), qc.cols.end()),
std::vector<f_t>(qc.vals.begin(), qc.vals.end())});
}
set_quadratic_constraints(std::move(converted_constraints));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,10 @@ void populate_from_mps_data_model(optimization_problem_interface_t<i_t, f_t>* pr
n_nonzeros,
A_offsets.data(),
n_constraints + 1);
} else {
// Set empty constraint matrix
std::vector<i_t> offsets(1, 0);
problem->set_csr_constraint_matrix(nullptr, 0, nullptr, 0, offsets.data(), 1);
}
}

Expand Down
Loading
Loading