Google OR-Tools: ortools/linear_solver/linear_solver.h Source File
134#ifndef ORTOOLS_LINEAR_SOLVER_LINEAR_SOLVER_H_
135#define ORTOOLS_LINEAR_SOLVER_LINEAR_SOLVER_H_
149#include "absl/base/attributes.h"
150#include "absl/base/port.h"
151#include "absl/base/thread_annotations.h"
152#include "absl/container/flat_hash_map.h"
153#include "absl/flags/declare.h"
154#include "absl/log/check.h"
156#include "absl/status/status.h"
157#include "absl/strings/str_format.h"
158#include "absl/strings/string_view.h"
159#include "absl/time/clock.h"
160#include "absl/time/time.h"
305 const std::string& solver_id);
307 bool IsMIP() const;
310 const std::string& Name() const {
327 int NumVariables() const { return variables_.size(); }
333 const std::vector<MPVariable*>& variables() const { return variables_; }
380 void MakeVarArray(int nb, double lb, double ub, bool integer,
381 const std::string& name_prefix,
382 std::vector<MPVariable*>* vars);
385 void MakeNumVarArray(int nb, double lb, double ub, const std::string& name,
386 std::vector<MPVariable*>* vars);
389 void MakeIntVarArray(int nb, double lb, double ub, const std::string& name,
390 std::vector<MPVariable*>* vars);
394 std::vector<MPVariable*>* vars);
397 int NumConstraints() const { return constraints_.size(); }
404 const std::vector<MPConstraint*>& constraints() const { return constraints_; }
417 const std::string& constraint_name) const;
493 void Write(const std::string& file_name);
521 bool VerifySolution(double tolerance, bool log_errors) const;
554 std::string* error_message,
564 const MPModelProto& input_model, std::string* error_message);
587 ABSL_DEPRECATED("Prefer SolveMPModel() from solve_mp_model.h.")
590 std::atomic<bool>* interrupt = nullptr);
601 ABSL_DEPRECATED("Prefer SolveMPModel() from solve_mp_model.h.")
604 std::atomic<bool>* interrupt = nullptr);
607 "Prefer SolverTypeSupportsInterruption() from solve_mp_model.h.")
658 double tolerance = std::numeric_limits<double>::infinity());
674 std::string* model_str) const;
689 int GetNumThreads() const { return num_threads_; }
699 return solver_specific_parameter_string_;
717 void SetHint(std::vector<std::pair<const MPVariable*, double> > hint);
721 ABSL_DEPRECATED("Prefer MPModelRequestLoggingInfo() from solve_mp_model.h.")
749 const std::vector<MPSolver::BasisStatus>& variable_statuses,
750 const std::vector<MPSolver::BasisStatus>& constraint_statuses);
757 static double infinity() { return std::numeric_limits<double>::infinity(); }
776 absl::Duration TimeLimit() const { return time_limit_; }
783 return absl::Now() - construction_time_;
794 int64_t nodes() const;
873 return time_limit_ == absl::InfiniteDuration()
875 : absl::ToInt64Milliseconds(time_limit_);
877 void set_time_limit(int64_t time_limit_milliseconds) {
879 ? absl::InfiniteDuration()
880 : absl::Milliseconds(time_limit_milliseconds));
883 return static_cast<double>(time_limit()) / 1000.0;
914 int ComputeMaxConstraintSize(int min_constraint_index,
915 int max_constraint_index) const;
918 bool HasInfeasibleConstraints() const;
921 bool HasIntegerVariables() const;
924 void GenerateVariableNameIndex() const;
927 void GenerateConstraintNameIndex() const;
936 std::unique_ptr<MPSolverInterface> interface_;
939 std::vector<MPVariable*> variables_;
941 mutable std::optional<absl::flat_hash_map<std::string, int> >
944 std::vector<bool> variable_is_extracted_;
947 std::vector<MPConstraint*> constraints_;
949 mutable std::optional<absl::flat_hash_map<std::string, int> >
950 constraint_name_to_index_;
952 std::vector<bool> constraint_is_extracted_;
955 std::unique_ptr<MPObjective> objective_;
964 std::vector<std::pair<const MPVariable*, double> > solution_hint_;
966 absl::Duration time_limit_ = absl::InfiniteDuration();
968 const absl::Time construction_time_;
974 std::string solver_specific_parameter_string_;
976 static absl::Mutex global_count_mutex_;
978 static int64_t global_num_variables_ ABSL_GUARDED_BY(global_count_mutex_);
979 static int64_t global_num_constraints_ ABSL_GUARDED_BY(global_count_mutex_);
982 enum ModelProtoNamesPolicy {
984 INVALID_MODEL_ON_DUPLICATE_NONEMPTY_NAMES = 1,
985 DIE_ON_DUPLICATE_NONEMPTY_NAMES = 2,
988 const MPModelProto& input_model, ModelProtoNamesPolicy name_policy,
1002 return os << ToString(optimization_problem_type);
1005inline std::ostream& operator<<(std::ostream& os,
1055 const absl::flat_hash_map<const MPVariable*, double>& terms() const {
1063 double offset() const { return offset_; }
1109 double Value() const;
1143 : interface_(interface_in), coefficients_(1), offset_(0.0) {}
1148 absl::flat_hash_map<const MPVariable*, double> coefficients_;
1163 const std::string& name() const { return name_; }
1169 bool integer() const { return integer_; }
1181 int index() const { return index_; }
1184 double lb() const { return lb_; }
1187 double ub() const { return ub_; }
1258 lb_(lb),
1259 ub_(ub),
1261 name_(name.empty() ? absl::StrFormat("auto_v_%09d", index) : name),
1295 const std::string& name() const { return name_; }
1319 const absl::flat_hash_map<const MPVariable*, double>& terms() const {
1324 double lb() const { return lb_; }
1327 double ub() const { return ub_; }
1339 bool is_lazy() const { return is_lazy_; }
1354 void set_is_lazy(bool laziness) { is_lazy_ = laziness; }
1357 bool indicator_value() const { return indicator_value_; }
1360 int index() const { return index_; }
1405 : coefficients_(1),
1407 lb_(lb),
1408 ub_(ub),
1409 name_(name.empty() ? absl::StrFormat("auto_c_%09d", index) : name),
1411 indicator_variable_(nullptr),
1420 bool ContainsNewVariables();
1423 absl::flat_hash_map<const MPVariable*, double> coefficients_;
1443 const MPVariable* indicator_variable_;
1610 double relative_mip_gap_value_;
1611 double primal_tolerance_value_;
1612 double dual_tolerance_value_;
1616 int incrementality_value_;
1679 std::atomic<bool>* ) const {
1680 return false;
1693 virtual void Write(const std::string& filename);
1697 virtual void Reset() = 0;
1703 virtual void SetVariableBounds(int index, double lb, double ub) = 0;
1717 LOG(ERROR) << "Solver doesn't support indicator constraints.";
1726 const MPVariable* variable, double new_value,
1727 double old_value) = 0;
1746 virtual int64_t iterations() const = 0;
1749 virtual int64_t nodes() const = 0;
1782 virtual bool IsLP() const = 0;
1790 return solver_->variable_is_extracted_[var_index];
1793 solver_->variable_is_extracted_[var_index] = extracted;
1796 return solver_->constraint_is_extracted_[ct_index];
1799 solver_->constraint_is_extracted_[ct_index] = extracted;
1825 const std::vector<MPSolver::BasisStatus>& ,
1826 const std::vector<MPSolver::BasisStatus>& ) {
1827 LOG(FATAL) << "Not supported by this solver.";
1830 virtual double infinity() { return std::numeric_limits<double>::infinity(); }
1835 virtual bool NextSolution() { return false; }
1839 LOG(FATAL) << "Callbacks not supported for this solver.";
1916 virtual absl::Status SetNumThreads(int num_threads);
1961 static MPSolverInterfaceFactoryRepository* GetInstance();
1968 std::function<bool()> is_runtime_ready = {});
1997 mutable absl::Mutex mutex_;
2000 std::function<bool()> is_runtime_ready;
2002 std::map<MPSolver::OptimizationProblemType, Entry> map_;
Definition linear_solver.h:1288
bool is_lazy() const
Advanced usage: returns true if the constraint is "lazy" (see below).
Definition linear_solver.h:1341
friend class SCIPInterface
Definition linear_solver.h:1390
void set_dual_value(double dual_value)
Definition linear_solver.h:1417
void Clear()
Clears all variables and coefficients. Does not clear the bounds.
void SetCoefficient(const MPVariable *var, double coeff)
friend class SLMInterface
Definition linear_solver.h:1391
friend class CLPInterface
Definition linear_solver.h:1388
const absl::flat_hash_map< const MPVariable *, double > & terms() const
Definition linear_solver.h:1321
friend class GLOPInterface
Definition linear_solver.h:1395
friend class BopInterface
Definition linear_solver.h:1396
MPSolver::BasisStatus basis_status() const
MPConstraint(const MPConstraint &)=delete
friend class PdlpInterface
Definition linear_solver.h:1398
const MPVariable * indicator_variable() const
Definition linear_solver.h:1358
void set_is_lazy(bool laziness)
Definition linear_solver.h:1356
MPConstraint & operator=(const MPConstraint &)=delete
double GetCoefficient(const MPVariable *var) const
friend class XpressInterface
Definition linear_solver.h:1394
int index() const
Returns the index of the constraint in the MPSolver::constraints_.
Definition linear_solver.h:1362
void SetBounds(double lb, double ub)
Sets both the lower and upper bounds.
friend class MPSolverInterface
Definition linear_solver.h:1386
friend class GurobiInterface
Definition linear_solver.h:1392
friend class MPSolver
Definition linear_solver.h:1385
friend class SatInterface
Definition linear_solver.h:1397
bool indicator_value() const
Definition linear_solver.h:1359
double dual_value() const
friend class GLPKInterface
Definition linear_solver.h:1389
friend class CplexInterface
Definition linear_solver.h:1393
friend class HighsInterface
Definition linear_solver.h:1399
friend class KnapsackInterface
Definition linear_solver.h:1400
friend class CBCInterface
Definition linear_solver.h:1387
MPModelRequest_SolverType SolverType
static constexpr SolverType SAT_INTEGER_PROGRAMMING
static constexpr SolverType GUROBI_MIXED_INTEGER_PROGRAMMING
static constexpr SolverType PDLP_LINEAR_PROGRAMMING
static constexpr SolverType GUROBI_LINEAR_PROGRAMMING
static constexpr SolverType GLOP_LINEAR_PROGRAMMING
A class to express a linear objective.
Definition linear_solver.h:1023
void MinimizeLinearExpr(const LinearExpr &linear_expr)
Resets the current objective to minimize linear_expr.
Definition linear_solver.h:1078
void SetCoefficient(const MPVariable *var, double coeff)
double GetCoefficient(const MPVariable *var) const
friend class SCIPInterface
Definition linear_solver.h:1127
void SetOffset(double value)
Sets the constant term in the objective.
MPObjective(const MPObjective &)=delete
const absl::flat_hash_map< const MPVariable *, double > & terms() const
Definition linear_solver.h:1057
friend class SLMInterface
Definition linear_solver.h:1128
friend class CLPInterface
Definition linear_solver.h:1125
void MaximizeLinearExpr(const LinearExpr &linear_expr)
Resets the current objective to maximize linear_expr.
Definition linear_solver.h:1074
friend class GLOPInterface
Definition linear_solver.h:1132
bool minimization() const
Is the optimization direction set to minimize?
friend class BopInterface
Definition linear_solver.h:1133
bool maximization() const
Is the optimization direction set to maximize?
friend class PdlpInterface
Definition linear_solver.h:1135
void AddLinearExpr(const LinearExpr &linear_expr)
Adds linear_expr to the current objective, does not change the direction.
void OptimizeLinearExpr(const LinearExpr &linear_expr, bool is_maximization)
friend class XpressInterface
Definition linear_solver.h:1131
friend class MPSolverInterface
Definition linear_solver.h:1123
friend class GurobiInterface
Definition linear_solver.h:1129
friend class MPSolver
Definition linear_solver.h:1122
friend class SatInterface
Definition linear_solver.h:1134
void SetOptimizationDirection(bool maximize)
Sets the optimization direction (maximize: true or minimize: false).
friend class GLPKInterface
Definition linear_solver.h:1126
friend class CplexInterface
Definition linear_solver.h:1130
friend class HighsInterface
Definition linear_solver.h:1136
MPObjective & operator=(const MPObjective &)=delete
friend class KnapsackInterface
Definition linear_solver.h:1137
friend class CBCInterface
Definition linear_solver.h:1124
Definition linear_solver.h:1961
std::string PrettyPrintAllRegisteredProblemTypes() const
MPSolverInterface * Create(MPSolver *solver) const
std::vector< MPSolver::OptimizationProblemType > ListAllRegisteredProblemTypes() const
static MPSolverInterfaceFactoryRepository * GetInstance()
bool Unregister(MPSolver::OptimizationProblemType problem_type)
bool Supports(MPSolver::OptimizationProblemType problem_type) const
void Register(MPSolverInterfaceFactory factory, MPSolver::OptimizationProblemType problem_type, std::function< bool()> is_runtime_ready={})
Definition linear_solver.h:1642
void set_variable_as_extracted(int var_index, bool extracted)
Definition linear_solver.h:1794
virtual void AddVariable(MPVariable *var)=0
MPSolver::ResultStatus result_status() const
Definition linear_solver.h:1810
double best_objective_bound() const
virtual void SetCallback(MPCallback *)
Definition linear_solver.h:1840
bool CheckSolutionIsSynchronized() const
virtual void SetPrimalTolerance(double value)=0
virtual void ExtractNewConstraints()=0
virtual bool SupportsCallbacks() const
Definition linear_solver.h:1844
virtual void ClearObjective()=0
static constexpr int64_t kUnknownNumberOfIterations
Definition linear_solver.h:1659
virtual void ExtractObjective()=0
friend class MPConstraint
Definition linear_solver.h:1849
void InvalidateSolutionSynchronization()
virtual void SetRelativeMipGap(double value)=0
virtual void SetObjectiveCoefficient(const MPVariable *variable, double coefficient)=0
virtual void SetStartingLpBasis(const std::vector< MPSolver::BasisStatus > &, const std::vector< MPSolver::BasisStatus > &)
Definition linear_solver.h:1826
void set_constraint_as_extracted(int ct_index, bool extracted)
Definition linear_solver.h:1800
virtual bool IsMIP() const =0
virtual int64_t nodes() const =0
void ResetExtractionInformation()
int last_variable_index_
Definition linear_solver.h:1865
virtual void SetIntegerParamToUnsupportedValue(MPSolverParameters::IntegerParam param, int value)
int last_variable_index() const
Definition linear_solver.h:1789
virtual void SetPresolveMode(int value)=0
int last_constraint_index_
Definition linear_solver.h:1863
virtual MPSolver::BasisStatus column_status(int variable_index) const =0
virtual void SetCoefficient(MPConstraint *constraint, const MPVariable *variable, double new_value, double old_value)=0
virtual std::string SolverVersion() const =0
virtual void SetVariableInteger(int index, bool integer)=0
virtual absl::Status SetNumThreads(int num_threads)
virtual int64_t iterations() const =0
virtual bool InterruptSolve()
Definition linear_solver.h:1834
virtual void BranchingPriorityChangedForVariable(int)
Definition linear_solver.h:1744
virtual bool SetSolverSpecificParametersAsString(const std::string ¶meters)
static const int kDummyVariableIndex
Definition linear_solver.h:1878
virtual void SetObjectiveOffset(double value)=0
virtual void SetParameters(const MPSolverParameters ¶m)=0
virtual bool CheckSolutionExists() const
virtual bool IsContinuous() const =0
friend class MPObjective
Definition linear_solver.h:1850
virtual void SetLpAlgorithm(int value)=0
virtual void SetUnsupportedIntegerParam(MPSolverParameters::IntegerParam param)
virtual bool NextSolution()
Definition linear_solver.h:1837
bool variable_is_extracted(int var_index) const
Definition linear_solver.h:1791
virtual bool IsLP() const =0
void SetUnsupportedDoubleParam(MPSolverParameters::DoubleParam param)
bool quiet() const
Definition linear_solver.h:1805
virtual void * underlying_solver()=0
virtual bool SupportsDirectlySolveProto(std::atomic< bool > *) const
Definition linear_solver.h:1680
bool constraint_is_extracted(int ct_index) const
Definition linear_solver.h:1797
SynchronizationStatus
Definition linear_solver.h:1644
@ SOLUTION_SYNCHRONIZED
Definition linear_solver.h:1654
@ MUST_RELOAD
Definition linear_solver.h:1647
@ MODEL_SYNCHRONIZED
Definition linear_solver.h:1651
static constexpr int64_t kUnknownNumberOfNodes
Definition linear_solver.h:1662
virtual void ExtractNewVariables()=0
virtual MPSolver::ResultStatus Solve(const MPSolverParameters ¶m)=0
double objective_value() const
double objective_value_
Definition linear_solver.h:1868
double best_objective_bound_
Definition linear_solver.h:1871
void SetDoubleParamToUnsupportedValue(MPSolverParameters::DoubleParam param, double value)
virtual void SetScalingMode(int value)=0
bool maximize_
Definition linear_solver.h:1860
virtual double ComputeExactConditionNumber() const
virtual MPSolver::BasisStatus row_status(int constraint_index) const =0
virtual void AddRowConstraint(MPConstraint *ct)=0
virtual MPSolutionResponse DirectlySolveProto(LazyMutableCopy< MPModelRequest >, std::atomic< bool > *)
Definition linear_solver.h:1684
virtual void Write(const std::string &filename)
void SetMIPParameters(const MPSolverParameters ¶m)
virtual ~MPSolverInterface()
virtual void SetDualTolerance(double value)=0
MPSolverInterface(MPSolver *solver)
virtual bool AddIndicatorConstraint(MPConstraint *const)
Definition linear_solver.h:1718
friend class MPSolver
Definition linear_solver.h:1846
virtual void SetOptimizationDirection(bool maximize)=0
virtual double infinity()
Definition linear_solver.h:1832
bool quiet_
Definition linear_solver.h:1874
void SetCommonParameters(const MPSolverParameters ¶m)
virtual void ClearConstraint(MPConstraint *constraint)=0
bool CheckSolutionIsSynchronizedAndExists() const
Definition linear_solver.h:1771
void set_quiet(bool quiet_value)
Definition linear_solver.h:1807
MPSolver::ResultStatus result_status_
Definition linear_solver.h:1858
MPSolver *const solver_
Definition linear_solver.h:1853
virtual void SetConstraintBounds(int index, double lb, double ub)=0
SynchronizationStatus sync_status_
Definition linear_solver.h:1855
virtual void SetVariableBounds(int index, double lb, double ub)=0
Definition linear_solver.h:1482
static const PresolveValues kDefaultPresolve
Definition linear_solver.h:1567
void ResetIntegerParam(MPSolverParameters::IntegerParam param)
static const double kDefaultDualTolerance
Definition linear_solver.h:1566
MPSolverParameters & operator=(const MPSolverParameters &)=delete
static const double kDefaultPrimalTolerance
Definition linear_solver.h:1565
@ DUAL_TOLERANCE
Advanced usage: tolerance for dual feasibility of basic solutions.
Definition linear_solver.h:1497
@ PRIMAL_TOLERANCE
Definition linear_solver.h:1495
double GetDoubleParam(MPSolverParameters::DoubleParam param) const
Returns the value of a double parameter.
PresolveValues
For each categorical parameter, enumeration of possible values.
Definition linear_solver.h:1513
static const double kUnknownDoubleParamValue
Definition linear_solver.h:1556
static const int kUnknownIntegerParamValue
Definition linear_solver.h:1557
void ResetDoubleParam(MPSolverParameters::DoubleParam param)
static const int kDefaultIntegerParamValue
Definition linear_solver.h:1553
void SetDoubleParam(MPSolverParameters::DoubleParam param, double value)
Sets a double parameter to a specific value.
IntegerParam
Enumeration of parameters that take integer or categorical values.
Definition linear_solver.h:1501
@ INCREMENTALITY
Advanced usage: incrementality from one solve to the next.
Definition linear_solver.h:1507
MPSolverParameters()
The constructor sets all parameters to their default value.
static const IncrementalityValues kDefaultIncrementality
Definition linear_solver.h:1568
@ INCREMENTALITY_ON
Definition linear_solver.h:1539
static const double kDefaultRelativeMipGap
Definition linear_solver.h:1564
void Reset()
Sets all parameters to their default value.
int GetIntegerParam(MPSolverParameters::IntegerParam param) const
Returns the value of an integer parameter.
static const double kDefaultDoubleParamValue
Definition linear_solver.h:1552
void SetIntegerParam(MPSolverParameters::IntegerParam param, int value)
Sets a integer parameter to a specific value.
Definition linear_solver.h:192
int64_t time_limit() const
Definition linear_solver.h:874
static void SolveLazyMutableRequest(LazyMutableCopy< MPModelRequest > request, MPSolutionResponse *response, std::atomic< bool > *interrupt=nullptr)
double time_limit_in_secs() const
Definition linear_solver.h:884
int64_t iterations() const
Returns the number of simplex iterations.
static MPSolver * CreateSolver(const std::string &solver_id)
void SetStartingLpBasis(const std::vector< MPSolver::BasisStatus > &variable_statuses, const std::vector< MPSolver::BasisStatus > &constraint_statuses)
MPVariable * MakeVar(double lb, double ub, bool integer, const std::string &name)
const std::vector< MPVariable * > & variables() const
Definition linear_solver.h:335
MPVariable * MakeIntVar(double lb, double ub, const std::string &name)
Creates an integer variable.
ResultStatus
Definition linear_solver.h:468
@ MODEL_INVALID
the model is trivially invalid (NaN coefficients, etc).
Definition linear_solver.h:480
ABSL_DEPRECATED("Prefer SolverTypeSupportsInterruption() from solve_mp_model.h.") static bool SolverTypeSupportsInterruption(const MPModelRequest
Definition linear_solver.h:608
ResultStatus Solve()
Solves the problem using the default parameter values.
MPSolverResponseStatus LoadModelFromProto(const MPModelProto &input_model, std::string *error_message, bool clear_names=true)
friend class SCIPInterface
Definition linear_solver.h:896
bool VerifySolution(double tolerance, bool log_errors) const
void MakeVarArray(int nb, double lb, double ub, bool integer, const std::string &name_prefix, std::vector< MPVariable * > *vars)
bool ExportModelAsLpFormat(bool obfuscate, std::string *model_str) const
const MPObjective & Objective() const
Definition linear_solver.h:457
void SetCallback(MPCallback *mp_callback)
OptimizationProblemType
Definition linear_solver.h:200
@ GLPK_MIXED_INTEGER_PROGRAMMING
Definition linear_solver.h:218
@ GLOP_LINEAR_PROGRAMMING
Definition linear_solver.h:206
@ SCIP_MIXED_INTEGER_PROGRAMMING
Definition linear_solver.h:217
@ CPLEX_LINEAR_PROGRAMMING
Definition linear_solver.h:239
@ SAT_INTEGER_PROGRAMMING
Definition linear_solver.h:231
@ XPRESS_MIXED_INTEGER_PROGRAMMING
Definition linear_solver.h:242
@ CBC_MIXED_INTEGER_PROGRAMMING
Definition linear_solver.h:219
@ HIGHS_MIXED_INTEGER_PROGRAMMING
Definition linear_solver.h:220
@ GUROBI_MIXED_INTEGER_PROGRAMMING
Definition linear_solver.h:238
@ COPT_LINEAR_PROGRAMMING
Definition linear_solver.h:243
@ CLP_LINEAR_PROGRAMMING
Definition linear_solver.h:204
@ XPRESS_LINEAR_PROGRAMMING
Definition linear_solver.h:241
@ PDLP_LINEAR_PROGRAMMING
Definition linear_solver.h:210
@ COPT_MIXED_INTEGER_PROGRAMMING
Definition linear_solver.h:244
@ HIGHS_LINEAR_PROGRAMMING
Definition linear_solver.h:211
@ BOP_INTEGER_PROGRAMMING
Definition linear_solver.h:224
@ GLPK_LINEAR_PROGRAMMING
Definition linear_solver.h:205
@ CPLEX_MIXED_INTEGER_PROGRAMMING
Definition linear_solver.h:240
@ KNAPSACK_MIXED_INTEGER_PROGRAMMING
Definition linear_solver.h:234
@ GUROBI_LINEAR_PROGRAMMING
Definition linear_solver.h:237
void SetTimeLimit(absl::Duration time_limit)
Definition linear_solver.h:779
MPSolverResponseStatus LoadModelFromProtoWithUniqueNamesOrDie(const MPModelProto &input_model, std::string *error_message)
bool SetSolverSpecificParametersAsString(const std::string ¶meters)
MPVariable * MakeBoolVar(const std::string &name)
Creates a boolean variable.
virtual OptimizationProblemType ProblemType() const
Returns the optimization problem type set at construction.
Definition linear_solver.h:317
ABSL_MUST_USE_RESULT bool NextSolution()
static bool SupportsProblemType(OptimizationProblemType problem_type)
static double infinity()
Definition linear_solver.h:759
friend class SLMInterface
Definition linear_solver.h:900
void MakeIntVarArray(int nb, double lb, double ub, const std::string &name, std::vector< MPVariable * > *vars)
Creates an array of integer variables.
double ComputeExactConditionNumber() const
std::string GetSolverSpecificParametersAsString() const
Definition linear_solver.h:700
absl::Duration DurationSinceConstruction() const
Definition linear_solver.h:784
friend class GLOPInterface
Definition linear_solver.h:902
absl::Status SetNumThreads(int num_threads)
MPVariable * variable(int index) const
Definition linear_solver.h:340
friend class BopInterface
Definition linear_solver.h:903
absl::Status ClampSolutionWithinBounds()
bool OwnsVariable(const MPVariable *var) const
void MakeNumVarArray(int nb, double lb, double ub, const std::string &name, std::vector< MPVariable * > *vars)
Creates an array of continuous variables.
BasisStatus
Definition linear_solver.h:731
@ BASIC
Definition linear_solver.h:736
@ AT_LOWER_BOUND
Definition linear_solver.h:733
@ AT_UPPER_BOUND
Definition linear_solver.h:734
@ FREE
Definition linear_solver.h:732
@ FIXED_VALUE
Definition linear_solver.h:735
std::vector< double > ComputeConstraintActivities() const
int GetNumThreads() const
Returns the number of threads to be used during solve.
Definition linear_solver.h:691
bool SupportsCallbacks() const
void FillSolutionResponseProto(MPSolutionResponse *response) const
Encodes the current solution in a solution response protocol buffer.
int64_t wall_time() const
Definition linear_solver.h:889
friend class PdlpInterface
Definition linear_solver.h:905
void ExportModelToProto(MPModelProto *output_model) const
Exports model to protocol buffer.
static std::string GetMPModelRequestLoggingInfo(const MPModelRequest &request)
MPConstraint * MakeRowConstraint()
Creates a constraint with -infinity and +infinity bounds.
const std::vector< MPConstraint * > & constraints() const
Definition linear_solver.h:406
bool OutputIsEnabled() const
static OptimizationProblemType ParseSolverTypeOrDie(const std::string &solver_id)
absl::Status LoadSolutionFromProto(const MPSolutionResponse &response, double tolerance=std::numeric_limits< double >::infinity())
absl::Duration TimeLimit() const
Definition linear_solver.h:778
MPVariable * MakeNumVar(double lb, double ub, const std::string &name)
Creates a continuous variable.
MPSolver(const std::string &name, OptimizationProblemType problem_type)
Create a solver with the given name and underlying solver backend.
MPConstraint * LookupConstraintOrNull(const std::string &constraint_name) const
MPConstraint * constraint(int index) const
Definition linear_solver.h:409
void EnableOutput()
Enables solver logging.
friend class XpressInterface
Definition linear_solver.h:899
static int64_t global_num_variables()
MPSolver & operator=(const MPSolver &)=delete
void SetHint(std::vector< std::pair< const MPVariable *, double > > hint)
void SuppressOutput()
Suppresses solver logging.
friend class MPSolverInterface
Definition linear_solver.h:901
friend class GurobiInterface
Definition linear_solver.h:897
void * underlying_solver()
MPVariable * LookupVariableOrNull(const std::string &var_name) const
friend class SatInterface
Definition linear_solver.h:904
void Write(const std::string &file_name)
static int64_t global_num_constraints()
const std::string & Name() const
Returns the name of the model set at construction.
Definition linear_solver.h:312
bool ExportModelAsMpsFormat(bool fixed_format, bool obfuscate, std::string *model_str) const
static bool ParseSolverType(absl::string_view solver_id, OptimizationProblemType *type)
friend class CplexInterface
Definition linear_solver.h:898
friend class HighsInterface
Definition linear_solver.h:906
static void SolveWithProto(const MPModelRequest &model_request, MPSolutionResponse *response, std::atomic< bool > *interrupt=nullptr)
friend class KnapsackInterface
Definition linear_solver.h:907
std::string SolverVersion() const
Returns a string describing the underlying solver and its version.
friend class CBCInterface
Definition linear_solver.h:895
void MakeBoolVarArray(int nb, const std::string &name, std::vector< MPVariable * > *vars)
Creates an array of boolean variables.
void set_time_limit(int64_t time_limit_milliseconds)
Definition linear_solver.h:879
The class for variables of a Mathematical Programming (MP) model.
Definition linear_solver.h:1156
double reduced_cost() const
void SetInteger(bool integer)
Sets the integrality requirement of the variable.
bool integer() const
Returns the integrality requirement of the variable.
Definition linear_solver.h:1171
void SetBranchingPriority(int priority)
friend class SCIPInterface
Definition linear_solver.h:1250
MPVariable(const MPVariable &)=delete
void SetBounds(double lb, double ub)
Sets both the lower and upper bounds.
friend class SLMInterface
Definition linear_solver.h:1251
friend class CLPInterface
Definition linear_solver.h:1238
MPVariable & operator=(const MPVariable &)=delete
friend class GLOPInterface
Definition linear_solver.h:1240
int branching_priority() const
Definition linear_solver.h:1232
friend class BopInterface
Definition linear_solver.h:1236
void set_reduced_cost(double reduced_cost)
Definition linear_solver.h:1269
friend class MPVariableSolutionValueTest
Definition linear_solver.h:1247
void set_solution_value(double value)
Definition linear_solver.h:1268
friend class PdlpInterface
Definition linear_solver.h:1248
double solution_value() const
MPSolver::BasisStatus basis_status() const
friend class XpressInterface
Definition linear_solver.h:1252
friend class MPSolverInterface
Definition linear_solver.h:1246
friend class GurobiInterface
Definition linear_solver.h:1242
friend class MPSolver
Definition linear_solver.h:1245
int index() const
Returns the index of the variable in the MPSolver::variables_.
Definition linear_solver.h:1183
friend class SatInterface
Definition linear_solver.h:1249
friend class GLPKInterface
Definition linear_solver.h:1241
friend class CplexInterface
Definition linear_solver.h:1239
friend class HighsInterface
Definition linear_solver.h:1243
friend class KnapsackInterface
Definition linear_solver.h:1244
double unrounded_solution_value() const
friend class CBCInterface
Definition linear_solver.h:1237
OR_DLL ABSL_DECLARE_FLAG(bool, linear_solver_enable_verbose_output)
constexpr double kDefaultPrimalTolerance
Definition linear_solver.h:177
std::function< MPSolverInterface *(MPSolver *)> MPSolverInterfaceFactory
Definition linear_solver.h:1936
bool SolverTypeSupportsInterruption(const MPModelRequest::SolverType solver)
bool MPSolverResponseStatusIsRpcError(MPSolverResponseStatus status)
bool SolverTypeIsMip(MPModelRequest::SolverType solver_type)
std::ostream & operator<<(std::ostream &out, const Assignment &assignment)
bool AbslParseFlag(const absl::string_view text, MPSolver::OptimizationProblemType *solver_type, std::string *error)
absl::string_view ToString(MPSolver::OptimizationProblemType optimization_problem_type)
std::string AbslUnparseFlag(MPSolver::OptimizationProblemType solver_type)
Definition linear_solver.h:1017