C++ Reference
C++ Reference: Linear solver
linear_solver.h
Go to the documentation of this file.
@ XPRESS_LINEAR_PROGRAMMING
Definition: linear_solver.h:203
bool variable_is_extracted(int var_index) const
Definition: linear_solver.h:1659
@ GLOP_LINEAR_PROGRAMMING
Definition: linear_solver.h:190
int GetIntegerParam(MPSolverParameters::IntegerParam param) const
Returns the value of an integer parameter.
static bool LoadGurobiSharedLibrary()
void SetCoefficient(const MPVariable *const var, double coeff)
Sets the coefficient of the variable on the constraint.
void * underlying_solver()
Advanced usage: returns the underlying solver.
static bool SupportsProblemType(OptimizationProblemType problem_type)
Whether the given problem type is supported (this will depend on the targets that you linked).
virtual bool IsContinuous() const =0
void Reset()
Advanced usage: resets extracted model to solve from scratch.
virtual bool NextSolution()
Definition: linear_solver.h:1703
friend class XpressInterface
Definition: linear_solver.h:1025
The class for variables of a Mathematical Programming (MP) model.
Definition: linear_solver.h:1050
This mathematical programming (MP) solver class is the main class though which users build and solve ...
Definition: linear_solver.h:177
void ResetDoubleParam(MPSolverParameters::DoubleParam param)
Sets a double parameter to its default value (default value defined in MPSolverParameters if it exist...
MPConstraint * LookupConstraintOrNull(const std::string &constraint_name) const
Looks up a constraint by name, and returns nullptr if it does not exist.
friend class KnapsackInterface
Definition: linear_solver.h:1029
MPSolverInterface(MPSolver *const solver)
bool indicator_value() const
Definition: linear_solver.h:1241
MPSolver::ResultStatus result_status_
Definition: linear_solver.h:1724
@ GLPK_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:195
friend class KnapsackInterface
Definition: linear_solver.h:1280
std::vector< double > ComputeConstraintActivities() const
Advanced usage: compute the "activities" of all constraints, which are the sums of their linear terms...
friend class CLPInterface
Definition: linear_solver.h:1019
@ DUAL_TOLERANCE
Advanced usage: tolerance for dual feasibility of basic solutions.
Definition: linear_solver.h:1374
int index() const
Returns the index of the variable in the MPSolver::variables_.
Definition: linear_solver.h:1071
static const PresolveValues kDefaultPresolve
Definition: linear_solver.h:1444
void Clear()
Clears all variables and coefficients. Does not clear the bounds.
virtual void SetVariableBounds(int index, double lb, double ub)=0
void MakeBoolVarArray(int nb, const std::string &name, std::vector< MPVariable * > *vars)
Creates an array of boolean variables.
bool SolverTypeIsMip(MPModelRequest::SolverType solver_type)
friend class BopInterface
Definition: linear_solver.h:1137
void SetCoefficient(const MPVariable *const var, double coeff)
Sets the coefficient of the variable in the objective.
void MakeIntVarArray(int nb, double lb, double ub, const std::string &name, std::vector< MPVariable * > *vars)
Creates an array of integer variables.
static bool ParseSolverType(absl::string_view solver_id, OptimizationProblemType *type)
Parses the name of the solver.
void MinimizeLinearExpr(const LinearExpr &linear_expr)
Resets the current objective to minimize linear_expr.
Definition: linear_solver.h:972
virtual void SetIntegerParamToUnsupportedValue(MPSolverParameters::IntegerParam param, int value)
bool ExportModelAsMpsFormat(bool fixed_format, bool obfuscate, std::string *model_str) const
bool ExportModelAsLpFormat(bool obfuscate, std::string *model_str) const
Shortcuts to the homonymous MPModelProtoExporter methods, via exporting to a MPModelProto with Export...
friend class CplexInterface
Definition: linear_solver.h:805
The class for constraints of a Mathematical Programming (MP) model.
Definition: linear_solver.h:1176
MPConstraint * MakeRowConstraint(const LinearRange &range, const std::string &name)
As above, but also names the constraint.
virtual bool CheckSolutionExists() const
friend class XpressInterface
Definition: linear_solver.h:1134
ABSL_MUST_USE_RESULT bool NextSolution()
Some solvers (MIP only, not LP) can produce multiple solutions to the problem.
virtual void ExtractNewVariables()=0
friend class CBCInterface
Definition: linear_solver.h:1127
virtual void SetOptimizationDirection(bool maximize)=0
const absl::string_view ToString(MPSolver::OptimizationProblemType optimization_problem_type)
double objective_value_
Definition: linear_solver.h:1734
void SetIntegerParam(MPSolverParameters::IntegerParam param, int value)
Sets a integer parameter to a specific value.
MPConstraint * MakeRowConstraint(const std::string &name)
Creates a named constraint with -infinity and +infinity bounds.
@ CPLEX_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:202
virtual bool IsMIP() const =0
double GetCoefficient(const MPVariable *const var) const
Gets the coefficient of a given variable in the objective.
bool minimization() const
Is the optimization direction set to minimize?
static const double kDefaultRelativeMipGap
Definition: linear_solver.h:1441
virtual void ClearConstraint(MPConstraint *const constraint)=0
bool InterruptSolve()
Interrupts the Solve() execution to terminate processing if possible.
MPConstraint * MakeRowConstraint(double lb, double ub)
Creates a linear constraint with given bounds.
friend class KnapsackInterface
Definition: linear_solver.h:812
void set_variable_as_extracted(int var_index, bool extracted)
Definition: linear_solver.h:1662
@ MODEL_SYNCHRONIZED
Definition: linear_solver.h:1524
static const double kDefaultDualTolerance
Definition: linear_solver.h:1443
void set_time_limit(int64 time_limit_milliseconds)
Definition: linear_solver.h:782
friend class XpressInterface
Definition: linear_solver.h:1276
Definition: linear_expr.h:84
virtual bool InterruptSolve()
Definition: linear_solver.h:1700
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:951
@ GLPK_LINEAR_PROGRAMMING
Definition: linear_solver.h:189
friend class GurobiInterface
Definition: linear_solver.h:1132
virtual void * underlying_solver()=0
PresolveValues
For each categorical parameter, enumeration of possible values.
Definition: linear_solver.h:1390
void ExportModelToProto(MPModelProto *output_model) const
Exports model to protocol buffer.
static const int kDummyVariableIndex
Definition: linear_solver.h:1741
friend class GLOPInterface
Definition: linear_solver.h:1277
MPSolverResponseStatus LoadModelFromProtoWithUniqueNamesOrDie(const MPModelProto &input_model, std::string *error_message)
Loads model from protocol buffer.
friend class SatInterface
Definition: linear_solver.h:1279
static const IncrementalityValues kDefaultIncrementality
Definition: linear_solver.h:1445
static const double kUnknownDoubleParamValue
Definition: linear_solver.h:1433
void SetCallback(MPCallback *mp_callback)
virtual void ExtractNewConstraints()=0
double dual_value() const
Advanced usage: returns the dual value of the constraint in the current solution (only available for ...
int last_variable_index_
Definition: linear_solver.h:1731
This class stores parameter settings for LP and MIP solvers.
Definition: linear_solver.h:1359
virtual bool IsLP() const =0
bool IsMIP() const
void SetUnsupportedDoubleParam(MPSolverParameters::DoubleParam param)
bool CheckSolutionIsSynchronized() const
int branching_priority() const
Returns the branching priority, or 0 if it was not set.
Definition: linear_solver.h:1111
virtual void Reset()=0
bool VerifySolution(double tolerance, bool log_errors) const
Advanced usage: Verifies the correctness of the solution.
ResultStatus Solve()
Solves the problem using the default parameter values.
virtual OptimizationProblemType ProblemType() const
Returns the optimization problem type set at construction.
Definition: linear_solver.h:288
std::string AbslUnparseFlag(MPSolver::OptimizationProblemType solver_type)
Definition: linear_solver.h:917
virtual bool SupportsCallbacks() const
Definition: linear_solver.h:1710
void set_is_lazy(bool laziness)
Advanced usage: sets the constraint "laziness".
Definition: linear_solver.h:1238
@ CPLEX_LINEAR_PROGRAMMING
Definition: linear_solver.h:201
SynchronizationStatus
Definition: linear_solver.h:1517
friend class GurobiInterface
Definition: linear_solver.h:1274
double unrounded_solution_value() const
Advanced usage: unrounded solution value.
static const double kDefaultPrimalTolerance
Definition: linear_solver.h:1442
void SetTimeLimit(absl::Duration time_limit)
Definition: linear_solver.h:687
virtual int64 nodes() const =0
friend class MPVariableSolutionValueTest
Definition: linear_solver.h:1136
std::string GetSolverSpecificParametersAsString() const
Definition: linear_solver.h:617
virtual void SetCoefficient(MPConstraint *const constraint, const MPVariable *const variable, double new_value, double old_value)=0
@ INCREMENTALITY
Advanced usage: incrementality from one solve to the next.
Definition: linear_solver.h:1384
MPSolver::BasisStatus basis_status() const
Advanced usage: returns the basis status of the variable in the current solution (only available for ...
MPConstraint(int index, double lb, double ub, const std::string &name, MPSolverInterface *const interface_in)
Definition: linear_solver.h:1285
void SetOffset(double value)
Sets the constant term in the objective.
friend class GLOPInterface
Definition: linear_solver.h:1026
friend class BopInterface
Definition: linear_solver.h:1278
friend class GLOPInterface
Definition: linear_solver.h:1135
int index() const
Returns the index of the constraint in the MPSolver::constraints_.
Definition: linear_solver.h:1244
void SetCommonParameters(const MPSolverParameters ¶m)
virtual void BranchingPriorityChangedForVariable(int var_index)
Definition: linear_solver.h:1606
virtual MPSolver::BasisStatus row_status(int constraint_index) const =0
virtual bool SetSolverSpecificParametersAsString(const std::string ¶meters)
MPVariable(int index, double lb, double ub, bool integer, const std::string &name, MPSolverInterface *const interface_in)
Definition: linear_solver.h:1144
ResultStatus Solve(const MPSolverParameters ¶m)
Solves the problem using the specified parameter values.
void Reset()
Sets all parameters to their default value.
void Clear()
Clears the objective (including the optimization direction), all variables and constraints.
void set_dual_value(double dual_value)
Definition: linear_solver.h:1297
bool is_lazy() const
Advanced usage: returns true if the constraint is "lazy" (see below).
Definition: linear_solver.h:1223
void ExtractModel()
void set_solution_value(double value)
Definition: linear_solver.h:1155
virtual void SetPresolveMode(int value)=0
bool CheckSolutionIsSynchronizedAndExists() const
Definition: linear_solver.h:1636
@ XPRESS_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:204
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...
double reduced_cost() const
Advanced usage: returns the reduced cost of the variable in the current solution (only available for ...
int64 nodes() const
Returns the number of branch-and-bound nodes evaluated during the solve.
virtual void AddRowConstraint(MPConstraint *const ct)=0
MPSolver::BasisStatus basis_status() const
Advanced usage: returns the basis status of the constraint.
friend class SatInterface
Definition: linear_solver.h:1138
virtual std::string SolverVersion() const =0
MPSolverParameters()
The constructor sets all parameters to their default value.
static const int kDefaultIntegerParamValue
Definition: linear_solver.h:1430
bool AbslParseFlag(absl::string_view text, MPSolver::OptimizationProblemType *solver_type, std::string *error)
@ SAT_INTEGER_PROGRAMMING
Definition: linear_solver.h:213
bool OwnsVariable(const MPVariable *var) const
void set_constraint_as_extracted(int ct_index, bool extracted)
Definition: linear_solver.h:1668
virtual MPSolver::ResultStatus Solve(const MPSolverParameters ¶m)=0
void SetBounds(double lb, double ub)
Sets both the lower and upper bounds.
friend class CLPInterface
Definition: linear_solver.h:1128
void ResetExtractionInformation()
double objective_value() const
static constexpr int64 kUnknownNumberOfNodes
Definition: linear_solver.h:1535
absl::Status SetNumThreads(int num_threads)
Sets the number of threads to use by the underlying solver.
LinearExpr models a quantity that is linear in the decision variables (MPVariable) of an optimization...
Definition: linear_expr.h:114
friend class SLMInterface
Definition: linear_solver.h:1131
static MPSolver * CreateSolver(const std::string &name, const std::string &solver_id)
Recommended factory method to create a MPSolver instance, especially in non C++ languages.
static const int kUnknownIntegerParamValue
Definition: linear_solver.h:1434
MPVariable * LookupVariableOrNull(const std::string &var_name) const
Looks up a variable by name, and returns nullptr if it does not exist.
virtual void SetObjectiveOffset(double value)=0
MPVariable * MakeIntVar(double lb, double ub, const std::string &name)
Creates an integer variable.
virtual int64 iterations() const =0
virtual ~MPSolverInterface()
friend class CplexInterface
Definition: linear_solver.h:1024
void SetInteger(bool integer)
Sets the integrality requirement of the variable.
friend class SLMInterface
Definition: linear_solver.h:1273
@ SCIP_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:194
virtual bool CheckBestObjectiveBoundExists() const
virtual void AddVariable(MPVariable *const var)=0
MPVariable * MakeNumVar(double lb, double ub, const std::string &name)
Creates a continuous variable.
virtual void SetCallback(MPCallback *mp_callback)
Definition: linear_solver.h:1706
bool integer() const
Returns the integrality requirement of the variable.
Definition: linear_solver.h:1059
virtual void SetParameters(const MPSolverParameters ¶m)=0
virtual double best_objective_bound() const =0
absl::Duration TimeLimit() const
Definition: linear_solver.h:686
virtual double ComputeExactConditionNumber() const
@ GUROBI_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:200
IntegerParam
Enumeration of parameters that take integer or categorical values.
Definition: linear_solver.h:1378
void MakeVarArray(int nb, double lb, double ub, bool integer, const std::string &name_prefix, std::vector< MPVariable * > *vars)
Creates an array of variables.
std::ostream & operator<<(std::ostream &stream, const LinearExpr &linear_expr)
virtual void SetRelativeMipGap(double value)=0
friend class SCIPInterface
Definition: linear_solver.h:803
bool SupportsCallbacks() const
void MaximizeLinearExpr(const LinearExpr &linear_expr)
Resets the current objective to maximize linear_expr.
Definition: linear_solver.h:968
@ CBC_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:196
void FillSolutionResponseProto(MPSolutionResponse *response) const
Encodes the current solution in a solution response protocol buffer.
friend class GurobiInterface
Definition: linear_solver.h:804
void SetMIPParameters(const MPSolverParameters ¶m)
virtual bool ReadParameterFile(const std::string &filename)
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 GLPKInterface
Definition: linear_solver.h:800
MPObjective * MutableObjective()
Returns the mutable objective object.
Definition: linear_solver.h:423
virtual void SetScalingMode(int value)=0
absl::Status ClampSolutionWithinBounds()
Resets values of out of bound variables to the corresponding bound and returns an error if any of the...
bool SetSolverSpecificParametersAsString(const std::string ¶meters)
Advanced usage: pass solver specific parameters in text format.
void SetDoubleParamToUnsupportedValue(MPSolverParameters::DoubleParam param, double value)
friend class CBCInterface
Definition: linear_solver.h:1018
static void SetGurobiLibraryPath(const std::string &full_library_path)
friend class SCIPInterface
Definition: linear_solver.h:1130
MPConstraint * MakeRowConstraint(const LinearRange &range)
Creates a constraint owned by MPSolver enforcing: range.lower_bound() <= range.linear_expr() <= range...
friend class XpressInterface
Definition: linear_solver.h:806
OptimizationProblemType
The type of problems (LP or MIP) that will be solved and the underlying solver (GLOP,...
Definition: linear_solver.h:185
virtual void ExtractObjective()=0
const std::string & Name() const
Returns the name of the model set at construction.
Definition: linear_solver.h:283
double GetDoubleParam(MPSolverParameters::DoubleParam param) const
Returns the value of a double parameter.
void SetBounds(double lb, double ub)
Sets both the lower and upper bounds.
void ResetIntegerParam(MPSolverParameters::IntegerParam param)
Sets an integer parameter to its default value (default value defined in MPSolverParameters if it exi...
@ MODEL_INVALID
the model is trivially invalid (NaN coefficients, etc).
Definition: linear_solver.h:443
virtual std::string ValidFileExtensionForParameterFile() const
const std::vector< MPConstraint * > & constraints() const
Returns the array of constraints handled by the MPSolver.
Definition: linear_solver.h:372
virtual void SetDualTolerance(double value)=0
friend class CLPInterface
Definition: linear_solver.h:1270
void Write(const std::string &file_name)
Writes the model using the solver internal write function.
virtual void SetConstraintBounds(int index, double lb, double ub)=0
bool maximization() const
Is the optimization direction set to maximize?
friend class SatInterface
Definition: linear_solver.h:1028
bool MPSolverResponseStatusIsRpcError(MPSolverResponseStatus status)
friend class SLMInterface
Definition: linear_solver.h:1022
int GetNumThreads() const
Returns the number of threads to be used during solve.
Definition: linear_solver.h:608
friend class GLPKInterface
Definition: linear_solver.h:1020
double Value() const
Returns the objective value of the best solution found so far.
virtual void SetLpAlgorithm(int value)=0
friend class GurobiInterface
Definition: linear_solver.h:1023
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:1203
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...
@ BOP_INTEGER_PROGRAMMING
Definition: linear_solver.h:208
MPVariable * MakeVar(double lb, double ub, bool integer, const std::string &name)
Creates a variable with the given bounds, integrality requirement and name.
virtual void SetPrimalTolerance(double value)=0
A class to express a linear objective.
Definition: linear_solver.h:923
virtual void SetStartingLpBasis(const std::vector< MPSolver::BasisStatus > &variable_statuses, const std::vector< MPSolver::BasisStatus > &constraint_statuses)
Definition: linear_solver.h:1694
@ PRIMAL_TOLERANCE
Advanced usage: tolerance for primal feasibility of basic solutions.
Definition: linear_solver.h:1372
absl::Duration DurationSinceConstruction() const
Definition: linear_solver.h:692
friend class CplexInterface
Definition: linear_solver.h:1133
double time_limit_in_secs() const
Definition: linear_solver.h:787
friend class SCIPInterface
Definition: linear_solver.h:1272
MPConstraint * MakeRowConstraint(double lb, double ub, const std::string &name)
Creates a named constraint with given bounds.
std::string SolverVersion() const
Returns a string describing the underlying solver and its version.
MPSolver *const solver_
Definition: linear_solver.h:1719
friend class GLPKInterface
Definition: linear_solver.h:1271
friend class BopInterface
Definition: linear_solver.h:1027
BasisStatus
Advanced usage: possible basis status values for a variable and the slack variable of a linear constr...
Definition: linear_solver.h:640
MPSolver(const std::string &name, OptimizationProblemType problem_type)
Create a solver with the given name and underlying solver backend.
MPSolverResponseStatus LoadModelFromProto(const MPModelProto &input_model, std::string *error_message)
Loads model from protocol buffer.
static const double kDefaultDoubleParamValue
Definition: linear_solver.h:1429
@ SOLUTION_SYNCHRONIZED
Definition: linear_solver.h:1527
void AddLinearExpr(const LinearExpr &linear_expr)
Adds linear_expr to the current objective, does not change the direction.
const MPVariable * indicator_variable() const
Definition: linear_solver.h:1240
void set_quiet(bool quiet_value)
Definition: linear_solver.h:1675
friend class SCIPInterface
Definition: linear_solver.h:1021
bool constraint_is_extracted(int ct_index) const
Definition: linear_solver.h:1665
double ComputeExactConditionNumber() const
Advanced usage: computes the exact condition number of the current scaled basis: L1norm(B) * L1norm(i...
@ INCREMENTALITY_ON
Reuse results from previous solve as much as the underlying solver allows.
Definition: linear_solver.h:1416
constexpr double kDefaultPrimalTolerance
Definition: linear_solver.h:162
virtual void ClearObjective()=0
double solution_value() const
Returns the value of the variable in the current solution.
bool OutputIsEnabled() const
Controls (or queries) the amount of output produced by the underlying solver.
const std::vector< MPVariable * > & variables() const
Returns the array of variables handled by the MPSolver.
Definition: linear_solver.h:306
virtual absl::Status SetNumThreads(int num_threads)
virtual absl::optional< MPSolutionResponse > DirectlySolveProto(const MPModelRequest &request)
Definition: linear_solver.h:1550
static constexpr int64 kUnknownNumberOfIterations
Definition: linear_solver.h:1532
static bool ParseAndCheckSupportForProblemType(const std::string &solver_id)
Parses the name of the solver.
virtual void SetUnsupportedIntegerParam(MPSolverParameters::IntegerParam param)
void SetBranchingPriority(int priority)
Advanced usage: Certain MIP solvers (e.g.
@ KNAPSACK_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:216
void SetHint(std::vector< std::pair< const MPVariable *, double > > hint)
Sets a hint for solution.
virtual void SetObjectiveCoefficient(const MPVariable *const variable, double coefficient)=0
void set_reduced_cost(double reduced_cost)
Definition: linear_solver.h:1156
friend class CBCInterface
Definition: linear_solver.h:1269
MPSolver::ResultStatus result_status() const
Definition: linear_solver.h:1678
int last_constraint_index_
Definition: linear_solver.h:1729
friend class KnapsackInterface
Definition: linear_solver.h:1139
double BestBound() const
Returns the best objective bound.
double trivial_worst_objective_bound() const
void Clear()
Clears the offset, all variables and coefficients, and the optimization direction.
static OptimizationProblemType ParseSolverTypeOrDie(const std::string &solver_id)
Parses the name of the solver and returns the correct optimization type or dies.
friend class GLOPInterface
Definition: linear_solver.h:809
void SetDoubleParam(MPSolverParameters::DoubleParam param, double value)
Sets a double parameter to a specific value.
void SetStartingLpBasis(const std::vector< MPSolver::BasisStatus > &variable_statuses, const std::vector< MPSolver::BasisStatus > &constraint_statuses)
Advanced usage: Incrementality.
virtual MPSolver::BasisStatus column_status(int variable_index) const =0
virtual ~MPSolver()
void SetOptimizationDirection(bool maximize)
Sets the optimization direction (maximize: true or minimize: false).
virtual bool AddIndicatorConstraint(MPConstraint *const ct)
Definition: linear_solver.h:1580
int last_variable_index() const
Definition: linear_solver.h:1657
friend class CplexInterface
Definition: linear_solver.h:1275
@ GUROBI_LINEAR_PROGRAMMING
Definition: linear_solver.h:199
int64 iterations() const
Returns the number of simplex iterations.
@ CLP_LINEAR_PROGRAMMING
Definition: linear_solver.h:188
virtual void Write(const std::string &filename)
static void SolveWithProto(const MPModelRequest &model_request, MPSolutionResponse *response)
Solves the model encoded by a MPModelRequest protocol buffer and fills the solution encoded as a MPSo...
MPConstraint * MakeRowConstraint()
Creates a constraint with -infinity and +infinity bounds.
SynchronizationStatus sync_status_
Definition: linear_solver.h:1721
void InvalidateSolutionSynchronization()
MPVariable * MakeBoolVar(const std::string &name)
Creates a boolean variable.
void MakeNumVarArray(int nb, double lb, double ub, const std::string &name, std::vector< MPVariable * > *vars)
Creates an array of continuous variables.
virtual void SetVariableInteger(int index, bool integer)=0
friend class GLPKInterface
Definition: linear_solver.h:1129