Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
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.quadratic_row_indices.begin(), qc.quadratic_row_indices.end()),
std::vector<i_t>(qc.quadratic_col_indices.begin(), qc.quadratic_col_indices.end()),
std::vector<f_t>(qc.quadratic_values.begin(), qc.quadratic_values.end())});
}
}

Expand Down
20 changes: 11 additions & 9 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,19 +251,21 @@ class mps_data_model_t {
std::vector<f_t> linear_values{};
std::vector<i_t> linear_indices{};
f_t rhs_value{f_t(0)};
/** Q nonzeros: parallel arrays, same length (COO / SoA). Sorted by (row, col) in append. */
std::vector<i_t> quadratic_row_indices{};
std::vector<i_t> quadratic_col_indices{};
std::vector<f_t> quadratic_values{};
std::vector<i_t> quadratic_indices{};
std::vector<i_t> quadratic_offsets{};
};

/**
* @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 quadratic_values, quadratic_row_indices, quadratic_col_indices COO triplets; 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,
Expand All @@ -272,8 +274,8 @@ class mps_data_model_t {
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 i_t> quadratic_row_indices,
std::span<const i_t> quadratic_col_indices);

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,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)};
/** Q in COO: parallel arrays, same length. */
std::vector<i_t> quadratic_row_indices{};
std::vector<i_t> quadratic_col_indices{};
std::vector<f_t> quadratic_values{};
std::vector<i_t> quadratic_indices{};
std::vector<i_t> quadratic_offsets{};
};

virtual ~optimization_problem_interface_t() = default;
Expand All @@ -89,9 +90,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.quadratic_row_indices.begin(), qc.quadratic_row_indices.end()),
std::vector<i_t>(qc.quadratic_col_indices.begin(), qc.quadratic_col_indices.end()),
std::vector<f_t>(qc.quadratic_values.begin(), qc.quadratic_values.end())});
}
set_quadratic_constraints(std::move(converted_constraints));
}
Expand Down
Loading