18#ifndef PDLP_SHARDED_OPTIMIZATION_UTILS_H_
19#define PDLP_SHARDED_OPTIMIZATION_UTILS_H_
25#include "absl/types/optional.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;
78QuadraticProgramStats
ComputeStats(
const ShardedQuadraticProgram& qp,
79 double infinite_constraint_bound_threshold =
80 std::numeric_limits<double>::infinity());
97 const int num_iterations,
98 Eigen::VectorXd& row_scaling_vec,
99 Eigen::VectorXd& col_scaling_vec);
107 Eigen::VectorXd& row_scaling_vec,
108 Eigen::VectorXd& col_scaling_vec);
137 const Eigen::VectorXd& primal_solution,
138 const Eigen::VectorXd& dual_product);
152 const double constraint_upper_bound,
154 const double primal_product);
165 const Eigen::VectorXd& dual_solution,
166 const Eigen::VectorXd& primal_product);
185 const absl::optional<Eigen::VectorXd>& primal_solution,
186 const absl::optional<Eigen::VectorXd>& dual_solution,
187 const double desired_relative_error,
const double failure_probability,
188 std::mt19937& mt_generator);
198 Eigen::VectorXd& primal);
203 Eigen::VectorXd& dual);
ShardedWeightedAverage(const Sharder *sharder)
void Add(const Eigen::VectorXd &datapoint, double weight)
ShardedWeightedAverage & operator=(ShardedWeightedAverage &&)=default
bool HasNonzeroWeight() const
ShardedWeightedAverage(ShardedWeightedAverage &&)=default
Eigen::VectorXd ComputeAverage() const
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)
LagrangianPart ComputeDualGradient(const ShardedQuadraticProgram &sharded_qp, const Eigen::VectorXd &dual_solution, const Eigen::VectorXd &primal_product)
double DualSubgradientCoefficient(const double constraint_lower_bound, const double constraint_upper_bound, const double dual, const double primal_product)
bool HasValidBounds(const QuadraticProgram &qp)
SingularValueAndIterations EstimateMaximumSingularValueOfConstraintMatrix(const ShardedQuadraticProgram &sharded_qp, const absl::optional< VectorXd > &primal_solution, const absl::optional< VectorXd > &dual_solution, const double desired_relative_error, const double failure_probability, std::mt19937 &mt_generator)
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