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:1465
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:1223
virtual ~MPSolver()
friend class BopInterface
Definition: linear_solver.h:1048
virtual void SetUnsupportedIntegerParam(MPSolverParameters::IntegerParam param)
virtual OptimizationProblemType ProblemType() const
Returns the optimization problem type set at construction.
Definition: linear_solver.h:287
bool IsMIP() const
void set_variable_as_extracted(int var_index, bool extracted)
Definition: linear_solver.h:1676
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:1462
Advanced usage: incrementality from one solve to the next.
Definition: linear_solver.h:1404
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:1751
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:376
friend class SLMInterface
Definition: linear_solver.h:1043
MPSolver::ResultStatus result_status() const
Definition: linear_solver.h:1692
virtual void Reset()=0
void set_constraint_as_extracted(int ct_index, bool extracted)
Definition: linear_solver.h:1682
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:1735
friend class CLPInterface
Definition: linear_solver.h:1148
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:1600
virtual void ClearConstraint(MPConstraint *const constraint)=0
virtual void SetCallback(MPCallback *mp_callback)
Definition: linear_solver.h:1720
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:1724
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:1039
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:1080
static bool ParseSolverType(absl::string_view solver_id, OptimizationProblemType *type)
Parses the name of the solver.
friend class CLPInterface
Definition: linear_solver.h:1040
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:190
friend class GurobiInterface
Definition: linear_solver.h:1044
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:944
static const double kDefaultRelativeMipGap
Definition: linear_solver.h:1461
friend class GLOPInterface
Definition: linear_solver.h:834
static const double kUnknownDoubleParamValue
Definition: linear_solver.h:1453
friend class GLOPInterface
Definition: linear_solver.h:1297
friend class KnapsackInterface
Definition: linear_solver.h:1159
Advanced usage: presolve mode.
Definition: linear_solver.h:1400
friend class CBCInterface
Definition: linear_solver.h:1147
BasisStatus
Advanced usage: possible basis status values for a variable and the slack variable of a linear constr...
Definition: linear_solver.h:669
virtual absl::optional< MPSolutionResponse > DirectlySolveProto(const MPModelRequest &request)
Definition: linear_solver.h:1570
const MPVariable * indicator_variable() const
Definition: linear_solver.h:1260
ABSL_DECLARE_FLAG(bool, linear_solver_enable_verbose_output)
IntegerParam
Enumeration of parameters that take integer or categorical values.
Definition: linear_solver.h:1398
friend class MPVariableSolutionValueTest
Definition: linear_solver.h:1156
MPSolver::ResultStatus result_status_
Definition: linear_solver.h:1738
virtual bool IsContinuous() const =0
MPObjective * MutableObjective()
Returns the mutable objective object.
Definition: linear_solver.h:430
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:1317
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
virtual void SetRelativeMipGap(double value)=0
friend class GLPKInterface
Definition: linear_solver.h:1291
double objective_value_
Definition: linear_solver.h:1748
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:1305
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:1290
void MaximizeLinearExpr(const LinearExpr &linear_expr)
Resets the current objective to maximize linear_expr.
Definition: linear_solver.h:989
virtual void ExtractNewConstraints()=0
void set_solution_value(double value)
Definition: linear_solver.h:1175
void SetHint(std::vector< std::pair< const MPVariable *, double > > hint)
Sets a hint for solution.
friend class SatInterface
Definition: linear_solver.h:1049
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:1071
friend class CplexInterface
Definition: linear_solver.h:1295
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
static void SolveWithProto(const MPModelRequest &model_request, MPSolutionResponse *response, const std::atomic< bool > *interrupt=nullptr)
Solves the model encoded by a MPModelRequest protocol buffer and fills the solution encoded as a MPSo...
Limit for relative MIP gap.
Definition: linear_solver.h:1384
int last_variable_index_
Definition: linear_solver.h:1745
friend class GurobiInterface
Definition: linear_solver.h:1152
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:1157
virtual void SetObjectiveOffset(double value)=0
the model is trivially invalid (NaN coefficients, etc).
Definition: linear_solver.h:450
friend class XpressInterface
Definition: linear_solver.h:831
virtual void SetDualTolerance(double value)=0
void * underlying_solver()
Advanced usage: returns the underlying solver.
friend class GurobiInterface
Definition: linear_solver.h:1294
virtual void SetScalingMode(int value)=0
virtual bool NextSolution()
Definition: linear_solver.h:1717
friend class GLOPInterface
Definition: linear_solver.h:1155
static const int kDummyVariableIndex
Definition: linear_solver.h:1758
std::ostream & operator<<(std::ostream &stream, const LinearExpr &linear_expr)
friend class GLPKInterface
Definition: linear_solver.h:825
friend class SCIPInterface
Definition: linear_solver.h:1292
MPVariable(int index, double lb, double ub, bool integer, const std::string &name, MPSolverInterface *const interface_in)
Definition: linear_solver.h:1164
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:1689
static const int kDefaultIntegerParamValue
Definition: linear_solver.h:1450
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:1151
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:1299
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:1261
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:1552
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:1149
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:1296
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:1196
feasible, or stopped by limit.
Definition: linear_solver.h:442
static constexpr SolverType SAT_INTEGER_PROGRAMMING
Definition: linear_solver.pb.h:3830
static const double kDefaultDualTolerance
Definition: linear_solver.h:1463
friend class KnapsackInterface
Definition: linear_solver.h:1050
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:557
friend class CBCInterface
Definition: linear_solver.h:1289
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:1679
void InvalidateSolutionSynchronization()
Advanced usage: tolerance for primal feasibility of basic solutions.
Definition: linear_solver.h:1392
MPSolver *const solver_
Definition: linear_solver.h:1733
virtual void SetCoefficient(MPConstraint *const constraint, const MPVariable *const variable, double new_value, double old_value)=0
friend class KnapsackInterface
Definition: linear_solver.h:837
absl::Duration DurationSinceConstruction() const
Definition: linear_solver.h:721
static constexpr SolverType GLOP_LINEAR_PROGRAMMING
Definition: linear_solver.pb.h:3804
friend class SLMInterface
Definition: linear_solver.h:1293
friend class GLOPInterface
Definition: linear_solver.h:1047
virtual bool IsMIP() const =0
friend class KnapsackInterface
Definition: linear_solver.h:1300
static const double kDefaultDoubleParamValue
Definition: linear_solver.h:1449
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:1412
int index() const
Returns the index of the constraint in the MPSolver::constraints_.
Definition: linear_solver.h:1264
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:993
virtual void BranchingPriorityChangedForVariable(int var_index)
Definition: linear_solver.h:1626
friend class SatInterface
Definition: linear_solver.h:1158
friend class GLPKInterface
Definition: linear_solver.h:1041
int last_constraint_index_
Definition: linear_solver.h:1743
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:1092
friend class CplexInterface
Definition: linear_solver.h:1045
Advanced usage: enable or disable matrix scaling.
Definition: linear_solver.h:1406
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:646
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:1555
std::string AbslUnparseFlag(MPSolver::OptimizationProblemType solver_type)
Definition: linear_solver.h:938
Advanced usage: tolerance for dual feasibility of basic solutions.
Definition: linear_solver.h:1394
bool AbslParseFlag(absl::string_view text, MPSolver::OptimizationProblemType *solver_type, std::string *error)
absl::Duration TimeLimit() const
Definition: linear_solver.h:715
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:1653
bool maximization() const
Is the optimization direction set to maximize?
void SetTimeLimit(absl::Duration time_limit)
Definition: linear_solver.h:716
MPVariable * variable(int index) const
Returns the variable at position index.
Definition: linear_solver.h:310
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:3822
static constexpr SolverType GUROBI_LINEAR_PROGRAMMING
Definition: linear_solver.pb.h:3810
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:972
absl::Status LoadSolutionFromProto(const MPSolutionResponse &response, double tolerance=kDefaultPrimalTolerance)
Load a solution encoded in a protocol buffer onto this solver for easy access via the MPSolver interf...
friend class SCIPInterface
Definition: linear_solver.h:1042
static const PresolveValues kDefaultPresolve
Definition: linear_solver.h:1464
Reuse results from previous solve as much as the underlying solver allows.
Definition: linear_solver.h:1436
const std::vector< MPVariable * > & variables() const
Returns the array of variables handled by the MPSolver.
Definition: linear_solver.h:305
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:182
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:1154
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:1454
friend class SCIPInterface
Definition: linear_solver.h:828
abnormal, i.e., error of some kind.
Definition: linear_solver.h:448
Start solve from scratch.
Definition: linear_solver.h:1430
SynchronizationStatus
Definition: linear_solver.h:1537
bool is_lazy() const
Advanced usage: returns true if the constraint is "lazy" (see below).
Definition: linear_solver.h:1243
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:282
This class stores parameter settings for LP and MIP solvers.
Definition: linear_solver.h:1379
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.
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:1153
Algorithm to solve linear programs.
Definition: linear_solver.h:1402
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:1410
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:829
void ResetExtractionInformation()
void SetInteger(bool integer)
Sets the integrality requirement of the variable.
friend class XpressInterface
Definition: linear_solver.h:1046
int last_variable_index() const
Definition: linear_solver.h:1671
int GetNumThreads() const
Returns the number of threads to be used during solve.
Definition: linear_solver.h:637
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:1714
MPConstraint * constraint(int index) const
Returns the constraint at the given index.
Definition: linear_solver.h:379
constexpr double kDefaultPrimalTolerance
Definition: linear_solver.h:167
void set_time_limit(int64_t time_limit_milliseconds)
Definition: linear_solver.h:811
friend class CplexInterface
Definition: linear_solver.h:830
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:1708
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:1176
double time_limit_in_secs() const
Definition: linear_solver.h:816
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:1673
friend class SCIPInterface
Definition: linear_solver.h:1150
virtual void SetParameters(const MPSolverParameters ¶m)=0
int branching_priority() const
Advanced usage: Certain MIP solvers (e.g.
Definition: linear_solver.h:1141
void set_is_lazy(bool laziness)
Advanced usage: sets the constraint "laziness".
Definition: linear_solver.h:1258
friend class BopInterface
Definition: linear_solver.h:1298