14#ifndef PDLP_SHARDED_QUADRATIC_PROGRAM_H_
15#define PDLP_SHARDED_QUADRATIC_PROGRAM_H_
22#include "Eigen/SparseCore"
26#include "ortools/pdlp/solvers.pb.h"
45 SchedulerType scheduler_type = SCHEDULER_TYPE_GOOGLE_THREADPOOL,
57 const Eigen::SparseMatrix<double, Eigen::ColMajor, int64_t>&
59 return transposed_constraint_matrix_;
64 return constraint_matrix_sharder_;
68 return transposed_constraint_matrix_sharder_;
75 int64_t
PrimalSize()
const {
return qp_.variable_lower_bounds.size(); }
76 int64_t
DualSize()
const {
return qp_.constraint_lower_bounds.size(); }
86 const Eigen::VectorXd& row_scaling_vec);
89 Eigen::VectorXd& variable_upper_bounds) {
90 qp_.variable_lower_bounds.swap(variable_lower_bounds);
91 qp_.variable_upper_bounds.swap(variable_upper_bounds);
95 Eigen::VectorXd& constraint_upper_bounds) {
96 qp_.constraint_lower_bounds.swap(constraint_lower_bounds);
97 qp_.constraint_upper_bounds.swap(constraint_upper_bounds);
101 std::optional<double> lower_bound,
102 std::optional<double> upper_bound);
108 qp_.objective_vector.swap(objective);
117 Eigen::SparseMatrix<double, Eigen::ColMajor, int64_t>
118 transposed_constraint_matrix_;
119 std::unique_ptr<Scheduler> scheduler_;
120 Sharder constraint_matrix_sharder_;
121 Sharder transposed_constraint_matrix_sharder_;
ShardedQuadraticProgram(ShardedQuadraticProgram &&)=default
int64_t PrimalSize() const
const Sharder & ConstraintMatrixSharder() const
Returns a Sharder intended for the columns of the QP's constraint matrix.
void SwapConstraintBounds(Eigen::VectorXd &constraint_lower_bounds, Eigen::VectorXd &constraint_upper_bounds)
const QuadraticProgram & Qp() const
const Sharder & TransposedConstraintMatrixSharder() const
Returns a Sharder intended for the rows of the QP's constraint matrix.
void SwapVariableBounds(Eigen::VectorXd &variable_lower_bounds, Eigen::VectorXd &variable_upper_bounds)
const Eigen::SparseMatrix< double, Eigen::ColMajor, int64_t > & TransposedConstraintMatrix() const
Returns a reference to the transpose of the QP's constraint matrix.
ShardedQuadraticProgram(const ShardedQuadraticProgram &)=delete
Movable but not copyable.
void SetConstraintBounds(int64_t constraint_index, std::optional< double > lower_bound, std::optional< double > upper_bound)
ShardedQuadraticProgram & operator=(ShardedQuadraticProgram &&)=default
const Sharder & DualSharder() const
Returns a Sharder intended for dual vectors.
ShardedQuadraticProgram & operator=(const ShardedQuadraticProgram &)=delete
void ReplaceLargeConstraintBoundsWithInfinity(double threshold)
void SwapObjectiveVector(Eigen::VectorXd &objective)
ShardedQuadraticProgram(QuadraticProgram qp, int num_threads, int num_shards, SchedulerType scheduler_type=SCHEDULER_TYPE_GOOGLE_THREADPOOL, operations_research::SolverLogger *logger=nullptr)
const Sharder & PrimalSharder() const
Returns a Sharder intended for primal vectors.
void RescaleQuadraticProgram(const Eigen::VectorXd &col_scaling_vec, const Eigen::VectorXd &row_scaling_vec)
Validation utilities for solvers.proto.