18 #ifndef PDLP_SHARDED_OPTIMIZATION_UTILS_H_
19 #define PDLP_SHARDED_OPTIMIZATION_UTILS_H_
28 #include "ortools/pdlp/solve_log.pb.h"
51 void Add(
const Eigen::VectorXd& datapoint,
double weight);
61 double Weight()
const {
return sum_weights_; }
71 Eigen::VectorXd average_;
72 double sum_weights_ = 0.0;
78 QuadraticProgramStats
ComputeStats(
const ShardedQuadraticProgram& qp,
79 double infinite_constraint_bound_threshold =
80 std::numeric_limits<double>::infinity());
97 int num_iterations, Eigen::VectorXd& row_scaling_vec,
98 Eigen::VectorXd& col_scaling_vec);
106 Eigen::VectorXd& row_scaling_vec,
107 Eigen::VectorXd& col_scaling_vec);
136 const Eigen::VectorXd& primal_solution,
137 const Eigen::VectorXd& dual_product);
152 double constraint_upper_bound,
double dual,
153 double primal_product);
163 const Eigen::VectorXd& dual_solution,
164 const Eigen::VectorXd& primal_product);
183 const std::optional<Eigen::VectorXd>& primal_solution,
184 const std::optional<Eigen::VectorXd>& dual_solution,
185 double desired_relative_error,
double failure_probability,
186 std::mt19937& mt_generator);
196 Eigen::VectorXd& primal);
201 Eigen::VectorXd& dual);
ShardedWeightedAverage(const Sharder *sharder)
void Add(const Eigen::VectorXd &datapoint, double weight)
bool HasNonzeroWeight() const
ShardedWeightedAverage(ShardedWeightedAverage &&)=default
Eigen::VectorXd ComputeAverage() const
ShardedWeightedAverage & operator=(ShardedWeightedAverage &&)=default
LagrangianPart ComputeDualGradient(const ShardedQuadraticProgram &sharded_qp, const VectorXd &dual_solution, const VectorXd &primal_product)
LagrangianPart ComputePrimalGradient(const ShardedQuadraticProgram &sharded_qp, const VectorXd &primal_solution, const VectorXd &dual_product)
void LInfRuizRescaling(const ShardedQuadraticProgram &sharded_qp, const int num_iterations, VectorXd &row_scaling_vec, VectorXd &col_scaling_vec)
SingularValueAndIterations EstimateMaximumSingularValueOfConstraintMatrix(const ShardedQuadraticProgram &sharded_qp, const std::optional< VectorXd > &primal_solution, const std::optional< VectorXd > &dual_solution, const double desired_relative_error, const double failure_probability, std::mt19937 &mt_generator)
double DualSubgradientCoefficient(const double constraint_lower_bound, const double constraint_upper_bound, const double dual, const double primal_product)
bool HasValidBounds(const QuadraticProgram &qp)
void ProjectToDualVariableBounds(const ShardedQuadraticProgram &sharded_qp, VectorXd &dual)
void L2NormRescaling(const ShardedQuadraticProgram &sharded_qp, VectorXd &row_scaling_vec, VectorXd &col_scaling_vec)
ScalingVectors ApplyRescaling(const RescalingOptions &rescaling_options, ShardedQuadraticProgram &sharded_qp)
QuadraticProgramStats ComputeStats(const ShardedQuadraticProgram &qp, const double infinite_constraint_bound_threshold)
void ProjectToPrimalVariableBounds(const ShardedQuadraticProgram &sharded_qp, VectorXd &primal)
int l_inf_ruiz_iterations
Eigen::VectorXd col_scaling_vec
Eigen::VectorXd row_scaling_vec
double estimated_relative_error