14 #ifndef OR_TOOLS_GLOP_REDUCED_COSTS_H_
15 #define OR_TOOLS_GLOP_REDUCED_COSTS_H_
18 #include "ortools/glop/parameters.pb.h"
113 return recompute_reduced_costs_ || are_reduced_costs_recomputed_;
165 DCHECK(are_dual_infeasible_positions_maintained_);
166 return is_dual_infeasible_;
173 std::string
StatString()
const {
return stats_.StatString(); }
177 return dual_feasibility_tolerance_;
191 basic_objective_left_inverse_density(
192 "basic_objective_left_inverse_density", this),
193 reduced_costs_accuracy(
"reduced_costs_accuracy", this),
194 cost_shift(
"cost_shift", this) {}
202 void RecomputeReducedCostsAndPrimalEnteringCandidatesIfNeeded();
206 void ComputeBasicObjective();
207 void ComputeReducedCosts();
208 void ComputeBasicObjectiveLeftInverse();
215 void UpdateReducedCosts(ColIndex entering_col, ColIndex leaving_col,
217 UpdateRow* update_row);
221 void ResetDualInfeasibilityBitSet();
224 template <
typename ColumnsToUpdate>
225 void UpdateEnteringCandidates(
const ColumnsToUpdate& cols);
228 void UpdateBasicObjective(ColIndex entering_col, RowIndex leaving_row);
231 const CompactSparseMatrix& matrix_;
234 const VariablesInfo& variables_info_;
235 const BasisFactorization& basis_factorization_;
239 GlopParameters parameters_;
240 mutable Stats stats_;
243 bool must_refactorize_basis_;
244 bool recompute_basic_objective_left_inverse_;
245 bool recompute_basic_objective_;
246 bool recompute_reduced_costs_;
249 bool are_reduced_costs_precise_;
250 bool are_reduced_costs_recomputed_;
272 ScatteredRow basic_objective_left_inverse_;
285 bool are_dual_infeasible_positions_maintained_;
#define DCHECK(condition)
ReducedCosts(const CompactSparseMatrix &matrix_, const DenseRow &objective, const RowToColMapping &basis, const VariablesInfo &variables_info, const BasisFactorization &basis_factorization, random_engine_t *random)
void ShiftCost(ColIndex col)
void ResetForNewObjective()
Fractional ComputeMaximumDualResidual() const
void MakeReducedCostsPrecise()
bool AreReducedCostsRecomputed()
bool TestEnteringReducedCostPrecision(ColIndex entering_col, const ScatteredColumn &direction, Fractional *reduced_cost)
bool AreReducedCostsPrecise()
bool IsValidPrimalEnteringCandidate(ColIndex col) const
void SetNonBasicVariableCostToZero(ColIndex col, Fractional *current_cost)
void SetAndDebugCheckThatColumnIsDualFeasible(ColIndex col)
const DenseRow & GetCostPerturbations() const
void UpdateBeforeBasisPivot(ColIndex entering_col, RowIndex leaving_row, const ScatteredColumn &direction, UpdateRow *update_row)
const DenseRow & GetReducedCosts()
Fractional GetDualFeasibilityTolerance() const
Fractional ComputeMaximumDualInfeasibility() const
void MaintainDualInfeasiblePositions(bool maintain)
const DenseColumn & GetDualValues()
void ClearAndRemoveCostShifts()
void UpdateDataOnBasisPermutation()
Fractional ComputeSumOfDualInfeasibilities() const
void SetParameters(const GlopParameters ¶meters)
bool NeedsBasisRefactorization() const
const DenseBitRow & GetDualInfeasiblePositions() const
std::string StatString() const
StrictITIVector< ColIndex, Fractional > DenseRow
Bitset64< ColIndex > DenseBitRow
StrictITIVector< RowIndex, ColIndex > RowToColMapping
The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...
std::mt19937 random_engine_t