C++ Reference
C++ Reference: Linear solver
linear_solver.h
Go to the documentation of this file.
MPVariable * MakeNumVar(double lb, double ub, const std::string &name)
Creates a continuous variable.
bool ExportModelAsMpsFormat(bool fixed_format, bool obfuscate, std::string *model_str) const
static const IncrementalityValues kDefaultIncrementality
Definition: linear_solver.h:1481
const absl::flat_hash_map< const MPVariable *, double > & terms() const
Returns a map from variables to their coefficients in the constraint.
Definition: linear_solver.h:1239
virtual absl::optional< MPSolutionResponse > DirectlySolveProto(const MPModelRequest &request, std::atomic< bool > *interrupt)
Definition: linear_solver.h:1589
virtual ~MPSolver()
friend class BopInterface
Definition: linear_solver.h:1064
virtual void SetUnsupportedIntegerParam(MPSolverParameters::IntegerParam param)
virtual OptimizationProblemType ProblemType() const
Returns the optimization problem type set at construction.
Definition: linear_solver.h:288
bool IsMIP() const
void set_variable_as_extracted(int var_index, bool extracted)
Definition: linear_solver.h:1698
void ExtractModel()
virtual void Write(const std::string &filename)
bool InterruptSolve()
Interrupts the Solve() execution to terminate processing if possible.
static const double kDefaultPrimalTolerance
Definition: linear_solver.h:1478
Advanced usage: incrementality from one solve to the next.
Definition: linear_solver.h:1420
virtual absl::Status SetNumThreads(int num_threads)
void SetDoubleParam(MPSolverParameters::DoubleParam param, double value)
Sets a double parameter to a specific value.
virtual void SetLpAlgorithm(int value)=0
virtual ~MPSolverInterface()
double Value() const
Returns the objective value of the best solution found so far.
virtual void SetOptimizationDirection(bool maximize)=0
virtual void ExtractNewVariables()=0
double best_objective_bound_
Definition: linear_solver.h:1773
virtual void SetPresolveMode(int value)=0
const std::vector< MPConstraint * > & constraints() const
Returns the array of constraints handled by the MPSolver.
Definition: linear_solver.h:377
friend class SLMInterface
Definition: linear_solver.h:1059
MPSolver::ResultStatus result_status() const
Definition: linear_solver.h:1714
virtual void Reset()=0
void set_constraint_as_extracted(int ct_index, bool extracted)
Definition: linear_solver.h:1704
void Clear()
Clears the objective (including the optimization direction), all variables and constraints.
void SetOffset(double value)
Sets the constant term in the objective.
MPVariable * MakeIntVar(double lb, double ub, const std::string &name)
Creates an integer variable.
void SetStartingLpBasis(const std::vector< MPSolver::BasisStatus > &variable_statuses, const std::vector< MPSolver::BasisStatus > &constraint_statuses)
Advanced usage: Incrementality.
SynchronizationStatus sync_status_
Definition: linear_solver.h:1757
friend class CLPInterface
Definition: linear_solver.h:1164
double best_objective_bound() const
MPSolverParameters()
The constructor sets all parameters to their default value.
virtual bool AddIndicatorConstraint(MPConstraint *const ct)
Definition: linear_solver.h:1622
virtual void ClearConstraint(MPConstraint *const constraint)=0
virtual void SetCallback(MPCallback *mp_callback)
Definition: linear_solver.h:1742
void SetCoefficient(const MPVariable *const var, double coeff)
Sets the coefficient of the variable in the objective.
virtual bool SupportsCallbacks() const
Definition: linear_solver.h:1746
void ResetDoubleParam(MPSolverParameters::DoubleParam param)
Sets a double parameter to its default value (default value defined in MPSolverParameters if it exist...
void Clear()
Clears all variables and coefficients. Does not clear the bounds.
friend class CBCInterface
Definition: linear_solver.h:1055
void SetDoubleParamToUnsupportedValue(MPSolverParameters::DoubleParam param, double value)
double BestBound() const
Returns the best objective bound.
bool integer() const
Returns the integrality requirement of the variable.
Definition: linear_solver.h:1096
static bool ParseSolverType(absl::string_view solver_id, OptimizationProblemType *type)
Parses the name of the solver.
friend class CLPInterface
Definition: linear_solver.h:1056
bool minimization() const
Is the optimization direction set to minimize?
OptimizationProblemType
The type of problems (LP or MIP) that will be solved and the underlying solver (GLOP,...
Definition: linear_solver.h:191
friend class GurobiInterface
Definition: linear_solver.h:1060
bool MPSolverResponseStatusIsRpcError(MPSolverResponseStatus status)
void SetBounds(double lb, double ub)
Sets both the lower and upper bounds.
A class to express a linear objective.
Definition: linear_solver.h:960
static const double kDefaultRelativeMipGap
Definition: linear_solver.h:1477
friend class GLOPInterface
Definition: linear_solver.h:844
static const double kUnknownDoubleParamValue
Definition: linear_solver.h:1469
friend class GLOPInterface
Definition: linear_solver.h:1313
friend class KnapsackInterface
Definition: linear_solver.h:1175
Advanced usage: presolve mode.
Definition: linear_solver.h:1416
friend class CBCInterface
Definition: linear_solver.h:1163
BasisStatus
Advanced usage: possible basis status values for a variable and the slack variable of a linear constr...
Definition: linear_solver.h:673
const MPVariable * indicator_variable() const
Definition: linear_solver.h:1276
ABSL_DECLARE_FLAG(bool, linear_solver_enable_verbose_output)
IntegerParam
Enumeration of parameters that take integer or categorical values.
Definition: linear_solver.h:1414
friend class MPVariableSolutionValueTest
Definition: linear_solver.h:1172
MPSolver::ResultStatus result_status_
Definition: linear_solver.h:1760
virtual bool IsContinuous() const =0
MPObjective * MutableObjective()
Returns the mutable objective object.
Definition: linear_solver.h:431
static int64_t global_num_variables()
void Reset()
Advanced usage: resets extracted model to solve from scratch.
virtual int64_t nodes() const =0
double GetCoefficient(const MPVariable *const var) const
Gets the coefficient of a given variable on the constraint (which is 0 if the variable does not appea...
void set_dual_value(double dual_value)
Definition: linear_solver.h:1333
MPSolverInterface(MPSolver *const solver)
void ResetIntegerParam(MPSolverParameters::IntegerParam param)
Sets an integer parameter to its default value (default value defined in MPSolverParameters if it exi...
virtual int64_t iterations() const =0
int GetIntegerParam(MPSolverParameters::IntegerParam param) const
Returns the value of an integer parameter.
virtual void SetObjectiveCoefficient(const MPVariable *const variable, double coefficient)=0
static void SolveWithProto(const MPModelRequest &model_request, MPSolutionResponse *response, std::atomic< bool > *interrupt=nullptr)
Solves the model encoded by a MPModelRequest protocol buffer and fills the solution encoded as a MPSo...
virtual void SetRelativeMipGap(double value)=0
friend class GLPKInterface
Definition: linear_solver.h:1307
double objective_value_
Definition: linear_solver.h:1770
void SetIntegerParam(MPSolverParameters::IntegerParam param, int value)
Sets a integer parameter to a specific value.
MPConstraint(int index, double lb, double ub, const std::string &name, MPSolverInterface *const interface_in)
Definition: linear_solver.h:1321
absl::Status ClampSolutionWithinBounds()
Resets values of out of bound variables to the corresponding bound and returns an error if any of the...
friend class CLPInterface
Definition: linear_solver.h:1306
void MaximizeLinearExpr(const LinearExpr &linear_expr)
Resets the current objective to maximize linear_expr.
Definition: linear_solver.h:1005
virtual void ExtractNewConstraints()=0
void set_solution_value(double value)
Definition: linear_solver.h:1191
void SetHint(std::vector< std::pair< const MPVariable *, double > > hint)
Sets a hint for solution.
friend class SatInterface
Definition: linear_solver.h:1065
virtual bool IsLP() const =0
MPSolver(const std::string &name, OptimizationProblemType problem_type)
Create a solver with the given name and underlying solver backend.
virtual bool CheckSolutionExists() const
The class for variables of a Mathematical Programming (MP) model.
Definition: linear_solver.h:1087
friend class CplexInterface
Definition: linear_solver.h:1311
MPSolver::BasisStatus basis_status() const
Advanced usage: returns the basis status of the variable in the current solution (only available for ...
bool SupportsCallbacks() const
bool SetSolverSpecificParametersAsString(const std::string ¶meters)
Advanced usage: pass solver specific parameters in text format.
void MakeIntVarArray(int nb, double lb, double ub, const std::string &name, std::vector< MPVariable * > *vars)
Creates an array of integer variables.
virtual void ExtractObjective()=0
virtual double ComputeExactConditionNumber() const
Limit for relative MIP gap.
Definition: linear_solver.h:1400
int last_variable_index_
Definition: linear_solver.h:1767
friend class GurobiInterface
Definition: linear_solver.h:1168
void OptimizeLinearExpr(const LinearExpr &linear_expr, bool is_maximization)
Resets the current objective to take the value of linear_expr, and sets the objective direction to ma...
friend class BopInterface
Definition: linear_solver.h:1173
virtual void SetObjectiveOffset(double value)=0
the model is trivially invalid (NaN coefficients, etc).
Definition: linear_solver.h:451
friend class XpressInterface
Definition: linear_solver.h:841
static int64_t global_num_constraints()
virtual void SetDualTolerance(double value)=0
void * underlying_solver()
Advanced usage: returns the underlying solver.
friend class GurobiInterface
Definition: linear_solver.h:1310
virtual void SetScalingMode(int value)=0
virtual bool NextSolution()
Definition: linear_solver.h:1739
friend class GLOPInterface
Definition: linear_solver.h:1171
static const int kDummyVariableIndex
Definition: linear_solver.h:1780
std::ostream & operator<<(std::ostream &stream, const LinearExpr &linear_expr)
friend class GLPKInterface
Definition: linear_solver.h:835
friend class SCIPInterface
Definition: linear_solver.h:1308
MPVariable(int index, double lb, double ub, bool integer, const std::string &name, MPSolverInterface *const interface_in)
Definition: linear_solver.h:1180
void SetBounds(double lb, double ub)
Sets both the lower and upper bounds.
absl::Status SetNumThreads(int num_threads)
Sets the number of threads to use by the underlying solver.
MPVariable * MakeVar(double lb, double ub, bool integer, const std::string &name)
Creates a variable with the given bounds, integrality requirement and name.
void set_quiet(bool quiet_value)
Definition: linear_solver.h:1711
static const int kDefaultIntegerParamValue
Definition: linear_solver.h:1466
virtual void SetIntegerParamToUnsupportedValue(MPSolverParameters::IntegerParam param, int value)
double ComputeExactConditionNumber() const
Advanced usage: computes the exact condition number of the current scaled basis: L1norm(B) * L1norm(i...
ResultStatus Solve()
Solves the problem using the default parameter values.
friend class SLMInterface
Definition: linear_solver.h:1167
bool VerifySolution(double tolerance, bool log_errors) const
Advanced usage: Verifies the correctness of the solution.
int64_t iterations() const
Returns the number of simplex iterations.
friend class SatInterface
Definition: linear_solver.h:1315
void MakeVarArray(int nb, double lb, double ub, bool integer, const std::string &name_prefix, std::vector< MPVariable * > *vars)
Creates an array of variables.
bool indicator_value() const
Definition: linear_solver.h:1277
virtual void SetConstraintBounds(int index, double lb, double ub)=0
double objective_value() const
static bool SupportsProblemType(OptimizationProblemType problem_type)
Whether the given problem type is supported (this will depend on the targets that you linked).
void Write(const std::string &file_name)
Writes the model using the solver internal write function.
void SetCommonParameters(const MPSolverParameters ¶m)
static constexpr int64_t kUnknownNumberOfIterations
Definition: linear_solver.h:1568
virtual std::string SolverVersion() const =0
virtual MPSolver::ResultStatus Solve(const MPSolverParameters ¶m)=0
void Reset()
Sets all parameters to their default value.
friend class GLPKInterface
Definition: linear_solver.h:1165
static OptimizationProblemType ParseSolverTypeOrDie(const std::string &solver_id)
Parses the name of the solver and returns the correct optimization type or dies.
double solution_value() const
Returns the value of the variable in the current solution.
friend class XpressInterface
Definition: linear_solver.h:1312
virtual void SetVariableBounds(int index, double lb, double ub)=0
ABSL_MUST_USE_RESULT bool NextSolution()
Some solvers (MIP only, not LP) can produce multiple solutions to the problem.
The class for constraints of a Mathematical Programming (MP) model.
Definition: linear_solver.h:1212
feasible, or stopped by limit.
Definition: linear_solver.h:443
static constexpr SolverType SAT_INTEGER_PROGRAMMING
Definition: linear_solver.pb.h:3942
static const double kDefaultDualTolerance
Definition: linear_solver.h:1479
friend class KnapsackInterface
Definition: linear_solver.h:1066
double GetCoefficient(const MPVariable *const var) const
Gets the coefficient of a given variable in the objective.
void SetMIPParameters(const MPSolverParameters ¶m)
static bool SolverTypeSupportsInterruption(const MPModelRequest::SolverType solver)
Definition: linear_solver.h:560
friend class CBCInterface
Definition: linear_solver.h:1305
bool SolverTypeIsMip(MPModelRequest::SolverType solver_type)
const absl::string_view ToString(MPSolver::OptimizationProblemType optimization_problem_type)
bool constraint_is_extracted(int ct_index) const
Definition: linear_solver.h:1701
void InvalidateSolutionSynchronization()
Advanced usage: tolerance for primal feasibility of basic solutions.
Definition: linear_solver.h:1408
MPSolver *const solver_
Definition: linear_solver.h:1755
virtual void SetCoefficient(MPConstraint *const constraint, const MPVariable *const variable, double new_value, double old_value)=0
friend class KnapsackInterface
Definition: linear_solver.h:847
absl::Duration DurationSinceConstruction() const
Definition: linear_solver.h:725
static constexpr SolverType GLOP_LINEAR_PROGRAMMING
Definition: linear_solver.pb.h:3916
friend class SLMInterface
Definition: linear_solver.h:1309
friend class GLOPInterface
Definition: linear_solver.h:1063
virtual bool IsMIP() const =0
friend class KnapsackInterface
Definition: linear_solver.h:1316
static const double kDefaultDoubleParamValue
Definition: linear_solver.h:1465
This file allows you to write natural code (like a mathematical equation) to model optimization probl...
double dual_value() const
Advanced usage: returns the dual value of the constraint in the current solution (only available for ...
Presolve is off.
Definition: linear_solver.h:1428
int index() const
Returns the index of the constraint in the MPSolver::constraints_.
Definition: linear_solver.h:1280
bool OutputIsEnabled() const
Controls (or queries) the amount of output produced by the underlying solver.
void MinimizeLinearExpr(const LinearExpr &linear_expr)
Resets the current objective to minimize linear_expr.
Definition: linear_solver.h:1009
virtual void BranchingPriorityChangedForVariable(int var_index)
Definition: linear_solver.h:1648
friend class SatInterface
Definition: linear_solver.h:1174
friend class GLPKInterface
Definition: linear_solver.h:1057
int last_constraint_index_
Definition: linear_solver.h:1765
void MakeNumVarArray(int nb, double lb, double ub, const std::string &name, std::vector< MPVariable * > *vars)
Creates an array of continuous variables.
int index() const
Returns the index of the variable in the MPSolver::variables_.
Definition: linear_solver.h:1108
friend class CplexInterface
Definition: linear_solver.h:1061
Advanced usage: enable or disable matrix scaling.
Definition: linear_solver.h:1422
bool CheckSolutionIsSynchronized() const
void SetCallback(MPCallback *mp_callback)
void SetBranchingPriority(int priority)
double unrounded_solution_value() const
Advanced usage: unrounded solution value.
MPSolver::BasisStatus basis_status() const
Advanced usage: returns the basis status of the constraint.
std::string GetSolverSpecificParametersAsString() const
Definition: linear_solver.h:650
double GetDoubleParam(MPSolverParameters::DoubleParam param) const
Returns the value of a double parameter.
virtual void AddRowConstraint(MPConstraint *const ct)=0
static constexpr int64_t kUnknownNumberOfNodes
Definition: linear_solver.h:1571
std::string AbslUnparseFlag(MPSolver::OptimizationProblemType solver_type)
Definition: linear_solver.h:954
Advanced usage: tolerance for dual feasibility of basic solutions.
Definition: linear_solver.h:1410
bool AbslParseFlag(absl::string_view text, MPSolver::OptimizationProblemType *solver_type, std::string *error)
absl::Duration TimeLimit() const
Definition: linear_solver.h:719
MPVariable * LookupVariableOrNull(const std::string &var_name) const
Looks up a variable by name, and returns nullptr if it does not exist.
void AddLinearExpr(const LinearExpr &linear_expr)
Adds linear_expr to the current objective, does not change the direction.
MPSolverResponseStatus LoadModelFromProto(const MPModelProto &input_model, std::string *error_message)
Loads model from protocol buffer.
bool CheckSolutionIsSynchronizedAndExists() const
Definition: linear_solver.h:1675
bool maximization() const
Is the optimization direction set to maximize?
void SetTimeLimit(absl::Duration time_limit)
Definition: linear_solver.h:720
MPVariable * variable(int index) const
Returns the variable at position index.
Definition: linear_solver.h:311
virtual void ClearObjective()=0
void SetCoefficient(const MPVariable *const var, double coeff)
Sets the coefficient of the variable on the constraint.
int64_t nodes() const
Returns the number of branch-and-bound nodes evaluated during the solve.
static constexpr SolverType GUROBI_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.pb.h:3934
static constexpr SolverType GUROBI_LINEAR_PROGRAMMING
Definition: linear_solver.pb.h:3922
const absl::flat_hash_map< const MPVariable *, double > & terms() const
Returns a map from variables to their coefficients in the objective.
Definition: linear_solver.h:988
friend class SCIPInterface
Definition: linear_solver.h:1058
static const PresolveValues kDefaultPresolve
Definition: linear_solver.h:1480
Reuse results from previous solve as much as the underlying solver allows.
Definition: linear_solver.h:1452
const std::vector< MPVariable * > & variables() const
Returns the array of variables handled by the MPSolver.
Definition: linear_solver.h:306
MPConstraint * MakeRowConstraint()
Creates a constraint with -infinity and +infinity bounds.
static MPSolver * CreateSolver(const std::string &solver_id)
Recommended factory method to create a MPSolver instance, especially in non C++ languages.
This mathematical programming (MP) solver class is the main class though which users build and solve ...
Definition: linear_solver.h:183
LinearExpr models a quantity that is linear in the decision variables (MPVariable) of an optimization...
Definition: linear_expr.h:114
bool OwnsVariable(const MPVariable *var) const
friend class XpressInterface
Definition: linear_solver.h:1170
virtual void SetVariableInteger(int index, bool integer)=0
Definition: linear_expr.h:84
void MakeBoolVarArray(int nb, const std::string &name, std::vector< MPVariable * > *vars)
Creates an array of boolean variables.
static const int kUnknownIntegerParamValue
Definition: linear_solver.h:1470
friend class SCIPInterface
Definition: linear_solver.h:838
abnormal, i.e., error of some kind.
Definition: linear_solver.h:449
Start solve from scratch.
Definition: linear_solver.h:1446
SynchronizationStatus
Definition: linear_solver.h:1553
bool is_lazy() const
Advanced usage: returns true if the constraint is "lazy" (see below).
Definition: linear_solver.h:1259
std::string SolverVersion() const
Returns a string describing the underlying solver and its version.
const std::string & Name() const
Returns the name of the model set at construction.
Definition: linear_solver.h:283
This class stores parameter settings for LP and MIP solvers.
Definition: linear_solver.h:1395
virtual void * underlying_solver()=0
MPVariable * MakeBoolVar(const std::string &name)
Creates a boolean variable.
void Clear()
Clears the offset, all variables and coefficients, and the optimization direction.
absl::Status LoadSolutionFromProto(const MPSolutionResponse &response, double tolerance=std::numeric_limits< double >::infinity())
Load a solution encoded in a protocol buffer onto this solver for easy access via the MPSolver interf...
MPSolverResponseStatus LoadModelFromProtoWithUniqueNamesOrDie(const MPModelProto &input_model, std::string *error_message)
Loads model from protocol buffer.
bool ExportModelAsLpFormat(bool obfuscate, std::string *model_str) const
Shortcuts to the homonymous MPModelProtoExporter methods, via exporting to a MPModelProto with Export...
virtual MPSolver::BasisStatus column_status(int variable_index) const =0
friend class CplexInterface
Definition: linear_solver.h:1169
Algorithm to solve linear programs.
Definition: linear_solver.h:1418
std::vector< double > ComputeConstraintActivities() const
Advanced usage: compute the "activities" of all constraints, which are the sums of their linear terms...
PresolveValues
For each categorical parameter, enumeration of possible values.
Definition: linear_solver.h:1426
virtual void SetPrimalTolerance(double value)=0
void ExportModelToProto(MPModelProto *output_model) const
Exports model to protocol buffer.
virtual bool SetSolverSpecificParametersAsString(const std::string ¶meters)
friend class GurobiInterface
Definition: linear_solver.h:839
void ResetExtractionInformation()
void SetInteger(bool integer)
Sets the integrality requirement of the variable.
friend class XpressInterface
Definition: linear_solver.h:1062
int last_variable_index() const
Definition: linear_solver.h:1693
int GetNumThreads() const
Returns the number of threads to be used during solve.
Definition: linear_solver.h:641
void SetUnsupportedDoubleParam(MPSolverParameters::DoubleParam param)
MPConstraint * LookupConstraintOrNull(const std::string &constraint_name) const
Looks up a constraint by name, and returns nullptr if it does not exist.
virtual bool InterruptSolve()
Definition: linear_solver.h:1736
MPConstraint * constraint(int index) const
Returns the constraint at the given index.
Definition: linear_solver.h:380
constexpr double kDefaultPrimalTolerance
Definition: linear_solver.h:168
void set_time_limit(int64_t time_limit_milliseconds)
Definition: linear_solver.h:821
friend class CplexInterface
Definition: linear_solver.h:840
void FillSolutionResponseProto(MPSolutionResponse *response) const
Encodes the current solution in a solution response protocol buffer.
virtual void AddVariable(MPVariable *const var)=0
virtual MPSolver::BasisStatus row_status(int constraint_index) const =0
virtual void SetStartingLpBasis(const std::vector< MPSolver::BasisStatus > &variable_statuses, const std::vector< MPSolver::BasisStatus > &constraint_statuses)
Definition: linear_solver.h:1730
double reduced_cost() const
Advanced usage: returns the reduced cost of the variable in the current solution (only available for ...
void set_reduced_cost(double reduced_cost)
Definition: linear_solver.h:1192
double time_limit_in_secs() const
Definition: linear_solver.h:826
void SetOptimizationDirection(bool maximize)
Sets the optimization direction (maximize: true or minimize: false).
MPModelRequest_SolverType
Definition: linear_solver.pb.h:199
bool variable_is_extracted(int var_index) const
Definition: linear_solver.h:1695
friend class SCIPInterface
Definition: linear_solver.h:1166
virtual void SetParameters(const MPSolverParameters ¶m)=0
int branching_priority() const
Advanced usage: Certain MIP solvers (e.g.
Definition: linear_solver.h:1157
void set_is_lazy(bool laziness)
Advanced usage: sets the constraint "laziness".
Definition: linear_solver.h:1274
friend class BopInterface
Definition: linear_solver.h:1314