C++ Reference
C++ Reference: Linear solver
linear_solver.h
virtual void ExtractObjective()=0
MPConstraint * LookupConstraintOrNull(const std::string &constraint_name) const
Looks up a constraint by name, and returns nullptr if it does not exist.
ResultStatus Solve()
Solves the problem using the default parameter values.
friend class GLOPInterface
Definition: linear_solver.h:1028
virtual void SetIntegerParamToUnsupportedValue(MPSolverParameters::IntegerParam param, int value)
MPConstraint * MakeRowConstraint(const LinearRange &range, const std::string &name)
As above, but also names the constraint.
void SetDoubleParamToUnsupportedValue(MPSolverParameters::DoubleParam param, double value)
friend class GurobiInterface
Definition: linear_solver.h:1133
static const int kDefaultIntegerParamValue
Definition: linear_solver.h:1431
LinearExpr models a quantity that is linear in the decision variables (MPVariable) of an optimization...
Definition: linear_expr.h:114
bool ExportModelAsLpFormat(bool obfuscate, std::string *model_str) const
Shortcuts to the homonymous MPModelProtoExporter methods, via exporting to a MPModelProto with Export...
@ CBC_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:198
void SetBounds(double lb, double ub)
Sets both the lower and upper bounds.
friend class SCIPInterface
Definition: linear_solver.h:1023
virtual void SetParameters(const MPSolverParameters ¶m)=0
double BestBound() const
Returns the best objective bound.
double Value() const
Returns the objective value of the best solution found so far.
void SetInteger(bool integer)
Sets the integrality requirement of the variable.
virtual MPSolver::BasisStatus column_status(int variable_index) const =0
MPSolver::BasisStatus basis_status() const
Advanced usage: returns the basis status of the constraint.
ABSL_MUST_USE_RESULT bool NextSolution()
Some solvers (MIP only, not LP) can produce multiple solutions to the problem.
friend class XpressInterface
Definition: linear_solver.h:1277
friend class CBCInterface
Definition: linear_solver.h:1270
@ GLOP_LINEAR_PROGRAMMING
Definition: linear_solver.h:192
bool SolverTypeIsMip(MPModelRequest::SolverType solver_type)
virtual void AddRowConstraint(MPConstraint *const ct)=0
virtual void SetObjectiveOffset(double value)=0
bool SupportsCallbacks() const
virtual void SetScalingMode(int value)=0
MPSolverInterface(MPSolver *const solver)
friend class GLPKInterface
Definition: linear_solver.h:802
@ XPRESS_LINEAR_PROGRAMMING
Definition: linear_solver.h:205
void set_dual_value(double dual_value)
Definition: linear_solver.h:1298
@ DUAL_TOLERANCE
Advanced usage: tolerance for dual feasibility of basic solutions.
Definition: linear_solver.h:1375
virtual OptimizationProblemType ProblemType() const
Returns the optimization problem type set at construction.
Definition: linear_solver.h:284
void set_solution_value(double value)
Definition: linear_solver.h:1156
bool integer() const
Returns the integrality requirement of the variable.
Definition: linear_solver.h:1061
void SetBounds(double lb, double ub)
Sets both the lower and upper bounds.
int index() const
Returns the index of the variable in the MPSolver::variables_.
Definition: linear_solver.h:1073
const absl::string_view ToString(MPSolver::OptimizationProblemType optimization_problem_type)
double GetCoefficient(const MPVariable *const var) const
Gets the coefficient of a given variable in the objective.
@ CPLEX_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:204
virtual void BranchingPriorityChangedForVariable(int var_index)
Definition: linear_solver.h:1607
MPSolverParameters()
The constructor sets all parameters to their default value.
bool ExportModelAsMpsFormat(bool fixed_format, bool obfuscate, std::string *model_str) const
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...
int last_constraint_index_
Definition: linear_solver.h:1724
This mathematical programming (MP) solver class is the main class though which users build and solve ...
Definition: linear_solver.h:179
MPConstraint * MakeRowConstraint(const LinearRange &range)
Creates a constraint owned by MPSolver enforcing: range.lower_bound() <= range.linear_expr() <= range...
friend class CBCInterface
Definition: linear_solver.h:1020
friend class XpressInterface
Definition: linear_solver.h:808
void Reset()
Advanced usage: resets extracted model to solve from scratch.
friend class KnapsackInterface
Definition: linear_solver.h:1031
virtual bool SetSolverSpecificParametersAsString(const std::string ¶meters)
virtual MPSolver::ResultStatus Solve(const MPSolverParameters ¶m)=0
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:1204
virtual bool AddIndicatorConstraint(MPConstraint *const ct)
Definition: linear_solver.h:1581
static void SetGurobiLibraryPath(const std::string &full_library_path)
std::string SolverVersion() const
Returns a string describing the underlying solver and its version.
@ MODEL_SYNCHRONIZED
Definition: linear_solver.h:1525
void AddLinearExpr(const LinearExpr &linear_expr)
Adds linear_expr to the current objective, does not change the direction.
void set_time_limit(int64 time_limit_milliseconds)
Definition: linear_solver.h:784
MPObjective * MutableObjective()
Returns the mutable objective object.
Definition: linear_solver.h:419
This file allows you to write natural code (like a mathematical equation) to model optimization probl...
virtual bool IsLP() const =0
friend class KnapsackInterface
Definition: linear_solver.h:1140
absl::Duration DurationSinceConstruction() const
Definition: linear_solver.h:694
bool InterruptSolve()
Interrupts the Solve() execution to terminate processing if possible.
double ComputeExactConditionNumber() const
Advanced usage: computes the exact condition number of the current scaled basis: L1norm(B) * L1norm(i...
Definition: linear_expr.h:84
MPConstraint * MakeRowConstraint(const std::string &name)
Creates a named constraint with -infinity and +infinity bounds.
friend class CBCInterface
Definition: linear_solver.h:1128
static const double kDefaultRelativeMipGap
Definition: linear_solver.h:1442
virtual void SetStartingLpBasis(const std::vector< MPSolver::BasisStatus > &variable_statuses, const std::vector< MPSolver::BasisStatus > &constraint_statuses)
Definition: linear_solver.h:1689
absl::Status ClampSolutionWithinBounds()
Resets values of out of bound variables to the corresponding bound and returns an error if any of the...
virtual void ClearObjective()=0
friend class GurobiInterface
Definition: linear_solver.h:806
friend class SCIPInterface
Definition: linear_solver.h:1131
MPConstraint * MakeRowConstraint(double lb, double ub, const std::string &name)
Creates a named constraint with given bounds.
static const int kUnknownIntegerParamValue
Definition: linear_solver.h:1435
bool maximization() const
Is the optimization direction set to maximize?
virtual bool NextSolution()
Definition: linear_solver.h:1698
void InvalidateSolutionSynchronization()
@ MODEL_INVALID
the model is trivially invalid (NaN coefficients, etc).
Definition: linear_solver.h:439
double unrounded_solution_value() const
Advanced usage: unrounded solution value.
const std::string & Name() const
Returns the name of the model set at construction.
Definition: linear_solver.h:279
@ GLPK_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:197
const std::vector< MPVariable * > & variables() const
Returns the array of variables handled by the MPSolver.
Definition: linear_solver.h:302
virtual bool SupportsCallbacks() const
Definition: linear_solver.h:1705
SynchronizationStatus
Definition: linear_solver.h:1518
virtual absl::optional< MPSolutionResponse > DirectlySolveProto(const MPModelRequest &request)
Definition: linear_solver.h:1551
double solution_value() const
Returns the value of the variable in the current solution.
int index() const
Returns the index of the constraint in the MPSolver::constraints_.
Definition: linear_solver.h:1245
friend class SLMInterface
Definition: linear_solver.h:1132
const MPVariable * indicator_variable() const
Definition: linear_solver.h:1241
static const double kUnknownDoubleParamValue
Definition: linear_solver.h:1434
void SetCoefficient(const MPVariable *const var, double coeff)
Sets the coefficient of the variable in the objective.
ABSL_DECLARE_FLAG(bool, linear_solver_enable_verbose_output)
MPVariable * MakeBoolVar(const std::string &name)
Creates a boolean variable.
This class stores parameter settings for LP and MIP solvers.
Definition: linear_solver.h:1360
The class for constraints of a Mathematical Programming (MP) model.
Definition: linear_solver.h:1177
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...
friend class GLPKInterface
Definition: linear_solver.h:1022
std::string AbslUnparseFlag(MPSolver::OptimizationProblemType solver_type)
Definition: linear_solver.h:919
void set_is_lazy(bool laziness)
Advanced usage: sets the constraint "laziness".
Definition: linear_solver.h:1239
bool constraint_is_extracted(int ct_index) const
Definition: linear_solver.h:1660
MPSolver::BasisStatus basis_status() const
Advanced usage: returns the basis status of the variable in the current solution (only available for ...
PresolveValues
For each categorical parameter, enumeration of possible values.
Definition: linear_solver.h:1391
virtual bool InterruptSolve()
Definition: linear_solver.h:1695
friend class KnapsackInterface
Definition: linear_solver.h:814
virtual void SetUnsupportedIntegerParam(MPSolverParameters::IntegerParam param)
MPConstraint * MakeRowConstraint(double lb, double ub)
Creates a linear constraint with given bounds.
virtual std::string ValidFileExtensionForParameterFile() const
virtual void SetLpAlgorithm(int value)=0
static bool LoadGurobiSharedLibrary()
MPConstraint * MakeRowConstraint()
Creates a constraint with -infinity and +infinity bounds.
double objective_value_
Definition: linear_solver.h:1729
int last_variable_index() const
Definition: linear_solver.h:1652
friend class SatInterface
Definition: linear_solver.h:1030
friend class GLPKInterface
Definition: linear_solver.h:1272
MPVariable * MakeNumVar(double lb, double ub, const std::string &name)
Creates a continuous variable.
bool OutputIsEnabled() const
Controls (or queries) the amount of output produced by the underlying solver.
int GetIntegerParam(MPSolverParameters::IntegerParam param) const
Returns the value of an integer parameter.
double objective_value() const
void MakeIntVarArray(int nb, double lb, double ub, const std::string &name, std::vector< MPVariable * > *vars)
Creates an array of integer variables.
friend class BopInterface
Definition: linear_solver.h:1029
virtual void SetPresolveMode(int value)=0
virtual void SetConstraintBounds(int index, double lb, double ub)=0
void SetOffset(double value)
Sets the constant term in the objective.
void ResetExtractionInformation()
@ INCREMENTALITY_ON
Reuse results from previous solve as much as the underlying solver allows.
Definition: linear_solver.h:1417
static constexpr int64 kUnknownNumberOfIterations
Definition: linear_solver.h:1533
MPSolverResponseStatus LoadModelFromProto(const MPModelProto &input_model, std::string *error_message)
Loads model from protocol buffer.
MPSolver *const solver_
Definition: linear_solver.h:1714
virtual bool IsContinuous() const =0
virtual bool IsMIP() const =0
const std::vector< MPConstraint * > & constraints() const
Returns the array of constraints handled by the MPSolver.
Definition: linear_solver.h:368
void SetUnsupportedDoubleParam(MPSolverParameters::DoubleParam param)
@ GLPK_LINEAR_PROGRAMMING
Definition: linear_solver.h:191
static bool SupportsProblemType(OptimizationProblemType problem_type)
Whether the given problem type is supported (this will depend on the targets that you linked).
ResultStatus Solve(const MPSolverParameters ¶m)
Solves the problem using the specified parameter values.
@ BOP_INTEGER_PROGRAMMING
Definition: linear_solver.h:210
friend class KnapsackInterface
Definition: linear_solver.h:1281
static constexpr int64 kUnknownNumberOfNodes
Definition: linear_solver.h:1536
MPVariable * MakeIntVar(double lb, double ub, const std::string &name)
Creates an integer variable.
bool SetSolverSpecificParametersAsString(const std::string ¶meters)
Advanced usage: pass solver specific parameters in text format.
int branching_priority() const
Advanced usage: Certain MIP solvers (e.g.
Definition: linear_solver.h:1122
bool AbslParseFlag(absl::string_view text, MPSolver::OptimizationProblemType *solver_type, std::string *error)
void set_reduced_cost(double reduced_cost)
Definition: linear_solver.h:1157
@ KNAPSACK_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:218
friend class CplexInterface
Definition: linear_solver.h:1276
virtual void SetVariableBounds(int index, double lb, double ub)=0
absl::Duration TimeLimit() const
Definition: linear_solver.h:688
@ SOLUTION_SYNCHRONIZED
Definition: linear_solver.h:1528
void ResetIntegerParam(MPSolverParameters::IntegerParam param)
Sets an integer parameter to its default value (default value defined in MPSolverParameters if it exi...
virtual void SetDualTolerance(double value)=0
void SetTimeLimit(absl::Duration time_limit)
Definition: linear_solver.h:689
void Reset()
Sets all parameters to their default value.
static const double kDefaultDoubleParamValue
Definition: linear_solver.h:1430
friend class CLPInterface
Definition: linear_solver.h:1021
bool minimization() const
Is the optimization direction set to minimize?
void Write(const std::string &file_name)
Writes the model using the solver internal write function.
virtual void SetCallback(MPCallback *mp_callback)
Definition: linear_solver.h:1701
virtual ~MPSolver()
BasisStatus
Advanced usage: possible basis status values for a variable and the slack variable of a linear constr...
Definition: linear_solver.h:642
friend class GurobiInterface
Definition: linear_solver.h:1275
bool CheckSolutionIsSynchronizedAndExists() const
Definition: linear_solver.h:1634
static const double kDefaultPrimalTolerance
Definition: linear_solver.h:1443
virtual ~MPSolverInterface()
void Clear()
Clears the offset, all variables and coefficients, and the optimization direction.
friend class CplexInterface
Definition: linear_solver.h:1026
void SetDoubleParam(MPSolverParameters::DoubleParam param, double value)
Sets a double parameter to a specific value.
virtual void Reset()=0
friend class GLOPInterface
Definition: linear_solver.h:1136
friend class GLOPInterface
Definition: linear_solver.h:811
MPVariable * MakeVar(double lb, double ub, bool integer, const std::string &name)
Creates a variable with the given bounds, integrality requirement and name.
void MinimizeLinearExpr(const LinearExpr &linear_expr)
Resets the current objective to minimize linear_expr.
Definition: linear_solver.h:974
@ SCIP_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:196
MPSolver(const std::string &name, OptimizationProblemType problem_type)
Create a solver with the given name and underlying solver backend.
virtual void SetOptimizationDirection(bool maximize)=0
virtual void SetObjectiveCoefficient(const MPVariable *const variable, double coefficient)=0
friend class SCIPInterface
Definition: linear_solver.h:1273
int64 iterations() const
Returns the number of simplex iterations.
friend class GLOPInterface
Definition: linear_solver.h:1278
SynchronizationStatus sync_status_
Definition: linear_solver.h:1716
MPVariable * LookupVariableOrNull(const std::string &var_name) const
Looks up a variable by name, and returns nullptr if it does not exist.
friend class MPVariableSolutionValueTest
Definition: linear_solver.h:1137
void SetCallback(MPCallback *mp_callback)
MPConstraint(int index, double lb, double ub, const std::string &name, MPSolverInterface *const interface_in)
Definition: linear_solver.h:1286
void MakeNumVarArray(int nb, double lb, double ub, const std::string &name, std::vector< MPVariable * > *vars)
Creates an array of continuous variables.
static OptimizationProblemType ParseSolverTypeOrDie(const std::string &solver_id)
Parses the name of the solver and returns the correct optimization type or dies.
friend class BopInterface
Definition: linear_solver.h:1279
absl::Status SetNumThreads(int num_threads)
Sets the number of threads to use by the underlying solver.
std::ostream & operator<<(std::ostream &stream, const LinearExpr &linear_expr)
friend class XpressInterface
Definition: linear_solver.h:1027
static const IncrementalityValues kDefaultIncrementality
Definition: linear_solver.h:1446
virtual void SetRelativeMipGap(double value)=0
@ GUROBI_LINEAR_PROGRAMMING
Definition: linear_solver.h:201
virtual bool CheckSolutionExists() const
virtual std::string SolverVersion() const =0
double time_limit_in_secs() const
Definition: linear_solver.h:789
@ PRIMAL_TOLERANCE
Advanced usage: tolerance for primal feasibility of basic solutions.
Definition: linear_solver.h:1373
bool variable_is_extracted(int var_index) const
Definition: linear_solver.h:1654
void SetStartingLpBasis(const std::vector< MPSolver::BasisStatus > &variable_statuses, const std::vector< MPSolver::BasisStatus > &constraint_statuses)
Advanced usage: Incrementality.
std::string GetSolverSpecificParametersAsString() const
Definition: linear_solver.h:619
virtual bool ReadParameterFile(const std::string &filename)
virtual double ComputeExactConditionNumber() const
bool VerifySolution(double tolerance, bool log_errors) const
Advanced usage: Verifies the correctness of the solution.
MPSolver::ResultStatus result_status() const
Definition: linear_solver.h:1673
static bool ParseSolverType(absl::string_view solver_id, OptimizationProblemType *type)
Parses the name of the solver.
void ExtractModel()
void set_quiet(bool quiet_value)
Definition: linear_solver.h:1670
virtual void SetVariableInteger(int index, bool integer)=0
void SetMIPParameters(const MPSolverParameters ¶m)
double GetDoubleParam(MPSolverParameters::DoubleParam param) const
Returns the value of a double parameter.
friend class CLPInterface
Definition: linear_solver.h:1271
static const double kDefaultDualTolerance
Definition: linear_solver.h:1444
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...
@ SAT_INTEGER_PROGRAMMING
Definition: linear_solver.h:215
friend class SatInterface
Definition: linear_solver.h:1280
int64 nodes() const
Returns the number of branch-and-bound nodes evaluated during the solve.
virtual MPSolver::BasisStatus row_status(int constraint_index) const =0
virtual void ExtractNewConstraints()=0
void set_variable_as_extracted(int var_index, bool extracted)
Definition: linear_solver.h:1657
bool IsMIP() const
MPVariable(int index, double lb, double ub, bool integer, const std::string &name, MPSolverInterface *const interface_in)
Definition: linear_solver.h:1145
IntegerParam
Enumeration of parameters that take integer or categorical values.
Definition: linear_solver.h:1379
virtual absl::Status SetNumThreads(int num_threads)
bool is_lazy() const
Advanced usage: returns true if the constraint is "lazy" (see below).
Definition: linear_solver.h:1224
@ CPLEX_LINEAR_PROGRAMMING
Definition: linear_solver.h:203
void MakeVarArray(int nb, double lb, double ub, bool integer, const std::string &name_prefix, std::vector< MPVariable * > *vars)
Creates an array of variables.
friend class BopInterface
Definition: linear_solver.h:1138
friend class XpressInterface
Definition: linear_solver.h:1135
virtual void Write(const std::string &filename)
void ResetDoubleParam(MPSolverParameters::DoubleParam param)
Sets a double parameter to its default value (default value defined in MPSolverParameters if it exist...
virtual void * underlying_solver()=0
virtual void ExtractNewVariables()=0
bool indicator_value() const
Definition: linear_solver.h:1242
int last_variable_index_
Definition: linear_solver.h:1726
virtual int64 iterations() const =0
friend class SLMInterface
Definition: linear_solver.h:1024
void MaximizeLinearExpr(const LinearExpr &linear_expr)
Resets the current objective to maximize linear_expr.
Definition: linear_solver.h:970
bool MPSolverResponseStatusIsRpcError(MPSolverResponseStatus status)
static MPSolver * CreateSolver(const std::string &solver_id)
Recommended factory method to create a MPSolver instance, especially in non C++ languages.
@ CLP_LINEAR_PROGRAMMING
Definition: linear_solver.h:190
friend class SatInterface
Definition: linear_solver.h:1139
@ INCREMENTALITY
Advanced usage: incrementality from one solve to the next.
Definition: linear_solver.h:1385
friend class GLPKInterface
Definition: linear_solver.h:1130
double best_objective_bound() const
virtual void SetPrimalTolerance(double value)=0
The class for variables of a Mathematical Programming (MP) model.
Definition: linear_solver.h:1052
void FillSolutionResponseProto(MPSolutionResponse *response) const
Encodes the current solution in a solution response protocol buffer.
OptimizationProblemType
The type of problems (LP or MIP) that will be solved and the underlying solver (GLOP,...
Definition: linear_solver.h:187
virtual int64 nodes() const =0
void ExportModelToProto(MPModelProto *output_model) const
Exports model to protocol buffer.
friend class CLPInterface
Definition: linear_solver.h:1129
virtual void AddVariable(MPVariable *const var)=0
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...
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:953
virtual void ClearConstraint(MPConstraint *const constraint)=0
void SetCommonParameters(const MPSolverParameters ¶m)
void SetCoefficient(const MPVariable *const var, double coeff)
Sets the coefficient of the variable on the constraint.
double dual_value() const
Advanced usage: returns the dual value of the constraint in the current solution (only available for ...
void SetOptimizationDirection(bool maximize)
Sets the optimization direction (maximize: true or minimize: false).
static const PresolveValues kDefaultPresolve
Definition: linear_solver.h:1445
virtual void SetCoefficient(MPConstraint *const constraint, const MPVariable *const variable, double new_value, double old_value)=0
friend class SLMInterface
Definition: linear_solver.h:1274
void MakeBoolVarArray(int nb, const std::string &name, std::vector< MPVariable * > *vars)
Creates an array of boolean variables.
constexpr double kDefaultPrimalTolerance
Definition: linear_solver.h:164
MPSolverResponseStatus LoadModelFromProtoWithUniqueNamesOrDie(const MPModelProto &input_model, std::string *error_message)
Loads model from protocol buffer.
void Clear()
Clears all variables and coefficients. Does not clear the bounds.
friend class GurobiInterface
Definition: linear_solver.h:1025
void Clear()
Clears the objective (including the optimization direction), all variables and constraints.
void SetHint(std::vector< std::pair< const MPVariable *, double > > hint)
Sets a hint for solution.
void SetIntegerParam(MPSolverParameters::IntegerParam param, int value)
Sets a integer parameter to a specific value.
static const int kDummyVariableIndex
Definition: linear_solver.h:1739
void * underlying_solver()
Advanced usage: returns the underlying solver.
bool OwnsVariable(const MPVariable *var) const
bool CheckSolutionIsSynchronized() const
std::vector< double > ComputeConstraintActivities() const
Advanced usage: compute the "activities" of all constraints, which are the sums of their linear terms...
A class to express a linear objective.
Definition: linear_solver.h:925
void SetBranchingPriority(int priority)
MPSolver::ResultStatus result_status_
Definition: linear_solver.h:1719
void set_constraint_as_extracted(int ct_index, bool extracted)
Definition: linear_solver.h:1663
int GetNumThreads() const
Returns the number of threads to be used during solve.
Definition: linear_solver.h:610
@ XPRESS_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:206
@ GUROBI_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:202
double reduced_cost() const
Advanced usage: returns the reduced cost of the variable in the current solution (only available for ...
friend class CplexInterface
Definition: linear_solver.h:807
friend class SCIPInterface
Definition: linear_solver.h:805
double best_objective_bound_
Definition: linear_solver.h:1732
friend class CplexInterface
Definition: linear_solver.h:1134