24 #ifndef OR_TOOLS_LP_DATA_LP_DATA_H_ 25 #define OR_TOOLS_LP_DATA_LP_DATA_H_ 33 #include "absl/container/flat_hash_map.h" 34 #include "absl/container/flat_hash_set.h" 47 class SparseMatrixScaler;
75 const std::string&
name()
const {
return name_; }
86 const std::string&
name);
216 return constraint_lower_bounds_;
219 return constraint_upper_bounds_;
224 return objective_coefficients_;
230 return variable_lower_bounds_;
233 return variable_upper_bounds_;
238 return variable_types_;
262 return objective_scaling_factor_;
304 std::string
Dump()
const;
455 bool detect_integer_constraints_for_slack);
542 columns_are_known_to_be_clean_ =
true;
551 return &constraint_lower_bounds_;
554 return &constraint_upper_bounds_;
560 void UpdateAllIntegerVariableLists()
const;
564 std::string ProblemStatFormatter(
const absl::string_view format)
const;
568 std::string NonZeroStatFormatter(
const absl::string_view format)
const;
571 void ResizeRowsIfNeeded(RowIndex
row);
576 void PopulateNameObjectiveAndVariablesFromLinearProgram(
602 mutable std::vector<ColIndex> integer_variables_list_;
605 mutable std::vector<ColIndex> binary_variables_list_;
609 mutable std::vector<ColIndex> non_binary_variables_list_;
612 absl::flat_hash_map<std::string, ColIndex> variable_table_;
615 absl::flat_hash_map<std::string, RowIndex> constraint_table_;
628 mutable bool columns_are_known_to_be_clean_;
631 mutable bool transpose_matrix_is_consistent_;
635 mutable bool integer_variables_list_is_consistent_;
642 ColIndex first_slack_variable_;
645 bool dcheck_bounds_ =
true;
705 #endif // OR_TOOLS_LP_DATA_LP_DATA_H_ bool IsVariableBinary(ColIndex col) const
std::string DebugString() const
std::string GetPrettyNonZeroStats() const
std::string GetObjectiveStatsString() const
const StrictITIVector< ColIndex, VariableType > variable_types() const
const std::vector< ColIndex > & NonBinaryVariablesList() const
void UseTransposeMatrixAsReference()
bool SolutionIsLPFeasible(const DenseRow &solution, Fractional absolute_tolerance) const
GlopParameters_ScalingAlgorithm
ProblemSolution(RowIndex num_rows, ColIndex num_cols)
const SparseMatrix & GetTransposeSparseMatrix() const
void SetObjectiveCoefficient(ColIndex col, Fractional value)
ColIndex FindOrCreateVariable(const std::string &variable_id)
bool IsVariableInteger(ColIndex col) const
RowIndex num_constraints() const
void Swap(LinearProgram *linear_program)
Fractional ApplyObjectiveScalingAndOffset(Fractional value) const
VariableType GetVariableType(ColIndex col) const
void DeleteColumns(const DenseBooleanRow &columns_to_delete)
bool SolutionIsInteger(const DenseRow &solution, Fractional absolute_tolerance) const
std::string GetPrettyProblemStats() const
bool IsMaximizationProblem() const
void SetVariableType(ColIndex col, VariableType type)
void SetDcheckBounds(bool dcheck_bounds)
void SetVariableName(ColIndex col, absl::string_view name)
const std::vector< ColIndex > & BinaryVariablesList() const
RowIndex FindOrCreateConstraint(const std::string &constraint_id)
void SetConstraintBounds(RowIndex row, Fractional lower_bound, Fractional upper_bound)
void SetObjectiveOffset(Fractional objective_offset)
SparseMatrix * GetMutableTransposeSparseMatrix()
bool AreBoundsValid(Fractional lower_bound, Fractional upper_bound)
void NotifyThatColumnsAreClean()
const DenseRow & objective_coefficients() const
Fractional objective_offset() const
const DenseColumn & constraint_upper_bounds() const
VariableStatusRow variable_statuses
void ComputeSlackVariableValues(DenseRow *solution) const
GlopParameters_CostScalingAlgorithm
Fractional objective_scaling_factor() const
std::string GetDimensionString() const
const DenseColumn & constraint_lower_bounds() const
bool SolutionIsWithinVariableBounds(const DenseRow &solution, Fractional absolute_tolerance) const
void PopulateFromLinearProgramVariables(const LinearProgram &linear_program)
EntryIndex num_entries() const
bool BoundsOfIntegerConstraintsAreInteger(Fractional tolerance) const
const SparseMatrix & GetSparseMatrix() const
Fractional GetObjectiveCoefficientForMinimizationVersion(ColIndex col) const
void PopulateFromPermutedLinearProgram(const LinearProgram &lp, const RowPermutation &row_permutation, const ColumnPermutation &col_permutation)
void AddConstraints(const SparseMatrix &coefficients, const DenseColumn &left_hand_sides, const DenseColumn &right_hand_sides, const StrictITIVector< RowIndex, std::string > &names)
ColIndex CreateNewVariable()
DenseColumn * mutable_constraint_lower_bounds()
bool IsInEquationForm() const
std::string GetProblemStats() const
ColIndex GetFirstSlackVariable() const
RowIndex CreateNewConstraint()
ColIndex CreateNewSlackVariable(bool is_integer_slack_variable, Fractional lower_bound, Fractional upper_bound, const std::string &name)
bool SolutionIsMIPFeasible(const DenseRow &solution, Fractional absolute_tolerance) const
SparseColumn * GetMutableSparseColumn(ColIndex col)
ColIndex num_cols() const
void AddConstraintsWithSlackVariables(const SparseMatrix &coefficients, const DenseColumn &left_hand_sides, const DenseColumn &right_hand_sides, const StrictITIVector< RowIndex, std::string > &names, bool detect_integer_constraints_for_slack)
ColIndex GetSlackVariable(RowIndex row) const
const std::string & name() const
void SetName(const std::string &name)
ColIndex num_variables() const
ConstraintStatusColumn constraint_statuses
#define DCHECK(condition)
const DenseRow & variable_upper_bounds() const
std::string GetNonZeroStats() const
const DenseRow & variable_lower_bounds() const
void SetVariableBounds(ColIndex col, Fractional lower_bound, Fractional upper_bound)
Fractional RemoveObjectiveScalingAndOffset(Fractional value) const
void DeleteRows(const DenseBooleanColumn &rows_to_delete)
bool UpdateVariableBoundsToIntersection(const DenseRow &variable_lower_bounds, const DenseRow &variable_upper_bounds)
void SetMaximizationProblem(bool maximize)
DenseColumn * mutable_constraint_upper_bounds()
Collection of objects used to extend the Constraint Solver library.
std::string GetConstraintName(RowIndex row) const
absl::Span< const double > coefficients
RowIndex num_rows() const
std::string DumpSolution(const DenseRow &variable_values) const
void SetObjectiveScalingFactor(Fractional objective_scaling_factor)
std::string GetVariableName(ColIndex col) const
void ClearTransposeMatrix()
Fractional ScaleObjective(GlopParameters::CostScalingAlgorithm method)
std::string GetBoundsStatsString() const
void DeleteSlackVariables()
void SetCoefficient(RowIndex row, ColIndex col, Fractional value)
void Scale(SparseMatrixScaler *scaler)
bool BoundsOfIntegerVariablesAreInteger(Fractional tolerance) const
void SetConstraintName(RowIndex row, absl::string_view name)
const std::vector< ColIndex > & IntegerVariablesList() const
void PopulateFromLinearProgram(const LinearProgram &linear_program)
const SparseColumn & GetSparseColumn(ColIndex col) const
EntryIndex num_entries() const
void PopulateFromDual(const LinearProgram &dual, RowToColMapping *duplicated_rows)
void AddSlackVariablesWhereNecessary(bool detect_integer_constraints)