30 variables_info_(variables_info),
31 basis_factorization_(basis_factorization),
32 stats_(
"VariableValues") {}
56 variable_values_[
col] = 0.0;
59 LOG(DFATAL) <<
"SetNonBasicVariableValueFromStatus() shouldn't "
60 <<
"be called on a BASIC variable.";
71 const ColIndex num_cols = matrix_.
num_cols();
72 variable_values_.
resize(num_cols, 0.0);
73 for (ColIndex
col(0);
col < num_cols; ++
col) {
74 switch (statuses[
col]) {
76 ABSL_FALLTHROUGH_INTENDED;
84 variable_values_[
col] = 0.0;
95 const RowIndex num_rows = matrix_.
num_rows();
102 basis_factorization_.
RightSolve(&scratchpad_);
103 for (RowIndex
row(0);
row < num_rows; ++
row) {
104 variable_values_[basis_[
row]] = scratchpad_[
row];
112 const ColIndex num_cols = matrix_.
num_cols();
113 for (ColIndex
col(0);
col < num_cols; ++
col) {
123 const ColIndex num_cols = matrix_.
num_cols();
124 for (ColIndex
col(0);
col < num_cols; ++
col) {
126 GetUpperBoundInfeasibility(
col), GetLowerBoundInfeasibility(
col));
127 primal_infeasibility =
std::max(primal_infeasibility, col_infeasibility);
129 return primal_infeasibility;
135 const ColIndex num_cols = matrix_.
num_cols();
136 for (ColIndex
col(0);
col < num_cols; ++
col) {
138 GetUpperBoundInfeasibility(
col), GetLowerBoundInfeasibility(
col));
139 sum +=
std::max(0.0, col_infeasibility);
160 for (
const auto e : direction) {
161 const ColIndex
col = basis_[e.row()];
162 variable_values_[
col] -= e.coefficient() * step;
164 variable_values_[entering_col] += step;
168 const std::vector<ColIndex>& cols_to_update,
bool update_basic_variables) {
170 if (!update_basic_variables) {
171 for (ColIndex
col : cols_to_update) {
177 const RowIndex num_rows = matrix_.
num_rows();
178 initially_all_zero_scratchpad_.
values.
resize(num_rows, 0.0);
181 bool use_dense =
false;
182 for (ColIndex
col : cols_to_update) {
187 col, variable_values_[
col] - old_value,
188 &initially_all_zero_scratchpad_.
values);
191 col, variable_values_[
col] - old_value,
192 &initially_all_zero_scratchpad_);
199 basis_factorization_.
RightSolve(&initially_all_zero_scratchpad_);
200 if (initially_all_zero_scratchpad_.
non_zeros.empty()) {
201 for (RowIndex
row(0);
row < num_rows; ++
row) {
202 variable_values_[basis_[
row]] -= initially_all_zero_scratchpad_[
row];
209 for (
const auto e : initially_all_zero_scratchpad_) {
210 variable_values_[basis_[e.row()]] -= e.coefficient();
211 initially_all_zero_scratchpad_[e.row()] = 0.0;
214 initially_all_zero_scratchpad_.non_zeros);
215 initially_all_zero_scratchpad_.non_zeros.clear();
219 return primal_squared_infeasibilities_;
223 return primal_infeasible_positions_;
228 const RowIndex num_rows = matrix_.
num_rows();
229 primal_squared_infeasibilities_.
resize(num_rows, 0.0);
232 const Fractional tolerance = parameters_.primal_feasibility_tolerance();
233 for (RowIndex
row(0);
row < num_rows; ++
row) {
234 const ColIndex
col = basis_[
row];
236 GetLowerBoundInfeasibility(
col));
237 if (infeasibility > tolerance) {
238 primal_squared_infeasibilities_[
row] =
Square(infeasibility);
239 primal_infeasible_positions_.
Set(
row);
245 const std::vector<RowIndex>& rows) {
246 if (primal_squared_infeasibilities_.
size() != matrix_.
num_rows()) {
254 const Fractional tolerance = parameters_.primal_feasibility_tolerance();
255 for (
const RowIndex
row : rows) {
256 const ColIndex
col = basis_[
row];
258 GetLowerBoundInfeasibility(
col));
259 if (infeasibility > tolerance) {
260 primal_squared_infeasibilities_[
row] =
Square(infeasibility);
261 primal_infeasible_positions_.
Set(
row);
263 primal_infeasible_positions_.
Clear(
row);
#define DCHECK_NE(val1, val2)
#define DCHECK(condition)
#define DCHECK_EQ(val1, val2)
void ClearAndResize(IndexType size)
bool IsRefactorized() const
void RightSolve(ScatteredColumn *d) const
ColIndex num_cols() const
void ColumnAddMultipleToSparseScatteredColumn(ColIndex col, Fractional multiplier, ScatteredColumn *column) const
RowIndex num_rows() const
void ColumnAddMultipleToDenseColumn(ColIndex col, Fractional multiplier, DenseColumn *dense_column) const
void AssignToZero(IntType size)
void resize(IntType size)
VariableValues(const GlopParameters ¶meters, const CompactSparseMatrix &matrix, const RowToColMapping &basis, const VariablesInfo &variables_info, const BasisFactorization &basis_factorization)
void SetNonBasicVariableValueFromStatus(ColIndex col)
const DenseColumn & GetPrimalSquaredInfeasibilities() const
Fractional ComputeMaximumPrimalInfeasibility() const
Fractional ComputeSumOfPrimalInfeasibilities() const
void UpdateGivenNonBasicVariables(const std::vector< ColIndex > &cols_to_update, bool update_basic_variables)
const DenseBitColumn & GetPrimalInfeasiblePositions() const
void ResetPrimalInfeasibilityInformation()
void UpdateOnPivoting(const ScatteredColumn &direction, ColIndex entering_col, Fractional step)
void UpdatePrimalInfeasibilityInformation(const std::vector< RowIndex > &rows)
void RecomputeBasicVariableValues()
Fractional ComputeMaximumPrimalResidual() const
void ResetAllNonBasicVariableValues()
const DenseRow & GetVariableLowerBounds() const
const DenseBitRow & GetNotBasicBitRow() const
const VariableStatusRow & GetStatusRow() const
const DenseRow & GetVariableUpperBounds() const
bool IsFinite(Fractional value)
Fractional InfinityNorm(const DenseColumn &v)
bool IsAllZero(const Container &input)
Fractional Square(Fractional f)
The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...
std::vector< double > lower_bounds
std::vector< double > upper_bounds
#define SCOPED_TIME_STAT(stats)
bool ShouldUseDenseIteration(double ratio_for_using_dense_representation) const
void ClearNonZerosIfTooDense(double ratio_for_using_dense_representation)
std::vector< Index > non_zeros
StrictITIVector< Index, Fractional > values