OR-Tools  8.0
linear_solver.h
Go to the documentation of this file.
1 // Copyright 2010-2018 Google LLC
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
5 //
6 // http://www.apache.org/licenses/LICENSE-2.0
7 //
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
13 
134 #ifndef OR_TOOLS_LINEAR_SOLVER_LINEAR_SOLVER_H_
135 #define OR_TOOLS_LINEAR_SOLVER_LINEAR_SOLVER_H_
136 
137 #include <functional>
138 #include <limits>
139 #include <map>
140 #include <memory>
141 #include <string>
142 #include <utility>
143 #include <vector>
144 
145 #include "absl/container/flat_hash_map.h"
146 #include "absl/status/status.h"
147 #include "absl/strings/match.h"
148 #include "absl/strings/str_format.h"
149 #include "absl/types/optional.h"
152 #include "ortools/base/logging.h"
153 #include "ortools/base/macros.h"
154 #include "ortools/base/timer.h"
159 
160 namespace operations_research {
161 
162 constexpr double kDefaultPrimalTolerance = 1e-07;
163 
164 class MPConstraint;
165 class MPObjective;
166 class MPSolverInterface;
167 class MPSolverParameters;
168 class MPVariable;
169 
170 // There is a homonymous version taking a MPSolver::OptimizationProblemType.
171 bool SolverTypeIsMip(MPModelRequest::SolverType solver_type);
172 
177 class MPSolver {
178  public:
186  // Linear programming problems.
187  // ----------------------------
190  GLOP_LINEAR_PROGRAMMING = 2, // Recommended default value. Made in Google.
191 
192  // Integer programming problems.
193  // -----------------------------
194  SCIP_MIXED_INTEGER_PROGRAMMING = 3, // Recommended default value.
197 
198  // Commercial software (need license).
205 
206  // Boolean optimization problem (requires only integer variables and works
207  // best with only Boolean variables).
209 
210  // SAT based solver (requires only integer and Boolean variables).
211  // If you pass it mixed integer problems, it will scale coefficients to
212  // integer values, and solver continuous variables as integral variables.
214 
215  // Dedicated knapsack solvers.
217  };
218 
220  MPSolver(const std::string& name, OptimizationProblemType problem_type);
221  virtual ~MPSolver();
222 
251  static MPSolver* CreateSolver(const std::string& solver_id);
252 
258 
264  static bool ParseSolverType(absl::string_view solver_id,
266 
272  const std::string& solver_id);
273 
274  bool IsMIP() const;
275 
277  const std::string& Name() const {
278  return name_; // Set at construction.
279  }
280 
283  return problem_type_; // Set at construction.
284  }
285 
291  void Clear();
292 
294  int NumVariables() const { return variables_.size(); }
295 
300  const std::vector<MPVariable*>& variables() const { return variables_; }
301 
307  MPVariable* LookupVariableOrNull(const std::string& var_name) const;
308 
316  MPVariable* MakeVar(double lb, double ub, bool integer,
317  const std::string& name);
318 
320  MPVariable* MakeNumVar(double lb, double ub, const std::string& name);
321 
323  MPVariable* MakeIntVar(double lb, double ub, const std::string& name);
324 
326  MPVariable* MakeBoolVar(const std::string& name);
327 
342  void MakeVarArray(int nb, double lb, double ub, bool integer,
343  const std::string& name_prefix,
344  std::vector<MPVariable*>* vars);
345 
347  void MakeNumVarArray(int nb, double lb, double ub, const std::string& name,
348  std::vector<MPVariable*>* vars);
349 
351  void MakeIntVarArray(int nb, double lb, double ub, const std::string& name,
352  std::vector<MPVariable*>* vars);
353 
355  void MakeBoolVarArray(int nb, const std::string& name,
356  std::vector<MPVariable*>* vars);
357 
359  int NumConstraints() const { return constraints_.size(); }
360 
366  const std::vector<MPConstraint*>& constraints() const { return constraints_; }
367 
376  const std::string& constraint_name) const;
377 
386  MPConstraint* MakeRowConstraint(double lb, double ub);
387 
390 
392  MPConstraint* MakeRowConstraint(double lb, double ub,
393  const std::string& name);
394 
396  MPConstraint* MakeRowConstraint(const std::string& name);
397 
403 
406  const std::string& name);
407 
414  const MPObjective& Objective() const { return *objective_; }
415 
417  MPObjective* MutableObjective() { return objective_.get(); }
418 
439  NOT_SOLVED = 6
440  };
441 
444 
446  ResultStatus Solve(const MPSolverParameters& param);
447 
452  void Write(const std::string& file_name);
453 
460  std::vector<double> ComputeConstraintActivities() const;
461 
480  bool VerifySolution(double tolerance, bool log_errors) const;
481 
490  void Reset();
491 
499  bool InterruptSolve();
500 
508  MPSolverResponseStatus LoadModelFromProto(const MPModelProto& input_model,
509  std::string* error_message);
518  const MPModelProto& input_model, std::string* error_message);
519 
521  void FillSolutionResponseProto(MPSolutionResponse* response) const;
522 
538  static void SolveWithProto(const MPModelRequest& model_request,
539  MPSolutionResponse* response);
540 
542  void ExportModelToProto(MPModelProto* output_model) const;
543 
575  absl::Status LoadSolutionFromProto(
576  const MPSolutionResponse& response,
577  double tolerance = kDefaultPrimalTolerance);
578 
583  absl::Status ClampSolutionWithinBounds();
584 
591  bool ExportModelAsLpFormat(bool obfuscate, std::string* model_str) const;
592  bool ExportModelAsMpsFormat(bool fixed_format, bool obfuscate,
593  std::string* model_str) const;
594 
605  absl::Status SetNumThreads(int num_threads);
606 
608  int GetNumThreads() const { return num_threads_; }
609 
616  bool SetSolverSpecificParametersAsString(const std::string& parameters);
618  return solver_specific_parameter_string_;
619  }
620 
634  void SetHint(std::vector<std::pair<const MPVariable*, double> > hint);
635 
640  enum BasisStatus {
641  FREE = 0,
645  BASIC
646  };
647 
659  void SetStartingLpBasis(
660  const std::vector<MPSolver::BasisStatus>& variable_statuses,
661  const std::vector<MPSolver::BasisStatus>& constraint_statuses);
662 
668  static double infinity() { return std::numeric_limits<double>::infinity(); }
669 
678  bool OutputIsEnabled() const;
679 
681  void EnableOutput();
682 
684  void SuppressOutput();
685 
686  absl::Duration TimeLimit() const { return time_limit_; }
687  void SetTimeLimit(absl::Duration time_limit) {
688  DCHECK_GE(time_limit, absl::ZeroDuration());
689  time_limit_ = time_limit;
690  }
691 
692  absl::Duration DurationSinceConstruction() const {
693  return absl::Now() - construction_time_;
694  }
695 
697  int64 iterations() const;
698 
704  int64 nodes() const;
705 
707  std::string SolverVersion() const;
708 
722  void* underlying_solver();
723 
747  double ComputeExactConditionNumber() const;
748 
763  ABSL_MUST_USE_RESULT bool NextSolution();
764 
765  // Does not take ownership of "mp_callback".
766  //
767  // As of 2019-10-22, only SCIP and Gurobi support Callbacks.
768  // SCIP does not support suggesting a heuristic solution in the callback.
769  //
770  // See go/mpsolver-callbacks for additional documentation.
771  void SetCallback(MPCallback* mp_callback);
772  bool SupportsCallbacks() const;
773 
774  // DEPRECATED: Use TimeLimit() and SetTimeLimit(absl::Duration) instead.
775  // NOTE: These deprecated functions used the convention time_limit = 0 to mean
776  // "no limit", which now corresponds to time_limit_ = InfiniteDuration().
777  int64 time_limit() const {
778  return time_limit_ == absl::InfiniteDuration()
779  ? 0
780  : absl::ToInt64Milliseconds(time_limit_);
781  }
782  void set_time_limit(int64 time_limit_milliseconds) {
783  SetTimeLimit(time_limit_milliseconds == 0
784  ? absl::InfiniteDuration()
785  : absl::Milliseconds(time_limit_milliseconds));
786  }
787  double time_limit_in_secs() const {
788  return static_cast<double>(time_limit()) / 1000.0;
789  }
790 
791  // DEPRECATED: Use DurationSinceConstruction() instead.
792  int64 wall_time() const {
793  return absl::ToInt64Milliseconds(DurationSinceConstruction());
794  }
795 
796  // Supports search and loading Gurobi shared library.
797  static bool LoadGurobiSharedLibrary();
798  static void SetGurobiLibraryPath(const std::string &full_library_path);
799 
800  friend class GLPKInterface;
801  friend class CLPInterface;
802  friend class CBCInterface;
803  friend class SCIPInterface;
804  friend class GurobiInterface;
805  friend class CplexInterface;
806  friend class XpressInterface;
807  friend class SLMInterface;
808  friend class MPSolverInterface;
809  friend class GLOPInterface;
810  friend class BopInterface;
811  friend class SatInterface;
812  friend class KnapsackInterface;
813 
814  // Debugging: verify that the given MPVariable* belongs to this solver.
815  bool OwnsVariable(const MPVariable* var) const;
816 
817  private:
818  // Computes the size of the constraint with the largest number of
819  // coefficients with index in [min_constraint_index,
820  // max_constraint_index)
821  int ComputeMaxConstraintSize(int min_constraint_index,
822  int max_constraint_index) const;
823 
824  // Returns true if the model has constraints with lower bound > upper bound.
825  bool HasInfeasibleConstraints() const;
826 
827  // Returns true if the model has at least 1 integer variable.
828  bool HasIntegerVariables() const;
829 
830  // Generates the map from variable names to their indices.
831  void GenerateVariableNameIndex() const;
832 
833  // Generates the map from constraint names to their indices.
834  void GenerateConstraintNameIndex() const;
835 
836  // Checks licenses for commercial solver, and checks shared library loading
837  // for or-tools.
838  static bool GurobiIsCorrectlyInstalled();
839 
840  // The name of the linear programming problem.
841  const std::string name_;
842 
843  // The type of the linear programming problem.
844  const OptimizationProblemType problem_type_;
845 
846  // The solver interface.
847  std::unique_ptr<MPSolverInterface> interface_;
848 
849  // The vector of variables in the problem.
850  std::vector<MPVariable*> variables_;
851  // A map from a variable's name to its index in variables_.
852  mutable absl::optional<absl::flat_hash_map<std::string, int> >
853  variable_name_to_index_;
854  // Whether variables have been extracted to the underlying interface.
855  std::vector<bool> variable_is_extracted_;
856 
857  // The vector of constraints in the problem.
858  std::vector<MPConstraint*> constraints_;
859  // A map from a constraint's name to its index in constraints_.
860  mutable absl::optional<absl::flat_hash_map<std::string, int> >
861  constraint_name_to_index_;
862  // Whether constraints have been extracted to the underlying interface.
863  std::vector<bool> constraint_is_extracted_;
864 
865  // The linear objective function.
866  std::unique_ptr<MPObjective> objective_;
867 
868  // Initial values for all or some of the problem variables that can be
869  // exploited as a starting hint by a solver.
870  //
871  // Note(user): as of 05/05/2015, we can't use >> because of some SWIG errors.
872  //
873  // TODO(user): replace by two vectors, a std::vector<bool> to indicate if a
874  // hint is provided and a std::vector<double> for the hint value.
875  std::vector<std::pair<const MPVariable*, double> > solution_hint_;
876 
877  absl::Duration time_limit_ = absl::InfiniteDuration(); // Default = No limit.
878 
879  const absl::Time construction_time_;
880 
881  // Permanent storage for the number of threads.
882  int num_threads_ = 1;
883 
884  // Permanent storage for SetSolverSpecificParametersAsString().
885  std::string solver_specific_parameter_string_;
886 
887  MPSolverResponseStatus LoadModelFromProtoInternal(
888  const MPModelProto& input_model, bool clear_names,
889  bool check_model_validity, std::string* error_message);
890 
892 };
893 
895  return SolverTypeIsMip(static_cast<MPModelRequest::SolverType>(solver_type));
896 }
897 
898 const absl::string_view ToString(
899  MPSolver::OptimizationProblemType optimization_problem_type);
900 
901 inline std::ostream& operator<<(
902  std::ostream& os,
903  MPSolver::OptimizationProblemType optimization_problem_type) {
904  return os << ToString(optimization_problem_type);
905 }
906 
907 inline std::ostream& operator<<(std::ostream& os,
908  MPSolver::ResultStatus status) {
909  return os << ProtoEnumToString<MPSolverResponseStatus>(
910  static_cast<MPSolverResponseStatus>(status));
911 }
912 
913 bool AbslParseFlag(absl::string_view text,
915  std::string* error);
916 
917 inline std::string AbslUnparseFlag(
918  MPSolver::OptimizationProblemType solver_type) {
919  return std::string(ToString(solver_type));
920 }
921 
923 class MPObjective {
924  public:
929  void Clear();
930 
937  void SetCoefficient(const MPVariable* const var, double coeff);
938 
944  double GetCoefficient(const MPVariable* const var) const;
945 
951  const absl::flat_hash_map<const MPVariable*, double>& terms() const {
952  return coefficients_;
953  }
954 
956  void SetOffset(double value);
957 
959  double offset() const { return offset_; }
960 
965  void OptimizeLinearExpr(const LinearExpr& linear_expr, bool is_maximization);
966 
968  void MaximizeLinearExpr(const LinearExpr& linear_expr) {
969  OptimizeLinearExpr(linear_expr, true);
970  }
972  void MinimizeLinearExpr(const LinearExpr& linear_expr) {
973  OptimizeLinearExpr(linear_expr, false);
974  }
975 
977  void AddLinearExpr(const LinearExpr& linear_expr);
978 
980  void SetOptimizationDirection(bool maximize);
981 
984 
987 
989  bool maximization() const;
990 
992  bool minimization() const;
993 
1005  double Value() const;
1006 
1013  double BestBound() const;
1014 
1015  private:
1016  friend class MPSolver;
1017  friend class MPSolverInterface;
1018  friend class CBCInterface;
1019  friend class CLPInterface;
1020  friend class GLPKInterface;
1021  friend class SCIPInterface;
1022  friend class SLMInterface;
1023  friend class GurobiInterface;
1024  friend class CplexInterface;
1025  friend class XpressInterface;
1026  friend class GLOPInterface;
1027  friend class BopInterface;
1028  friend class SatInterface;
1029  friend class KnapsackInterface;
1030 
1031  // Constructor. An objective points to a single MPSolverInterface
1032  // that is specified in the constructor. An objective cannot belong
1033  // to several models.
1034  // At construction, an MPObjective has no terms (which is equivalent
1035  // on having a coefficient of 0 for all variables), and an offset of 0.
1036  explicit MPObjective(MPSolverInterface* const interface_in)
1037  : interface_(interface_in), coefficients_(1), offset_(0.0) {}
1038 
1039  MPSolverInterface* const interface_;
1040 
1041  // Mapping var -> coefficient.
1042  absl::flat_hash_map<const MPVariable*, double> coefficients_;
1043  // Constant term.
1044  double offset_;
1045 
1047 };
1048 
1050 class MPVariable {
1051  public:
1053  const std::string& name() const { return name_; }
1054 
1056  void SetInteger(bool integer);
1057 
1059  bool integer() const { return integer_; }
1060 
1068  double solution_value() const;
1069 
1071  int index() const { return index_; }
1072 
1074  double lb() const { return lb_; }
1075 
1077  double ub() const { return ub_; }
1078 
1080  void SetLB(double lb) { SetBounds(lb, ub_); }
1081 
1083  void SetUB(double ub) { SetBounds(lb_, ub); }
1084 
1086  void SetBounds(double lb, double ub);
1087 
1094  double unrounded_solution_value() const;
1095 
1100  double reduced_cost() const;
1101 
1109 
1120  int branching_priority() const { return branching_priority_; }
1121  void SetBranchingPriority(int priority);
1122 
1123  protected:
1124  friend class MPSolver;
1125  friend class MPSolverInterface;
1126  friend class CBCInterface;
1127  friend class CLPInterface;
1128  friend class GLPKInterface;
1129  friend class SCIPInterface;
1130  friend class SLMInterface;
1131  friend class GurobiInterface;
1132  friend class CplexInterface;
1133  friend class XpressInterface;
1134  friend class GLOPInterface;
1136  friend class BopInterface;
1137  friend class SatInterface;
1138  friend class KnapsackInterface;
1139 
1140  // Constructor. A variable points to a single MPSolverInterface that
1141  // is specified in the constructor. A variable cannot belong to
1142  // several models.
1143  MPVariable(int index, double lb, double ub, bool integer,
1144  const std::string& name, MPSolverInterface* const interface_in)
1145  : index_(index),
1146  lb_(lb),
1147  ub_(ub),
1148  integer_(integer),
1149  name_(name.empty() ? absl::StrFormat("auto_v_%09d", index) : name),
1150  solution_value_(0.0),
1151  reduced_cost_(0.0),
1152  interface_(interface_in) {}
1153 
1154  void set_solution_value(double value) { solution_value_ = value; }
1155  void set_reduced_cost(double reduced_cost) { reduced_cost_ = reduced_cost; }
1156 
1157  private:
1158  const int index_;
1159  double lb_;
1160  double ub_;
1161  bool integer_;
1162  const std::string name_;
1163  double solution_value_;
1164  double reduced_cost_;
1165  int branching_priority_ = 0;
1166  MPSolverInterface* const interface_;
1168 };
1169 
1176  public:
1178  const std::string& name() const { return name_; }
1179 
1181  void Clear();
1182 
1189  void SetCoefficient(const MPVariable* const var, double coeff);
1190 
1195  double GetCoefficient(const MPVariable* const var) const;
1196 
1202  const absl::flat_hash_map<const MPVariable*, double>& terms() const {
1203  return coefficients_;
1204  }
1205 
1207  double lb() const { return lb_; }
1208 
1210  double ub() const { return ub_; }
1211 
1213  void SetLB(double lb) { SetBounds(lb, ub_); }
1214 
1216  void SetUB(double ub) { SetBounds(lb_, ub); }
1217 
1219  void SetBounds(double lb, double ub);
1220 
1222  bool is_lazy() const { return is_lazy_; }
1223 
1237  void set_is_lazy(bool laziness) { is_lazy_ = laziness; }
1238 
1239  const MPVariable* indicator_variable() const { return indicator_variable_; }
1240  bool indicator_value() const { return indicator_value_; }
1241 
1243  int index() const { return index_; }
1244 
1249  double dual_value() const;
1250 
1264 
1265  protected:
1266  friend class MPSolver;
1267  friend class MPSolverInterface;
1268  friend class CBCInterface;
1269  friend class CLPInterface;
1270  friend class GLPKInterface;
1271  friend class SCIPInterface;
1272  friend class SLMInterface;
1273  friend class GurobiInterface;
1274  friend class CplexInterface;
1275  friend class XpressInterface;
1276  friend class GLOPInterface;
1277  friend class BopInterface;
1278  friend class SatInterface;
1279  friend class KnapsackInterface;
1280 
1281  // Constructor. A constraint points to a single MPSolverInterface
1282  // that is specified in the constructor. A constraint cannot belong
1283  // to several models.
1284  MPConstraint(int index, double lb, double ub, const std::string& name,
1285  MPSolverInterface* const interface_in)
1286  : coefficients_(1),
1287  index_(index),
1288  lb_(lb),
1289  ub_(ub),
1290  name_(name.empty() ? absl::StrFormat("auto_c_%09d", index) : name),
1291  is_lazy_(false),
1292  indicator_variable_(nullptr),
1293  dual_value_(0.0),
1294  interface_(interface_in) {}
1295 
1296  void set_dual_value(double dual_value) { dual_value_ = dual_value; }
1297 
1298  private:
1299  // Returns true if the constraint contains variables that have not
1300  // been extracted yet.
1301  bool ContainsNewVariables();
1302 
1303  // Mapping var -> coefficient.
1304  absl::flat_hash_map<const MPVariable*, double> coefficients_;
1305 
1306  const int index_; // See index().
1307 
1308  // The lower bound for the linear constraint.
1309  double lb_;
1310 
1311  // The upper bound for the linear constraint.
1312  double ub_;
1313 
1314  // Name.
1315  const std::string name_;
1316 
1317  // True if the constraint is "lazy", i.e. the constraint is added to the
1318  // underlying Linear Programming solver only if it is violated.
1319  // By default this parameter is 'false'.
1320  bool is_lazy_;
1321 
1322  // If given, this constraint is only active if `indicator_variable_`'s value
1323  // is equal to `indicator_value_`.
1324  const MPVariable* indicator_variable_;
1325  bool indicator_value_;
1326 
1327  double dual_value_;
1328  MPSolverInterface* const interface_;
1330 };
1331 
1359  public:
1364 
1373  DUAL_TOLERANCE = 2
1374  };
1375 
1379  PRESOLVE = 1000,
1385  SCALING = 1003
1386  };
1387 
1393  PRESOLVE_ON = 1
1394  };
1395 
1399  DUAL = 10,
1401  PRIMAL = 11,
1403  BARRIER = 12
1404  };
1405 
1410 
1415  INCREMENTALITY_ON = 1
1416  };
1417 
1423  SCALING_ON = 1
1424  };
1425 
1426  // Placeholder value to indicate that a parameter is set to
1427  // the default value defined in the wrapper.
1428  static const double kDefaultDoubleParamValue;
1429  static const int kDefaultIntegerParamValue;
1430 
1431  // Placeholder value to indicate that a parameter is unknown.
1432  static const double kUnknownDoubleParamValue;
1433  static const int kUnknownIntegerParamValue;
1434 
1435  // Default values for parameters. Only parameters that define the
1436  // properties of the solution returned need to have a default value
1437  // (that is the same for all solvers). You can also define a default
1438  // value for performance parameters when you are confident it is a
1439  // good choice (example: always turn presolve on).
1440  static const double kDefaultRelativeMipGap;
1441  static const double kDefaultPrimalTolerance;
1442  static const double kDefaultDualTolerance;
1445 
1448 
1451 
1454 
1461 
1468 
1470  void Reset();
1471 
1473  double GetDoubleParam(MPSolverParameters::DoubleParam param) const;
1474 
1477 
1478  private:
1479  // Parameter value for each parameter.
1480  // @see DoubleParam
1481  // @see IntegerParam
1482  double relative_mip_gap_value_;
1483  double primal_tolerance_value_;
1484  double dual_tolerance_value_;
1485  int presolve_value_;
1486  int scaling_value_;
1487  int lp_algorithm_value_;
1488  int incrementality_value_;
1489 
1490  // Boolean value indicating whether each parameter is set to the
1491  // solver's default value. Only parameters for which the wrapper
1492  // does not define a default value need such an indicator.
1493  bool lp_algorithm_is_default_;
1494 
1495  DISALLOW_COPY_AND_ASSIGN(MPSolverParameters);
1496 };
1497 
1498 // Whether the given MPSolverResponseStatus (of a solve) would yield an RPC
1499 // error when happening on the linear solver stubby server, see
1500 // ./linear_solver_service.proto.
1501 // Note that RPC errors forbid to carry a response to the client, who can only
1502 // see the RPC error itself (error code + error message).
1504 
1505 // This class wraps the actual mathematical programming solvers. Each
1506 // solver (GLOP, CLP, CBC, GLPK, SCIP) has its own interface class that
1507 // derives from this abstract class. This class is never directly
1508 // accessed by the user.
1509 // @see glop_interface.cc
1510 // @see cbc_interface.cc
1511 // @see clp_interface.cc
1512 // @see glpk_interface.cc
1513 // @see scip_interface.cc
1515  public:
1517  // The underlying solver (CLP, GLPK, ...) and MPSolver are not in
1518  // sync for the model nor for the solution.
1520  // The underlying solver and MPSolver are in sync for the model
1521  // but not for the solution: the model has changed since the
1522  // solution was computed last.
1524  // The underlying solver and MPSolver are in sync for the model and
1525  // the solution.
1527  };
1528 
1529  // When the underlying solver does not provide the number of simplex
1530  // iterations.
1531  static constexpr int64 kUnknownNumberOfIterations = -1;
1532  // When the underlying solver does not provide the number of
1533  // branch-and-bound nodes.
1534  static constexpr int64 kUnknownNumberOfNodes = -1;
1535 
1536  // Constructor. The user will access the MPSolverInterface through the
1537  // MPSolver passed as argument.
1538  explicit MPSolverInterface(MPSolver* const solver);
1539  virtual ~MPSolverInterface();
1540 
1541  // ----- Solve -----
1542  // Solves problem with specified parameter values. Returns true if the
1543  // solution is optimal.
1545 
1546  // Directly solves a MPModelRequest, bypassing the MPSolver data structures
1547  // entirely. Returns {} (eg. absl::nullopt) if the feature is not supported by
1548  // the underlying solver.
1549  virtual absl::optional<MPSolutionResponse> DirectlySolveProto(
1550  const MPModelRequest& request) {
1551  return absl::nullopt;
1552  }
1553 
1554  // Writes the model using the solver internal write function. Currently only
1555  // available for GurobiInterface.
1556  virtual void Write(const std::string& filename);
1557 
1558  // ----- Model modifications and extraction -----
1559  // Resets extracted model.
1560  virtual void Reset() = 0;
1561 
1562  // Sets the optimization direction (min/max).
1563  virtual void SetOptimizationDirection(bool maximize) = 0;
1564 
1565  // Modifies bounds of an extracted variable.
1566  virtual void SetVariableBounds(int index, double lb, double ub) = 0;
1567 
1568  // Modifies integrality of an extracted variable.
1569  virtual void SetVariableInteger(int index, bool integer) = 0;
1570 
1571  // Modify bounds of an extracted variable.
1572  virtual void SetConstraintBounds(int index, double lb, double ub) = 0;
1573 
1574  // Adds a linear constraint.
1575  virtual void AddRowConstraint(MPConstraint* const ct) = 0;
1576 
1577  // Adds an indicator constraint. Returns true if the feature is supported by
1578  // the underlying solver.
1579  virtual bool AddIndicatorConstraint(MPConstraint* const ct) {
1580  LOG(ERROR) << "Solver doesn't support indicator constraints.";
1581  return false;
1582  }
1583 
1584  // Add a variable.
1585  virtual void AddVariable(MPVariable* const var) = 0;
1586 
1587  // Changes a coefficient in a constraint.
1588  virtual void SetCoefficient(MPConstraint* const constraint,
1589  const MPVariable* const variable,
1590  double new_value, double old_value) = 0;
1591 
1592  // Clears a constraint from all its terms.
1593  virtual void ClearConstraint(MPConstraint* const constraint) = 0;
1594 
1595  // Changes a coefficient in the linear objective.
1596  virtual void SetObjectiveCoefficient(const MPVariable* const variable,
1597  double coefficient) = 0;
1598 
1599  // Changes the constant term in the linear objective.
1600  virtual void SetObjectiveOffset(double value) = 0;
1601 
1602  // Clears the objective from all its terms.
1603  virtual void ClearObjective() = 0;
1604 
1605  virtual void BranchingPriorityChangedForVariable(int var_index) {}
1606  // ------ Query statistics on the solution and the solve ------
1607  // Returns the number of simplex iterations. The problem must be discrete,
1608  // otherwise it crashes, or returns kUnknownNumberOfIterations in NDEBUG mode.
1609  virtual int64 iterations() const = 0;
1610  // Returns the number of branch-and-bound nodes. The problem must be discrete,
1611  // otherwise it crashes, or returns kUnknownNumberOfNodes in NDEBUG mode.
1612  virtual int64 nodes() const = 0;
1613  // Returns the best objective bound. The problem must be discrete, otherwise
1614  // it crashes, or returns trivial_worst_objective_bound() in NDEBUG mode.
1615  virtual double best_objective_bound() const = 0;
1616  // A trivial objective bound: the worst possible value of the objective,
1617  // which will be +infinity if minimizing and -infinity if maximing.
1618  double trivial_worst_objective_bound() const;
1619  // Returns the objective value of the best solution found so far.
1620  double objective_value() const;
1621 
1622  // Returns the basis status of a row.
1623  virtual MPSolver::BasisStatus row_status(int constraint_index) const = 0;
1624  // Returns the basis status of a constraint.
1625  virtual MPSolver::BasisStatus column_status(int variable_index) const = 0;
1626 
1627  // Checks whether the solution is synchronized with the model, i.e. whether
1628  // the model has changed since the solution was computed last.
1629  // If it isn't, it crashes in NDEBUG, and returns false othwerwise.
1630  bool CheckSolutionIsSynchronized() const;
1631  // Checks whether a feasible solution exists. The behavior is similar to
1632  // CheckSolutionIsSynchronized() above.
1633  virtual bool CheckSolutionExists() const;
1634  // Handy shortcut to do both checks above (it is often used).
1637  }
1638  // Checks whether information on the best objective bound exists. The behavior
1639  // is similar to CheckSolutionIsSynchronized() above.
1640  virtual bool CheckBestObjectiveBoundExists() const;
1641 
1642  // ----- Misc -----
1643  // Queries problem type. For simplicity, the distinction between
1644  // continuous and discrete is based on the declaration of the user
1645  // when the solver is created (example: GLPK_LINEAR_PROGRAMMING
1646  // vs. GLPK_MIXED_INTEGER_PROGRAMMING), not on the actual content of
1647  // the model.
1648  // Returns true if the problem is continuous.
1649  virtual bool IsContinuous() const = 0;
1650  // Returns true if the problem is continuous and linear.
1651  virtual bool IsLP() const = 0;
1652  // Returns true if the problem is discrete and linear.
1653  virtual bool IsMIP() const = 0;
1654 
1655  // Returns the index of the last variable extracted.
1657 
1658  bool variable_is_extracted(int var_index) const {
1659  return solver_->variable_is_extracted_[var_index];
1660  }
1661  void set_variable_as_extracted(int var_index, bool extracted) {
1662  solver_->variable_is_extracted_[var_index] = extracted;
1663  }
1664  bool constraint_is_extracted(int ct_index) const {
1665  return solver_->constraint_is_extracted_[ct_index];
1666  }
1667  void set_constraint_as_extracted(int ct_index, bool extracted) {
1668  solver_->constraint_is_extracted_[ct_index] = extracted;
1669  }
1670 
1671  // Returns the boolean indicating the verbosity of the solver output.
1672  bool quiet() const { return quiet_; }
1673  // Sets the boolean indicating the verbosity of the solver output.
1674  void set_quiet(bool quiet_value) { quiet_ = quiet_value; }
1675 
1676  // Returns the result status of the last solve.
1679  return result_status_;
1680  }
1681 
1682  // Returns a string describing the underlying solver and its version.
1683  virtual std::string SolverVersion() const = 0;
1684 
1685  // Returns the underlying solver.
1686  virtual void* underlying_solver() = 0;
1687 
1688  // Computes exact condition number. Only available for continuous
1689  // problems and only implemented in GLPK.
1690  virtual double ComputeExactConditionNumber() const;
1691 
1692  // See MPSolver::SetStartingLpBasis().
1693  virtual void SetStartingLpBasis(
1694  const std::vector<MPSolver::BasisStatus>& variable_statuses,
1695  const std::vector<MPSolver::BasisStatus>& constraint_statuses) {
1696  LOG(FATAL) << "Not supported by this solver.";
1697  }
1698 
1699  virtual bool InterruptSolve() { return false; }
1700 
1701  // See MPSolver::NextSolution() for contract.
1702  virtual bool NextSolution() { return false; }
1703 
1704  // See MPSolver::SetCallback() for details.
1705  virtual void SetCallback(MPCallback* mp_callback) {
1706  LOG(FATAL) << "Callbacks not supported for this solver.";
1707  }
1708 
1709  virtual bool SupportsCallbacks() const { return false; }
1710 
1711  friend class MPSolver;
1712 
1713  // To access the maximize_ bool and the MPSolver.
1714  friend class MPConstraint;
1715  friend class MPObjective;
1716 
1717  protected:
1719  // Indicates whether the model and the solution are synchronized.
1721  // Indicates whether the solve has reached optimality,
1722  // infeasibility, a limit, etc.
1724  // Optimization direction.
1726 
1727  // Index in MPSolver::variables_ of last constraint extracted.
1729  // Index in MPSolver::constraints_ of last variable extracted.
1731 
1732  // The value of the objective function.
1734 
1735  // Boolean indicator for the verbosity of the solver output.
1736  bool quiet_;
1737 
1738  // Index of dummy variable created for empty constraints or the
1739  // objective offset.
1740  static const int kDummyVariableIndex;
1741 
1742  // Extracts model stored in MPSolver.
1743  void ExtractModel();
1744  // Extracts the variables that have not been extracted yet.
1745  virtual void ExtractNewVariables() = 0;
1746  // Extracts the constraints that have not been extracted yet.
1747  virtual void ExtractNewConstraints() = 0;
1748  // Extracts the objective.
1749  virtual void ExtractObjective() = 0;
1750  // Resets the extraction information.
1752  // Change synchronization status from SOLUTION_SYNCHRONIZED to
1753  // MODEL_SYNCHRONIZED. To be used for model changes.
1755 
1756  // Sets parameters common to LP and MIP in the underlying solver.
1757  void SetCommonParameters(const MPSolverParameters& param);
1758  // Sets MIP specific parameters in the underlying solver.
1759  void SetMIPParameters(const MPSolverParameters& param);
1760  // Sets all parameters in the underlying solver.
1761  virtual void SetParameters(const MPSolverParameters& param) = 0;
1762  // Sets an unsupported double parameter.
1764  // Sets an unsupported integer parameter.
1765  virtual void SetUnsupportedIntegerParam(
1767  // Sets a supported double parameter to an unsupported value.
1769  double value);
1770  // Sets a supported integer parameter to an unsupported value.
1771  virtual void SetIntegerParamToUnsupportedValue(
1773  // Sets each parameter in the underlying solver.
1774  virtual void SetRelativeMipGap(double value) = 0;
1775  virtual void SetPrimalTolerance(double value) = 0;
1776  virtual void SetDualTolerance(double value) = 0;
1777  virtual void SetPresolveMode(int value) = 0;
1778 
1779  // Sets the number of threads to be used by the solver.
1780  virtual absl::Status SetNumThreads(int num_threads);
1781 
1782  // Pass solver specific parameters in text format. The format is
1783  // solver-specific and is the same as the corresponding solver configuration
1784  // file format. Returns true if the operation was successful.
1785  //
1786  // The default implementation of this method stores the parameters in a
1787  // temporary file and calls ReadParameterFile to import the parameter file
1788  // into the solver. Solvers that support passing the parameters directly can
1789  // override this method to skip the temporary file logic.
1791  const std::string& parameters);
1792 
1793  // Reads a solver-specific file of parameters and set them.
1794  // Returns true if there was no errors.
1795  virtual bool ReadParameterFile(const std::string& filename);
1796 
1797  // Returns a file extension like ".tmp", this is needed because some solvers
1798  // require a given extension for the ReadParameterFile() filename and we need
1799  // to know it to generate a temporary parameter file.
1800  virtual std::string ValidFileExtensionForParameterFile() const;
1801 
1802  // Sets the scaling mode.
1803  virtual void SetScalingMode(int value) = 0;
1804  virtual void SetLpAlgorithm(int value) = 0;
1805 };
1806 
1807 } // namespace operations_research
1808 
1809 #endif // OR_TOOLS_LINEAR_SOLVER_LINEAR_SOLVER_H_
operations_research::MPSolver::XPRESS_LINEAR_PROGRAMMING
@ XPRESS_LINEAR_PROGRAMMING
Definition: linear_solver.h:203
operations_research::MPSolver::NumConstraints
int NumConstraints() const
Returns the number of constraints.
Definition: linear_solver.h:359
operations_research::MPSolverInterface::variable_is_extracted
bool variable_is_extracted(int var_index) const
Definition: linear_solver.h:1658
var
IntVar * var
Definition: expr_array.cc:1858
operations_research::MPObjective::SetMaximization
void SetMaximization()
Sets the optimization direction to maximize.
Definition: linear_solver.h:986
operations_research::MPSolver::GLOP_LINEAR_PROGRAMMING
@ GLOP_LINEAR_PROGRAMMING
Definition: linear_solver.h:190
operations_research::MPSolver::CreateSolver
static MPSolver * CreateSolver(const std::string &solver_id)
Recommended factory method to create a MPSolver instance, especially in non C++ languages.
Definition: linear_solver.cc:601
operations_research::MPSolverParameters::GetIntegerParam
int GetIntegerParam(MPSolverParameters::IntegerParam param) const
Returns the value of an integer parameter.
Definition: linear_solver.cc:1973
operations_research::MPSolverParameters::LP_ALGORITHM
@ LP_ALGORITHM
Algorithm to solve linear programs.
Definition: linear_solver.h:1381
operations_research::MPConstraint::SetCoefficient
void SetCoefficient(const MPVariable *const var, double coeff)
Sets the coefficient of the variable on the constraint.
Definition: linear_solver.cc:95
operations_research::MPSolver::MakeBoolVar
MPVariable * MakeBoolVar(const std::string &name)
Creates a boolean variable.
Definition: linear_solver.cc:1088
operations_research::SolverTypeIsMip
bool SolverTypeIsMip(MPModelRequest::SolverType solver_type)
Definition: linear_solver.cc:64
response
SharedResponseManager * response
Definition: cp_model_solver.cc:2027
operations_research::MPSolverInterface::IsContinuous
virtual bool IsContinuous() const =0
problem_type
MPSolver::OptimizationProblemType problem_type
Definition: linear_solver.cc:502
operations_research::MPSolver::Reset
void Reset()
Advanced usage: resets extracted model to solve from scratch.
Definition: linear_solver.cc:1054
operations_research::MPSolverInterface::NextSolution
virtual bool NextSolution()
Definition: linear_solver.h:1702
integral_types.h
operations_research::MPObjective::XpressInterface
friend class XpressInterface
Definition: linear_solver.h:1025
operations_research::MPSolverInterface::~MPSolverInterface
virtual ~MPSolverInterface()
Definition: linear_solver.cc:1606
operations_research::MPVariable
The class for variables of a Mathematical Programming (MP) model.
Definition: linear_solver.h:1050
operations_research::MPSolver
This mathematical programming (MP) solver class is the main class though which users build and solve ...
Definition: linear_solver.h:177
operations_research::MPSolverParameters::ResetDoubleParam
void ResetDoubleParam(MPSolverParameters::DoubleParam param)
Sets a double parameter to its default value (default value defined in MPSolverParameters if it exist...
Definition: linear_solver.cc:1898
operations_research::MPSolverInterface::MUST_RELOAD
@ MUST_RELOAD
Definition: linear_solver.h:1519
operations_research::MPObjective::KnapsackInterface
friend class KnapsackInterface
Definition: linear_solver.h:1029
operations_research::MPSolverInterface::MPSolverInterface
MPSolverInterface(MPSolver *const solver)
Definition: linear_solver.cc:1596
operations_research::MPSolverParameters::PRESOLVE_OFF
@ PRESOLVE_OFF
Presolve is off.
Definition: linear_solver.h:1391
operations_research::MPConstraint::indicator_value
bool indicator_value() const
Definition: linear_solver.h:1240
operations_research::MPSolver::underlying_solver
void * underlying_solver()
Advanced usage: returns the underlying solver.
Definition: linear_solver.cc:330
operations_research::MPSolverInterface::result_status_
MPSolver::ResultStatus result_status_
Definition: linear_solver.h:1723
operations_research::MPSolver::GLPK_MIXED_INTEGER_PROGRAMMING
@ GLPK_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:195
operations_research::MPConstraint::KnapsackInterface
friend class KnapsackInterface
Definition: linear_solver.h:1279
operations_research::MPSolverParameters::DUAL_TOLERANCE
@ DUAL_TOLERANCE
Advanced usage: tolerance for dual feasibility of basic solutions.
Definition: linear_solver.h:1373
operations_research::MPVariable::index
int index() const
Returns the index of the variable in the MPSolver::variables_.
Definition: linear_solver.h:1071
operations_research::MPConstraint::Clear
void Clear()
Clears all variables and coefficients. Does not clear the bounds.
Definition: linear_solver.cc:121
operations_research::CLPInterface
Definition: clp_interface.cc:42
operations_research::MPSolver::MakeIntVar
MPVariable * MakeIntVar(double lb, double ub, const std::string &name)
Creates an integer variable.
Definition: linear_solver.cc:1083
operations_research::MPSolverParameters::kDefaultIncrementality
static const IncrementalityValues kDefaultIncrementality
Definition: linear_solver.h:1444
operations_research::MPSolver::NextSolution
ABSL_MUST_USE_RESULT bool NextSolution()
Some solvers (MIP only, not LP) can produce multiple solutions to the problem.
Definition: linear_solver.cc:1554
operations_research::MPSolverInterface::SetVariableBounds
virtual void SetVariableBounds(int index, double lb, double ub)=0
operations_research::MPSolver::MakeBoolVarArray
void MakeBoolVarArray(int nb, const std::string &name, std::vector< MPVariable * > *vars)
Creates an array of boolean variables.
Definition: linear_solver.cc:1121
operations_research::MPSolverResponseStatus
MPSolverResponseStatus
Definition: linear_solver.pb.h:228
operations_research::MPSolverInterface::CheckSolutionExists
virtual bool CheckSolutionExists() const
Definition: linear_solver.cc:1660
operations_research::MPObjective::SetCoefficient
void SetCoefficient(const MPVariable *const var, double coeff)
Sets the coefficient of the variable in the objective.
Definition: linear_solver.cc:176
operations_research::MPSolver::FIXED_VALUE
@ FIXED_VALUE
Definition: linear_solver.h:644
operations_research::MPSolver::MakeIntVarArray
void MakeIntVarArray(int nb, double lb, double ub, const std::string &name, std::vector< MPVariable * > *vars)
Creates an array of integer variables.
Definition: linear_solver.cc:1115
operations_research::MPObjective::MinimizeLinearExpr
void MinimizeLinearExpr(const LinearExpr &linear_expr)
Resets the current objective to minimize linear_expr.
Definition: linear_solver.h:972
operations_research::MPSolver::ExportModelAsMpsFormat
bool ExportModelAsMpsFormat(bool fixed_format, bool obfuscate, std::string *model_str) const
Definition: linear_solver.cc:1513
operations_research::MPSolver::ExportModelAsLpFormat
bool ExportModelAsLpFormat(bool obfuscate, std::string *model_str) const
Shortcuts to the homonymous MPModelProtoExporter methods, via exporting to a MPModelProto with Export...
Definition: linear_solver.cc:1501
operations_research::MPSolver::SuppressOutput
void SuppressOutput()
Suppresses solver logging.
Definition: linear_solver.cc:1482
linear_solver.pb.h
operations_research::MPSolver::CplexInterface
friend class CplexInterface
Definition: linear_solver.h:805
operations_research::MPConstraint
The class for constraints of a Mathematical Programming (MP) model.
Definition: linear_solver.h:1175
operations_research::MPVariable::XpressInterface
friend class XpressInterface
Definition: linear_solver.h:1133
operations_research::MPSolver::FEASIBLE
@ FEASIBLE
feasible, or stopped by limit.
Definition: linear_solver.h:429
operations_research::MPSolverInterface::ExtractNewVariables
virtual void ExtractNewVariables()=0
operations_research::MPSolverInterface::SetOptimizationDirection
virtual void SetOptimizationDirection(bool maximize)=0
operations_research::MPSolverInterface::objective_value_
double objective_value_
Definition: linear_solver.h:1733
operations_research::MPSolverParameters::SetIntegerParam
void SetIntegerParam(MPSolverParameters::IntegerParam param, int value)
Sets a integer parameter to a specific value.
Definition: linear_solver.cc:1856
proto_utils.h
operations_research::MPSolverParameters::SCALING_OFF
@ SCALING_OFF
Scaling is off.
Definition: linear_solver.h:1421
logging.h
operations_research::MPSolver::CPLEX_MIXED_INTEGER_PROGRAMMING
@ CPLEX_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:202
operations_research::MPSolver::LookupConstraintOrNull
MPConstraint * LookupConstraintOrNull(const std::string &constraint_name) const
Looks up a constraint by name, and returns nullptr if it does not exist.
Definition: linear_solver.cc:624
operations_research::MPSolverInterface::IsMIP
virtual bool IsMIP() const =0
operations_research::MPObjective::GetCoefficient
double GetCoefficient(const MPVariable *const var) const
Gets the coefficient of a given variable in the objective.
Definition: linear_solver.cc:170
operations_research::MPObjective::minimization
bool minimization() const
Is the optimization direction set to minimize?
Definition: linear_solver.cc:246
operations_research::MPSolver::time_limit
int64 time_limit() const
Definition: linear_solver.h:777
operations_research::MPSolverParameters::kDefaultRelativeMipGap
static const double kDefaultRelativeMipGap
Definition: linear_solver.h:1440
operations_research::MPObjective::offset
double offset() const
Gets the constant term in the objective.
Definition: linear_solver.h:959
operations_research::MPSolverInterface::ClearConstraint
virtual void ClearConstraint(MPConstraint *const constraint)=0
operations_research::MPSolver::AT_LOWER_BOUND
@ AT_LOWER_BOUND
Definition: linear_solver.h:642
operations_research::MPSolver::InterruptSolve
bool InterruptSolve()
Interrupts the Solve() execution to terminate processing if possible.
Definition: linear_solver.cc:1056
value
int64 value
Definition: demon_profiler.cc:43
operations_research::MPConstraint::SetLB
void SetLB(double lb)
Sets the lower bound.
Definition: linear_solver.h:1213
operations_research::MPSolver::KnapsackInterface
friend class KnapsackInterface
Definition: linear_solver.h:812
operations_research::MPSolverInterface::ComputeExactConditionNumber
virtual double ComputeExactConditionNumber() const
Definition: linear_solver.cc:1698
operations_research::MPSolverParameters::DUAL
@ DUAL
Dual simplex.
Definition: linear_solver.h:1399
operations_research::MPSolverInterface::set_variable_as_extracted
void set_variable_as_extracted(int var_index, bool extracted)
Definition: linear_solver.h:1661
operations_research::MPSolverInterface::MODEL_SYNCHRONIZED
@ MODEL_SYNCHRONIZED
Definition: linear_solver.h:1523
linear_expr.h
operations_research::MPSolverParameters::kDefaultDualTolerance
static const double kDefaultDualTolerance
Definition: linear_solver.h:1442
macros.h
operations_research::MPSolver::set_time_limit
void set_time_limit(int64 time_limit_milliseconds)
Definition: linear_solver.h:782
operations_research::MPConstraint::XpressInterface
friend class XpressInterface
Definition: linear_solver.h:1275
operations_research
The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...
Definition: dense_doubly_linked_list.h:21
operations_research::MPSolverInterface::InterruptSolve
virtual bool InterruptSolve()
Definition: linear_solver.h:1699
operations_research::MPSolverParameters::SCALING
@ SCALING
Advanced usage: enable or disable matrix scaling.
Definition: linear_solver.h:1385
operations_research::MPObjective::terms
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
operations_research::MPSolver::ParseSolverTypeOrDie
static OptimizationProblemType ParseSolverTypeOrDie(const std::string &solver_id)
Parses the name of the solver and returns the correct optimization type or dies.
Definition: linear_solver.cc:593
operations_research::MPSolver::infinity
static double infinity()
Infinity.
Definition: linear_solver.h:668
operations_research::MPSolver::GLPK_LINEAR_PROGRAMMING
@ GLPK_LINEAR_PROGRAMMING
Definition: linear_solver.h:189
operations_research::GLOPInterface
Definition: glop_interface.cc:34
operations_research::MPSolverInterface::underlying_solver
virtual void * underlying_solver()=0
operations_research::MPSolverParameters::PresolveValues
PresolveValues
For each categorical parameter, enumeration of possible values.
Definition: linear_solver.h:1389
operations_research::MPSolver::ExportModelToProto
void ExportModelToProto(MPModelProto *output_model) const
Exports model to protocol buffer.
Definition: linear_solver.cc:884
operations_research::MPSolverInterface::kDummyVariableIndex
static const int kDummyVariableIndex
Definition: linear_solver.h:1740
operations_research::MPSolverInterface::ReadParameterFile
virtual bool ReadParameterFile(const std::string &filename)
Definition: linear_solver.cc:1797
operations_research::MPSolverInterface::SetSolverSpecificParametersAsString
virtual bool SetSolverSpecificParametersAsString(const std::string &parameters)
Definition: linear_solver.cc:1759
operations_research::MPConstraint::SetUB
void SetUB(double ub)
Sets the upper bound.
Definition: linear_solver.h:1216
operations_research::MPSolverParameters::LpAlgorithmValues
LpAlgorithmValues
LP algorithm to use.
Definition: linear_solver.h:1397
operations_research::MPSolver::LoadModelFromProtoWithUniqueNamesOrDie
MPSolverResponseStatus LoadModelFromProtoWithUniqueNamesOrDie(const MPModelProto &input_model, std::string *error_message)
Loads model from protocol buffer.
Definition: linear_solver.cc:646
operations_research::MPVariable::name
const std::string & name() const
Returns the name of the variable.
Definition: linear_solver.h:1053
operations_research::MPSolverParameters::kUnknownDoubleParamValue
static const double kUnknownDoubleParamValue
Definition: linear_solver.h:1432
operations_research::MPSolverParameters::RELATIVE_MIP_GAP
@ RELATIVE_MIP_GAP
Limit for relative MIP gap.
Definition: linear_solver.h:1363
operations_research::MPSolver::SetCallback
void SetCallback(MPCallback *mp_callback)
Definition: linear_solver.cc:1556
operations_research::MPSolverInterface::ExtractNewConstraints
virtual void ExtractNewConstraints()=0
operations_research::MPConstraint::dual_value
double dual_value() const
Advanced usage: returns the dual value of the constraint in the current solution (only available for ...
Definition: linear_solver.cc:135
operations_research::MPSolverInterface::last_variable_index_
int last_variable_index_
Definition: linear_solver.h:1730
int64
int64_t int64
Definition: integral_types.h:34
operations_research::MPSolverParameters
This class stores parameter settings for LP and MIP solvers.
Definition: linear_solver.h:1358
operations_research::MPConstraint::ub
double ub() const
Returns the upper bound.
Definition: linear_solver.h:1210
operations_research::MPSolverInterface::IsLP
virtual bool IsLP() const =0
operations_research::MPSolver::IsMIP
bool IsMIP() const
Definition: linear_solver.cc:324
operations_research::ToString
const absl::string_view ToString(MPSolver::OptimizationProblemType optimization_problem_type)
Definition: linear_solver.cc:568
operations_research::LinearRange
An expression of the form:
Definition: linear_expr.h:192
operations_research::MPSolverInterface::SetUnsupportedDoubleParam
void SetUnsupportedDoubleParam(MPSolverParameters::DoubleParam param)
Definition: linear_solver.cc:1735
operations_research::MPSolverInterface::CheckSolutionIsSynchronized
bool CheckSolutionIsSynchronized() const
Definition: linear_solver.cc:1648
operations_research::MPSolver::SetGurobiLibraryPath
static void SetGurobiLibraryPath(const std::string &full_library_path)
Definition: gurobi_environment.cc:260
index
int index
Definition: pack.cc:508
operations_research::MPVariable::branching_priority
int branching_priority() const
Advanced usage: Certain MIP solvers (e.g.
Definition: linear_solver.h:1120
operations_research::MPSolverInterface::Reset
virtual void Reset()=0
offset_
const int64 offset_
Definition: interval.cc:2076
operations_research::MPSolver::VerifySolution
bool VerifySolution(double tolerance, bool log_errors) const
Advanced usage: Verifies the correctness of the solution.
Definition: linear_solver.cc:1334
operations_research::MPSolver::ProblemType
virtual OptimizationProblemType ProblemType() const
Returns the optimization problem type set at construction.
Definition: linear_solver.h:282
operations_research::MPObjective::SetMinimization
void SetMinimization()
Sets the optimization direction to minimize.
Definition: linear_solver.h:983
operations_research::MPSolverInterface::ValidFileExtensionForParameterFile
virtual std::string ValidFileExtensionForParameterFile() const
Definition: linear_solver.cc:1802
operations_research::SatInterface
Definition: sat_interface.cc:41
operations_research::BopInterface
Definition: bop_interface.cc:50
operations_research::AbslUnparseFlag
std::string AbslUnparseFlag(MPSolver::OptimizationProblemType solver_type)
Definition: linear_solver.h:917
operations_research::MPSolverInterface::SupportsCallbacks
virtual bool SupportsCallbacks() const
Definition: linear_solver.h:1709
operations_research::MPSolver::MakeRowConstraint
MPConstraint * MakeRowConstraint()
Creates a constraint with -infinity and +infinity bounds.
Definition: linear_solver.cc:1130
operations_research::MPConstraint::set_is_lazy
void set_is_lazy(bool laziness)
Advanced usage: sets the constraint "laziness".
Definition: linear_solver.h:1237
operations_research::MPSolver::CPLEX_LINEAR_PROGRAMMING
@ CPLEX_LINEAR_PROGRAMMING
Definition: linear_solver.h:201
operations_research::MPSolverInterface::SynchronizationStatus
SynchronizationStatus
Definition: linear_solver.h:1516
operations_research::MPVariable::unrounded_solution_value
double unrounded_solution_value() const
Advanced usage: unrounded solution value.
Definition: linear_solver.cc:272
operations_research::MPSolverParameters::kDefaultPrimalTolerance
static const double kDefaultPrimalTolerance
Definition: linear_solver.h:1441
operations_research::MPSolver::SetTimeLimit
void SetTimeLimit(absl::Duration time_limit)
Definition: linear_solver.h:687
operations_research::MPSolverInterface::nodes
virtual int64 nodes() const =0
operations_research::MPVariable::MPVariableSolutionValueTest
friend class MPVariableSolutionValueTest
Definition: linear_solver.h:1135
operations_research::MPSolver::GetSolverSpecificParametersAsString
std::string GetSolverSpecificParametersAsString() const
Definition: linear_solver.h:617
operations_research::MPSolverInterface::SetCoefficient
virtual void SetCoefficient(MPConstraint *const constraint, const MPVariable *const variable, double new_value, double old_value)=0
operations_research::MPSolverParameters::INCREMENTALITY
@ INCREMENTALITY
Advanced usage: incrementality from one solve to the next.
Definition: linear_solver.h:1383
operations_research::MPVariable::basis_status
MPSolver::BasisStatus basis_status() const
Advanced usage: returns the basis status of the variable in the current solution (only available for ...
Definition: linear_solver.cc:286
operations_research::MPConstraint::name
const std::string & name() const
Returns the name of the constraint.
Definition: linear_solver.h:1178
operations_research::MPSolverInterface::SetIntegerParamToUnsupportedValue
virtual void SetIntegerParamToUnsupportedValue(MPSolverParameters::IntegerParam param, int value)
Definition: linear_solver.cc:1748
operations_research::MPConstraint::MPConstraint
MPConstraint(int index, double lb, double ub, const std::string &name, MPSolverInterface *const interface_in)
Definition: linear_solver.h:1284
operations_research::MPObjective::SetOffset
void SetOffset(double value)
Sets the constant term in the objective.
Definition: linear_solver.cc:191
operations_research::MPConstraint::index
int index() const
Returns the index of the constraint in the MPSolver::constraints_.
Definition: linear_solver.h:1243
operations_research::MPSolver::Solve
ResultStatus Solve()
Solves the problem using the default parameter values.
Definition: linear_solver.cc:1203
operations_research::MPSolverInterface::SetCommonParameters
void SetCommonParameters(const MPSolverParameters &param)
Definition: linear_solver.cc:1707
operations_research::MPSolverParameters::ScalingValues
ScalingValues
Advanced usage: Scaling options.
Definition: linear_solver.h:1419
operations_research::AbslParseFlag
bool AbslParseFlag(const absl::string_view text, MPSolver::OptimizationProblemType *solver_type, std::string *error)
Definition: linear_solver.cc:580
operations_research::MPSolverInterface::BranchingPriorityChangedForVariable
virtual void BranchingPriorityChangedForVariable(int var_index)
Definition: linear_solver.h:1605
operations_research::MPSolverInterface::row_status
virtual MPSolver::BasisStatus row_status(int constraint_index) const =0
operations_research::MPVariable::MPVariable
MPVariable(int index, double lb, double ub, bool integer, const std::string &name, MPSolverInterface *const interface_in)
Definition: linear_solver.h:1143
operations_research::MPCallback
Definition: linear_solver_callback.h:140
operations_research::MPSolverParameters::Reset
void Reset()
Sets all parameters to their default value.
Definition: linear_solver.cc:1944
operations_research::MPSolver::Clear
void Clear()
Clears the objective (including the optimization direction), all variables and constraints.
Definition: linear_solver.cc:1036
operations_research::MPConstraint::set_dual_value
void set_dual_value(double dual_value)
Definition: linear_solver.h:1296
operations_research::MPConstraint::is_lazy
bool is_lazy() const
Advanced usage: returns true if the constraint is "lazy" (see below).
Definition: linear_solver.h:1222
operations_research::MPSolverInterface::ExtractModel
void ExtractModel()
Definition: linear_solver.cc:1612
operations_research::MPSolverParameters::IncrementalityValues
IncrementalityValues
Advanced usage: Incrementality options.
Definition: linear_solver.h:1407
operations_research::MPVariable::set_solution_value
void set_solution_value(double value)
Definition: linear_solver.h:1154
operations_research::MPSolverInterface::SetPresolveMode
virtual void SetPresolveMode(int value)=0
operations_research::MPSolverInterface::CheckSolutionIsSynchronizedAndExists
bool CheckSolutionIsSynchronizedAndExists() const
Definition: linear_solver.h:1635
operations_research::MPSolver::XPRESS_MIXED_INTEGER_PROGRAMMING
@ XPRESS_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:204
operations_research::MPConstraint::GetCoefficient
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...
Definition: linear_solver.cc:89
operations_research::MPVariable::reduced_cost
double reduced_cost() const
Advanced usage: returns the reduced cost of the variable in the current solution (only available for ...
Definition: linear_solver.cc:277
operations_research::MPSolver::nodes
int64 nodes() const
Returns the number of branch-and-bound nodes evaluated during the solve.
Definition: linear_solver.cc:1486
operations_research::MPSolverInterface::AddRowConstraint
virtual void AddRowConstraint(MPConstraint *const ct)=0
operations_research::MPConstraint::basis_status
MPSolver::BasisStatus basis_status() const
Advanced usage: returns the basis status of the constraint.
Definition: linear_solver.cc:144
operations_research::MPSolverParameters::PRIMAL
@ PRIMAL
Primal simplex.
Definition: linear_solver.h:1401
operations_research::MPSolverInterface::SolverVersion
virtual std::string SolverVersion() const =0
operations_research::MPSolverParameters::MPSolverParameters
MPSolverParameters()
The constructor sets all parameters to their default value.
Definition: linear_solver.cc:1825
operations_research::MPSolverParameters::kDefaultIntegerParamValue
static const int kDefaultIntegerParamValue
Definition: linear_solver.h:1429
timer.h
operations_research::MPSolver::SAT_INTEGER_PROGRAMMING
@ SAT_INTEGER_PROGRAMMING
Definition: linear_solver.h:213
operations_research::MPSolver::OwnsVariable
bool OwnsVariable(const MPVariable *var) const
Definition: linear_solver.cc:1492
operations_research::MPSolverInterface::set_constraint_as_extracted
void set_constraint_as_extracted(int ct_index, bool extracted)
Definition: linear_solver.h:1667
operations_research::MPSolverInterface::Solve
virtual MPSolver::ResultStatus Solve(const MPSolverParameters &param)=0
operations_research::MPSolver::ABNORMAL
@ ABNORMAL
abnormal, i.e., error of some kind.
Definition: linear_solver.h:435
operations_research::MPVariable::SetBounds
void SetBounds(double lb, double ub)
Sets both the lower and upper bounds.
Definition: linear_solver.cc:298
operations_research::MPSolver::LoadGurobiSharedLibrary
static bool LoadGurobiSharedLibrary()
Definition: gurobi_environment.cc:245
operations_research::MPSolverInterface::ResetExtractionInformation
void ResetExtractionInformation()
Definition: linear_solver.cc:1640
operations_research::MPSolverInterface::objective_value
double objective_value() const
Definition: linear_solver.cc:1687
operations_research::MPSolverInterface::kUnknownNumberOfNodes
static constexpr int64 kUnknownNumberOfNodes
Definition: linear_solver.h:1534
operations_research::SCIPInterface
Definition: scip_interface.cc:48
operations_research::MPSolver::SetNumThreads
absl::Status SetNumThreads(int num_threads)
Sets the number of threads to use by the underlying solver.
Definition: linear_solver.cc:334
operations_research::MPSolver::wall_time
int64 wall_time() const
Definition: linear_solver.h:792
operations_research::MPSolverInterface::quiet_
bool quiet_
Definition: linear_solver.h:1736
operations_research::LinearExpr
LinearExpr models a quantity that is linear in the decision variables (MPVariable) of an optimization...
Definition: linear_expr.h:114
operations_research::MPSolverParameters::INCREMENTALITY_OFF
@ INCREMENTALITY_OFF
Start solve from scratch.
Definition: linear_solver.h:1409
operations_research::MPVariable::SLMInterface
friend class SLMInterface
Definition: linear_solver.h:1130
operations_research::MPSolver::LookupVariableOrNull
MPVariable * LookupVariableOrNull(const std::string &var_name) const
Looks up a variable by name, and returns nullptr if it does not exist.
Definition: linear_solver.cc:615
operations_research::MPSolverInterface::maximize_
bool maximize_
Definition: linear_solver.h:1725
operations_research::MPSolverParameters::kUnknownIntegerParamValue
static const int kUnknownIntegerParamValue
Definition: linear_solver.h:1433
operations_research::MPSolverInterface::SetObjectiveOffset
virtual void SetObjectiveOffset(double value)=0
operations_research::MPSolver::ParseSolverType
static bool ParseSolverType(absl::string_view solver_id, OptimizationProblemType *type)
Parses the name of the solver.
Definition: linear_solver.cc:531
operations_research::MPSolverInterface::iterations
virtual int64 iterations() const =0
operations_research::MPVariable::lb
double lb() const
Returns the lower bound.
Definition: linear_solver.h:1074
operations_research::MPObjective::CplexInterface
friend class CplexInterface
Definition: linear_solver.h:1024
operations_research::MPVariable::SetInteger
void SetInteger(bool integer)
Sets the integrality requirement of the variable.
Definition: linear_solver.cc:307
objective_
IntVar *const objective_
Definition: search.cc:2945
operations_research::MPConstraint::SLMInterface
friend class SLMInterface
Definition: linear_solver.h:1272
operations_research::MPSolverInterface::SetNumThreads
virtual absl::Status SetNumThreads(int num_threads)
Definition: linear_solver.cc:1754
operations_research::MPSolver::SCIP_MIXED_INTEGER_PROGRAMMING
@ SCIP_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:194
operations_research::MPSolver::~MPSolver
virtual ~MPSolver()
Definition: linear_solver.cc:456
ct
const Constraint * ct
Definition: demon_profiler.cc:42
operations_research::MPSolverInterface::AddVariable
virtual void AddVariable(MPVariable *const var)=0
operations_research::MPSolverInterface::SetCallback
virtual void SetCallback(MPCallback *mp_callback)
Definition: linear_solver.h:1705
operations_research::MPVariable::integer
bool integer() const
Returns the integrality requirement of the variable.
Definition: linear_solver.h:1059
operations_research::MPSolverInterface::SetParameters
virtual void SetParameters(const MPSolverParameters &param)=0
operations_research::MPSolverInterface::best_objective_bound
virtual double best_objective_bound() const =0
operations_research::MPSolver::TimeLimit
absl::Duration TimeLimit() const
Definition: linear_solver.h:686
operations_research::MPSolver::GUROBI_MIXED_INTEGER_PROGRAMMING
@ GUROBI_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:200
operations_research::MPSolverParameters::IntegerParam
IntegerParam
Enumeration of parameters that take integer or categorical values.
Definition: linear_solver.h:1377
operations_research::MPSolver::MakeVarArray
void MakeVarArray(int nb, double lb, double ub, bool integer, const std::string &name_prefix, std::vector< MPVariable * > *vars)
Creates an array of variables.
Definition: linear_solver.cc:1092
operations_research::MPSolverParameters::SCALING_ON
@ SCALING_ON
Scaling is on.
Definition: linear_solver.h:1423
operations_research::MPSolverInterface::SetRelativeMipGap
virtual void SetRelativeMipGap(double value)=0
operations_research::MPSolver::SupportsCallbacks
bool SupportsCallbacks() const
Definition: linear_solver.cc:1560
operations_research::MPSolverInterface::CheckBestObjectiveBoundExists
virtual bool CheckBestObjectiveBoundExists() const
Definition: linear_solver.cc:1672
operations_research::MPObjective::MaximizeLinearExpr
void MaximizeLinearExpr(const LinearExpr &linear_expr)
Resets the current objective to maximize linear_expr.
Definition: linear_solver.h:968
operations_research::MPSolver::CBC_MIXED_INTEGER_PROGRAMMING
@ CBC_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:196
operations_research::CBCInterface
Definition: cbc_interface.cc:45
operations_research::MPSolver::FillSolutionResponseProto
void FillSolutionResponseProto(MPSolutionResponse *response) const
Encodes the current solution in a solution response protocol buffer.
Definition: linear_solver.cc:806
operations_research::MPSolverInterface::SetMIPParameters
void SetMIPParameters(const MPSolverParameters &param)
Definition: linear_solver.cc:1728
operations_research::MPSolver::LoadSolutionFromProto
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...
Definition: linear_solver.cc:973
operations_research::MPSolverInterface
Definition: linear_solver.h:1514
operations_research::MPSolver::GLPKInterface
friend class GLPKInterface
Definition: linear_solver.h:800
operations_research::MPSolver::MutableObjective
MPObjective * MutableObjective()
Returns the mutable objective object.
Definition: linear_solver.h:417
operations_research::MPSolverInterface::SetScalingMode
virtual void SetScalingMode(int value)=0
operations_research::MPSolverInterface::Write
virtual void Write(const std::string &filename)
Definition: linear_solver.cc:1608
operations_research::MPSolver::AT_UPPER_BOUND
@ AT_UPPER_BOUND
Definition: linear_solver.h:643
operations_research::MPSolver::ClampSolutionWithinBounds
absl::Status ClampSolutionWithinBounds()
Resets values of out of bound variables to the corresponding bound and returns an error if any of the...
Definition: linear_solver.cc:1300
operations_research::MPSolverParameters::PRESOLVE
@ PRESOLVE
Advanced usage: presolve mode.
Definition: linear_solver.h:1379
operations_research::MPSolver::MakeVar
MPVariable * MakeVar(double lb, double ub, bool integer, const std::string &name)
Creates a variable with the given bounds, integrality requirement and name.
Definition: linear_solver.cc:1064
operations_research::MPSolver::EnableOutput
void EnableOutput()
Enables solver logging.
Definition: linear_solver.cc:1480
operations_research::MPSolver::MakeNumVar
MPVariable * MakeNumVar(double lb, double ub, const std::string &name)
Creates a continuous variable.
Definition: linear_solver.cc:1078
operations_research::MPSolver::SetSolverSpecificParametersAsString
bool SetSolverSpecificParametersAsString(const std::string &parameters)
Advanced usage: pass solver specific parameters in text format.
Definition: linear_solver.cc:345
operations_research::MPSolver::Objective
const MPObjective & Objective() const
Returns the objective object.
Definition: linear_solver.h:414
operations_research::MPSolver::OPTIMAL
@ OPTIMAL
optimal.
Definition: linear_solver.h:427
operations_research::MPSolverInterface::SetDoubleParamToUnsupportedValue
void SetDoubleParamToUnsupportedValue(MPSolverParameters::DoubleParam param, double value)
Definition: linear_solver.cc:1743
operations_research::MPSolver::ResultStatus
ResultStatus
The status of solving the problem.
Definition: linear_solver.h:425
operations_research::MPSolver::XpressInterface
friend class XpressInterface
Definition: linear_solver.h:806
operations_research::MPSolver::OptimizationProblemType
OptimizationProblemType
The type of problems (LP or MIP) that will be solved and the underlying solver (GLOP,...
Definition: linear_solver.h:185
coefficient
int64 coefficient
Definition: routing_search.cc:973
operations_research::MPVariable::ub
double ub() const
Returns the upper bound.
Definition: linear_solver.h:1077
operations_research::MPSolverInterface::ExtractObjective
virtual void ExtractObjective()=0
operations_research::MPSolver::Name
const std::string & Name() const
Returns the name of the model set at construction.
Definition: linear_solver.h:277
operations_research::MPSolver::FREE
@ FREE
Definition: linear_solver.h:641
operations_research::MPSolverParameters::GetDoubleParam
double GetDoubleParam(MPSolverParameters::DoubleParam param) const
Returns the value of a double parameter.
Definition: linear_solver.cc:1954
operations_research::MPConstraint::SetBounds
void SetBounds(double lb, double ub)
Sets both the lower and upper bounds.
Definition: linear_solver.cc:126
operations_research::MPSolverParameters::ResetIntegerParam
void ResetIntegerParam(MPSolverParameters::IntegerParam param)
Sets an integer parameter to its default value (default value defined in MPSolverParameters if it exi...
Definition: linear_solver.cc:1919
operations_research::MPSolver::MODEL_INVALID
@ MODEL_INVALID
the model is trivially invalid (NaN coefficients, etc).
Definition: linear_solver.h:437
operations_research::MPVariable::SetUB
void SetUB(double ub)
Sets the upper bound.
Definition: linear_solver.h:1083
operations_research::MPSolver::constraints
const std::vector< MPConstraint * > & constraints() const
Returns the array of constraints handled by the MPSolver.
Definition: linear_solver.h:366
operations_research::MPSolverInterface::SetDualTolerance
virtual void SetDualTolerance(double value)=0
operations_research::MPSolver::Write
void Write(const std::string &file_name)
Writes the model using the solver internal write function.
Definition: linear_solver.cc:1235
operations_research::MPSolverInterface::SetUnsupportedIntegerParam
virtual void SetUnsupportedIntegerParam(MPSolverParameters::IntegerParam param)
Definition: linear_solver.cc:1739
operations_research::MPSolverInterface::SetConstraintBounds
virtual void SetConstraintBounds(int index, double lb, double ub)=0
operations_research::MPObjective::maximization
bool maximization() const
Is the optimization direction set to maximize?
Definition: linear_solver.cc:244
operations_research::MPObjective::SLMInterface
friend class SLMInterface
Definition: linear_solver.h:1022
operations_research::MPSolver::GetNumThreads
int GetNumThreads() const
Returns the number of threads to be used during solve.
Definition: linear_solver.h:608
operations_research::MPObjective::GLPKInterface
friend class GLPKInterface
Definition: linear_solver.h:1020
operations_research::MPSolverParameters::BARRIER
@ BARRIER
Barrier algorithm.
Definition: linear_solver.h:1403
operations_research::MPObjective::Value
double Value() const
Returns the objective value of the best solution found so far.
Definition: linear_solver.cc:248
operations_research::MPSolver::SolveWithProto
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...
Definition: linear_solver.cc:834
operations_research::MPSolverInterface::SetLpAlgorithm
virtual void SetLpAlgorithm(int value)=0
operations_research::MPConstraint::terms
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:1202
operations_research::MPObjective::OptimizeLinearExpr
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...
Definition: linear_solver.cc:206
operations_research::MPSolver::BOP_INTEGER_PROGRAMMING
@ BOP_INTEGER_PROGRAMMING
Definition: linear_solver.h:208
operations_research::MPSolverInterface::SetPrimalTolerance
virtual void SetPrimalTolerance(double value)=0
operations_research::MPObjective
A class to express a linear objective.
Definition: linear_solver.h:923
operations_research::MPSolverInterface::SetStartingLpBasis
virtual void SetStartingLpBasis(const std::vector< MPSolver::BasisStatus > &variable_statuses, const std::vector< MPSolver::BasisStatus > &constraint_statuses)
Definition: linear_solver.h:1693
DISALLOW_COPY_AND_ASSIGN
#define DISALLOW_COPY_AND_ASSIGN(TypeName)
Definition: macros.h:29
operations_research::MPSolver::NumVariables
int NumVariables() const
Returns the number of variables.
Definition: linear_solver.h:294
operations_research::MPSolverParameters::PRIMAL_TOLERANCE
@ PRIMAL_TOLERANCE
Advanced usage: tolerance for primal feasibility of basic solutions.
Definition: linear_solver.h:1371
operations_research::MPSolver::DurationSinceConstruction
absl::Duration DurationSinceConstruction() const
Definition: linear_solver.h:692
operations_research::MPVariable::CplexInterface
friend class CplexInterface
Definition: linear_solver.h:1132
operations_research::MPSolver::time_limit_in_secs
double time_limit_in_secs() const
Definition: linear_solver.h:787
operations_research::MPSolver::SolverVersion
std::string SolverVersion() const
Returns a string describing the underlying solver and its version.
Definition: linear_solver.cc:326
operations_research::MPSolverInterface::solver_
MPSolver *const solver_
Definition: linear_solver.h:1718
operations_research::MPConstraint::GLPKInterface
friend class GLPKInterface
Definition: linear_solver.h:1270
operations_research::MPSolver::BasisStatus
BasisStatus
Advanced usage: possible basis status values for a variable and the slack variable of a linear constr...
Definition: linear_solver.h:640
operations_research::MPSolver::MPSolver
MPSolver(const std::string &name, OptimizationProblemType problem_type)
Create a solver with the given name and underlying solver backend.
Definition: linear_solver.cc:444
operations_research::MPSolver::LoadModelFromProto
MPSolverResponseStatus LoadModelFromProto(const MPModelProto &input_model, std::string *error_message)
Loads model from protocol buffer.
Definition: linear_solver.cc:635
operations_research::MPSolverParameters::kDefaultDoubleParamValue
static const double kDefaultDoubleParamValue
Definition: linear_solver.h:1428
operations_research::MPSolver::SLMInterface
friend class SLMInterface
Definition: linear_solver.h:807
absl
Definition: cleanup.h:22
operations_research::MPSolverInterface::SOLUTION_SYNCHRONIZED
@ SOLUTION_SYNCHRONIZED
Definition: linear_solver.h:1526
operations_research::MPObjective::AddLinearExpr
void AddLinearExpr(const LinearExpr &linear_expr)
Adds linear_expr to the current objective, does not change the direction.
Definition: linear_solver.cc:218
linear_solver_callback.h
operations_research::MPConstraint::indicator_variable
const MPVariable * indicator_variable() const
Definition: linear_solver.h:1239
operations_research::MPSolverResponseStatusIsRpcError
bool MPSolverResponseStatusIsRpcError(MPSolverResponseStatus status)
Definition: linear_solver.cc:1564
operations_research::MPSolverInterface::set_quiet
void set_quiet(bool quiet_value)
Definition: linear_solver.h:1674
operations_research::MPSolver::ComputeConstraintActivities
std::vector< double > ComputeConstraintActivities() const
Advanced usage: compute the "activities" of all constraints, which are the sums of their linear terms...
Definition: linear_solver.cc:1318
operations_research::MPSolverInterface::constraint_is_extracted
bool constraint_is_extracted(int ct_index) const
Definition: linear_solver.h:1664
operations_research::MPSolver::ComputeExactConditionNumber
double ComputeExactConditionNumber() const
Advanced usage: computes the exact condition number of the current scaled basis: L1norm(B) * L1norm(i...
Definition: linear_solver.cc:1488
operations_research::MPSolverParameters::INCREMENTALITY_ON
@ INCREMENTALITY_ON
Reuse results from previous solve as much as the underlying solver allows.
Definition: linear_solver.h:1415
operations_research::kDefaultPrimalTolerance
constexpr double kDefaultPrimalTolerance
Definition: linear_solver.h:162
operations_research::MPSolverInterface::ClearObjective
virtual void ClearObjective()=0
operations_research::MPSolverParameters::DoubleParam
DoubleParam
Enumeration of parameters that take continuous values.
Definition: linear_solver.h:1361
operations_research::MPVariable::solution_value
double solution_value() const
Returns the value of the variable in the current solution.
Definition: linear_solver.cc:263
operations_research::MPSolver::OutputIsEnabled
bool OutputIsEnabled() const
Controls (or queries) the amount of output produced by the underlying solver.
Definition: linear_solver.cc:1478
operations_research::MPSolver::variables
const std::vector< MPVariable * > & variables() const
Returns the array of variables handled by the MPSolver.
Definition: linear_solver.h:300
operations_research::MPSolverInterface::DirectlySolveProto
virtual absl::optional< MPSolutionResponse > DirectlySolveProto(const MPModelRequest &request)
Definition: linear_solver.h:1549
operations_research::MPSolverInterface::kUnknownNumberOfIterations
static constexpr int64 kUnknownNumberOfIterations
Definition: linear_solver.h:1531
operations_research::operator<<
std::ostream & operator<<(std::ostream &out, const Assignment &assignment)
Definition: constraint_solver/assignment.cc:1089
operations_research::MPVariable::SetBranchingPriority
void SetBranchingPriority(int priority)
Definition: linear_solver.cc:316
operations_research::MPVariable::SetLB
void SetLB(double lb)
Sets the lower bound.
Definition: linear_solver.h:1080
operations_research::MPSolver::KNAPSACK_MIXED_INTEGER_PROGRAMMING
@ KNAPSACK_MIXED_INTEGER_PROGRAMMING
Definition: linear_solver.h:216
operations_research::MPSolver::SetHint
void SetHint(std::vector< std::pair< const MPVariable *, double > > hint)
Sets a hint for solution.
Definition: linear_solver.cc:1530
operations_research::MPSolverInterface::SetObjectiveCoefficient
virtual void SetObjectiveCoefficient(const MPVariable *const variable, double coefficient)=0
operations_research::MPVariable::set_reduced_cost
void set_reduced_cost(double reduced_cost)
Definition: linear_solver.h:1155
operations_research::MPSolverInterface::result_status
MPSolver::ResultStatus result_status() const
Definition: linear_solver.h:1677
operations_research::MPSolverInterface::last_constraint_index_
int last_constraint_index_
Definition: linear_solver.h:1728
operations_research::MPSolverParameters::PRESOLVE_ON
@ PRESOLVE_ON
Presolve is on.
Definition: linear_solver.h:1393
operations_research::MPVariable::KnapsackInterface
friend class KnapsackInterface
Definition: linear_solver.h:1138
operations_research::MPObjective::BestBound
double BestBound() const
Returns the best objective bound.
Definition: linear_solver.cc:255
operations_research::MPSolverInterface::trivial_worst_objective_bound
double trivial_worst_objective_bound() const
Definition: linear_solver.cc:1682
operations_research::MPObjective::Clear
void Clear()
Clears the offset, all variables and coefficients, and the optimization direction.
Definition: linear_solver.cc:226
operations_research::MPConstraint::lb
double lb() const
Returns the lower bound.
Definition: linear_solver.h:1207
commandlineflags.h
operations_research::MPSolverInterface::quiet
bool quiet() const
Definition: linear_solver.h:1672
parameters
SatParameters parameters
Definition: cp_model_fz_solver.cc:107
operations_research::MPSolverParameters::SetDoubleParam
void SetDoubleParam(MPSolverParameters::DoubleParam param, double value)
Sets a double parameter to a specific value.
Definition: linear_solver.cc:1835
operations_research::MPSolver::SetStartingLpBasis
void SetStartingLpBasis(const std::vector< MPSolver::BasisStatus > &variable_statuses, const std::vector< MPSolver::BasisStatus > &constraint_statuses)
Advanced usage: Incrementality.
Definition: linear_solver.cc:1058
operations_research::MPSolverInterface::column_status
virtual MPSolver::BasisStatus column_status(int variable_index) const =0
name
const std::string name
Definition: default_search.cc:807
operations_research::MPObjective::SetOptimizationDirection
void SetOptimizationDirection(bool maximize)
Sets the optimization direction (maximize: true or minimize: false).
Definition: linear_solver.cc:233
operations_research::MPSolverInterface::AddIndicatorConstraint
virtual bool AddIndicatorConstraint(MPConstraint *const ct)
Definition: linear_solver.h:1579
operations_research::MPSolver::SupportsProblemType
static bool SupportsProblemType(OptimizationProblemType problem_type)
Whether the given problem type is supported (this will depend on the targets that you linked).
Definition: linear_solver.cc:459
operations_research::MPSolver::INFEASIBLE
@ INFEASIBLE
proven infeasible.
Definition: linear_solver.h:431
operations_research::MPSolverInterface::last_variable_index
int last_variable_index() const
Definition: linear_solver.h:1656
operations_research::MPConstraint::CplexInterface
friend class CplexInterface
Definition: linear_solver.h:1274
operations_research::MPSolver::GUROBI_LINEAR_PROGRAMMING
@ GUROBI_LINEAR_PROGRAMMING
Definition: linear_solver.h:199
operations_research::MPSolver::iterations
int64 iterations() const
Returns the number of simplex iterations.
Definition: linear_solver.cc:1484
operations_research::MPSolver::CLP_LINEAR_PROGRAMMING
@ CLP_LINEAR_PROGRAMMING
Definition: linear_solver.h:188
operations_research::MPSolverInterface::sync_status_
SynchronizationStatus sync_status_
Definition: linear_solver.h:1720
operations_research::MPSolverParameters::kDefaultPresolve
static const PresolveValues kDefaultPresolve
Definition: linear_solver.h:1443
operations_research::MPSolver::BASIC
@ BASIC
Definition: linear_solver.h:645
operations_research::MPSolverInterface::InvalidateSolutionSynchronization
void InvalidateSolutionSynchronization()
Definition: linear_solver.cc:1692
operations_research::MPSolver::MakeNumVarArray
void MakeNumVarArray(int nb, double lb, double ub, const std::string &name, std::vector< MPVariable * > *vars)
Creates an array of continuous variables.
Definition: linear_solver.cc:1109
operations_research::MPSolverInterface::SetVariableInteger
virtual void SetVariableInteger(int index, bool integer)=0
operations_research::GurobiInterface
Definition: gurobi_interface.cc:41
operations_research::MPSolver::UNBOUNDED
@ UNBOUNDED
proven unbounded.
Definition: linear_solver.h:433
operations_research::MPSolver::NOT_SOLVED
@ NOT_SOLVED
not been solved yet.
Definition: linear_solver.h:439
operations_research::MPVariable::GLPKInterface
friend class GLPKInterface
Definition: linear_solver.h:1128