OR-Tools  8.1
constraint_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 
62 
63 #ifndef OR_TOOLS_CONSTRAINT_SOLVER_CONSTRAINT_SOLVER_H_
64 #define OR_TOOLS_CONSTRAINT_SOLVER_CONSTRAINT_SOLVER_H_
65 
66 #include <functional>
67 #include <iosfwd>
68 #include <memory>
69 #include <random>
70 #include <string>
71 #include <utility>
72 #include <vector>
73 
74 #include "absl/base/macros.h"
75 #include "absl/container/flat_hash_map.h"
76 #include "absl/container/flat_hash_set.h"
77 #include "absl/random/distributions.h"
78 #include "absl/random/random.h"
79 #include "absl/strings/str_format.h"
81 #include "ortools/base/hash.h"
83 #include "ortools/base/logging.h"
84 #include "ortools/base/macros.h"
85 #include "ortools/base/map_util.h"
86 #include "ortools/base/sysinfo.h"
87 #include "ortools/base/timer.h"
93 #include "ortools/util/tuple_set.h"
94 
95 #if !defined(SWIG)
96 ABSL_DECLARE_FLAG(int64, cp_random_seed);
97 #endif // !defined(SWIG)
98 
99 class File;
100 
101 namespace operations_research {
102 
103 class Assignment;
104 class AssignmentProto;
105 class BaseObject;
106 class CpArgument;
107 class CpConstraint;
108 class CpIntegerExpression;
109 class CpIntervalVariable;
110 class CpSequenceVariable;
111 class CastConstraint;
112 class Constraint;
113 class Decision;
114 class DecisionBuilder;
115 class DecisionVisitor;
116 class Demon;
117 class DemonProfiler;
118 class LocalSearchProfiler;
119 class Dimension;
120 class DisjunctiveConstraint;
121 class ExpressionCache;
122 class IntExpr;
123 class IntTupleSet;
124 class IntVar;
125 class IntVarAssignment;
126 class IntVarElement;
127 class IntervalVar;
128 class IntervalVarAssignment;
129 class IntervalVarElement;
130 class IntVarLocalSearchFilter;
131 class LocalSearchFilter;
132 class LocalSearchFilterManager;
133 class LocalSearchOperator;
134 class LocalSearchPhaseParameters;
135 class ModelCache;
136 class ModelVisitor;
137 class OptimizeVar;
138 class Pack;
139 class PropagationBaseObject;
140 class PropagationMonitor;
141 class LocalSearchMonitor;
142 class Queue;
143 class RevBitMatrix;
144 class RevBitSet;
145 class RegularLimit;
146 class RegularLimitParameters;
147 class Search;
148 class ImprovementSearchLimit;
149 class SearchLimit;
150 class SearchMonitor;
151 class SequenceVar;
152 class SequenceVarAssignment;
153 class SolutionCollector;
154 class SolutionPool;
155 class Solver;
156 class ConstraintSolverParameters;
157 class SymmetryBreaker;
158 struct StateInfo;
159 struct Trail;
160 template <class T>
161 class SimpleRevFIFO;
162 
163 inline int64 CpRandomSeed() {
164  return absl::GetFlag(FLAGS_cp_random_seed) == -1
165  ? absl::Uniform<int64>(absl::BitGen(), 0, kint64max)
166  : absl::GetFlag(FLAGS_cp_random_seed);
167 }
168 
173  public:
178  };
179 
183  };
184 
185  enum DisplayLevel { NONE = 0, NORMAL = 1, VERBOSE = 2 };
186 
190 
193 
197 
202 
207 
210 
214 
217 
221 
224 
227 
229 };
230 
248 class Solver {
249  public:
256  : variable(nullptr), expression(nullptr), maintainer(nullptr) {}
257  IntegerCastInfo(IntVar* const v, IntExpr* const e, Constraint* const c)
258  : variable(v), expression(e), maintainer(c) {}
262  };
263 
265  static constexpr int kNumPriorities = 3;
266 
272 
275 
280 
283 
291 
299 
307 
315 
321 
327 
332 
337 
341 
345  };
346  // TODO(user): add HIGHEST_MIN and LOWEST_MAX.
347 
353 
356 
359 
362 
365 
370 
374 
378  };
379 
396 
402  };
403 
410  };
411 
425  };
426 
440 
456 
459 
468 
479 
487 
494 
502 
509 
521 
530 
534 
539 
549 
554 
562  SIMPLELNS
563  };
564 
572  LK,
573 
581 
588  TSPLNS
589  };
590 
597  GE,
599  LE,
602  EQ
603  };
604 
612 
615 
618  };
619 
625 
628 
631 
634 
637 
640 
643 
646 
651  };
652 
658 
661 
664 
667 
670 
673 
678 
682  AVOID_DATE
683  };
684 
694 
699 
704 
708 
712  };
713 
717 
719  enum SolverState {
732  };
733 
736 
738  typedef std::function<int64(int64)> IndexEvaluator1;
739  typedef std::function<int64(int64, int64)> IndexEvaluator2;
740  typedef std::function<int64(int64, int64, int64)> IndexEvaluator3;
741 
742  typedef std::function<bool(int64)> IndexFilter1;
743 
744  typedef std::function<IntVar*(int64)> Int64ToIntVar;
745 
746  typedef std::function<int64(Solver* solver, const std::vector<IntVar*>& vars,
747  int64 first_unbound, int64 last_unbound)>
749 
750  typedef std::function<int64(const IntVar* v, int64 id)> VariableValueSelector;
751  typedef std::function<bool(int64, int64, int64)> VariableValueComparator;
752  typedef std::function<DecisionModification()> BranchSelector;
753  // TODO(user): wrap in swig.
754  typedef std::function<void(Solver*)> Action;
755  typedef std::function<void()> Closure;
756 
758  explicit Solver(const std::string& name);
759  Solver(const std::string& name, const ConstraintSolverParameters& parameters);
760  ~Solver();
761 
763  ConstraintSolverParameters parameters() const { return parameters_; }
765  // TODO(user): Move to constraint_solver_parameters.h.
766  static ConstraintSolverParameters DefaultSolverParameters();
767 
769 
773  template <class T>
774  void SaveValue(T* o) {
775  InternalSaveValue(o);
776  }
777 
790  template <typename T>
791  T* RevAlloc(T* object) {
792  return reinterpret_cast<T*>(SafeRevAlloc(object));
793  }
794 
801  template <typename T>
802  T* RevAllocArray(T* object) {
803  return reinterpret_cast<T*>(SafeRevAllocArray(object));
804  }
805 
839  void AddConstraint(Constraint* const c);
843  void AddCastConstraint(CastConstraint* const constraint,
844  IntVar* const target_var, IntExpr* const expr);
845 
887  bool Solve(DecisionBuilder* const db,
888  const std::vector<SearchMonitor*>& monitors);
889  bool Solve(DecisionBuilder* const db);
890  bool Solve(DecisionBuilder* const db, SearchMonitor* const m1);
891  bool Solve(DecisionBuilder* const db, SearchMonitor* const m1,
892  SearchMonitor* const m2);
893  bool Solve(DecisionBuilder* const db, SearchMonitor* const m1,
894  SearchMonitor* const m2, SearchMonitor* const m3);
895  bool Solve(DecisionBuilder* const db, SearchMonitor* const m1,
896  SearchMonitor* const m2, SearchMonitor* const m3,
897  SearchMonitor* const m4);
899 
908 
909  void NewSearch(DecisionBuilder* const db,
910  const std::vector<SearchMonitor*>& monitors);
911  void NewSearch(DecisionBuilder* const db);
912  void NewSearch(DecisionBuilder* const db, SearchMonitor* const m1);
913  void NewSearch(DecisionBuilder* const db, SearchMonitor* const m1,
914  SearchMonitor* const m2);
915  void NewSearch(DecisionBuilder* const db, SearchMonitor* const m1,
916  SearchMonitor* const m2, SearchMonitor* const m3);
917  void NewSearch(DecisionBuilder* const db, SearchMonitor* const m1,
918  SearchMonitor* const m2, SearchMonitor* const m3,
919  SearchMonitor* const m4);
920 
921  bool NextSolution();
922  void RestartSearch();
923  void EndSearch();
925 
934  bool SolveAndCommit(DecisionBuilder* const db,
935  const std::vector<SearchMonitor*>& monitors);
936  bool SolveAndCommit(DecisionBuilder* const db);
937  bool SolveAndCommit(DecisionBuilder* const db, SearchMonitor* const m1);
938  bool SolveAndCommit(DecisionBuilder* const db, SearchMonitor* const m1,
939  SearchMonitor* const m2);
940  bool SolveAndCommit(DecisionBuilder* const db, SearchMonitor* const m1,
941  SearchMonitor* const m2, SearchMonitor* const m3);
942 
944  bool CheckAssignment(Assignment* const solution);
945 
949  bool CheckConstraint(Constraint* const ct);
950 
952  SolverState state() const { return state_; }
953 
955  void Fail();
956 
957 #if !defined(SWIG)
958  void AddBacktrackAction(Action a, bool fast);
963 #endif
964 
965  std::string DebugString() const;
967 
969  static int64 MemoryUsage();
970 
975  absl::Time Now() const;
976 
979  int64 wall_time() const;
980 
982  int64 branches() const { return branches_; }
983 
985  int64 solutions() const;
986 
988  int64 unchecked_solutions() const;
989 
991  int64 demon_runs(DemonPriority p) const { return demon_runs_[p]; }
992 
994  int64 failures() const { return fails_; }
995 
997  int64 neighbors() const { return neighbors_; }
998 
1000  int64 filtered_neighbors() const { return filtered_neighbors_; }
1001 
1003  int64 accepted_neighbors() const { return accepted_neighbors_; }
1004 
1007  uint64 stamp() const;
1008 
1010  uint64 fail_stamp() const;
1011 
1014  return optimization_direction_;
1015  }
1017  optimization_direction_ = direction;
1018  }
1019 
1020  // All factories (MakeXXX methods) encapsulate creation of objects
1021  // through RevAlloc(). Hence, the Solver used for allocating the
1022  // returned object will retain ownership of the allocated memory.
1023  // Destructors are called upon backtrack, or when the Solver is
1024  // itself destructed.
1025 
1026  // ----- Int Variables and Constants -----
1027 
1029  IntVar* MakeIntVar(int64 min, int64 max, const std::string& name);
1030 
1032  IntVar* MakeIntVar(const std::vector<int64>& values, const std::string& name);
1033 
1035  IntVar* MakeIntVar(const std::vector<int>& values, const std::string& name);
1036 
1039 
1041  IntVar* MakeIntVar(const std::vector<int64>& values);
1042 
1044  IntVar* MakeIntVar(const std::vector<int>& values);
1045 
1047  IntVar* MakeBoolVar(const std::string& name);
1048 
1050  IntVar* MakeBoolVar();
1051 
1053  IntVar* MakeIntConst(int64 val, const std::string& name);
1054 
1056  IntVar* MakeIntConst(int64 val);
1057 
1061  void MakeIntVarArray(int var_count, int64 vmin, int64 vmax,
1062  const std::string& name, std::vector<IntVar*>* vars);
1065  void MakeIntVarArray(int var_count, int64 vmin, int64 vmax,
1066  std::vector<IntVar*>* vars);
1068  IntVar** MakeIntVarArray(int var_count, int64 vmin, int64 vmax,
1069  const std::string& name);
1070 
1074  void MakeBoolVarArray(int var_count, const std::string& name,
1075  std::vector<IntVar*>* vars);
1078  void MakeBoolVarArray(int var_count, std::vector<IntVar*>* vars);
1080  IntVar** MakeBoolVarArray(int var_count, const std::string& name);
1081 
1082  // ----- Integer Expressions -----
1083 
1085  IntExpr* MakeSum(IntExpr* const left, IntExpr* const right);
1087  IntExpr* MakeSum(IntExpr* const expr, int64 value);
1089  IntExpr* MakeSum(const std::vector<IntVar*>& vars);
1090 
1092  IntExpr* MakeScalProd(const std::vector<IntVar*>& vars,
1093  const std::vector<int64>& coefs);
1095  IntExpr* MakeScalProd(const std::vector<IntVar*>& vars,
1096  const std::vector<int>& coefs);
1097 
1099  IntExpr* MakeDifference(IntExpr* const left, IntExpr* const right);
1101  IntExpr* MakeDifference(int64 value, IntExpr* const expr);
1103  IntExpr* MakeOpposite(IntExpr* const expr);
1104 
1106  IntExpr* MakeProd(IntExpr* const left, IntExpr* const right);
1108  IntExpr* MakeProd(IntExpr* const expr, int64 value);
1109 
1111  IntExpr* MakeDiv(IntExpr* const expr, int64 value);
1113  IntExpr* MakeDiv(IntExpr* const numerator, IntExpr* const denominator);
1114 
1116  IntExpr* MakeAbs(IntExpr* const expr);
1118  IntExpr* MakeSquare(IntExpr* const expr);
1120  IntExpr* MakePower(IntExpr* const expr, int64 n);
1121 
1123  IntExpr* MakeElement(const std::vector<int64>& values, IntVar* const index);
1125  IntExpr* MakeElement(const std::vector<int>& values, IntVar* const index);
1126 
1130  IntExpr* MakeElement(IndexEvaluator1 values, IntVar* const index);
1137  IntExpr* MakeMonotonicElement(IndexEvaluator1 values, bool increasing,
1138  IntVar* const index);
1140  IntExpr* MakeElement(IndexEvaluator2 values, IntVar* const index1,
1141  IntVar* const index2);
1142 
1144  IntExpr* MakeElement(const std::vector<IntVar*>& vars, IntVar* const index);
1145 
1146 #if !defined(SWIG)
1147  IntExpr* MakeElement(Int64ToIntVar vars, int64 range_start, int64 range_end,
1149  IntVar* argument);
1150 #endif // SWIG
1151 
1154  IntExpr* MakeIndexExpression(const std::vector<IntVar*>& vars, int64 value);
1155 
1157  Constraint* MakeIfThenElseCt(IntVar* const condition,
1158  IntExpr* const then_expr,
1159  IntExpr* const else_expr,
1160  IntVar* const target_var);
1161 
1163  IntExpr* MakeMin(const std::vector<IntVar*>& vars);
1165  IntExpr* MakeMin(IntExpr* const left, IntExpr* const right);
1167  IntExpr* MakeMin(IntExpr* const expr, int64 value);
1169  IntExpr* MakeMin(IntExpr* const expr, int value);
1170 
1172  IntExpr* MakeMax(const std::vector<IntVar*>& vars);
1174  IntExpr* MakeMax(IntExpr* const left, IntExpr* const right);
1176  IntExpr* MakeMax(IntExpr* const expr, int64 value);
1178  IntExpr* MakeMax(IntExpr* const expr, int value);
1179 
1181  IntExpr* MakeConvexPiecewiseExpr(IntExpr* expr, int64 early_cost,
1182  int64 early_date, int64 late_date,
1183  int64 late_cost);
1184 
1187  IntExpr* MakeSemiContinuousExpr(IntExpr* const expr, int64 fixed_charge,
1188  int64 step);
1189 
1192  // TODO(user): Investigate if we can merge all three piecewise linear
1194 #ifndef SWIG
1196  const PiecewiseLinearFunction& f);
1197 #endif
1198 
1200  IntExpr* MakeModulo(IntExpr* const x, int64 mod);
1201 
1203  IntExpr* MakeModulo(IntExpr* const x, IntExpr* const mod);
1204 
1206  IntExpr* MakeConditionalExpression(IntVar* const condition,
1207  IntExpr* const expr,
1208  int64 unperformed_value);
1209 
1214  Constraint* MakeFalseConstraint(const std::string& explanation);
1215 
1218  IntVar* const boolvar);
1222  Constraint* MakeIsEqualCt(IntExpr* const v1, IntExpr* v2, IntVar* const b);
1224  IntVar* MakeIsEqualVar(IntExpr* const v1, IntExpr* v2);
1226  Constraint* MakeEquality(IntExpr* const left, IntExpr* const right);
1228  Constraint* MakeEquality(IntExpr* const expr, int64 value);
1230  Constraint* MakeEquality(IntExpr* const expr, int value);
1231 
1234  IntVar* const boolvar);
1238  IntVar* MakeIsDifferentVar(IntExpr* const v1, IntExpr* const v2);
1240  Constraint* MakeIsDifferentCt(IntExpr* const v1, IntExpr* const v2,
1241  IntVar* const b);
1243  Constraint* MakeNonEquality(IntExpr* const left, IntExpr* const right);
1245  Constraint* MakeNonEquality(IntExpr* const expr, int64 value);
1247  Constraint* MakeNonEquality(IntExpr* const expr, int value);
1248 
1251  IntVar* const boolvar);
1255  IntVar* MakeIsLessOrEqualVar(IntExpr* const left, IntExpr* const right);
1257  Constraint* MakeIsLessOrEqualCt(IntExpr* const left, IntExpr* const right,
1258  IntVar* const b);
1260  Constraint* MakeLessOrEqual(IntExpr* const left, IntExpr* const right);
1262  Constraint* MakeLessOrEqual(IntExpr* const expr, int64 value);
1264  Constraint* MakeLessOrEqual(IntExpr* const expr, int value);
1265 
1268  IntVar* const boolvar);
1272  IntVar* MakeIsGreaterOrEqualVar(IntExpr* const left, IntExpr* const right);
1274  Constraint* MakeIsGreaterOrEqualCt(IntExpr* const left, IntExpr* const right,
1275  IntVar* const b);
1277  Constraint* MakeGreaterOrEqual(IntExpr* const left, IntExpr* const right);
1281  Constraint* MakeGreaterOrEqual(IntExpr* const expr, int value);
1282 
1284  Constraint* MakeIsGreaterCstCt(IntExpr* const v, int64 c, IntVar* const b);
1288  IntVar* MakeIsGreaterVar(IntExpr* const left, IntExpr* const right);
1290  Constraint* MakeIsGreaterCt(IntExpr* const left, IntExpr* const right,
1291  IntVar* const b);
1293  Constraint* MakeGreater(IntExpr* const left, IntExpr* const right);
1295  Constraint* MakeGreater(IntExpr* const expr, int64 value);
1297  Constraint* MakeGreater(IntExpr* const expr, int value);
1298 
1300  Constraint* MakeIsLessCstCt(IntExpr* const v, int64 c, IntVar* const b);
1304  IntVar* MakeIsLessVar(IntExpr* const left, IntExpr* const right);
1306  Constraint* MakeIsLessCt(IntExpr* const left, IntExpr* const right,
1307  IntVar* const b);
1309  Constraint* MakeLess(IntExpr* const left, IntExpr* const right);
1311  Constraint* MakeLess(IntExpr* const expr, int64 value);
1313  Constraint* MakeLess(IntExpr* const expr, int value);
1314 
1316  Constraint* MakeSumLessOrEqual(const std::vector<IntVar*>& vars, int64 cst);
1317  Constraint* MakeSumGreaterOrEqual(const std::vector<IntVar*>& vars,
1318  int64 cst);
1319  Constraint* MakeSumEquality(const std::vector<IntVar*>& vars, int64 cst);
1320  Constraint* MakeSumEquality(const std::vector<IntVar*>& vars,
1321  IntVar* const var);
1322  Constraint* MakeScalProdEquality(const std::vector<IntVar*>& vars,
1323  const std::vector<int64>& coefficients,
1324  int64 cst);
1325  Constraint* MakeScalProdEquality(const std::vector<IntVar*>& vars,
1326  const std::vector<int>& coefficients,
1327  int64 cst);
1328  Constraint* MakeScalProdEquality(const std::vector<IntVar*>& vars,
1329  const std::vector<int64>& coefficients,
1330  IntVar* const target);
1331  Constraint* MakeScalProdEquality(const std::vector<IntVar*>& vars,
1332  const std::vector<int>& coefficients,
1333  IntVar* const target);
1334  Constraint* MakeScalProdGreaterOrEqual(const std::vector<IntVar*>& vars,
1335  const std::vector<int64>& coeffs,
1336  int64 cst);
1337  Constraint* MakeScalProdGreaterOrEqual(const std::vector<IntVar*>& vars,
1338  const std::vector<int>& coeffs,
1339  int64 cst);
1340  Constraint* MakeScalProdLessOrEqual(const std::vector<IntVar*>& vars,
1341  const std::vector<int64>& coefficients,
1342  int64 cst);
1343  Constraint* MakeScalProdLessOrEqual(const std::vector<IntVar*>& vars,
1344  const std::vector<int>& coefficients,
1345  int64 cst);
1346 
1347  Constraint* MakeMinEquality(const std::vector<IntVar*>& vars,
1348  IntVar* const min_var);
1349  Constraint* MakeMaxEquality(const std::vector<IntVar*>& vars,
1350  IntVar* const max_var);
1351 
1352  Constraint* MakeElementEquality(const std::vector<int64>& vals,
1353  IntVar* const index, IntVar* const target);
1354  Constraint* MakeElementEquality(const std::vector<int>& vals,
1355  IntVar* const index, IntVar* const target);
1356  Constraint* MakeElementEquality(const std::vector<IntVar*>& vars,
1357  IntVar* const index, IntVar* const target);
1358  Constraint* MakeElementEquality(const std::vector<IntVar*>& vars,
1359  IntVar* const index, int64 target);
1361  Constraint* MakeAbsEquality(IntVar* const var, IntVar* const abs_var);
1366  Constraint* MakeIndexOfConstraint(const std::vector<IntVar*>& vars,
1367  IntVar* const index, int64 target);
1368 
1376 #if !defined(SWIG)
1377  Demon* MakeActionDemon(Action action);
1379 #endif
1380  Demon* MakeClosureDemon(Closure closure);
1382 
1383  // ----- Between and related constraints -----
1384 
1386  Constraint* MakeBetweenCt(IntExpr* const expr, int64 l, int64 u);
1387 
1392  Constraint* MakeNotBetweenCt(IntExpr* const expr, int64 l, int64 u);
1393 
1395  Constraint* MakeIsBetweenCt(IntExpr* const expr, int64 l, int64 u,
1396  IntVar* const b);
1397  IntVar* MakeIsBetweenVar(IntExpr* const v, int64 l, int64 u);
1398 
1399  // ----- Member and related constraints -----
1400 
1403  Constraint* MakeMemberCt(IntExpr* const expr,
1404  const std::vector<int64>& values);
1405  Constraint* MakeMemberCt(IntExpr* const expr, const std::vector<int>& values);
1406 
1408  Constraint* MakeNotMemberCt(IntExpr* const expr,
1409  const std::vector<int64>& values);
1410  Constraint* MakeNotMemberCt(IntExpr* const expr,
1411  const std::vector<int>& values);
1412 
1414  Constraint* MakeNotMemberCt(IntExpr* const expr, std::vector<int64> starts,
1415  std::vector<int64> ends);
1417  Constraint* MakeNotMemberCt(IntExpr* const expr, std::vector<int> starts,
1418  std::vector<int> ends);
1419 #if !defined(SWIG)
1422  SortedDisjointIntervalList intervals);
1423 #endif // !defined(SWIG)
1424 
1426  Constraint* MakeIsMemberCt(IntExpr* const expr,
1427  const std::vector<int64>& values,
1428  IntVar* const boolvar);
1429  Constraint* MakeIsMemberCt(IntExpr* const expr,
1430  const std::vector<int>& values,
1431  IntVar* const boolvar);
1432  IntVar* MakeIsMemberVar(IntExpr* const expr,
1433  const std::vector<int64>& values);
1434  IntVar* MakeIsMemberVar(IntExpr* const expr, const std::vector<int>& values);
1435 
1437  Constraint* MakeAtMost(std::vector<IntVar*> vars, int64 value,
1438  int64 max_count);
1440  Constraint* MakeCount(const std::vector<IntVar*>& vars, int64 value,
1441  int64 max_count);
1443  Constraint* MakeCount(const std::vector<IntVar*>& vars, int64 value,
1444  IntVar* const max_count);
1445 
1447  Constraint* MakeDistribute(const std::vector<IntVar*>& vars,
1448  const std::vector<int64>& values,
1449  const std::vector<IntVar*>& cards);
1451  Constraint* MakeDistribute(const std::vector<IntVar*>& vars,
1452  const std::vector<int>& values,
1453  const std::vector<IntVar*>& cards);
1455  Constraint* MakeDistribute(const std::vector<IntVar*>& vars,
1456  const std::vector<IntVar*>& cards);
1459  Constraint* MakeDistribute(const std::vector<IntVar*>& vars, int64 card_min,
1460  int64 card_max, int64 card_size);
1464  Constraint* MakeDistribute(const std::vector<IntVar*>& vars,
1465  const std::vector<int64>& card_min,
1466  const std::vector<int64>& card_max);
1470  Constraint* MakeDistribute(const std::vector<IntVar*>& vars,
1471  const std::vector<int>& card_min,
1472  const std::vector<int>& card_max);
1476  Constraint* MakeDistribute(const std::vector<IntVar*>& vars,
1477  const std::vector<int64>& values,
1478  const std::vector<int64>& card_min,
1479  const std::vector<int64>& card_max);
1483  Constraint* MakeDistribute(const std::vector<IntVar*>& vars,
1484  const std::vector<int>& values,
1485  const std::vector<int>& card_min,
1486  const std::vector<int>& card_max);
1487 
1492  Constraint* MakeDeviation(const std::vector<IntVar*>& vars,
1493  IntVar* const deviation_var, int64 total_sum);
1494 
1497  Constraint* MakeAllDifferent(const std::vector<IntVar*>& vars);
1498 
1502  Constraint* MakeAllDifferent(const std::vector<IntVar*>& vars,
1503  bool stronger_propagation);
1504 
1507  Constraint* MakeAllDifferentExcept(const std::vector<IntVar*>& vars,
1508  int64 escape_value);
1509  // TODO(user): Do we need a version with an array of escape values.
1510 
1526  Constraint* MakeSortingConstraint(const std::vector<IntVar*>& vars,
1527  const std::vector<IntVar*>& sorted);
1528  // TODO(user): Add void MakeSortedArray(
1529  // const std::vector<IntVar*>& vars,
1530  // std::vector<IntVar*>* const sorted);
1531 
1534  Constraint* MakeLexicalLess(const std::vector<IntVar*>& left,
1535  const std::vector<IntVar*>& right);
1536 
1539  Constraint* MakeLexicalLessOrEqual(const std::vector<IntVar*>& left,
1540  const std::vector<IntVar*>& right);
1541 
1547  const std::vector<IntVar*>& left, const std::vector<IntVar*>& right);
1548 
1552  IntVar* index, const std::vector<IntVar*>& vars);
1553 
1557  IntVar* index, const std::vector<IntVar*>& vars);
1558 
1563  Constraint* MakeNullIntersect(const std::vector<IntVar*>& first_vars,
1564  const std::vector<IntVar*>& second_vars);
1565 
1571  Constraint* MakeNullIntersectExcept(const std::vector<IntVar*>& first_vars,
1572  const std::vector<IntVar*>& second_vars,
1573  int64 escape_value);
1574 
1575  // TODO(user): Implement MakeAllNullIntersect taking an array of
1576  // variable vectors.
1577 
1587  Constraint* MakeNoCycle(const std::vector<IntVar*>& nexts,
1588  const std::vector<IntVar*>& active,
1589  IndexFilter1 sink_handler = nullptr);
1590  Constraint* MakeNoCycle(const std::vector<IntVar*>& nexts,
1591  const std::vector<IntVar*>& active,
1592  IndexFilter1 sink_handler, bool assume_paths);
1593 
1595  Constraint* MakeCircuit(const std::vector<IntVar*>& nexts);
1596 
1599  Constraint* MakeSubCircuit(const std::vector<IntVar*>& nexts);
1600 
1605  Constraint* MakePathCumul(const std::vector<IntVar*>& nexts,
1606  const std::vector<IntVar*>& active,
1607  const std::vector<IntVar*>& cumuls,
1608  const std::vector<IntVar*>& transits);
1611  // TODO(user): Merge with other path-cumuls constraints.
1612  Constraint* MakeDelayedPathCumul(const std::vector<IntVar*>& nexts,
1613  const std::vector<IntVar*>& active,
1614  const std::vector<IntVar*>& cumuls,
1615  const std::vector<IntVar*>& transits);
1622  Constraint* MakePathCumul(const std::vector<IntVar*>& nexts,
1623  const std::vector<IntVar*>& active,
1624  const std::vector<IntVar*>& cumuls,
1625  IndexEvaluator2 transit_evaluator);
1626 
1633  Constraint* MakePathCumul(const std::vector<IntVar*>& nexts,
1634  const std::vector<IntVar*>& active,
1635  const std::vector<IntVar*>& cumuls,
1636  const std::vector<IntVar*>& slacks,
1637  IndexEvaluator2 transit_evaluator);
1640  // TODO(user): Only does checking on WhenBound events on next variables.
1642  Constraint* MakePathConnected(std::vector<IntVar*> nexts,
1643  std::vector<int64> sources,
1644  std::vector<int64> sinks,
1645  std::vector<IntVar*> status);
1646 #ifndef SWIG
1647  // TODO(user): This constraint does not make holes in variable domains;
1653  std::vector<IntVar*> nexts,
1654  const std::vector<std::pair<int, int>>& precedences);
1664  std::vector<IntVar*> nexts,
1665  const std::vector<std::pair<int, int>>& precedences,
1666  const std::vector<int>& lifo_path_starts,
1667  const std::vector<int>& fifo_path_starts);
1671  std::vector<IntVar*> nexts, std::vector<IntVar*> transits,
1672  const std::vector<std::pair<int, int>>& precedences);
1673 #endif // !SWIG
1678  const std::vector<IntVar*>& actives);
1679 
1684  Constraint* MakeAllowedAssignments(const std::vector<IntVar*>& vars,
1685  const IntTupleSet& tuples);
1686 
1694  Constraint* MakeTransitionConstraint(const std::vector<IntVar*>& vars,
1695  const IntTupleSet& transition_table,
1696  int64 initial_state,
1697  const std::vector<int64>& final_states);
1698 
1706  Constraint* MakeTransitionConstraint(const std::vector<IntVar*>& vars,
1707  const IntTupleSet& transition_table,
1708  int64 initial_state,
1709  const std::vector<int>& final_states);
1710 
1711 #if defined(SWIGPYTHON)
1714  const std::vector<IntVar*>& vars,
1715  const std::vector<std::vector<int64> /*keep for swig*/>& raw_tuples) {
1716  IntTupleSet tuples(vars.size());
1717  tuples.InsertAll(raw_tuples);
1718  return MakeAllowedAssignments(vars, tuples);
1719  }
1720 
1722  const std::vector<IntVar*>& vars,
1723  const std::vector<std::vector<int64> /*keep for swig*/>& raw_transitions,
1724  int64 initial_state, const std::vector<int>& final_states) {
1725  IntTupleSet transitions(3);
1726  transitions.InsertAll(raw_transitions);
1727  return MakeTransitionConstraint(vars, transitions, initial_state,
1728  final_states);
1729  }
1730 #endif
1731 
1741  const std::vector<IntVar*>& x_vars, const std::vector<IntVar*>& y_vars,
1742  const std::vector<IntVar*>& x_size, const std::vector<IntVar*>& y_size);
1744  const std::vector<IntVar*>& x_vars, const std::vector<IntVar*>& y_vars,
1745  const std::vector<int64>& x_size, const std::vector<int64>& y_size);
1747  const std::vector<IntVar*>& x_vars, const std::vector<IntVar*>& y_vars,
1748  const std::vector<int>& x_size, const std::vector<int>& y_size);
1749 
1759  const std::vector<IntVar*>& x_vars, const std::vector<IntVar*>& y_vars,
1760  const std::vector<IntVar*>& x_size, const std::vector<IntVar*>& y_size);
1762  const std::vector<IntVar*>& x_vars, const std::vector<IntVar*>& y_vars,
1763  const std::vector<int64>& x_size, const std::vector<int64>& y_size);
1765  const std::vector<IntVar*>& x_vars, const std::vector<IntVar*>& y_vars,
1766  const std::vector<int>& x_size, const std::vector<int>& y_size);
1767 
1773  Pack* MakePack(const std::vector<IntVar*>& vars, int number_of_bins);
1774 
1780  int64 duration, bool optional,
1781  const std::string& name);
1782 
1786  int count, int64 start_min, int64 start_max, int64 duration,
1787  bool optional, const std::string& name,
1788  std::vector<IntervalVar*>* const array);
1789 
1792  IntervalVar* MakeFixedDurationIntervalVar(IntVar* const start_variable,
1793  int64 duration,
1794  const std::string& name);
1795 
1798  IntervalVar* MakeFixedDurationIntervalVar(IntVar* const start_variable,
1799  int64 duration,
1800  IntVar* const performed_variable,
1801  const std::string& name);
1802 
1806  const std::vector<IntVar*>& start_variables, int64 duration,
1807  const std::string& name, std::vector<IntervalVar*>* const array);
1808 
1812  const std::vector<IntVar*>& start_variables,
1813  const std::vector<int64>& durations, const std::string& name,
1814  std::vector<IntervalVar*>* const array);
1818  const std::vector<IntVar*>& start_variables,
1819  const std::vector<int>& durations, const std::string& name,
1820  std::vector<IntervalVar*>* const array);
1821 
1825  const std::vector<IntVar*>& start_variables,
1826  const std::vector<int64>& durations,
1827  const std::vector<IntVar*>& performed_variables, const std::string& name,
1828  std::vector<IntervalVar*>* const array);
1829 
1833  const std::vector<IntVar*>& start_variables,
1834  const std::vector<int>& durations,
1835  const std::vector<IntVar*>& performed_variables, const std::string& name,
1836  std::vector<IntervalVar*>* const array);
1837 
1839  IntervalVar* MakeFixedInterval(int64 start, int64 duration,
1840  const std::string& name);
1841 
1845  int64 duration_min, int64 duration_max,
1846  int64 end_min, int64 end_max, bool optional,
1847  const std::string& name);
1848 
1852  int64 duration_min, int64 duration_max,
1853  int64 end_min, int64 end_max, bool optional,
1854  const std::string& name,
1855  std::vector<IntervalVar*>* const array);
1856 
1859  IntervalVar* MakeMirrorInterval(IntervalVar* const interval_var);
1860 
1866  IntervalVar* const interval_var, int64 duration, int64 offset);
1867 
1873  IntervalVar* const interval_var, int64 duration, int64 offset);
1874 
1880  IntervalVar* const interval_var, int64 duration, int64 offset);
1881 
1887  IntervalVar* const interval_var, int64 duration, int64 offset);
1888 
1906  IntervalVar* MakeIntervalRelaxedMin(IntervalVar* const interval_var);
1907 
1925  IntervalVar* MakeIntervalRelaxedMax(IntervalVar* const interval_var);
1926 
1929  Constraint* MakeIntervalVarRelation(IntervalVar* const t,
1931 
1933  Constraint* MakeIntervalVarRelation(IntervalVar* const t1,
1935  IntervalVar* const t2);
1936 
1941  Constraint* MakeIntervalVarRelationWithDelay(IntervalVar* const t1,
1943  IntervalVar* const t2,
1944  int64 delay);
1945 
1949  Constraint* MakeTemporalDisjunction(IntervalVar* const t1,
1950  IntervalVar* const t2, IntVar* const alt);
1951 
1954  Constraint* MakeTemporalDisjunction(IntervalVar* const t1,
1955  IntervalVar* const t2);
1956 
1959  DisjunctiveConstraint* MakeDisjunctiveConstraint(
1960  const std::vector<IntervalVar*>& intervals, const std::string& name);
1961 
1965  DisjunctiveConstraint* MakeStrictDisjunctiveConstraint(
1966  const std::vector<IntervalVar*>& intervals, const std::string& name);
1967 
1977  Constraint* MakeCumulative(const std::vector<IntervalVar*>& intervals,
1978  const std::vector<int64>& demands, int64 capacity,
1979  const std::string& name);
1980 
1990  Constraint* MakeCumulative(const std::vector<IntervalVar*>& intervals,
1991  const std::vector<int>& demands, int64 capacity,
1992  const std::string& name);
1993 
2003  Constraint* MakeCumulative(const std::vector<IntervalVar*>& intervals,
2004  const std::vector<int64>& demands,
2005  IntVar* const capacity, const std::string& name);
2006 
2016  Constraint* MakeCumulative(const std::vector<IntervalVar*>& intervals,
2017  const std::vector<int>& demands,
2018  IntVar* const capacity, const std::string& name);
2019 
2027  Constraint* MakeCumulative(const std::vector<IntervalVar*>& intervals,
2028  const std::vector<IntVar*>& demands,
2029  int64 capacity, const std::string& name);
2030 
2038  Constraint* MakeCumulative(const std::vector<IntervalVar*>& intervals,
2039  const std::vector<IntVar*>& demands,
2040  IntVar* const capacity, const std::string& name);
2041 
2047  Constraint* MakeCover(const std::vector<IntervalVar*>& vars,
2048  IntervalVar* const target_var);
2049 
2051  Constraint* MakeEquality(IntervalVar* const var1, IntervalVar* const var2);
2052 
2054  Assignment* MakeAssignment();
2055 
2057  Assignment* MakeAssignment(const Assignment* const a);
2058 
2060  SolutionCollector* MakeFirstSolutionCollector(
2061  const Assignment* const assignment);
2064  SolutionCollector* MakeFirstSolutionCollector();
2065 
2067  SolutionCollector* MakeLastSolutionCollector(
2068  const Assignment* const assignment);
2071  SolutionCollector* MakeLastSolutionCollector();
2072 
2077  SolutionCollector* MakeBestValueSolutionCollector(
2078  const Assignment* const assignment, bool maximize);
2084  SolutionCollector* MakeBestValueSolutionCollector(bool maximize);
2085 
2089  SolutionCollector* MakeNBestValueSolutionCollector(
2090  const Assignment* const assignment, int solution_count, bool maximize);
2091  SolutionCollector* MakeNBestValueSolutionCollector(int solution_count,
2092  bool maximize);
2093 
2095  SolutionCollector* MakeAllSolutionCollector(
2096  const Assignment* const assignment);
2099  SolutionCollector* MakeAllSolutionCollector();
2100 
2102  OptimizeVar* MakeMinimize(IntVar* const v, int64 step);
2103 
2105  OptimizeVar* MakeMaximize(IntVar* const v, int64 step);
2106 
2108  OptimizeVar* MakeOptimize(bool maximize, IntVar* const v, int64 step);
2109 
2112  OptimizeVar* MakeWeightedMinimize(const std::vector<IntVar*>& sub_objectives,
2113  const std::vector<int64>& weights,
2114  int64 step);
2115 
2118  OptimizeVar* MakeWeightedMinimize(const std::vector<IntVar*>& sub_objectives,
2119  const std::vector<int>& weights,
2120  int64 step);
2121 
2123  OptimizeVar* MakeWeightedMaximize(const std::vector<IntVar*>& sub_objectives,
2124  const std::vector<int64>& weights,
2125  int64 step);
2126 
2128  OptimizeVar* MakeWeightedMaximize(const std::vector<IntVar*>& sub_objectives,
2129  const std::vector<int>& weights,
2130  int64 step);
2131 
2133  OptimizeVar* MakeWeightedOptimize(bool maximize,
2134  const std::vector<IntVar*>& sub_objectives,
2135  const std::vector<int64>& weights,
2136  int64 step);
2137 
2139  OptimizeVar* MakeWeightedOptimize(bool maximize,
2140  const std::vector<IntVar*>& sub_objectives,
2141  const std::vector<int>& weights,
2142  int64 step);
2143 
2145 
2161 
2162  SearchMonitor* MakeTabuSearch(bool maximize, IntVar* const v, int64 step,
2163  const std::vector<IntVar*>& vars,
2164  int64 keep_tenure, int64 forbid_tenure,
2165  double tabu_factor);
2166 
2169  SearchMonitor* MakeGenericTabuSearch(bool maximize, IntVar* const v,
2170  int64 step,
2171  const std::vector<IntVar*>& tabu_vars,
2172  int64 forbid_tenure);
2173 
2175  // TODO(user): document behavior
2176  SearchMonitor* MakeSimulatedAnnealing(bool maximize, IntVar* const v,
2177  int64 step, int64 initial_temperature);
2178 
2181  SearchMonitor* MakeGuidedLocalSearch(bool maximize, IntVar* const objective,
2182  IndexEvaluator2 objective_function,
2183  int64 step,
2184  const std::vector<IntVar*>& vars,
2185  double penalty_factor);
2187  bool maximize, IntVar* const objective,
2188  IndexEvaluator3 objective_function, int64 step,
2189  const std::vector<IntVar*>& vars,
2190  const std::vector<IntVar*>& secondary_vars, double penalty_factor);
2191 
2195  SearchMonitor* MakeLubyRestart(int scale_factor);
2196 
2199  SearchMonitor* MakeConstantRestart(int frequency);
2200 
2202  RegularLimit* MakeTimeLimit(absl::Duration time);
2203 #if !defined(SWIG)
2204  ABSL_DEPRECATED("Use the version taking absl::Duration() as argument")
2205 #endif // !defined(SWIG)
2207  return MakeTimeLimit(time_in_ms == kint64max
2208  ? absl::InfiniteDuration()
2209  : absl::Milliseconds(time_in_ms));
2210  }
2211 
2215 
2219 
2223 
2226  // timer by estimating the number of remaining calls, and 'cumulative' means
2227  // that the limit applies cumulatively, instead of search-by-search.
2229  int64 solutions, bool smart_time_check = false,
2230  bool cumulative = false);
2232  RegularLimit* MakeLimit(const RegularLimitParameters& proto);
2233 
2234 #if !defined(SWIG)
2235  ABSL_DEPRECATED("Use other MakeLimit() versions")
2236 #endif // !defined(SWIG)
2238  int64 solutions, bool smart_time_check = false,
2239  bool cumulative = false);
2240 
2242  RegularLimitParameters MakeDefaultRegularLimitParameters() const;
2243 
2247  SearchLimit* MakeLimit(SearchLimit* const limit_1,
2248  SearchLimit* const limit_2);
2249 
2255  IntVar* objective_var, bool maximize, double objective_scaling_factor,
2256  double objective_offset, double improvement_rate_coefficient,
2257  int improvement_rate_solutions_distance);
2258 
2261  SearchLimit* MakeCustomLimit(std::function<bool()> limiter);
2262 
2263  // TODO(user): DEPRECATE API of MakeSearchLog(.., IntVar* var,..).
2264 
2267  SearchMonitor* MakeSearchLog(int branch_period);
2268 
2270  SearchMonitor* MakeSearchLog(int branch_period, IntVar* const var);
2271 
2274  SearchMonitor* MakeSearchLog(int branch_period,
2275  std::function<std::string()> display_callback);
2276 
2279  SearchMonitor* MakeSearchLog(int branch_period, IntVar* var,
2280  std::function<std::string()> display_callback);
2281 
2284  SearchMonitor* MakeSearchLog(int branch_period, OptimizeVar* const opt_var);
2285 
2288  SearchMonitor* MakeSearchLog(int branch_period, OptimizeVar* const opt_var,
2289  std::function<std::string()> display_callback);
2290 
2295  int branch_period = 1;
2299  IntVar* variable = nullptr;
2303  double scaling_factor = 1.0;
2304  double offset = 0;
2308  std::function<std::string()> display_callback;
2312  };
2314 
2317  SearchMonitor* MakeSearchTrace(const std::string& prefix);
2318 
2320  SearchMonitor* MakeEnterSearchCallback(std::function<void()> callback);
2321  SearchMonitor* MakeExitSearchCallback(std::function<void()> callback);
2322  SearchMonitor* MakeAtSolutionCallback(std::function<void()> callback);
2323 
2328 #if !defined(SWIG)
2331  absl::flat_hash_map<const IntVar*, int>* const map);
2332 #endif // !defined(SWIG)
2333 
2336  const std::vector<SymmetryBreaker*>& visitors);
2339  SymmetryBreaker* const v2);
2341  SymmetryBreaker* const v2,
2342  SymmetryBreaker* const v3);
2344  SymmetryBreaker* const v2,
2345  SymmetryBreaker* const v3,
2346  SymmetryBreaker* const v4);
2347 
2353  bool start_with_lower_half);
2356  Decision* MakeAssignVariablesValues(const std::vector<IntVar*>& vars,
2357  const std::vector<int64>& values);
2359  Decision* MakeDecision(Action apply, Action refute);
2360 
2370  DecisionBuilder* const db2);
2372  DecisionBuilder* const db2,
2373  DecisionBuilder* const db3);
2375  DecisionBuilder* const db2,
2376  DecisionBuilder* const db3,
2377  DecisionBuilder* const db4);
2378  DecisionBuilder* Compose(const std::vector<DecisionBuilder*>& dbs);
2379 
2391  // TODO(user): The search tree can be balanced by using binary
2396  DecisionBuilder* Try(DecisionBuilder* const db1, DecisionBuilder* const db2);
2397  DecisionBuilder* Try(DecisionBuilder* const db1, DecisionBuilder* const db2,
2398  DecisionBuilder* const db3);
2399  DecisionBuilder* Try(DecisionBuilder* const db1, DecisionBuilder* const db2,
2400  DecisionBuilder* const db3, DecisionBuilder* const db4);
2401  DecisionBuilder* Try(const std::vector<DecisionBuilder*>& dbs);
2402 
2404  // TODO(user): name each of them differently, and document them (and do that
2406  DecisionBuilder* MakePhase(const std::vector<IntVar*>& vars,
2407  IntVarStrategy var_str, IntValueStrategy val_str);
2408  DecisionBuilder* MakePhase(const std::vector<IntVar*>& vars,
2409  IndexEvaluator1 var_evaluator,
2410  IntValueStrategy val_str);
2411 
2412  DecisionBuilder* MakePhase(const std::vector<IntVar*>& vars,
2413  IntVarStrategy var_str,
2414  IndexEvaluator2 value_evaluator);
2415 
2418  DecisionBuilder* MakePhase(const std::vector<IntVar*>& vars,
2419  IntVarStrategy var_str,
2420  VariableValueComparator var_val1_val2_comparator);
2421 
2422  DecisionBuilder* MakePhase(const std::vector<IntVar*>& vars,
2423  IndexEvaluator1 var_evaluator,
2424  IndexEvaluator2 value_evaluator);
2425 
2426  DecisionBuilder* MakePhase(const std::vector<IntVar*>& vars,
2427  IntVarStrategy var_str,
2428  IndexEvaluator2 value_evaluator,
2429  IndexEvaluator1 tie_breaker);
2430 
2431  DecisionBuilder* MakePhase(const std::vector<IntVar*>& vars,
2432  IndexEvaluator1 var_evaluator,
2433  IndexEvaluator2 value_evaluator,
2434  IndexEvaluator1 tie_breaker);
2435 
2436  DecisionBuilder* MakeDefaultPhase(const std::vector<IntVar*>& vars);
2437  DecisionBuilder* MakeDefaultPhase(const std::vector<IntVar*>& vars,
2439 
2441  DecisionBuilder* MakePhase(IntVar* const v0, IntVarStrategy var_str,
2442  IntValueStrategy val_str);
2443  DecisionBuilder* MakePhase(IntVar* const v0, IntVar* const v1,
2444  IntVarStrategy var_str, IntValueStrategy val_str);
2445  DecisionBuilder* MakePhase(IntVar* const v0, IntVar* const v1,
2446  IntVar* const v2, IntVarStrategy var_str,
2447  IntValueStrategy val_str);
2448  DecisionBuilder* MakePhase(IntVar* const v0, IntVar* const v1,
2449  IntVar* const v2, IntVar* const v3,
2450  IntVarStrategy var_str, IntValueStrategy val_str);
2451 
2458  int64* const marker);
2459 
2466  int64* const marker);
2467 
2470  Decision* MakeRankFirstInterval(SequenceVar* const sequence, int index);
2471 
2474  Decision* MakeRankLastInterval(SequenceVar* const sequence, int index);
2475 
2481  DecisionBuilder* MakePhase(const std::vector<IntVar*>& vars,
2483 
2491  DecisionBuilder* MakePhase(const std::vector<IntVar*>& vars,
2492  IndexEvaluator2 eval, IndexEvaluator1 tie_breaker,
2493  EvaluatorStrategy str);
2494 
2496  DecisionBuilder* MakePhase(const std::vector<IntervalVar*>& intervals,
2497  IntervalStrategy str);
2498 
2499  DecisionBuilder* MakePhase(const std::vector<SequenceVar*>& sequences,
2500  SequenceStrategy str);
2501 
2505  Assignment* const assignment, DecisionBuilder* const db,
2506  const std::vector<IntVar*>& vars);
2507 
2511 
2518  SearchMonitor* const monitor1);
2520  SearchMonitor* const monitor1,
2521  SearchMonitor* const monitor2);
2523  SearchMonitor* const monitor1,
2524  SearchMonitor* const monitor2,
2525  SearchMonitor* const monitor3);
2527  SearchMonitor* const monitor1,
2528  SearchMonitor* const monitor2,
2529  SearchMonitor* const monitor3,
2530  SearchMonitor* const monitor4);
2532  const std::vector<SearchMonitor*>& monitors);
2533 
2542  Assignment* const solution, bool maximize,
2543  int64 step);
2545  Assignment* const solution, bool maximize,
2546  int64 step,
2547  SearchMonitor* const monitor1);
2549  Assignment* const solution, bool maximize,
2550  int64 step, SearchMonitor* const monitor1,
2551  SearchMonitor* const monitor2);
2553  Assignment* const solution, bool maximize,
2554  int64 step, SearchMonitor* const monitor1,
2555  SearchMonitor* const monitor2,
2556  SearchMonitor* const monitor3);
2558  Assignment* const solution, bool maximize,
2559  int64 step, SearchMonitor* const monitor1,
2560  SearchMonitor* const monitor2,
2561  SearchMonitor* const monitor3,
2562  SearchMonitor* const monitor4);
2564  DecisionBuilder* const db, Assignment* const solution, bool maximize,
2565  int64 step, const std::vector<SearchMonitor*>& monitors);
2566 
2570 
2574 
2576  LocalSearchOperator* MakeOperator(const std::vector<IntVar*>& vars,
2578  LocalSearchOperator* MakeOperator(const std::vector<IntVar*>& vars,
2579  const std::vector<IntVar*>& secondary_vars,
2581  // TODO(user): Make the callback an IndexEvaluator2 when there are no
2582  // secondary variables.
2583  LocalSearchOperator* MakeOperator(const std::vector<IntVar*>& vars,
2584  IndexEvaluator3 evaluator,
2586  LocalSearchOperator* MakeOperator(const std::vector<IntVar*>& vars,
2587  const std::vector<IntVar*>& secondary_vars,
2588  IndexEvaluator3 evaluator,
2590 
2598  LocalSearchOperator* MakeRandomLnsOperator(const std::vector<IntVar*>& vars,
2599  int number_of_variables);
2600  LocalSearchOperator* MakeRandomLnsOperator(const std::vector<IntVar*>& vars,
2601  int number_of_variables,
2602  int32 seed);
2603 
2610 
2618  const std::vector<IntVar*>& variables,
2619  const std::vector<int64>& target_values);
2620 
2652  const std::vector<LocalSearchOperator*>& ops);
2654  const std::vector<LocalSearchOperator*>& ops, bool restart);
2656  const std::vector<LocalSearchOperator*>& ops,
2657  std::function<int64(int, int)> evaluator);
2661  const std::vector<LocalSearchOperator*>& ops);
2662 
2667  const std::vector<LocalSearchOperator*>& ops, int32 seed);
2668 
2677  const std::vector<LocalSearchOperator*>& ops, double memory_coefficient,
2678  double exploration_coefficient, bool maximize);
2679 
2686  int64 limit);
2687 
2712  // TODO(user): Make a variant which runs a local search after each
2713  // solution found in a DFS.
2714 
2716  Assignment* const assignment,
2719  const std::vector<IntVar*>& vars, DecisionBuilder* const first_solution,
2723  const std::vector<IntVar*>& vars, DecisionBuilder* const first_solution,
2724  DecisionBuilder* const first_solution_sub_decision_builder,
2727  const std::vector<SequenceVar*>& vars,
2728  DecisionBuilder* const first_solution,
2730 
2733 
2736  IntVar* objective, LocalSearchOperator* const ls_operator,
2737  DecisionBuilder* const sub_decision_builder);
2739  IntVar* objective, LocalSearchOperator* const ls_operator,
2740  DecisionBuilder* const sub_decision_builder, RegularLimit* const limit);
2742  IntVar* objective, LocalSearchOperator* const ls_operator,
2743  DecisionBuilder* const sub_decision_builder, RegularLimit* const limit,
2744  LocalSearchFilterManager* filter_manager);
2745 
2747  IntVar* objective, SolutionPool* const pool,
2748  LocalSearchOperator* const ls_operator,
2749  DecisionBuilder* const sub_decision_builder);
2751  IntVar* objective, SolutionPool* const pool,
2752  LocalSearchOperator* const ls_operator,
2753  DecisionBuilder* const sub_decision_builder, RegularLimit* const limit);
2755  IntVar* objective, SolutionPool* const pool,
2756  LocalSearchOperator* const ls_operator,
2757  DecisionBuilder* const sub_decision_builder, RegularLimit* const limit,
2758  LocalSearchFilterManager* filter_manager);
2759 
2765  const std::vector<IntVar*>& vars, IndexEvaluator2 values,
2766  Solver::LocalSearchFilterBound filter_enum);
2768  const std::vector<IntVar*>& vars,
2769  const std::vector<IntVar*>& secondary_vars, IndexEvaluator3 values,
2770  Solver::LocalSearchFilterBound filter_enum);
2771 
2774  void TopPeriodicCheck();
2778  int TopProgressPercent();
2779 
2783  void PushState();
2784  void PopState();
2785 
2788  int SearchDepth() const;
2789 
2792  int SearchLeftDepth() const;
2793 
2796  int SolveDepth() const;
2797 
2800 
2803 
2805  template <class T>
2806  void SaveAndSetValue(T* adr, T val) {
2807  if (*adr != val) {
2808  InternalSaveValue(adr);
2809  *adr = val;
2810  }
2811  }
2812 
2814  template <class T>
2815  void SaveAndAdd(T* adr, T val) {
2816  if (val != 0) {
2817  InternalSaveValue(adr);
2818  (*adr) += val;
2819  }
2820  }
2821 
2824  DCHECK_GT(size, 0);
2825  return absl::Uniform<int64>(random_, 0, size);
2826  }
2827 
2830  DCHECK_GT(size, 0);
2831  return absl::Uniform<int32>(random_, 0, size);
2832  }
2833 
2835  void ReSeed(int32 seed) { random_.seed(seed); }
2836 
2840  void ExportProfilingOverview(const std::string& filename);
2841 
2843  // TODO(user): Merge demon and local search profiles.
2844  std::string LocalSearchProfile() const;
2845 
2846 #if !defined(SWIG)
2847  ConstraintSolverStatistics GetConstraintSolverStatistics() const;
2850  LocalSearchStatistics GetLocalSearchStatistics() const;
2851 #endif // !defined(SWIG)
2852 
2856  bool CurrentlyInSolve() const;
2857 
2860  int constraints() const { return constraints_list_.size(); }
2861 
2863  void Accept(ModelVisitor* const visitor) const;
2864 
2865  Decision* balancing_decision() const { return balancing_decision_.get(); }
2866 
2868 #if !defined(SWIG)
2869  void set_fail_intercept(std::function<void()> fail_intercept) {
2870  fail_intercept_ = std::move(fail_intercept);
2871  }
2872 #endif // !defined(SWIG)
2873  void clear_fail_intercept() { fail_intercept_ = nullptr; }
2875  DemonProfiler* demon_profiler() const { return demon_profiler_; }
2876  // TODO(user): Get rid of the following methods once fast local search is
2879  void SetUseFastLocalSearch(bool use_fast_local_search) {
2880  use_fast_local_search_ = use_fast_local_search;
2881  }
2883  bool UseFastLocalSearch() const { return use_fast_local_search_; }
2885  bool HasName(const PropagationBaseObject* object) const;
2887  Demon* RegisterDemon(Demon* const demon);
2889  IntExpr* RegisterIntExpr(IntExpr* const expr);
2891  IntVar* RegisterIntVar(IntVar* const var);
2895 
2897  Search* ActiveSearch() const;
2899  ModelCache* Cache() const;
2901  bool InstrumentsDemons() const;
2903  bool IsProfilingEnabled() const;
2905  bool IsLocalSearchProfilingEnabled() const;
2907  bool InstrumentsVariables() const;
2909  bool NameAllVariables() const;
2911  std::string model_name() const;
2916  void AddPropagationMonitor(PropagationMonitor* const monitor);
2922  void SetSearchContext(Search* search, const std::string& search_context);
2923  std::string SearchContext() const;
2924  std::string SearchContext(const Search* search) const;
2926  // TODO(user): Investigate if this should be moved to Search.
2929  void ClearLocalSearchState() { local_search_state_.reset(nullptr); }
2930 
2935  std::vector<int64> tmp_vector_;
2936 
2937  friend class BaseIntExpr;
2938  friend class Constraint;
2939  friend class DemonProfiler;
2940  friend class FindOneNeighbor;
2941  friend class IntVar;
2943  friend class Queue;
2944  friend class SearchMonitor;
2945  friend class SearchLimit;
2946  friend class RoutingModel;
2947  friend class LocalSearchProfiler;
2948 
2949 #if !defined(SWIG)
2950  friend void InternalSaveBooleanVarValue(Solver* const, IntVar* const);
2951  template <class>
2952  friend class SimpleRevFIFO;
2953  template <class K, class V>
2954  friend class RevImmutableMultiMap;
2955 
2960  bool IsBooleanVar(IntExpr* const expr, IntVar** inner_var,
2961  bool* is_negated) const;
2962 
2967  bool IsProduct(IntExpr* const expr, IntExpr** inner_expr, int64* coefficient);
2968 #endif
2969 
2970  IntExpr* CastExpression(const IntVar* const var) const;
2973 
2975  void FinishCurrentSearch();
2976  void RestartCurrentSearch();
2977 
2980  void ShouldFail() { should_fail_ = true; }
2981  void CheckFail() {
2982  if (!should_fail_) return;
2983  should_fail_ = false;
2984  Fail();
2985  }
2986 
2987  private:
2988  void Init();
2989  void PushState(MarkerType t, const StateInfo& info);
2990  MarkerType PopState(StateInfo* info);
2991  void PushSentinel(int magic_code);
2992  void BacktrackToSentinel(int magic_code);
2993  void ProcessConstraints();
2994  bool BacktrackOneLevel(Decision** fail_decision);
2995  void JumpToSentinelWhenNested();
2996  void JumpToSentinel();
2997  void check_alloc_state();
2998  void FreezeQueue();
2999  void EnqueueVar(Demon* const d);
3000  void EnqueueDelayedDemon(Demon* const d);
3001  void ExecuteAll(const SimpleRevFIFO<Demon*>& demons);
3002  void EnqueueAll(const SimpleRevFIFO<Demon*>& demons);
3003  void UnfreezeQueue();
3004  void reset_action_on_fail();
3005  void set_action_on_fail(Action a);
3006  void set_variable_to_clean_on_fail(IntVar* v);
3007  void IncrementUncheckedSolutionCounter();
3008  bool IsUncheckedSolutionLimitReached();
3009 
3010  void InternalSaveValue(int* valptr);
3011  void InternalSaveValue(int64* valptr);
3012  void InternalSaveValue(uint64* valptr);
3013  void InternalSaveValue(double* valptr);
3014  void InternalSaveValue(bool* valptr);
3015  void InternalSaveValue(void** valptr);
3016  void InternalSaveValue(int64** valptr) {
3017  InternalSaveValue(reinterpret_cast<void**>(valptr));
3018  }
3019 
3020  BaseObject* SafeRevAlloc(BaseObject* ptr);
3021 
3022  int* SafeRevAllocArray(int* ptr);
3023  int64* SafeRevAllocArray(int64* ptr);
3024  uint64* SafeRevAllocArray(uint64* ptr);
3025  double* SafeRevAllocArray(double* ptr);
3026  BaseObject** SafeRevAllocArray(BaseObject** ptr);
3027  IntVar** SafeRevAllocArray(IntVar** ptr);
3028  IntExpr** SafeRevAllocArray(IntExpr** ptr);
3029  Constraint** SafeRevAllocArray(Constraint** ptr);
3032  void* UnsafeRevAllocAux(void* ptr);
3033  template <class T>
3034  T* UnsafeRevAlloc(T* ptr) {
3035  return reinterpret_cast<T*>(
3036  UnsafeRevAllocAux(reinterpret_cast<void*>(ptr)));
3037  }
3038  void** UnsafeRevAllocArrayAux(void** ptr);
3039  template <class T>
3040  T** UnsafeRevAllocArray(T** ptr) {
3041  return reinterpret_cast<T**>(
3042  UnsafeRevAllocArrayAux(reinterpret_cast<void**>(ptr)));
3043  }
3044 
3045  void InitCachedIntConstants();
3046  void InitCachedConstraint();
3047 
3051  Search* TopLevelSearch() const { return searches_.at(1); }
3055  Search* ParentSearch() const {
3056  const size_t search_size = searches_.size();
3057  DCHECK_GT(search_size, 1);
3058  return searches_[search_size - 2];
3059  }
3060 
3062  std::string GetName(const PropagationBaseObject* object);
3063  void SetName(const PropagationBaseObject* object, const std::string& name);
3064 
3067  int GetNewIntVarIndex() { return num_int_vars_++; }
3068 
3070  bool IsADifference(IntExpr* expr, IntExpr** const left,
3071  IntExpr** const right);
3072 
3073  const std::string name_;
3074  const ConstraintSolverParameters parameters_;
3075  absl::flat_hash_map<const PropagationBaseObject*, std::string>
3076  propagation_object_names_;
3077  absl::flat_hash_map<const PropagationBaseObject*, IntegerCastInfo>
3078  cast_information_;
3079  absl::flat_hash_set<const Constraint*> cast_constraints_;
3080  const std::string empty_name_;
3081  std::unique_ptr<Queue> queue_;
3082  std::unique_ptr<Trail> trail_;
3083  std::vector<Constraint*> constraints_list_;
3084  std::vector<Constraint*> additional_constraints_list_;
3085  std::vector<int> additional_constraints_parent_list_;
3086  SolverState state_;
3087  int64 branches_;
3088  int64 fails_;
3089  int64 decisions_;
3090  int64 demon_runs_[kNumPriorities];
3091  int64 neighbors_;
3092  int64 filtered_neighbors_;
3093  int64 accepted_neighbors_;
3094  OptimizationDirection optimization_direction_;
3095  std::unique_ptr<ClockTimer> timer_;
3096  std::vector<Search*> searches_;
3097  std::mt19937 random_;
3098  uint64 fail_stamp_;
3099  std::unique_ptr<Decision> balancing_decision_;
3101  std::function<void()> fail_intercept_;
3103  DemonProfiler* const demon_profiler_;
3105  bool use_fast_local_search_;
3107  LocalSearchProfiler* const local_search_profiler_;
3109  std::unique_ptr<Assignment> local_search_state_;
3110 
3112  enum { MIN_CACHED_INT_CONST = -8, MAX_CACHED_INT_CONST = 8 };
3113  IntVar* cached_constants_[MAX_CACHED_INT_CONST + 1 - MIN_CACHED_INT_CONST];
3114 
3116  Constraint* true_constraint_;
3117  Constraint* false_constraint_;
3118 
3119  std::unique_ptr<Decision> fail_decision_;
3120  int constraint_index_;
3121  int additional_constraint_index_;
3122  int num_int_vars_;
3123 
3124  std::unique_ptr<ModelCache> model_cache_;
3125  std::unique_ptr<PropagationMonitor> propagation_monitor_;
3126  PropagationMonitor* print_trace_;
3127  std::unique_ptr<LocalSearchMonitor> local_search_monitor_;
3128  int anonymous_variable_index_;
3129  bool should_fail_;
3130 
3132 };
3133 
3134 std::ostream& operator<<(std::ostream& out, const Solver* const s);
3135 
3139 inline int64 Zero() { return 0; }
3140 
3142 inline int64 One() { return 1; }
3143 
3147 class BaseObject {
3148  public:
3150  virtual ~BaseObject() {}
3151  virtual std::string DebugString() const { return "BaseObject"; }
3152 
3153  private:
3154  DISALLOW_COPY_AND_ASSIGN(BaseObject);
3155 };
3156 
3157 std::ostream& operator<<(std::ostream& out, const BaseObject* o);
3158 
3163  public:
3164  explicit PropagationBaseObject(Solver* const s) : solver_(s) {}
3166 
3167  std::string DebugString() const override {
3168  if (name().empty()) {
3169  return "PropagationBaseObject";
3170  } else {
3171  return absl::StrFormat("PropagationBaseObject: %s", name());
3172  }
3173  }
3174  Solver* solver() const { return solver_; }
3175 
3178  void FreezeQueue() { solver_->FreezeQueue(); }
3179 
3182  void UnfreezeQueue() { solver_->UnfreezeQueue(); }
3183 
3187  void EnqueueDelayedDemon(Demon* const d) { solver_->EnqueueDelayedDemon(d); }
3188  void EnqueueVar(Demon* const d) { solver_->EnqueueVar(d); }
3189  void ExecuteAll(const SimpleRevFIFO<Demon*>& demons);
3190  void EnqueueAll(const SimpleRevFIFO<Demon*>& demons);
3191 
3192 #if !defined(SWIG)
3193  // This method sets a callback that will be called if a failure
3194  // happens during the propagation of the queue.
3196  solver_->set_action_on_fail(std::move(a));
3197  }
3198 #endif // !defined(SWIG)
3199 
3201  void reset_action_on_fail() { solver_->reset_action_on_fail(); }
3202 
3205  solver_->set_variable_to_clean_on_fail(v);
3206  }
3207 
3209  virtual std::string name() const;
3210  void set_name(const std::string& name);
3212  bool HasName() const;
3214  virtual std::string BaseName() const;
3215 
3216  private:
3217  Solver* const solver_;
3218  DISALLOW_COPY_AND_ASSIGN(PropagationBaseObject);
3219 };
3220 
3223 class Decision : public BaseObject {
3224  public:
3226  ~Decision() override {}
3227 
3229  virtual void Apply(Solver* const s) = 0;
3230 
3232  virtual void Refute(Solver* const s) = 0;
3233 
3234  std::string DebugString() const override { return "Decision"; }
3236  virtual void Accept(DecisionVisitor* const visitor) const;
3237 
3238  private:
3239  DISALLOW_COPY_AND_ASSIGN(Decision);
3240 };
3241 
3244 class DecisionVisitor : public BaseObject {
3245  public:
3247  ~DecisionVisitor() override {}
3248  virtual void VisitSetVariableValue(IntVar* const var, int64 value);
3249  virtual void VisitSplitVariableDomain(IntVar* const var, int64 value,
3250  bool start_with_lower_half);
3251  virtual void VisitScheduleOrPostpone(IntervalVar* const var, int64 est);
3252  virtual void VisitScheduleOrExpedite(IntervalVar* const var, int64 est);
3253  virtual void VisitRankFirstInterval(SequenceVar* const sequence, int index);
3254  virtual void VisitRankLastInterval(SequenceVar* const sequence, int index);
3255  virtual void VisitUnknownDecision();
3256 
3257  private:
3258  DISALLOW_COPY_AND_ASSIGN(DecisionVisitor);
3259 };
3260 
3263 class DecisionBuilder : public BaseObject {
3264  public:
3266  ~DecisionBuilder() override {}
3271  virtual Decision* Next(Solver* const s) = 0;
3272  std::string DebugString() const override;
3273 #if !defined(SWIG)
3274  virtual void AppendMonitors(Solver* const solver,
3279  std::vector<SearchMonitor*>* const extras);
3280  virtual void Accept(ModelVisitor* const visitor) const;
3281 #endif
3282 
3283  private:
3284  DISALLOW_COPY_AND_ASSIGN(DecisionBuilder);
3285 };
3286 
3296 class Demon : public BaseObject {
3297  public:
3300  Demon() : stamp_(GG_ULONGLONG(0)) {}
3301  ~Demon() override {}
3302 
3304  virtual void Run(Solver* const s) = 0;
3305 
3309  virtual Solver::DemonPriority priority() const;
3310 
3311  std::string DebugString() const override;
3312 
3315  void inhibit(Solver* const s);
3316 
3318  void desinhibit(Solver* const s);
3319 
3320  private:
3321  friend class Queue;
3322  void set_stamp(int64 stamp) { stamp_ = stamp; }
3323  uint64 stamp() const { return stamp_; }
3324  uint64 stamp_;
3326 };
3327 
3329 class ModelVisitor : public BaseObject {
3330  public:
3332  static const char kAbs[];
3333  static const char kAbsEqual[];
3334  static const char kAllDifferent[];
3335  static const char kAllowedAssignments[];
3336  static const char kAtMost[];
3337  static const char kIndexOf[];
3338  static const char kBetween[];
3339  static const char kConditionalExpr[];
3340  static const char kCircuit[];
3341  static const char kConvexPiecewise[];
3342  static const char kCountEqual[];
3343  static const char kCover[];
3344  static const char kCumulative[];
3345  static const char kDeviation[];
3346  static const char kDifference[];
3347  static const char kDisjunctive[];
3348  static const char kDistribute[];
3349  static const char kDivide[];
3350  static const char kDurationExpr[];
3351  static const char kElement[];
3352  static const char kElementEqual[];
3353  static const char kEndExpr[];
3354  static const char kEquality[];
3355  static const char kFalseConstraint[];
3356  static const char kGlobalCardinality[];
3357  static const char kGreater[];
3358  static const char kGreaterOrEqual[];
3359  static const char kIntegerVariable[];
3360  static const char kIntervalBinaryRelation[];
3361  static const char kIntervalDisjunction[];
3362  static const char kIntervalUnaryRelation[];
3363  static const char kIntervalVariable[];
3364  static const char kInversePermutation[];
3365  static const char kIsBetween[];
3366  static const char kIsDifferent[];
3367  static const char kIsEqual[];
3368  static const char kIsGreater[];
3369  static const char kIsGreaterOrEqual[];
3370  static const char kIsLess[];
3371  static const char kIsLessOrEqual[];
3372  static const char kIsMember[];
3373  static const char kLess[];
3374  static const char kLessOrEqual[];
3375  static const char kLexLess[];
3376  static const char kLinkExprVar[];
3377  static const char kMapDomain[];
3378  static const char kMax[];
3379  static const char kMaxEqual[];
3380  static const char kMember[];
3381  static const char kMin[];
3382  static const char kMinEqual[];
3383  static const char kModulo[];
3384  static const char kNoCycle[];
3385  static const char kNonEqual[];
3386  static const char kNotBetween[];
3387  static const char kNotMember[];
3388  static const char kNullIntersect[];
3389  static const char kOpposite[];
3390  static const char kPack[];
3391  static const char kPathCumul[];
3392  static const char kDelayedPathCumul[];
3393  static const char kPerformedExpr[];
3394  static const char kPower[];
3395  static const char kProduct[];
3396  static const char kScalProd[];
3397  static const char kScalProdEqual[];
3398  static const char kScalProdGreaterOrEqual[];
3399  static const char kScalProdLessOrEqual[];
3400  static const char kSemiContinuous[];
3401  static const char kSequenceVariable[];
3402  static const char kSortingConstraint[];
3403  static const char kSquare[];
3404  static const char kStartExpr[];
3405  static const char kSum[];
3406  static const char kSumEqual[];
3407  static const char kSumGreaterOrEqual[];
3408  static const char kSumLessOrEqual[];
3409  static const char kTrace[];
3410  static const char kTransition[];
3411  static const char kTrueConstraint[];
3412  static const char kVarBoundWatcher[];
3413  static const char kVarValueWatcher[];
3414 
3416  static const char kCountAssignedItemsExtension[];
3417  static const char kCountUsedBinsExtension[];
3418  static const char kInt64ToBoolExtension[];
3419  static const char kInt64ToInt64Extension[];
3420  static const char kObjectiveExtension[];
3421  static const char kSearchLimitExtension[];
3422  static const char kUsageEqualVariableExtension[];
3423 
3424  static const char kUsageLessConstantExtension[];
3425  static const char kVariableGroupExtension[];
3428 
3430  static const char kActiveArgument[];
3431  static const char kAssumePathsArgument[];
3432  static const char kBranchesLimitArgument[];
3433  static const char kCapacityArgument[];
3434  static const char kCardsArgument[];
3435  static const char kCoefficientsArgument[];
3436  static const char kCountArgument[];
3437  static const char kCumulativeArgument[];
3438  static const char kCumulsArgument[];
3439  static const char kDemandsArgument[];
3440  static const char kDurationMaxArgument[];
3441  static const char kDurationMinArgument[];
3442  static const char kEarlyCostArgument[];
3443  static const char kEarlyDateArgument[];
3444  static const char kEndMaxArgument[];
3445  static const char kEndMinArgument[];
3446  static const char kEndsArgument[];
3447  static const char kExpressionArgument[];
3448  static const char kFailuresLimitArgument[];
3449  static const char kFinalStatesArgument[];
3450  static const char kFixedChargeArgument[];
3451  static const char kIndex2Argument[];
3452  static const char kIndexArgument[];
3453  static const char kInitialState[];
3454  static const char kIntervalArgument[];
3455  static const char kIntervalsArgument[];
3456  static const char kLateCostArgument[];
3457  static const char kLateDateArgument[];
3458  static const char kLeftArgument[];
3459  static const char kMaxArgument[];
3460  static const char kMaximizeArgument[];
3461  static const char kMinArgument[];
3462  static const char kModuloArgument[];
3463  static const char kNextsArgument[];
3464  static const char kOptionalArgument[];
3465  static const char kPartialArgument[];
3466  static const char kPositionXArgument[];
3467  static const char kPositionYArgument[];
3468  static const char kRangeArgument[];
3469  static const char kRelationArgument[];
3470  static const char kRightArgument[];
3471  static const char kSequenceArgument[];
3472  static const char kSequencesArgument[];
3473  static const char kSizeArgument[];
3474  static const char kSizeXArgument[];
3475  static const char kSizeYArgument[];
3476  static const char kSmartTimeCheckArgument[];
3477  static const char kSolutionLimitArgument[];
3478  static const char kStartMaxArgument[];
3479  static const char kStartMinArgument[];
3480  static const char kStartsArgument[];
3481  static const char kStepArgument[];
3482  static const char kTargetArgument[];
3483  static const char kTimeLimitArgument[];
3484  static const char kTransitsArgument[];
3485  static const char kTuplesArgument[];
3486  static const char kValueArgument[];
3487  static const char kValuesArgument[];
3488  static const char kVariableArgument[];
3489  static const char kVarsArgument[];
3490  static const char kEvaluatorArgument[];
3491 
3493  static const char kMirrorOperation[];
3494  static const char kRelaxedMaxOperation[];
3495  static const char kRelaxedMinOperation[];
3496  static const char kSumOperation[];
3497  static const char kDifferenceOperation[];
3498  static const char kProductOperation[];
3499  static const char kStartSyncOnStartOperation[];
3500  static const char kStartSyncOnEndOperation[];
3501  static const char kTraceOperation[];
3502 
3503  ~ModelVisitor() override;
3504 
3506 
3508  virtual void BeginVisitModel(const std::string& type_name);
3509  virtual void EndVisitModel(const std::string& type_name);
3510  virtual void BeginVisitConstraint(const std::string& type_name,
3511  const Constraint* const constraint);
3512  virtual void EndVisitConstraint(const std::string& type_name,
3513  const Constraint* const constraint);
3514  virtual void BeginVisitExtension(const std::string& type);
3515  virtual void EndVisitExtension(const std::string& type);
3516  virtual void BeginVisitIntegerExpression(const std::string& type_name,
3517  const IntExpr* const expr);
3518  virtual void EndVisitIntegerExpression(const std::string& type_name,
3519  const IntExpr* const expr);
3520  virtual void VisitIntegerVariable(const IntVar* const variable,
3521  IntExpr* const delegate);
3522  virtual void VisitIntegerVariable(const IntVar* const variable,
3523  const std::string& operation, int64 value,
3524  IntVar* const delegate);
3525  virtual void VisitIntervalVariable(const IntervalVar* const variable,
3526  const std::string& operation, int64 value,
3527  IntervalVar* const delegate);
3528  virtual void VisitSequenceVariable(const SequenceVar* const variable);
3529 
3531  virtual void VisitIntegerArgument(const std::string& arg_name, int64 value);
3532  virtual void VisitIntegerArrayArgument(const std::string& arg_name,
3533  const std::vector<int64>& values);
3534  virtual void VisitIntegerMatrixArgument(const std::string& arg_name,
3535  const IntTupleSet& tuples);
3536 
3538  virtual void VisitIntegerExpressionArgument(const std::string& arg_name,
3539  IntExpr* const argument);
3540 
3541  virtual void VisitIntegerVariableArrayArgument(
3542  const std::string& arg_name, const std::vector<IntVar*>& arguments);
3543 
3545  virtual void VisitIntervalArgument(const std::string& arg_name,
3546  IntervalVar* const argument);
3547 
3548  virtual void VisitIntervalArrayArgument(
3549  const std::string& arg_name, const std::vector<IntervalVar*>& arguments);
3551  virtual void VisitSequenceArgument(const std::string& arg_name,
3552  SequenceVar* const argument);
3553 
3554  virtual void VisitSequenceArrayArgument(
3555  const std::string& arg_name, const std::vector<SequenceVar*>& arguments);
3556 #if !defined(SWIG)
3559  const std::string& arg_name, const Solver::Int64ToIntVar& arguments);
3560 
3563  void VisitInt64ToBoolExtension(Solver::IndexFilter1 filter, int64 index_min,
3564  int64 index_max);
3566  int64 index_min, int64 index_max);
3569  const std::string& arg_name, int64 index_max);
3570 #endif // #if !defined(SWIG)
3571 };
3572 
3580  public:
3582  ~Constraint() override {}
3583 
3586  virtual void Post() = 0;
3587 
3590  virtual void InitialPropagate() = 0;
3591  std::string DebugString() const override;
3592 
3595  void PostAndPropagate();
3596 
3598  virtual void Accept(ModelVisitor* const visitor) const;
3599 
3601  bool IsCastConstraint() const;
3602 
3606  virtual IntVar* Var();
3607 
3608  private:
3609  DISALLOW_COPY_AND_ASSIGN(Constraint);
3610 };
3611 
3615 class CastConstraint : public Constraint {
3616  public:
3619  CHECK(target_var != nullptr);
3620  }
3621  ~CastConstraint() override {}
3622 
3623  IntVar* target_var() const { return target_var_; }
3624 
3625  protected:
3627 };
3628 
3630 class SearchMonitor : public BaseObject {
3631  public:
3632  static constexpr int kNoProgress = -1;
3633 
3634  explicit SearchMonitor(Solver* const s) : solver_(s) {}
3635  ~SearchMonitor() override {}
3637  virtual void EnterSearch();
3638 
3640  virtual void RestartSearch();
3641 
3643  virtual void ExitSearch();
3644 
3646  virtual void BeginNextDecision(DecisionBuilder* const b);
3647 
3649  virtual void EndNextDecision(DecisionBuilder* const b, Decision* const d);
3650 
3652  virtual void ApplyDecision(Decision* const d);
3653 
3655  virtual void RefuteDecision(Decision* const d);
3656 
3659  virtual void AfterDecision(Decision* const d, bool apply);
3660 
3662  virtual void BeginFail();
3663 
3665  virtual void EndFail();
3666 
3668  virtual void BeginInitialPropagation();
3669 
3671  virtual void EndInitialPropagation();
3672 
3676  virtual bool AcceptSolution();
3677 
3681  virtual bool AtSolution();
3682 
3684  virtual void NoMoreSolutions();
3685 
3688  virtual bool LocalOptimum();
3689 
3691  virtual bool AcceptDelta(Assignment* delta, Assignment* deltadelta);
3692 
3694  virtual void AcceptNeighbor();
3695 
3697  virtual void AcceptUncheckedNeighbor();
3698 
3701  virtual bool IsUncheckedSolutionLimitReached() { return false; }
3702 
3703  Solver* solver() const { return solver_; }
3704 
3706  virtual void PeriodicCheck();
3707 
3710  virtual int ProgressPercent() { return kNoProgress; }
3711 
3713  virtual void Accept(ModelVisitor* const visitor) const;
3714 
3717  virtual void Install();
3718 
3719  private:
3720  Solver* const solver_;
3721  DISALLOW_COPY_AND_ASSIGN(SearchMonitor);
3722 };
3723 
3729 template <class T>
3730 class Rev {
3731  public:
3732  explicit Rev(const T& val) : stamp_(0), value_(val) {}
3733 
3734  const T& Value() const { return value_; }
3735 
3736  void SetValue(Solver* const s, const T& val) {
3737  if (val != value_) {
3738  if (stamp_ < s->stamp()) {
3739  s->SaveValue(&value_);
3740  stamp_ = s->stamp();
3741  }
3742  value_ = val;
3743  }
3744  }
3745 
3746  private:
3747  uint64 stamp_;
3748  T value_;
3749 };
3750 
3752 template <class T>
3753 class NumericalRev : public Rev<T> {
3754  public:
3755  explicit NumericalRev(const T& val) : Rev<T>(val) {}
3756 
3757  void Add(Solver* const s, const T& to_add) {
3758  this->SetValue(s, this->Value() + to_add);
3759  }
3760 
3761  void Incr(Solver* const s) { Add(s, 1); }
3762 
3763  void Decr(Solver* const s) { Add(s, -1); }
3764 };
3765 
3771 template <class T>
3772 class RevArray {
3773  public:
3774  RevArray(int size, const T& val)
3775  : stamps_(new uint64[size]), values_(new T[size]), size_(size) {
3776  for (int i = 0; i < size; ++i) {
3777  stamps_[i] = 0;
3778  values_[i] = val;
3779  }
3780  }
3781 
3783 
3784  int64 size() const { return size_; }
3785 
3786  const T& Value(int index) const { return values_[index]; }
3787 
3788 #if !defined(SWIG)
3789  const T& operator[](int index) const { return values_[index]; }
3790 #endif
3791 
3792  void SetValue(Solver* const s, int index, const T& val) {
3793  DCHECK_LT(index, size_);
3794  if (val != values_[index]) {
3795  if (stamps_[index] < s->stamp()) {
3796  s->SaveValue(&values_[index]);
3797  stamps_[index] = s->stamp();
3798  }
3799  values_[index] = val;
3800  }
3801  }
3802 
3803  private:
3804  std::unique_ptr<uint64[]> stamps_;
3805  std::unique_ptr<T[]> values_;
3806  const int size_;
3807 };
3808 
3810 template <class T>
3811 class NumericalRevArray : public RevArray<T> {
3812  public:
3813  NumericalRevArray(int size, const T& val) : RevArray<T>(size, val) {}
3814 
3815  void Add(Solver* const s, int index, const T& to_add) {
3816  this->SetValue(s, index, this->Value(index) + to_add);
3817  }
3818 
3819  void Incr(Solver* const s, int index) { Add(s, index, 1); }
3820 
3821  void Decr(Solver* const s, int index) { Add(s, index, -1); }
3822 };
3823 
3832  public:
3833  explicit IntExpr(Solver* const s) : PropagationBaseObject(s) {}
3834  ~IntExpr() override {}
3835 
3836  virtual int64 Min() const = 0;
3837  virtual void SetMin(int64 m) = 0;
3838  virtual int64 Max() const = 0;
3839  virtual void SetMax(int64 m) = 0;
3840 
3843  virtual void Range(int64* l, int64* u) {
3844  *l = Min();
3845  *u = Max();
3846  }
3848  virtual void SetRange(int64 l, int64 u) {
3849  SetMin(l);
3850  SetMax(u);
3851  }
3852 
3854  virtual void SetValue(int64 v) { SetRange(v, v); }
3855 
3857  virtual bool Bound() const { return (Min() == Max()); }
3858 
3860  virtual bool IsVar() const { return false; }
3861 
3863  virtual IntVar* Var() = 0;
3864 
3869  IntVar* VarWithName(const std::string& name);
3870 
3872  virtual void WhenRange(Demon* d) = 0;
3874  void WhenRange(Solver::Closure closure) {
3875  WhenRange(solver()->MakeClosureDemon(std::move(closure)));
3876  }
3877 
3878 #if !defined(SWIG)
3879  void WhenRange(Solver::Action action) {
3881  WhenRange(solver()->MakeActionDemon(std::move(action)));
3882  }
3883 #endif // SWIG
3884 
3886  virtual void Accept(ModelVisitor* const visitor) const;
3887 
3888  private:
3889  DISALLOW_COPY_AND_ASSIGN(IntExpr);
3890 };
3891 
3899 
3902 
3908 
3909 class IntVarIterator : public BaseObject {
3910  public:
3911  ~IntVarIterator() override {}
3912 
3914  virtual void Init() = 0;
3915 
3917  virtual bool Ok() const = 0;
3918 
3920  virtual int64 Value() const = 0;
3921 
3923  virtual void Next() = 0;
3924 
3926  std::string DebugString() const override { return "IntVar::Iterator"; }
3927 };
3928 
3929 #ifndef SWIG
3930 class InitAndGetValues {
3937  public:
3939  : it_(it), begin_was_called_(false) {
3940  it_->Init();
3941  }
3942  struct Iterator;
3944  if (DEBUG_MODE) {
3945  DCHECK(!begin_was_called_);
3946  begin_was_called_ = true;
3947  }
3948  return Iterator::Begin(it_);
3949  }
3950  Iterator end() { return Iterator::End(it_); }
3951 
3952  struct Iterator {
3955  return Iterator(it, /*is_end=*/false);
3956  }
3958  return Iterator(it, /*is_end=*/true);
3959  }
3960 
3961  int64 operator*() const {
3962  DCHECK(it_->Ok());
3963  return it_->Value();
3964  }
3966  DCHECK(it_->Ok());
3967  it_->Next();
3968  return *this;
3969  }
3970  bool operator!=(const Iterator& other) const {
3971  DCHECK(other.it_ == it_);
3972  DCHECK(other.is_end_);
3973  return it_->Ok();
3974  }
3975 
3976  private:
3977  Iterator(IntVarIterator* it, bool is_end) : it_(it), is_end_(is_end) {}
3978 
3979  IntVarIterator* const it_;
3980  const bool is_end_;
3981  };
3982 
3983  private:
3984  IntVarIterator* const it_;
3985  bool begin_was_called_;
3986 };
3987 #endif // SWIG
3988 
3992 class IntVar : public IntExpr {
3993  public:
3994  explicit IntVar(Solver* const s);
3995  IntVar(Solver* const s, const std::string& name);
3996  ~IntVar() override {}
3997 
3998  bool IsVar() const override { return true; }
3999  IntVar* Var() override { return this; }
4000 
4003  virtual int64 Value() const = 0;
4004 
4006  virtual void RemoveValue(int64 v) = 0;
4007 
4010  virtual void RemoveInterval(int64 l, int64 u) = 0;
4011 
4013  virtual void RemoveValues(const std::vector<int64>& values);
4014 
4016  virtual void SetValues(const std::vector<int64>& values);
4017 
4020  virtual void WhenBound(Demon* d) = 0;
4023  void WhenBound(Solver::Closure closure) {
4024  WhenBound(solver()->MakeClosureDemon(std::move(closure)));
4025  }
4026 
4027 #if !defined(SWIG)
4028  void WhenBound(Solver::Action action) {
4031  WhenBound(solver()->MakeActionDemon(std::move(action)));
4032  }
4033 #endif // SWIG
4034 
4037  virtual void WhenDomain(Demon* d) = 0;
4040  void WhenDomain(Solver::Closure closure) {
4041  WhenDomain(solver()->MakeClosureDemon(std::move(closure)));
4042  }
4043 #if !defined(SWIG)
4044  void WhenDomain(Solver::Action action) {
4047  WhenDomain(solver()->MakeActionDemon(std::move(action)));
4048  }
4049 #endif // SWIG
4050 
4052  virtual uint64 Size() const = 0;
4053 
4056  virtual bool Contains(int64 v) const = 0;
4057 
4061  virtual IntVarIterator* MakeHoleIterator(bool reversible) const = 0;
4062 
4066  virtual IntVarIterator* MakeDomainIterator(bool reversible) const = 0;
4067 
4069  virtual int64 OldMin() const = 0;
4070 
4072  virtual int64 OldMax() const = 0;
4073 
4074  virtual int VarType() const;
4075 
4077  void Accept(ModelVisitor* const visitor) const override;
4078 
4080  virtual IntVar* IsEqual(int64 constant) = 0;
4081  virtual IntVar* IsDifferent(int64 constant) = 0;
4082  virtual IntVar* IsGreaterOrEqual(int64 constant) = 0;
4083  virtual IntVar* IsLessOrEqual(int64 constant) = 0;
4084 
4086  int index() const { return index_; }
4087 
4088  private:
4089  const int index_;
4090  DISALLOW_COPY_AND_ASSIGN(IntVar);
4091 };
4092 
4097  public:
4098  SolutionCollector(Solver* const solver, const Assignment* assignment);
4099  explicit SolutionCollector(Solver* const solver);
4100  ~SolutionCollector() override;
4101  std::string DebugString() const override { return "SolutionCollector"; }
4102 
4104  void Add(IntVar* const var);
4105  void Add(const std::vector<IntVar*>& vars);
4106  void Add(IntervalVar* const var);
4107  void Add(const std::vector<IntervalVar*>& vars);
4108  void Add(SequenceVar* const var);
4109  void Add(const std::vector<SequenceVar*>& vars);
4110  void AddObjective(IntVar* const objective);
4111 
4113  void EnterSearch() override;
4114 
4116  int solution_count() const;
4117 
4119  Assignment* solution(int n) const;
4120 
4122  int64 wall_time(int n) const;
4123 
4125  int64 branches(int n) const;
4126 
4129  int64 failures(int n) const;
4130 
4132  int64 objective_value(int n) const;
4133 
4135  int64 Value(int n, IntVar* const var) const;
4136 
4138  int64 StartValue(int n, IntervalVar* const var) const;
4139 
4141  int64 EndValue(int n, IntervalVar* const var) const;
4142 
4144  int64 DurationValue(int n, IntervalVar* const var) const;
4145 
4147  int64 PerformedValue(int n, IntervalVar* const var) const;
4148 
4152  const std::vector<int>& ForwardSequence(int n, SequenceVar* const var) const;
4156  const std::vector<int>& BackwardSequence(int n, SequenceVar* const var) const;
4159  const std::vector<int>& Unperformed(int n, SequenceVar* const var) const;
4160 
4161  protected:
4162  struct SolutionData {
4168  bool operator<(const SolutionData& other) const {
4169  return std::tie(solution, time, branches, failures, objective_value) <
4170  std::tie(other.solution, other.time, other.branches,
4171  other.failures, other.objective_value);
4172  }
4173  };
4174 
4176  void PushSolution();
4177  void Push(const SolutionData& data) { solution_data_.push_back(data); }
4179  void PopSolution();
4180  SolutionData BuildSolutionDataForCurrentState();
4182  void check_index(int n) const;
4183 
4184  std::unique_ptr<Assignment> prototype_;
4185  std::vector<SolutionData> solution_data_;
4186  std::vector<Assignment*> recycle_solutions_;
4187 
4188  private:
4189  DISALLOW_COPY_AND_ASSIGN(SolutionCollector);
4190 };
4191 
4192 // TODO(user): Refactor this into an Objective class:
4193 // - print methods for AtNode and AtSolution.
4194 // - support for weighted objective and lexicographical objective.
4195 
4199 class OptimizeVar : public SearchMonitor {
4200  public:
4201  OptimizeVar(Solver* const s, bool maximize, IntVar* const a, int64 step);
4202  ~OptimizeVar() override;
4203 
4205  int64 best() const { return best_; }
4206 
4208  IntVar* Var() const { return var_; }
4210  bool AcceptDelta(Assignment* delta, Assignment* deltadelta) override;
4211  void EnterSearch() override;
4212  void BeginNextDecision(DecisionBuilder* const db) override;
4213  void RefuteDecision(Decision* const d) override;
4214  bool AtSolution() override;
4215  bool AcceptSolution() override;
4216  virtual std::string Print() const;
4217  std::string DebugString() const override;
4218  void Accept(ModelVisitor* const visitor) const override;
4219 
4220  void ApplyBound();
4221 
4222  protected:
4223  IntVar* const var_;
4228 
4229  private:
4230  DISALLOW_COPY_AND_ASSIGN(OptimizeVar);
4231 };
4232 
4234 class SearchLimit : public SearchMonitor {
4235  public:
4236  explicit SearchLimit(Solver* const s) : SearchMonitor(s), crossed_(false) {}
4237  ~SearchLimit() override;
4238 
4240  bool crossed() const { return crossed_; }
4241 
4246  virtual bool Check() = 0;
4247 
4249  virtual void Init() = 0;
4250 
4253  virtual void Copy(const SearchLimit* const limit) = 0;
4254 
4256  virtual SearchLimit* MakeClone() const = 0;
4257 
4259  void EnterSearch() override;
4260  void BeginNextDecision(DecisionBuilder* const b) override;
4261  void PeriodicCheck() override;
4262  void RefuteDecision(Decision* const d) override;
4263  std::string DebugString() const override {
4264  return absl::StrFormat("SearchLimit(crossed = %i)", crossed_);
4265  }
4266 
4267  private:
4268  void TopPeriodicCheck();
4269 
4270  bool crossed_;
4271  DISALLOW_COPY_AND_ASSIGN(SearchLimit);
4272 };
4273 
4276 class RegularLimit : public SearchLimit {
4277  public:
4278  RegularLimit(Solver* const s, absl::Duration time, int64 branches,
4279  int64 failures, int64 solutions, bool smart_time_check,
4280  bool cumulative);
4281  ~RegularLimit() override;
4282  void Copy(const SearchLimit* const limit) override;
4283  SearchLimit* MakeClone() const override;
4285  bool Check() override;
4286  void Init() override;
4287  void ExitSearch() override;
4288  void UpdateLimits(absl::Duration time, int64 branches, int64 failures,
4289  int64 solutions);
4290  absl::Duration duration_limit() const { return duration_limit_; }
4291  int64 wall_time() const {
4292  return duration_limit_ == absl::InfiniteDuration()
4293  ? kint64max
4294  : absl::ToInt64Milliseconds(duration_limit());
4295  }
4296  int64 branches() const { return branches_; }
4297  int64 failures() const { return failures_; }
4298  int64 solutions() const { return solutions_; }
4299  bool IsUncheckedSolutionLimitReached() override;
4300  int ProgressPercent() override;
4301  std::string DebugString() const override;
4302 
4303  absl::Time AbsoluteSolverDeadline() const {
4304  return solver_time_at_limit_start_ + duration_limit_;
4305  }
4306 
4307  void Accept(ModelVisitor* const visitor) const override;
4308 
4309  private:
4310  bool CheckTime();
4311  absl::Duration TimeElapsed();
4312  static int64 GetPercent(int64 value, int64 offset, int64 total) {
4313  return (total > 0 && total < kint64max) ? 100 * (value - offset) / total
4314  : -1;
4315  }
4316 
4317  absl::Duration duration_limit_;
4318  absl::Time solver_time_at_limit_start_;
4319  absl::Duration last_time_elapsed_;
4320  int64 check_count_;
4321  int64 next_check_;
4322  bool smart_time_check_;
4323  int64 branches_;
4324  int64 branches_offset_;
4325  int64 failures_;
4326  int64 failures_offset_;
4327  int64 solutions_;
4328  int64 solutions_offset_;
4336  bool cumulative_;
4337 };
4338 
4339 // Limit based on the improvement rate of 'objective_var'.
4340 // This limit proceeds in two stages:
4341 // 1) During the phase of the search in which the objective_var is strictly
4342 // improving, a threshold value is computed as the minimum improvement rate of
4343 // the objective, based on the 'improvement_rate_coefficient' and
4344 // 'improvement_rate_solutions_distance' parameters.
4345 // 2) Then, if the search continues beyond this phase of strict improvement, the
4346 // limit stops the search when the improvement rate of the objective gets below
4347 // this threshold value.
4349  public:
4350  ImprovementSearchLimit(Solver* const s, IntVar* objective_var, bool maximize,
4351  double objective_scaling_factor,
4352  double objective_offset,
4353  double improvement_rate_coefficient,
4354  int improvement_rate_solutions_distance);
4355  ~ImprovementSearchLimit() override;
4356  void Copy(const SearchLimit* const limit) override;
4357  SearchLimit* MakeClone() const override;
4358  bool Check() override;
4359  bool AtSolution() override;
4360  void Init() override;
4361 
4362  private:
4363  IntVar* objective_var_;
4364  bool maximize_;
4365  double objective_scaling_factor_;
4366  double objective_offset_;
4367  double improvement_rate_coefficient_;
4368  int improvement_rate_solutions_distance_;
4369 
4370  double best_objective_;
4371  // clang-format off
4372  std::deque<std::pair<double, int64> > improvements_;
4373  // clang-format on
4374  double threshold_;
4375  bool objective_updated_;
4376  bool gradient_stage_;
4377 };
4378 
4390  public:
4392  static const int64 kMinValidValue;
4394  static const int64 kMaxValidValue;
4395  IntervalVar(Solver* const solver, const std::string& name)
4397  set_name(name);
4398  }
4399  ~IntervalVar() override {}
4400 
4403  virtual int64 StartMin() const = 0;
4404  virtual int64 StartMax() const = 0;
4405  virtual void SetStartMin(int64 m) = 0;
4406  virtual void SetStartMax(int64 m) = 0;
4407  virtual void SetStartRange(int64 mi, int64 ma) = 0;
4408  virtual int64 OldStartMin() const = 0;
4409  virtual int64 OldStartMax() const = 0;
4410  virtual void WhenStartRange(Demon* const d) = 0;
4412  WhenStartRange(solver()->MakeClosureDemon(std::move(closure)));
4413  }
4414 #if !defined(SWIG)
4416  WhenStartRange(solver()->MakeActionDemon(std::move(action)));
4417  }
4418 #endif // SWIG
4419  virtual void WhenStartBound(Demon* const d) = 0;
4421  WhenStartBound(solver()->MakeClosureDemon(std::move(closure)));
4422  }
4423 #if !defined(SWIG)
4425  WhenStartBound(solver()->MakeActionDemon(std::move(action)));
4426  }
4427 #endif // SWIG
4428 
4430  virtual int64 DurationMin() const = 0;
4431  virtual int64 DurationMax() const = 0;
4432  virtual void SetDurationMin(int64 m) = 0;
4433  virtual void SetDurationMax(int64 m) = 0;
4434  virtual void SetDurationRange(int64 mi, int64 ma) = 0;
4435  virtual int64 OldDurationMin() const = 0;
4436  virtual int64 OldDurationMax() const = 0;
4437  virtual void WhenDurationRange(Demon* const d) = 0;
4439  WhenDurationRange(solver()->MakeClosureDemon(std::move(closure)));
4440  }
4441 #if !defined(SWIG)
4443  WhenDurationRange(solver()->MakeActionDemon(std::move(action)));
4444  }
4445 #endif // SWIG
4446  virtual void WhenDurationBound(Demon* const d) = 0;
4448  WhenDurationBound(solver()->MakeClosureDemon(std::move(closure)));
4449  }
4450 #if !defined(SWIG)
4452  WhenDurationBound(solver()->MakeActionDemon(std::move(action)));
4453  }
4454 #endif // SWIG
4455 
4457  virtual int64 EndMin() const = 0;
4458  virtual int64 EndMax() const = 0;
4459  virtual void SetEndMin(int64 m) = 0;
4460  virtual void SetEndMax(int64 m) = 0;
4461  virtual void SetEndRange(int64 mi, int64 ma) = 0;
4462  virtual int64 OldEndMin() const = 0;
4463  virtual int64 OldEndMax() const = 0;
4464  virtual void WhenEndRange(Demon* const d) = 0;
4466  WhenEndRange(solver()->MakeClosureDemon(std::move(closure)));
4467  }
4468 #if !defined(SWIG)
4470  WhenEndRange(solver()->MakeActionDemon(std::move(action)));
4471  }
4472 #endif // SWIG
4473  virtual void WhenEndBound(Demon* const d) = 0;
4475  WhenEndBound(solver()->MakeClosureDemon(std::move(closure)));
4476  }
4477 #if !defined(SWIG)
4479  WhenEndBound(solver()->MakeActionDemon(std::move(action)));
4480  }
4481 #endif // SWIG
4482 
4485  virtual bool MustBePerformed() const = 0;
4486  virtual bool MayBePerformed() const = 0;
4487  bool CannotBePerformed() const { return !MayBePerformed(); }
4488  bool IsPerformedBound() const {
4489  return MustBePerformed() || !MayBePerformed();
4490  }
4491  virtual void SetPerformed(bool val) = 0;
4492  virtual bool WasPerformedBound() const = 0;
4493  virtual void WhenPerformedBound(Demon* const d) = 0;
4495  WhenPerformedBound(solver()->MakeClosureDemon(std::move(closure)));
4496  }
4497 #if !defined(SWIG)
4499  WhenPerformedBound(solver()->MakeActionDemon(std::move(action)));
4500  }
4501 #endif // SWIG
4502 
4504  void WhenAnything(Demon* const d);
4507  WhenAnything(solver()->MakeClosureDemon(std::move(closure)));
4508  }
4509 #if !defined(SWIG)
4510  void WhenAnything(Solver::Action action) {
4512  WhenAnything(solver()->MakeActionDemon(std::move(action)));
4513  }
4514 #endif // SWIG
4515 
4519  virtual IntExpr* StartExpr() = 0;
4520  virtual IntExpr* DurationExpr() = 0;
4521  virtual IntExpr* EndExpr() = 0;
4522  virtual IntExpr* PerformedExpr() = 0;
4526  virtual IntExpr* SafeStartExpr(int64 unperformed_value) = 0;
4527  virtual IntExpr* SafeDurationExpr(int64 unperformed_value) = 0;
4528  virtual IntExpr* SafeEndExpr(int64 unperformed_value) = 0;
4529 
4531  virtual void Accept(ModelVisitor* const visitor) const = 0;
4532 
4533  private:
4534  DISALLOW_COPY_AND_ASSIGN(IntervalVar);
4535 };
4536 
4544  public:
4545  SequenceVar(Solver* const s, const std::vector<IntervalVar*>& intervals,
4546  const std::vector<IntVar*>& nexts, const std::string& name);
4547 
4548  ~SequenceVar() override;
4549 
4550  std::string DebugString() const override;
4551 
4552 #if !defined(SWIG)
4553  void DurationRange(int64* const dmin, int64* const dmax) const;
4556 
4559  void HorizonRange(int64* const hmin, int64* const hmax) const;
4560 
4563  void ActiveHorizonRange(int64* const hmin, int64* const hmax) const;
4564 
4566  void ComputeStatistics(int* const ranked, int* const not_ranked,
4567  int* const unperformed) const;
4568 #endif // !defined(SWIG)
4569 
4572  void RankFirst(int index);
4573 
4576  void RankNotFirst(int index);
4577 
4580  void RankLast(int index);
4581 
4584  void RankNotLast(int index);
4585 
4588  void ComputePossibleFirstsAndLasts(std::vector<int>* const possible_firsts,
4589  std::vector<int>* const possible_lasts);
4590 
4596  void RankSequence(const std::vector<int>& rank_first,
4597  const std::vector<int>& rank_last,
4598  const std::vector<int>& unperformed);
4599 
4608  void FillSequence(std::vector<int>* const rank_first,
4609  std::vector<int>* const rank_last,
4610  std::vector<int>* const unperformed) const;
4611 
4613  IntervalVar* Interval(int index) const;
4614 
4616  IntVar* Next(int index) const;
4617 
4619  int64 size() const { return intervals_.size(); }
4620 
4622  virtual void Accept(ModelVisitor* const visitor) const;
4623 
4624  private:
4625  int ComputeForwardFrontier();
4626  int ComputeBackwardFrontier();
4627  void UpdatePrevious() const;
4628 
4629  const std::vector<IntervalVar*> intervals_;
4630  const std::vector<IntVar*> nexts_;
4631  mutable std::vector<int> previous_;
4632 };
4633 
4635  public:
4636  AssignmentElement() : activated_(true) {}
4637 
4638  void Activate() { activated_ = true; }
4639  void Deactivate() { activated_ = false; }
4640  bool Activated() const { return activated_; }
4641 
4642  private:
4643  bool activated_;
4644 };
4645 
4647  public:
4648  IntVarElement();
4649  explicit IntVarElement(IntVar* const var);
4650  void Reset(IntVar* const var);
4651  IntVarElement* Clone();
4652  void Copy(const IntVarElement& element);
4653  IntVar* Var() const { return var_; }
4654  void Store() {
4655  min_ = var_->Min();
4656  max_ = var_->Max();
4657  }
4658  void Restore() {
4659  if (var_ != nullptr) {
4660  var_->SetRange(min_, max_);
4661  }
4662  }
4663  void LoadFromProto(const IntVarAssignment& int_var_assignment_proto);
4664  void WriteToProto(IntVarAssignment* int_var_assignment_proto) const;
4665 
4666  int64 Min() const { return min_; }
4667  void SetMin(int64 m) { min_ = m; }
4668  int64 Max() const { return max_; }
4669  void SetMax(int64 m) { max_ = m; }
4670  int64 Value() const {
4671  DCHECK_EQ(min_, max_);
4672  // Get the value from an unbound int var assignment element.
4673  return min_;
4674  }
4675  bool Bound() const { return (max_ == min_); }
4676  void SetRange(int64 l, int64 u) {
4677  min_ = l;
4678  max_ = u;
4679  }
4680  void SetValue(int64 v) {
4681  min_ = v;
4682  max_ = v;
4683  }
4684  std::string DebugString() const;
4685 
4686  bool operator==(const IntVarElement& element) const;
4687  bool operator!=(const IntVarElement& element) const {
4688  return !(*this == element);
4689  }
4690 
4691  private:
4692  IntVar* var_;
4693  int64 min_;
4694  int64 max_;
4695 };
4696 
4698  public:
4700  explicit IntervalVarElement(IntervalVar* const var);
4701  void Reset(IntervalVar* const var);
4703  void Copy(const IntervalVarElement& element);
4704  IntervalVar* Var() const { return var_; }
4705  void Store();
4706  void Restore();
4707  void LoadFromProto(
4708  const IntervalVarAssignment& interval_var_assignment_proto);
4709  void WriteToProto(IntervalVarAssignment* interval_var_assignment_proto) const;
4710 
4711  int64 StartMin() const { return start_min_; }
4712  int64 StartMax() const { return start_max_; }
4713  int64 StartValue() const {
4714  CHECK_EQ(start_max_, start_min_);
4715  return start_max_;
4716  }
4717  int64 DurationMin() const { return duration_min_; }
4718  int64 DurationMax() const { return duration_max_; }
4720  CHECK_EQ(duration_max_, duration_min_);
4721  return duration_max_;
4722  }
4723  int64 EndMin() const { return end_min_; }
4724  int64 EndMax() const { return end_max_; }
4725  int64 EndValue() const {
4726  CHECK_EQ(end_max_, end_min_);
4727  return end_max_;
4728  }
4729  int64 PerformedMin() const { return performed_min_; }
4730  int64 PerformedMax() const { return performed_max_; }
4732  CHECK_EQ(performed_max_, performed_min_);
4733  return performed_max_;
4734  }
4735  void SetStartMin(int64 m) { start_min_ = m; }
4736  void SetStartMax(int64 m) { start_max_ = m; }
4737  void SetStartRange(int64 mi, int64 ma) {
4738  start_min_ = mi;
4739  start_max_ = ma;
4740  }
4742  start_min_ = v;
4743  start_max_ = v;
4744  }
4745  void SetDurationMin(int64 m) { duration_min_ = m; }
4746  void SetDurationMax(int64 m) { duration_max_ = m; }
4748  duration_min_ = mi;
4749  duration_max_ = ma;
4750  }
4752  duration_min_ = v;
4753  duration_max_ = v;
4754  }
4755  void SetEndMin(int64 m) { end_min_ = m; }
4756  void SetEndMax(int64 m) { end_max_ = m; }
4757  void SetEndRange(int64 mi, int64 ma) {
4758  end_min_ = mi;
4759  end_max_ = ma;
4760  }
4761  void SetEndValue(int64 v) {
4762  end_min_ = v;
4763  end_max_ = v;
4764  }
4765  void SetPerformedMin(int64 m) { performed_min_ = m; }
4766  void SetPerformedMax(int64 m) { performed_max_ = m; }
4768  performed_min_ = mi;
4769  performed_max_ = ma;
4770  }
4772  performed_min_ = v;
4773  performed_max_ = v;
4774  }
4775  bool Bound() const {
4776  return (start_min_ == start_max_ && duration_min_ == duration_max_ &&
4777  end_min_ == end_max_ && performed_min_ == performed_max_);
4778  }
4779  std::string DebugString() const;
4780  bool operator==(const IntervalVarElement& element) const;
4781  bool operator!=(const IntervalVarElement& element) const {
4782  return !(*this == element);
4783  }
4784 
4785  private:
4786  int64 start_min_;
4787  int64 start_max_;
4788  int64 duration_min_;
4789  int64 duration_max_;
4790  int64 end_min_;
4791  int64 end_max_;
4792  int64 performed_min_;
4793  int64 performed_max_;
4794  IntervalVar* var_;
4795 };
4796 
4811  public:
4813  explicit SequenceVarElement(SequenceVar* const var);
4814  void Reset(SequenceVar* const var);
4816  void Copy(const SequenceVarElement& element);
4817  SequenceVar* Var() const { return var_; }
4818  void Store();
4819  void Restore();
4820  void LoadFromProto(
4821  const SequenceVarAssignment& sequence_var_assignment_proto);
4822  void WriteToProto(SequenceVarAssignment* sequence_var_assignment_proto) const;
4823 
4824  const std::vector<int>& ForwardSequence() const;
4825  const std::vector<int>& BackwardSequence() const;
4826  const std::vector<int>& Unperformed() const;
4827  void SetSequence(const std::vector<int>& forward_sequence,
4828  const std::vector<int>& backward_sequence,
4829  const std::vector<int>& unperformed);
4830  void SetForwardSequence(const std::vector<int>& forward_sequence);
4831  void SetBackwardSequence(const std::vector<int>& backward_sequence);
4832  void SetUnperformed(const std::vector<int>& unperformed);
4833  bool Bound() const {
4834  return forward_sequence_.size() + unperformed_.size() == var_->size();
4835  }
4836 
4837  std::string DebugString() const;
4838 
4839  bool operator==(const SequenceVarElement& element) const;
4840  bool operator!=(const SequenceVarElement& element) const {
4841  return !(*this == element);
4842  }
4843 
4844  private:
4845  bool CheckClassInvariants();
4846 
4847  SequenceVar* var_;
4848  std::vector<int> forward_sequence_;
4849  std::vector<int> backward_sequence_;
4850  std::vector<int> unperformed_;
4851 };
4852 
4853 template <class V, class E>
4855  public:
4857  E* Add(V* var) {
4858  CHECK(var != nullptr);
4859  int index = -1;
4860  if (!Find(var, &index)) {
4861  return FastAdd(var);
4862  } else {
4863  return &elements_[index];
4864  }
4865  }
4867  E* FastAdd(V* var) {
4868  DCHECK(var != nullptr);
4869  elements_.emplace_back(var);
4870  return &elements_.back();
4871  }
4874  E* AddAtPosition(V* var, int position) {
4875  elements_[position].Reset(var);
4876  return &elements_[position];
4877  }
4878  void Clear() {
4879  elements_.clear();
4880  if (!elements_map_.empty()) {
4881  elements_map_.clear();
4882  }
4883  }
4886  void Resize(size_t size) { elements_.resize(size); }
4887  bool Empty() const { return elements_.empty(); }
4891  for (int i = 0; i < container.elements_.size(); ++i) {
4892  const E& element = container.elements_[i];
4893  const V* const var = element.Var();
4894  int index = -1;
4895  if (i < elements_.size() && elements_[i].Var() == var) {
4896  index = i;
4897  } else if (!Find(var, &index)) {
4898  continue;
4899  }
4900  DCHECK_GE(index, 0);
4901  E* const local_element = &elements_[index];
4902  local_element->Copy(element);
4903  if (element.Activated()) {
4904  local_element->Activate();
4905  } else {
4906  local_element->Deactivate();
4907  }
4908  }
4909  }
4912  void Copy(const AssignmentContainer<V, E>& container) {
4913  Clear();
4914  for (int i = 0; i < container.elements_.size(); ++i) {
4915  const E& element = container.elements_[i];
4916  FastAdd(element.Var())->Copy(element);
4917  }
4918  }
4919  bool Contains(const V* const var) const {
4920  int index;
4921  return Find(var, &index);
4922  }
4923  E* MutableElement(const V* const var) {
4924  E* const element = MutableElementOrNull(var);
4925  DCHECK(element != nullptr)
4926  << "Unknown variable " << var->DebugString() << " in solution";
4927  return element;
4928  }
4929  E* MutableElementOrNull(const V* const var) {
4930  int index = -1;
4931  if (Find(var, &index)) {
4932  return MutableElement(index);
4933  }
4934  return nullptr;
4935  }
4936  const E& Element(const V* const var) const {
4937  const E* const element = ElementPtrOrNull(var);
4938  DCHECK(element != nullptr)
4939  << "Unknown variable " << var->DebugString() << " in solution";
4940  return *element;
4941  }
4942  const E* ElementPtrOrNull(const V* const var) const {
4943  int index = -1;
4944  if (Find(var, &index)) {
4945  return &Element(index);
4946  }
4947  return nullptr;
4948  }
4949  const std::vector<E>& elements() const { return elements_; }
4950  E* MutableElement(int index) { return &elements_[index]; }
4951  const E& Element(int index) const { return elements_[index]; }
4952  int Size() const { return elements_.size(); }
4953  void Store() {
4954  for (E& element : elements_) {
4955  element.Store();
4956  }
4957  }
4958  void Restore() {
4959  for (E& element : elements_) {
4960  if (element.Activated()) {
4961  element.Restore();
4962  }
4963  }
4964  }
4965  bool AreAllElementsBound() const {
4966  for (const E& element : elements_) {
4967  if (!element.Bound()) return false;
4968  }
4969  return true;
4970  }
4971 
4975  bool operator==(const AssignmentContainer<V, E>& container) const {
4977  if (Size() != container.Size()) {
4978  return false;
4979  }
4981  EnsureMapIsUpToDate();
4985  for (const E& element : container.elements_) {
4986  const int position =
4987  gtl::FindWithDefault(elements_map_, element.Var(), -1);
4988  if (position < 0 || elements_[position] != element) {
4989  return false;
4990  }
4991  }
4992  return true;
4993  }
4994  bool operator!=(const AssignmentContainer<V, E>& container) const {
4995  return !(*this == container);
4996  }
4997 
4998  private:
4999  void EnsureMapIsUpToDate() const {
5000  absl::flat_hash_map<const V*, int>* map =
5001  const_cast<absl::flat_hash_map<const V*, int>*>(&elements_map_);
5002  for (int i = map->size(); i < elements_.size(); ++i) {
5003  (*map)[elements_[i].Var()] = i;
5004  }
5005  }
5006  bool Find(const V* const var, int* index) const {
5008  const size_t kMaxSizeForLinearAccess = 11;
5009  if (Size() <= kMaxSizeForLinearAccess) {
5013  for (int i = 0; i < elements_.size(); ++i) {
5014  if (var == elements_[i].Var()) {
5015  *index = i;
5016  return true;
5017  }
5018  }
5019  return false;
5020  } else {
5021  EnsureMapIsUpToDate();
5022  DCHECK_EQ(elements_map_.size(), elements_.size());
5023  return gtl::FindCopy(elements_map_, var, index);
5024  }
5025  }
5026 
5027  std::vector<E> elements_;
5028  absl::flat_hash_map<const V*, int> elements_map_;
5029 };
5030 
5034  public:
5040 
5041  explicit Assignment(Solver* const s);
5042  explicit Assignment(const Assignment* const copy);
5043  ~Assignment() override;
5044 
5045  void Clear();
5046  bool Empty() const {
5047  return int_var_container_.Empty() && interval_var_container_.Empty() &&
5048  sequence_var_container_.Empty();
5049  }
5050  int Size() const {
5051  return NumIntVars() + NumIntervalVars() + NumSequenceVars();
5052  }
5053  int NumIntVars() const { return int_var_container_.Size(); }
5054  int NumIntervalVars() const { return interval_var_container_.Size(); }
5055  int NumSequenceVars() const { return sequence_var_container_.Size(); }
5056  void Store();
5057  void Restore();
5058 
5061  bool Load(const std::string& filename);
5062 #if !defined(SWIG)
5063  bool Load(File* file);
5064 #endif
5065  void Load(const AssignmentProto& assignment_proto);
5066  bool Save(const std::string& filename) const;
5068 #if !defined(SWIG)
5069  bool Save(File* file) const;
5070 #endif // #if !defined(SWIG)
5071  void Save(AssignmentProto* const assignment_proto) const;
5072 
5073  void AddObjective(IntVar* const v);
5074  void ClearObjective() { objective_element_.Reset(nullptr); }
5075  IntVar* Objective() const;
5076  bool HasObjective() const { return (objective_element_.Var() != nullptr); }
5077  int64 ObjectiveMin() const;
5078  int64 ObjectiveMax() const;
5079  int64 ObjectiveValue() const;
5080  bool ObjectiveBound() const;
5081  void SetObjectiveMin(int64 m);
5082  void SetObjectiveMax(int64 m);
5084  void SetObjectiveRange(int64 l, int64 u);
5085 
5086  IntVarElement* Add(IntVar* const var);
5087  void Add(const std::vector<IntVar*>& vars);
5089  IntVarElement* FastAdd(IntVar* const var);
5090  int64 Min(const IntVar* const var) const;
5091  int64 Max(const IntVar* const var) const;
5092  int64 Value(const IntVar* const var) const;
5093  bool Bound(const IntVar* const var) const;
5094  void SetMin(const IntVar* const var, int64 m);
5095  void SetMax(const IntVar* const var, int64 m);
5096  void SetRange(const IntVar* const var, int64 l, int64 u);
5097  void SetValue(const IntVar* const var, int64 value);
5098 
5100  void Add(const std::vector<IntervalVar*>& vars);
5103  int64 StartMin(const IntervalVar* const var) const;
5104  int64 StartMax(const IntervalVar* const var) const;
5105  int64 StartValue(const IntervalVar* const var) const;
5106  int64 DurationMin(const IntervalVar* const var) const;
5107  int64 DurationMax(const IntervalVar* const var) const;
5108  int64 DurationValue(const IntervalVar* const var) const;
5109  int64 EndMin(const IntervalVar* const var) const;
5110  int64 EndMax(const IntervalVar* const var) const;
5111  int64 EndValue(const IntervalVar* const var) const;
5112  int64 PerformedMin(const IntervalVar* const var) const;
5113  int64 PerformedMax(const IntervalVar* const var) const;
5114  int64 PerformedValue(const IntervalVar* const var) const;
5115  void SetStartMin(const IntervalVar* const var, int64 m);
5116  void SetStartMax(const IntervalVar* const var, int64 m);
5117  void SetStartRange(const IntervalVar* const var, int64 mi, int64 ma);
5118  void SetStartValue(const IntervalVar* const var, int64 value);
5119  void SetDurationMin(const IntervalVar* const var, int64 m);
5120  void SetDurationMax(const IntervalVar* const var, int64 m);
5121  void SetDurationRange(const IntervalVar* const var, int64 mi, int64 ma);
5122  void SetDurationValue(const IntervalVar* const var, int64 value);
5123  void SetEndMin(const IntervalVar* const var, int64 m);
5124  void SetEndMax(const IntervalVar* const var, int64 m);
5125  void SetEndRange(const IntervalVar* const var, int64 mi, int64 ma);
5126  void SetEndValue(const IntervalVar* const var, int64 value);
5127  void SetPerformedMin(const IntervalVar* const var, int64 m);
5128  void SetPerformedMax(const IntervalVar* const var, int64 m);
5129  void SetPerformedRange(const IntervalVar* const var, int64 mi, int64 ma);
5130  void SetPerformedValue(const IntervalVar* const var, int64 value);
5131 
5133  void Add(const std::vector<SequenceVar*>& vars);
5136  const std::vector<int>& ForwardSequence(const SequenceVar* const var) const;
5137  const std::vector<int>& BackwardSequence(const SequenceVar* const var) const;
5138  const std::vector<int>& Unperformed(const SequenceVar* const var) const;
5139  void SetSequence(const SequenceVar* const var,
5140  const std::vector<int>& forward_sequence,
5141  const std::vector<int>& backward_sequence,
5142  const std::vector<int>& unperformed);
5143  void SetForwardSequence(const SequenceVar* const var,
5144  const std::vector<int>& forward_sequence);
5145  void SetBackwardSequence(const SequenceVar* const var,
5146  const std::vector<int>& backward_sequence);
5147  void SetUnperformed(const SequenceVar* const var,
5148  const std::vector<int>& unperformed);
5149 
5150  void Activate(const IntVar* const var);
5151  void Deactivate(const IntVar* const var);
5152  bool Activated(const IntVar* const var) const;
5153 
5154  void Activate(const IntervalVar* const var);
5155  void Deactivate(const IntervalVar* const var);
5156  bool Activated(const IntervalVar* const var) const;
5157 
5158  void Activate(const SequenceVar* const var);
5159  void Deactivate(const SequenceVar* const var);
5160  bool Activated(const SequenceVar* const var) const;
5161 
5162  void ActivateObjective();
5163  void DeactivateObjective();
5164  bool ActivatedObjective() const;
5165 
5166  std::string DebugString() const override;
5167 
5168  bool AreAllElementsBound() const {
5169  return int_var_container_.AreAllElementsBound() &&
5170  interval_var_container_.AreAllElementsBound() &&
5171  sequence_var_container_.AreAllElementsBound();
5172  }
5173 
5174  bool Contains(const IntVar* const var) const;
5175  bool Contains(const IntervalVar* const var) const;
5176  bool Contains(const SequenceVar* const var) const;
5178  void CopyIntersection(const Assignment* assignment);
5181  void Copy(const Assignment* assignment);
5182 
5183  // TODO(user): Add element iterators to avoid exposing container class.
5184  const IntContainer& IntVarContainer() const { return int_var_container_; }
5185  IntContainer* MutableIntVarContainer() { return &int_var_container_; }
5187  return interval_var_container_;
5188  }
5190  return &interval_var_container_;
5191  }
5193  return sequence_var_container_;
5194  }
5196  return &sequence_var_container_;
5197  }
5198  bool operator==(const Assignment& assignment) const {
5199  return int_var_container_ == assignment.int_var_container_ &&
5200  interval_var_container_ == assignment.interval_var_container_ &&
5201  sequence_var_container_ == assignment.sequence_var_container_ &&
5202  objective_element_ == assignment.objective_element_;
5203  }
5204  bool operator!=(const Assignment& assignment) const {
5205  return !(*this == assignment);
5206  }
5207 
5208  private:
5209  IntContainer int_var_container_;
5210  IntervalContainer interval_var_container_;
5211  SequenceContainer sequence_var_container_;
5212  IntVarElement objective_element_;
5213  DISALLOW_COPY_AND_ASSIGN(Assignment);
5214 };
5215 
5216 std::ostream& operator<<(std::ostream& out,
5217  const Assignment& assignment);
5218 
5224 void SetAssignmentFromAssignment(Assignment* target_assignment,
5225  const std::vector<IntVar*>& target_vars,
5226  const Assignment* source_assignment,
5227  const std::vector<IntVar*>& source_vars);
5228 
5229 class Pack : public Constraint {
5230  public:
5231  Pack(Solver* const s, const std::vector<IntVar*>& vars, int number_of_bins);
5232 
5233  ~Pack() override;
5234 
5239 
5244  const std::vector<int64>& weights, const std::vector<int64>& bounds);
5245 
5251  Solver::IndexEvaluator1 weights, const std::vector<int64>& bounds);
5252 
5258  Solver::IndexEvaluator2 weights, const std::vector<int64>& bounds);
5259 
5262  void AddWeightedSumEqualVarDimension(const std::vector<int64>& weights,
5263  const std::vector<IntVar*>& loads);
5264 
5269  const std::vector<IntVar*>& loads);
5270 
5281  const std::vector<IntVar*>& usage, const std::vector<int64>& capacity);
5282 
5285  void AddWeightedSumOfAssignedDimension(const std::vector<int64>& weights,
5286  IntVar* const cost_var);
5287 
5290  void AddCountUsedBinDimension(IntVar* const count_var);
5291 
5294  void AddCountAssignedItemsDimension(IntVar* const count_var);
5295 
5296  void Post() override;
5297  void ClearAll();
5298  void PropagateDelayed();
5299  void InitialPropagate() override;
5300  void Propagate();
5301  void OneDomain(int var_index);
5302  std::string DebugString() const override;
5303  bool IsUndecided(int var_index, int bin_index) const;
5304  void SetImpossible(int var_index, int bin_index);
5305  void Assign(int var_index, int bin_index);
5306  bool IsAssignedStatusKnown(int var_index) const;
5307  bool IsPossible(int var_index, int bin_index) const;
5308  IntVar* AssignVar(int var_index, int bin_index) const;
5309  void SetAssigned(int var_index);
5310  void SetUnassigned(int var_index);
5311  void RemoveAllPossibleFromBin(int bin_index);
5312  void AssignAllPossibleToBin(int bin_index);
5313  void AssignFirstPossibleToBin(int bin_index);
5314  void AssignAllRemainingItems();
5316  void Accept(ModelVisitor* const visitor) const override;
5317 
5318  private:
5319  bool IsInProcess() const;
5320  const std::vector<IntVar*> vars_;
5321  const int bins_;
5322  std::vector<Dimension*> dims_;
5323  std::unique_ptr<RevBitMatrix> unprocessed_;
5324  std::vector<std::vector<int>> forced_;
5325  std::vector<std::vector<int>> removed_;
5326  std::vector<IntVarIterator*> holes_;
5327  uint64 stamp_;
5328  Demon* demon_;
5329  std::vector<std::pair<int, int>> to_set_;
5330  std::vector<std::pair<int, int>> to_unset_;
5331  bool in_process_;
5332 };
5333 
5335  public:
5336  DisjunctiveConstraint(Solver* const s,
5337  const std::vector<IntervalVar*>& intervals,
5338  const std::string& name);
5339  ~DisjunctiveConstraint() override;
5340 
5343 
5348  void SetTransitionTime(Solver::IndexEvaluator2 transition_time);
5349 
5350  int64 TransitionTime(int before_index, int after_index) {
5352  return transition_time_(before_index, after_index);
5353  }
5354 
5355 #if !defined(SWIG)
5356  virtual const std::vector<IntVar*>& nexts() const = 0;
5357  virtual const std::vector<IntVar*>& actives() const = 0;
5358  virtual const std::vector<IntVar*>& time_cumuls() const = 0;
5359  virtual const std::vector<IntVar*>& time_slacks() const = 0;
5360 #endif // !defined(SWIG)
5361 
5362  protected:
5363  const std::vector<IntervalVar*> intervals_;
5365 
5366  private:
5367  DISALLOW_COPY_AND_ASSIGN(DisjunctiveConstraint);
5368 };
5369 
5372 class SolutionPool : public BaseObject {
5373  public:
5375  ~SolutionPool() override {}
5376 
5379  virtual void Initialize(Assignment* const assignment) = 0;
5380 
5383  virtual void RegisterNewSolution(Assignment* const assignment) = 0;
5384 
5387  virtual void GetNextSolution(Assignment* const assignment) = 0;
5388 
5391  virtual bool SyncNeeded(Assignment* const local_assignment) = 0;
5392 };
5393 } // namespace operations_research
5394 
5395 #endif // OR_TOOLS_CONSTRAINT_SOLVER_CONSTRAINT_SOLVER_H_
operations_research::Solver::KILL_BOTH
@ KILL_BOTH
Backtracks to the previous decisions, i.e.
Definition: constraint_solver.h:707
operations_research::Solver::IntegerCastInfo::IntegerCastInfo
IntegerCastInfo()
Definition: constraint_solver.h:255
operations_research::IntVar
The class IntVar is a subset of IntExpr.
Definition: constraint_solver.h:3992
operations_research::ModelVisitor::kEquality
static const char kEquality[]
Definition: constraint_solver.h:3354
operations_research::IntervalVar::SetEndRange
virtual void SetEndRange(int64 mi, int64 ma)=0
operations_research::IntervalVar::SetStartMax
virtual void SetStartMax(int64 m)=0
operations_research::Solver::SearchLogParameters::offset
double offset
Definition: constraint_solver.h:2304
operations_research::IntVarIterator
The class Iterator has two direct subclasses.
Definition: constraint_solver.h:3909
operations_research::RevArray::RevArray
RevArray(int size, const T &val)
Definition: constraint_solver.h:3774
operations_research::AssignmentContainer::Size
int Size() const
Definition: constraint_solver.h:4952
operations_research::Solver::MakeAssignment
Assignment * MakeAssignment()
This method creates an empty assignment.
Definition: constraint_solver/assignment.cc:1037
operations_research::ModelVisitor::kIsGreater
static const char kIsGreater[]
Definition: constraint_solver.h:3368
operations_research::PropagationBaseObject::set_action_on_fail
void set_action_on_fail(Solver::Action a)
Definition: constraint_solver.h:3195
operations_research::RegularLimit::Check
bool Check() override
This method is called to check the status of the limit.
Definition: search.cc:3988
operations_research::Assignment::BackwardSequence
const std::vector< int > & BackwardSequence(const SequenceVar *const var) const
Definition: constraint_solver/assignment.cc:835
operations_research::Solver::MakeIsDifferentCstVar
IntVar * MakeIsDifferentCstVar(IntExpr *const var, int64 value)
status var of (var != value)
Definition: expr_cst.cc:578
operations_research::Assignment::IntervalContainer
AssignmentContainer< IntervalVar, IntervalVarElement > IntervalContainer
Definition: constraint_solver.h:5037
operations_research::Assignment::EndValue
int64 EndValue(const IntervalVar *const var) const
Definition: constraint_solver/assignment.cc:731
operations_research::Solver::MakeIsEqualVar
IntVar * MakeIsEqualVar(IntExpr *const v1, IntExpr *v2)
status var of (v1 == v2)
Definition: range_cst.cc:577
operations_research::Pack::Assign
void Assign(int var_index, int bin_index)
Definition: pack.cc:415
operations_research::ModelVisitor::kMax
static const char kMax[]
Definition: constraint_solver.h:3378
operations_research::Solver::MakeRandomLnsOperator
LocalSearchOperator * MakeRandomLnsOperator(const std::vector< IntVar * > &vars, int number_of_variables)
Creates a large neighborhood search operator which creates fragments (set of relaxed variables) with ...
Definition: local_search.cc:191
operations_research::LocalSearchPhaseParameters
Definition: local_search.cc:4291
operations_research::IntVar::RemoveValue
virtual void RemoveValue(int64 v)=0
This method removes the value 'v' from the domain of the variable.
operations_research::ModelVisitor::kLinkExprVar
static const char kLinkExprVar[]
Definition: constraint_solver.h:3376
operations_research::Solver::CHOOSE_HIGHEST_MAX
@ CHOOSE_HIGHEST_MAX
Among unbound variables, select the variable with the highest maximal value.
Definition: constraint_solver.h:326
operations_research::PropagationBaseObject::UnfreezeQueue
void UnfreezeQueue()
This method unfreezes the propagation queue.
Definition: constraint_solver.h:3182
var
IntVar * var
Definition: expr_array.cc:1858
operations_research::Solver::STARTS_AT_START
@ STARTS_AT_START
t1 starts at t2 start, i.e. Start(t1) == Start(t2) + delay.
Definition: constraint_solver.h:645
operations_research::IntVar::Contains
virtual bool Contains(int64 v) const =0
This method returns whether the value 'v' is in the domain of the variable.
operations_research::Solver::parameters
ConstraintSolverParameters parameters() const
Stored Parameters.
Definition: constraint_solver.h:763
operations_research::Pack::SetAssigned
void SetAssigned(int var_index)
Definition: pack.cc:435
operations_research::Solver::IndexEvaluator2
std::function< int64(int64, int64)> IndexEvaluator2
Definition: constraint_solver.h:739
operations_research::ModelVisitor::kIntervalDisjunction
static const char kIntervalDisjunction[]
Definition: constraint_solver.h:3361
operations_research::Solver::PushState
void PushState()
The PushState and PopState methods manipulates the states of the reversible objects.
Definition: constraint_solver.cc:1556
operations_research::Solver::SearchLogParameters::scaling_factor
double scaling_factor
When displayed, objective or var values will be scaled and offset by the given values in the followin...
Definition: constraint_solver.h:2303
operations_research::Solver::MakeIsEqualCstVar
IntVar * MakeIsEqualCstVar(IntExpr *const var, int64 value)
status var of (var == value)
Definition: expr_cst.cc:460
operations_research::SequenceVarElement::Var
SequenceVar * Var() const
Definition: constraint_solver.h:4817
operations_research::Pack::AddWeightedSumOfAssignedDimension
void AddWeightedSumOfAssignedDimension(const std::vector< int64 > &weights, IntVar *const cost_var)
This dimension enforces that cost_var == sum of weights[i] for all objects 'i' assigned to a bin.
Definition: pack.cc:1578
operations_research::Solver::MakeSumGreaterOrEqual
Constraint * MakeSumGreaterOrEqual(const std::vector< IntVar * > &vars, int64 cst)
Definition: expr_array.cc:3418
operations_research::SearchMonitor::EndFail
virtual void EndFail()
After completing the backtrack.
Definition: constraint_solver.cc:2877
operations_research::ModelVisitor::VisitIntervalArgument
virtual void VisitIntervalArgument(const std::string &arg_name, IntervalVar *const argument)
Visit interval argument.
Definition: constraint_solver.cc:2803
operations_research::StateInfo
Definition: constraint_solver.cc:415
operations_research::ModelVisitor::kDivide
static const char kDivide[]
Definition: constraint_solver.h:3349
operations_research::Solver::MakeAllSolutionCollector
SolutionCollector * MakeAllSolutionCollector()
Collect all solutions of the search.
Definition: search.cc:2711
operations_research::Solver::SolveAndCommit
bool SolveAndCommit(DecisionBuilder *const db, const std::vector< SearchMonitor * > &monitors)
SolveAndCommit using a decision builder and up to three search monitors, usually one for the objectiv...
Definition: constraint_solver.cc:2405
operations_research::Solver::RegisterDemon
Demon * RegisterDemon(Demon *const demon)
Adds a new demon and wraps it inside a DemonProfiler if necessary.
Definition: demon_profiler.cc:450
operations_research::PropagationBaseObject::EnqueueDelayedDemon
void EnqueueDelayedDemon(Demon *const d)
This method pushes the demon onto the propagation queue.
Definition: constraint_solver.h:3187
operations_research::Solver::optimization_direction
OptimizationDirection optimization_direction() const
The direction of optimization, getter and setter.
Definition: constraint_solver.h:1013
operations_research::Solver::ENDS_AT
@ ENDS_AT
t ends at d, i.e. End(t) == d.
Definition: constraint_solver.h:660
operations_research::RegularLimit::solutions
int64 solutions() const
Definition: constraint_solver.h:4298
operations_research::Solver::GE
@ GE
Move is accepted when the current objective value >= objective.Min.
Definition: constraint_solver.h:597
operations_research::CastConstraint::target_var
IntVar * target_var() const
Definition: constraint_solver.h:3623
operations_research::IntervalVar::SetEndMin
virtual void SetEndMin(int64 m)=0
operations_research::Solver::MakeSortingConstraint
Constraint * MakeSortingConstraint(const std::vector< IntVar * > &vars, const std::vector< IntVar * > &sorted)
Creates a constraint binding the arrays of variables "vars" and "sorted_vars": sorted_vars[0] must be...
Definition: alldiff_cst.cc:714
operations_research::AssignmentContainer::Element
const E & Element(int index) const
Definition: constraint_solver.h:4951
operations_research::Assignment::DeactivateObjective
void DeactivateObjective()
Definition: constraint_solver/assignment.cc:974
operations_research::Demon::Run
virtual void Run(Solver *const s)=0
This is the main callback of the demon.
operations_research::Solver::MakeDecision
Decision * MakeDecision(Action apply, Action refute)
Definition: search.cc:610
operations_research::IntervalVarElement::Restore
void Restore()
Definition: constraint_solver/assignment.cc:159
operations_research::ModelVisitor::kSequenceArgument
static const char kSequenceArgument[]
Definition: constraint_solver.h:3471
operations_research::ModelVisitor::kNotBetween
static const char kNotBetween[]
Definition: constraint_solver.h:3386
operations_research::Solver::MakeRankFirstInterval
Decision * MakeRankFirstInterval(SequenceVar *const sequence, int index)
Returns a decision that tries to rank first the ith interval var in the sequence variable.
Definition: sched_search.cc:862
operations_research::Search
Definition: constraint_solver.cc:953
operations_research::Solver::MakeSquare
IntExpr * MakeSquare(IntExpr *const expr)
expr * expr
Definition: expressions.cc:7005
operations_research::IntervalVar::OldDurationMax
virtual int64 OldDurationMax() const =0
operations_research::Solver::MakeNonOverlappingBoxesConstraint
Constraint * MakeNonOverlappingBoxesConstraint(const std::vector< IntVar * > &x_vars, const std::vector< IntVar * > &y_vars, const std::vector< IntVar * > &x_size, const std::vector< IntVar * > &y_size)
This constraint states that all the boxes must not overlap.
Definition: constraint_solver/diffn.cc:298
operations_research::IntVar::VarType
virtual int VarType() const
Definition: expressions.cc:7264
operations_research::ModelVisitor::kSumLessOrEqual
static const char kSumLessOrEqual[]
Definition: constraint_solver.h:3408
operations_research::CpRandomSeed
int64 CpRandomSeed()
Definition: constraint_solver.h:163
operations_research::ModelVisitor::kIntegerVariable
static const char kIntegerVariable[]
Definition: constraint_solver.h:3359
operations_research::IntVar::WhenBound
void WhenBound(Solver::Closure closure)
This method attaches a closure that will be awakened when the variable is bound.
Definition: constraint_solver.h:4023
operations_research::RegularLimit::ProgressPercent
int ProgressPercent() override
Returns a percentage representing the propress of the search before reaching limits.
Definition: search.cc:3996
operations_research::DecisionVisitor::VisitRankLastInterval
virtual void VisitRankLastInterval(SequenceVar *const sequence, int index)
Definition: constraint_solver.cc:2551
min
int64 min
Definition: alldiff_cst.cc:138
operations_research::DefaultPhaseParameters::NONE
@ NONE
Definition: constraint_solver.h:185
operations_research::Assignment::ForwardSequence
const std::vector< int > & ForwardSequence(const SequenceVar *const var) const
Definition: constraint_solver/assignment.cc:830
operations_research::ModelVisitor::kAllDifferent
static const char kAllDifferent[]
Definition: constraint_solver.h:3334
integral_types.h
DCHECK_LT
#define DCHECK_LT(val1, val2)
Definition: base/logging.h:888
map_util.h
operations_research::Solver::MakeIsDifferentCt
Constraint * MakeIsDifferentCt(IntExpr *const v1, IntExpr *const v2, IntVar *const b)
b == (v1 != v2)
Definition: range_cst.cc:686
operations_research::IntVarIterator::Init
virtual void Init()=0
This method must be called before each loop.
operations_research::ModelVisitor::kSemiContinuous
static const char kSemiContinuous[]
Definition: constraint_solver.h:3400
operations_research::SolutionCollector::Value
int64 Value(int n, IntVar *const var) const
This is a shortcut to get the Value of 'var' in the nth solution.
Definition: search.cc:2347
operations_research::Solver::IN_SEARCH
@ IN_SEARCH
Executing the search code.
Definition: constraint_solver.h:725
operations_research::PropagationBaseObject::name
virtual std::string name() const
Object naming.
Definition: constraint_solver.cc:2505
operations_research::OptimizeVar::Var
IntVar * Var() const
Returns the variable that is optimized.
Definition: constraint_solver.h:4208
operations_research::RegularLimit::wall_time
int64 wall_time() const
Definition: constraint_solver.h:4291
routing_parameters.pb.h
operations_research::Decision::Decision
Decision()
Definition: constraint_solver.h:3225
operations_research::Solver::MakeGenericTabuSearch
SearchMonitor * MakeGenericTabuSearch(bool maximize, IntVar *const v, int64 step, const std::vector< IntVar * > &tabu_vars, int64 forbid_tenure)
Creates a Tabu Search based on the vars |vars|.
Definition: search.cc:3249
operations_research::ModelVisitor
Model visitor.
Definition: constraint_solver.h:3329
operations_research::Solver::IsBooleanVar
bool IsBooleanVar(IntExpr *const expr, IntVar **inner_var, bool *is_negated) const
Returns true if expr represents either boolean_var or 1 - boolean_var.
Definition: expressions.cc:7443
operations_research::SearchMonitor::ProgressPercent
virtual int ProgressPercent()
Returns a percentage representing the propress of the search before reaching limits.
Definition: constraint_solver.h:3710
operations_research::AssignmentContainer::CopyIntersection
void CopyIntersection(const AssignmentContainer< V, E > &container)
Copies the elements of 'container' which are already in the calling container.
Definition: constraint_solver.h:4890
operations_research::RevArray::size
int64 size() const
Definition: constraint_solver.h:3784
operations_research::SearchLimit::PeriodicCheck
void PeriodicCheck() override
Periodic call to check limits in long running methods.
Definition: search.cc:3934
operations_research::DefaultPhaseParameters::heuristic_num_failures_limit
int heuristic_num_failures_limit
The failure limit for each heuristic that we run.
Definition: constraint_solver.h:209
operations_research::Solver::MakeMonotonicElement
IntExpr * MakeMonotonicElement(IndexEvaluator1 values, bool increasing, IntVar *const index)
Function based element.
Definition: element.cc:859
operations_research::IntervalVar::SetStartRange
virtual void SetStartRange(int64 mi, int64 ma)=0
operations_research::Pack::AddCountUsedBinDimension
void AddCountUsedBinDimension(IntVar *const count_var)
This dimension links 'count_var' to the actual number of bins used in the pack.
Definition: pack.cc:1597
operations_research::Solver::MakeVariableDegreeVisitor
ModelVisitor * MakeVariableDegreeVisitor(absl::flat_hash_map< const IntVar *, int > *const map)
Compute the number of constraints a variable is attached to.
Definition: utilities.cc:815
operations_research::Solver::MakeIsLessOrEqualVar
IntVar * MakeIsLessOrEqualVar(IntExpr *const left, IntExpr *const right)
status var of (left <= right)
Definition: range_cst.cc:698
operations_research::SolutionCollector::SolutionData::failures
int64 failures
Definition: constraint_solver.h:4166
max
int64 max
Definition: alldiff_cst.cc:139
operations_research::Assignment::IntVarContainer
const IntContainer & IntVarContainer() const
Definition: constraint_solver.h:5184
operations_research::IntVar::IsVar
bool IsVar() const override
Returns true if the expression is indeed a variable.
Definition: constraint_solver.h:3998
operations_research::DecisionVisitor::~DecisionVisitor
~DecisionVisitor() override
Definition: constraint_solver.h:3247
operations_research::Pack::AssignVar
IntVar * AssignVar(int var_index, int bin_index) const
Definition: pack.cc:431
operations_research::Pack::AddWeightedSumLessOrEqualConstantDimension
void AddWeightedSumLessOrEqualConstantDimension(const std::vector< int64 > &weights, const std::vector< int64 > &bounds)
Dimensions are additional constraints than can restrict what is possible with the pack constraint.
Definition: pack.cc:1528
operations_research::IntVarElement::Store
void Store()
Definition: constraint_solver.h:4654
operations_research::ModelVisitor::kMin
static const char kMin[]
Definition: constraint_solver.h:3381
operations_research::Constraint::DebugString
std::string DebugString() const override
Definition: constraint_solver.cc:3237
operations_research::SolutionCollector::EnterSearch
void EnterSearch() override
Beginning of the search.
Definition: search.cc:2263
operations_research::Constraint::~Constraint
~Constraint() override
Definition: constraint_solver.h:3582
operations_research::DecisionBuilder::Next
virtual Decision * Next(Solver *const s)=0
This is the main method of the decision builder class.
operations_research::IntervalVar::SafeDurationExpr
virtual IntExpr * SafeDurationExpr(int64 unperformed_value)=0
operations_research::ModelVisitor::kDemandsArgument
static const char kDemandsArgument[]
Definition: constraint_solver.h:3439
operations_research::Solver::SaveAndSetValue
void SaveAndSetValue(T *adr, T val)
All-in-one SaveAndSetValue.
Definition: constraint_solver.h:2806
coefficients
std::vector< double > coefficients
Definition: sat/lp_utils.cc:497
operations_research::IntVarElement::Value
int64 Value() const
Definition: constraint_solver.h:4670
operations_research::Solver::Solve
bool Solve(DecisionBuilder *const db, const std::vector< SearchMonitor * > &monitors)
Definition: constraint_solver.cc:1791
operations_research::ModelVisitor::kCountUsedBinsExtension
static const char kCountUsedBinsExtension[]
Definition: constraint_solver.h:3417
operations_research::ModelVisitor::kAtMost
static const char kAtMost[]
Definition: constraint_solver.h:3336
operations_research::IntervalVar::SafeStartExpr
virtual IntExpr * SafeStartExpr(int64 unperformed_value)=0
These methods create expressions encapsulating the start, end and duration of the interval var.
operations_research::Solver::MakeSumEquality
Constraint * MakeSumEquality(const std::vector< IntVar * > &vars, int64 cst)
Definition: expr_array.cc:3428
operations_research::Assignment::SetStartValue
void SetStartValue(const IntervalVar *const var, int64 value)
Definition: constraint_solver/assignment.cc:760
operations_research::IntervalVar::kMaxValidValue
static const int64 kMaxValidValue
The largest acceptable value to be returned by EndMax()
Definition: constraint_solver.h:4394
operations_research::Assignment::SetStartMax
void SetStartMax(const IntervalVar *const var, int64 m)
Definition: constraint_solver/assignment.cc:751
operations_research::IntVarElement::operator!=
bool operator!=(const IntVarElement &element) const
Definition: constraint_solver.h:4687
operations_research::SequenceVar::Accept
virtual void Accept(ModelVisitor *const visitor) const
Accepts the given visitor.
Definition: sched_search.cc:71
operations_research::Solver::MakeFalseConstraint
Constraint * MakeFalseConstraint()
This constraint always fails.
Definition: constraints.cc:520
operations_research::Solver::MakeNullIntersect
Constraint * MakeNullIntersect(const std::vector< IntVar * > &first_vars, const std::vector< IntVar * > &second_vars)
Creates a constraint that states that all variables in the first vector are different from all variab...
Definition: alldiff_cst.cc:733
operations_research::Solver::Constraint
friend class Constraint
Definition: constraint_solver.h:2938
operations_research::RegularLimit::Copy
void Copy(const SearchLimit *const limit) override
Copy a limit.
Definition: search.cc:3969
operations_research::ModelVisitor::kStartExpr
static const char kStartExpr[]
Definition: constraint_solver.h:3404
operations_research::IntervalVarElement::SetPerformedMax
void SetPerformedMax(int64 m)
Definition: constraint_solver.h:4766
operations_research::SearchLimit::MakeClone
virtual SearchLimit * MakeClone() const =0
Allocates a clone of the limit.
operations_research::SolutionPool::GetNextSolution
virtual void GetNextSolution(Assignment *const assignment)=0
This method is called when the local search starts a new neighborhood to initialize the default assig...
operations_research::ModelVisitor::kStartsArgument
static const char kStartsArgument[]
Definition: constraint_solver.h:3480
operations_research::Solver::ENDS_BEFORE
@ ENDS_BEFORE
t ends before d, i.e. End(t) <= d.
Definition: constraint_solver.h:663
operations_research::SolutionCollector::Push
void Push(const SolutionData &data)
Definition: constraint_solver.h:4177
operations_research::Solver::CROSS
@ CROSS
Operator which cross exchanges the starting chains of 2 paths, including exchanging the whole paths.
Definition: constraint_solver.h:478
operations_research::Solver::TWOOPT
@ TWOOPT
Operator which reverses a sub-chain of a path.
Definition: constraint_solver.h:439
operations_research::Solver::MakeMapDomain
Constraint * MakeMapDomain(IntVar *const var, const std::vector< IntVar * > &actives)
This constraint maps the domain of 'var' onto the array of variables 'actives'.
Definition: constraints.cc:535
operations_research::IntervalVar::WhenStartRange
void WhenStartRange(Solver::Action action)
Definition: constraint_solver.h:4415
operations_research::IntVarElement::Var
IntVar * Var() const
Definition: constraint_solver.h:4653
operations_research::ImprovementSearchLimit
Definition: constraint_solver.h:4348
operations_research::Assignment::operator!=
bool operator!=(const Assignment &assignment) const
Definition: constraint_solver.h:5204
operations_research::IntVarElement::SetValue
void SetValue(int64 v)
Definition: constraint_solver.h:4680
operations_research::IntExpr::Range
virtual void Range(int64 *l, int64 *u)
By default calls Min() and Max(), but can be redefined when Min and Max code can be factorized.
Definition: constraint_solver.h:3843
operations_research::Assignment::DurationMin
int64 DurationMin(const IntervalVar *const var) const
Definition: constraint_solver/assignment.cc:711
operations_research::IntervalVarElement::SetStartMin
void SetStartMin(int64 m)
Definition: constraint_solver.h:4735
operations_research::Solver::CheckConstraint
bool CheckConstraint(Constraint *const ct)
Checks whether adding this constraint will lead to an immediate failure.
Definition: constraint_solver.cc:2372
operations_research::Solver::AddConstraint
void AddConstraint(Constraint *const c)
Adds the constraint 'c' to the model.
Definition: constraint_solver.cc:1657
operations_research::ModelVisitor::kVariableUsageLessConstantExtension
static const char kVariableUsageLessConstantExtension[]
Definition: constraint_solver.h:3426
operations_research::DefaultPhaseParameters::CHOOSE_MAX_VALUE_IMPACT
@ CHOOSE_MAX_VALUE_IMPACT
Definition: constraint_solver.h:177
operations_research::Solver::MakeWeightedMinimize
OptimizeVar * MakeWeightedMinimize(const std::vector< IntVar * > &sub_objectives, const std::vector< int64 > &weights, int64 step)
Creates a minimization weighted objective.
Definition: search.cc:2903
operations_research::Solver::MakeBetweenCt
Constraint * MakeBetweenCt(IntExpr *const expr, int64 l, int64 u)
(l <= expr <= u)
Definition: expr_cst.cc:920
operations_research::Solver::DELAYED_PRIORITY
@ DELAYED_PRIORITY
DELAYED_PRIORITY is the lowest priority: Demons will be processed after VAR_PRIORITY and NORMAL_PRIOR...
Definition: constraint_solver.h:611
operations_research::IntervalVar::StartExpr
virtual IntExpr * StartExpr()=0
These methods create expressions encapsulating the start, end and duration of the interval var.
operations_research::Assignment::PerformedMax
int64 PerformedMax(const IntervalVar *const var) const
Definition: constraint_solver/assignment.cc:739
operations_research::ModelVisitor::kCumulsArgument
static const char kCumulsArgument[]
Definition: constraint_solver.h:3438
operations_research::FindOneNeighbor
Definition: local_search.cc:3998
operations_research::Solver::MakeFixedDurationEndSyncedOnStartIntervalVar
IntervalVar * MakeFixedDurationEndSyncedOnStartIntervalVar(IntervalVar *const interval_var, int64 duration, int64 offset)
Creates an interval var with a fixed duration whose end is synchronized with the start of another int...
Definition: interval.cc:2410
operations_research::Assignment::Restore
void Restore()
Definition: constraint_solver/assignment.cc:434
operations_research::DefaultPhaseParameters::var_selection_schema
VariableSelection var_selection_schema
This parameter describes how the next variable to instantiate will be chosen.
Definition: constraint_solver.h:189
operations_research::RegularLimit::RegularLimit
RegularLimit(Solver *const s, absl::Duration time, int64 branches, int64 failures, int64 solutions, bool smart_time_check, bool cumulative)
Definition: search.cc:3949
end_max
Rev< int64 > end_max
Definition: sched_constraints.cc:244
operations_research::Solver::MakeDelayedConstraintInitialPropagateCallback
Demon * MakeDelayedConstraintInitialPropagateCallback(Constraint *const ct)
This method is a specialized case of the MakeConstraintDemon method to call the InitiatePropagate of ...
Definition: constraints.cc:38
operations_research::Solver::set_optimization_direction
void set_optimization_direction(OptimizationDirection direction)
Definition: constraint_solver.h:1016
operations_research::SolutionCollector::SolutionData::objective_value
int64 objective_value
Definition: constraint_solver.h:4167
operations_research::InitAndGetValues::end
Iterator end()
Definition: constraint_solver.h:3950
operations_research::SearchMonitor::BeginFail
virtual void BeginFail()
Just when the failure occurs.
Definition: constraint_solver.cc:2876
operations_research::RegularLimit::MakeClone
SearchLimit * MakeClone() const override
Allocates a clone of the limit.
Definition: search.cc:3980
operations_research::Solver::LocalSearchProfiler
friend class LocalSearchProfiler
Definition: constraint_solver.h:2947
operations_research::Solver::AddLocalSearchMonitor
void AddLocalSearchMonitor(LocalSearchMonitor *monitor)
Adds the local search monitor to the solver.
Definition: constraint_solver.cc:3206
operations_research::Solver::SearchDepth
int SearchDepth() const
Gets the search depth of the current active search.
Definition: constraint_solver.cc:1175
operations_research::IntervalVar::WhenEndRange
virtual void WhenEndRange(Demon *const d)=0
operations_research::IntVarIterator::Ok
virtual bool Ok() const =0
This method indicates if we can call Value() or not.
operations_research::Assignment::Objective
IntVar * Objective() const
Definition: constraint_solver/assignment.cc:878
operations_research::Solver::MakePathTransitPrecedenceConstraint
Constraint * MakePathTransitPrecedenceConstraint(std::vector< IntVar * > nexts, std::vector< IntVar * > transits, const std::vector< std::pair< int, int >> &precedences)
Same as MakePathPrecedenceConstraint but will force i to be before j if the sum of transits on the pa...
Definition: graph_constraints.cc:1642
operations_research::Solver::STARTS_AFTER
@ STARTS_AFTER
t starts after d, i.e. Start(t) >= d.
Definition: constraint_solver.h:666
operations_research::Solver::SPLIT_LOWER_HALF
@ SPLIT_LOWER_HALF
Split the domain in two around the center, and choose the lower part first.
Definition: constraint_solver.h:373
operations_research::Solver::MakeScalProdEquality
Constraint * MakeScalProdEquality(const std::vector< IntVar * > &vars, const std::vector< int64 > &coefficients, int64 cst)
Definition: expr_array.cc:3483
operations_research::AssignmentContainer::operator!=
bool operator!=(const AssignmentContainer< V, E > &container) const
Definition: constraint_solver.h:4994
operations_research::ModelVisitor::VisitIntegerArgument
virtual void VisitIntegerArgument(const std::string &arg_name, int64 value)
Visit integer arguments.
Definition: constraint_solver.cc:2780
operations_research::Assignment::CopyIntersection
void CopyIntersection(const Assignment *assignment)
Copies the intersection of the two assignments to the current assignment.
Definition: constraint_solver/assignment.cc:999
operations_research::Assignment::SetForwardSequence
void SetForwardSequence(const SequenceVar *const var, const std::vector< int > &forward_sequence)
Definition: constraint_solver/assignment.cc:853
operations_research::Pack::~Pack
~Pack() override
Definition: pack.cc:124
operations_research::BaseObject::~BaseObject
virtual ~BaseObject()
Definition: constraint_solver.h:3150
operations_research::OptimizeVar::Accept
void Accept(ModelVisitor *const visitor) const override
Accepts the given model visitor.
Definition: search.cc:2840
operations_research::SequenceVarElement::Bound
bool Bound() const
Definition: constraint_solver.h:4833
operations_research::Solver::MakeNestedOptimize
DecisionBuilder * MakeNestedOptimize(DecisionBuilder *const db, Assignment *const solution, bool maximize, int64 step)
NestedOptimize will collapse a search tree described by a decision builder 'db' and a set of monitors...
Definition: search.cc:4532
operations_research::ModelVisitor::VisitIntegerArrayArgument
virtual void VisitIntegerArrayArgument(const std::string &arg_name, const std::vector< int64 > &values)
Definition: constraint_solver.cc:2783
operations_research::SolutionCollector::~SolutionCollector
~SolutionCollector() override
Definition: search.cc:2214
operations_research::Solver::STARTS_BEFORE
@ STARTS_BEFORE
t starts before d, i.e. Start(t) <= d.
Definition: constraint_solver.h:672
operations_research::SearchMonitor::solver
Solver * solver() const
Definition: constraint_solver.h:3703
operations_research::IntervalVarElement::Copy
void Copy(const IntervalVarElement &element)
Definition: constraint_solver/assignment.cc:133
operations_research::ModelVisitor::kCardsArgument
static const char kCardsArgument[]
Definition: constraint_solver.h:3434
operations_research::AssignmentContainer::FastAdd
E * FastAdd(V *var)
Adds element without checking its presence in the container.
Definition: constraint_solver.h:4867
operations_research::IntVar::IsDifferent
virtual IntVar * IsDifferent(int64 constant)=0
operations_research::SearchMonitor::RestartSearch
virtual void RestartSearch()
Restart the search.
Definition: constraint_solver.cc:2868
operations_research::Solver::MakeConvexPiecewiseExpr
IntExpr * MakeConvexPiecewiseExpr(IntExpr *expr, int64 early_cost, int64 early_date, int64 late_date, int64 late_cost)
Convex piecewise function.
Definition: expressions.cc:7129
operations_research::IntExpr::SetMin
virtual void SetMin(int64 m)=0
operations_research::Solver::MakeLess
Constraint * MakeLess(IntExpr *const left, IntExpr *const right)
left < right
Definition: range_cst.cc:546
operations_research::Solver::SetUseFastLocalSearch
void SetUseFastLocalSearch(bool use_fast_local_search)
enabled for metaheuristics.
Definition: constraint_solver.h:2879
operations_research::Zero
int64 Zero()
NOLINT.
Definition: constraint_solver.h:3139
operations_research::IntervalVar::DurationExpr
virtual IntExpr * DurationExpr()=0
operations_research::Solver::NameAllVariables
bool NameAllVariables() const
Returns whether all variables should be named.
Definition: constraint_solver.cc:187
operations_research::ModelVisitor::kVarsArgument
static const char kVarsArgument[]
Definition: constraint_solver.h:3489
operations_research::Assignment::Contains
bool Contains(const IntVar *const var) const
Definition: constraint_solver/assignment.cc:987
operations_research::Solver::OUTSIDE_SEARCH
@ OUTSIDE_SEARCH
Before search, after search.
Definition: constraint_solver.h:721
operations_research::Solver::RevAlloc
T * RevAlloc(T *object)
Registers the given object as being reversible.
Definition: constraint_solver.h:791
operations_research::DisjunctiveConstraint::time_cumuls
virtual const std::vector< IntVar * > & time_cumuls() const =0
start_min
Rev< int64 > start_min
Definition: sched_constraints.cc:241
operations_research::ModelVisitor::kScalProdLessOrEqual
static const char kScalProdLessOrEqual[]
Definition: constraint_solver.h:3399
operations_research::ImprovementSearchLimit::Check
bool Check() override
This method is called to check the status of the limit.
Definition: search.cc:4194
operations_research::AssignmentContainer::Empty
bool Empty() const
Definition: constraint_solver.h:4887
operations_research::SequenceVar::ComputePossibleFirstsAndLasts
void ComputePossibleFirstsAndLasts(std::vector< int > *const possible_firsts, std::vector< int > *const possible_lasts)
Computes the set of indices of interval variables that can be ranked first in the set of unranked act...
Definition: sched_search.cc:188
operations_research::Solver::MakeNBestValueSolutionCollector
SolutionCollector * MakeNBestValueSolutionCollector(const Assignment *const assignment, int solution_count, bool maximize)
Same as MakeBestValueSolutionCollector but collects the best solution_count solutions.
Definition: search.cc:2652
operations_research::Solver::MAKEACTIVE
@ MAKEACTIVE
Operator which inserts an inactive node into a path.
Definition: constraint_solver.h:486
operations_research::ImprovementSearchLimit::~ImprovementSearchLimit
~ImprovementSearchLimit() override
Definition: search.cc:4160
operations_research::Solver::MakePack
Pack * MakePack(const std::vector< IntVar * > &vars, int number_of_bins)
This constraint packs all variables onto 'number_of_bins' variables.
Definition: pack.cc:1611
GG_ULONGLONG
#define GG_ULONGLONG(x)
Definition: integral_types.h:47
operations_research::ModelVisitor::kDifferenceOperation
static const char kDifferenceOperation[]
Definition: constraint_solver.h:3497
operations_research::SolutionCollector::PushSolution
void PushSolution()
Push the current state as a new solution.
Definition: search.cc:2272
logging.h
operations_research::IntervalVarElement::DebugString
std::string DebugString() const
Definition: constraint_solver/assignment.cc:201
operations_research::Constraint::Constraint
Constraint(Solver *const solver)
Definition: constraint_solver.h:3581
operations_research::Solver::RestartCurrentSearch
void RestartCurrentSearch()
Definition: constraint_solver.cc:2431
operations_research::Rev
This class adds reversibility to a POD type.
Definition: constraint_solver.h:3730
operations_research::Solver::fail_stamp
uint64 fail_stamp() const
The fail_stamp() is incremented after each backtrack.
Definition: constraint_solver.cc:1645
operations_research::Assignment::SetDurationMin
void SetDurationMin(const IntervalVar *const var, int64 m)
Definition: constraint_solver/assignment.cc:764
operations_research::ModelVisitor::kAllowedAssignments
static const char kAllowedAssignments[]
Definition: constraint_solver.h:3335
operations_research::SequenceVarElement::operator!=
bool operator!=(const SequenceVarElement &element) const
Definition: constraint_solver.h:4840
operations_research::DefaultPhaseParameters::display_level
DisplayLevel display_level
This represents the amount of information displayed by the default search.
Definition: constraint_solver.h:220
operations_research::ModelVisitor::~ModelVisitor
~ModelVisitor() override
Definition: constraint_solver.cc:2732
operations_research::Assignment::~Assignment
~Assignment() override
Definition: constraint_solver/assignment.cc:416
operations_research::ModelVisitor::kConvexPiecewise
static const char kConvexPiecewise[]
Definition: constraint_solver.h:3341
operations_research::Solver::MakeIsLessVar
IntVar * MakeIsLessVar(IntExpr *const left, IntExpr *const right)
status var of (left < right)
Definition: range_cst.cc:742
operations_research::RoutingModel
Definition: routing.h:212
operations_research::SearchLimit::RefuteDecision
void RefuteDecision(Decision *const d) override
Before refuting the decision.
Definition: search.cc:3929
operations_research::Assignment::AddObjective
void AddObjective(IntVar *const v)
Definition: constraint_solver/assignment.cc:872
operations_research::ModelVisitor::kTimeLimitArgument
static const char kTimeLimitArgument[]
Definition: constraint_solver.h:3483
operations_research::Solver::MakeIsLessCstCt
Constraint * MakeIsLessCstCt(IntExpr *const v, int64 c, IntVar *const b)
b == (v < c)
Definition: expr_cst.cc:813
operations_research::Solver::MakeMinimize
OptimizeVar * MakeMinimize(IntVar *const v, int64 step)
Creates a minimization objective.
Definition: search.cc:2849
operations_research::NumericalRevArray::Incr
void Incr(Solver *const s, int index)
Definition: constraint_solver.h:3819
operations_research::ModelVisitor::kUsageLessConstantExtension
static const char kUsageLessConstantExtension[]
Definition: constraint_solver.h:3424
stamp_
const int64 stamp_
Definition: search.cc:3039
operations_research::IntervalVar::OldEndMin
virtual int64 OldEndMin() const =0
operations_research::SolutionCollector::SolutionCollector
SolutionCollector(Solver *const solver, const Assignment *assignment)
Definition: search.cc:2205
operations_research::DefaultPhaseParameters::SELECT_MIN_IMPACT
@ SELECT_MIN_IMPACT
Definition: constraint_solver.h:181
operations_research::Solver::MakeBoolVarArray
void MakeBoolVarArray(int var_count, const std::string &name, std::vector< IntVar * > *vars)
This method will append the vector vars with 'var_count' boolean variables having name "name<i>" wher...
Definition: expressions.cc:6503
operations_research::IntervalVar::~IntervalVar
~IntervalVar() override
Definition: constraint_solver.h:4399
operations_research::IntVar::IsGreaterOrEqual
virtual IntVar * IsGreaterOrEqual(int64 constant)=0
operations_research::SearchMonitor::PeriodicCheck
virtual void PeriodicCheck()
Periodic call to check limits in long running methods.
Definition: constraint_solver.cc:2889
operations_research::IntExpr::Min
virtual int64 Min() const =0
operations_research::PropagationBaseObject::EnqueueVar
void EnqueueVar(Demon *const d)
Definition: constraint_solver.h:3188
operations_research::ModelVisitor::kOptionalArgument
static const char kOptionalArgument[]
Definition: constraint_solver.h:3464
operations_research::Solver::MakeEnterSearchCallback
SearchMonitor * MakeEnterSearchCallback(std::function< void()> callback)
--— Callback-based search monitors --—
Definition: search.cc:438
operations_research::IntervalVar::WhenPerformedBound
virtual void WhenPerformedBound(Demon *const d)=0
operations_research::SearchMonitor::ApplyDecision
virtual void ApplyDecision(Decision *const d)
Before applying the decision.
Definition: constraint_solver.cc:2873
operations_research::ModelVisitor::kStartSyncOnEndOperation
static const char kStartSyncOnEndOperation[]
Definition: constraint_solver.h:3500
DCHECK_GT
#define DCHECK_GT(val1, val2)
Definition: base/logging.h:890
piecewise_linear_function.h
operations_research::AssignmentContainer::operator==
bool operator==(const AssignmentContainer< V, E > &container) const
Returns true if this and 'container' both represent the same V* -> E map.
Definition: constraint_solver.h:4975
operations_research::Solver::IndexEvaluator3
std::function< int64(int64, int64, int64)> IndexEvaluator3
Definition: constraint_solver.h:740
operations_research::Demon::inhibit
void inhibit(Solver *const s)
This method inhibits the demon in the search tree below the current position.
Definition: constraint_solver.cc:199
operations_research::InitAndGetValues::Iterator::operator!=
bool operator!=(const Iterator &other) const
Definition: constraint_solver.h:3970
operations_research::DisjunctiveConstraint::TransitionTime
int64 TransitionTime(int before_index, int after_index)
Definition: constraint_solver.h:5350
operations_research::ModelVisitor::kInversePermutation
static const char kInversePermutation[]
Definition: constraint_solver.h:3364
operations_research::Assignment::SetMin
void SetMin(const IntVar *const var, int64 m)
Definition: constraint_solver/assignment.cc:667
operations_research::Solver::MakeConstantRestart
SearchMonitor * MakeConstantRestart(int frequency)
This search monitor will restart the search periodically after 'frequency' failures.
Definition: search.cc:4676
operations_research::Constraint::PostAndPropagate
void PostAndPropagate()
Calls Post and then Propagate to initialize the constraints.
Definition: constraint_solver.cc:3239
operations_research::Solver::MakeApplyBranchSelector
DecisionBuilder * MakeApplyBranchSelector(BranchSelector bs)
Creates a decision builder that will set the branch selector.
Definition: constraint_solver.cc:1167
operations_research::Assignment::SetValue
void SetValue(const IntVar *const var, int64 value)
Definition: constraint_solver/assignment.cc:679
operations_research::IntervalVar::WhenPerformedBound
void WhenPerformedBound(Solver::Action action)
Definition: constraint_solver.h:4498
value
int64 value
Definition: demon_profiler.cc:43
operations_research::ModelVisitor::kNonEqual
static const char kNonEqual[]
Definition: constraint_solver.h:3385
operations_research::IntExpr::IsVar
virtual bool IsVar() const
Returns true if the expression is indeed a variable.
Definition: constraint_solver.h:3860
operations_research::IntervalVarElement::SetEndMax
void SetEndMax(int64 m)
Definition: constraint_solver.h:4756
operations_research::Assignment::Copy
void Copy(const Assignment *assignment)
Copies 'assignment' to the current assignment, clearing its previous content.
Definition: constraint_solver/assignment.cc:1008
operations_research::Solver::SetSearchContext
void SetSearchContext(Search *search, const std::string &search_context)
Definition: constraint_solver.cc:3215
operations_research::DecisionBuilder::DebugString
std::string DebugString() const override
Definition: constraint_solver.cc:2527
operations_research::SequenceVarElement::BackwardSequence
const std::vector< int > & BackwardSequence() const
Definition: constraint_solver/assignment.cc:350
operations_research::Solver::MakeIntVarArray
void MakeIntVarArray(int var_count, int64 vmin, int64 vmax, const std::string &name, std::vector< IntVar * > *vars)
This method will append the vector vars with 'var_count' variables having bounds vmin and vmax and ha...
Definition: expressions.cc:6479
operations_research::Solver::SPLIT_UPPER_HALF
@ SPLIT_UPPER_HALF
Split the domain in two around the center, and choose the lower part first.
Definition: constraint_solver.h:377
operations_research::Solver::MakeBoolVar
IntVar * MakeBoolVar()
MakeBoolVar will create a variable with a {0, 1} domain.
Definition: expressions.cc:6379
operations_research::ModelVisitor::kSmartTimeCheckArgument
static const char kSmartTimeCheckArgument[]
Definition: constraint_solver.h:3476
operations_research::Assignment::ObjectiveBound
bool ObjectiveBound() const
Definition: constraint_solver/assignment.cc:901
operations_research::Assignment::Max
int64 Max(const IntVar *const var) const
Definition: constraint_solver/assignment.cc:655
operations_research::Solver::VariableValueComparator
std::function< bool(int64, int64, int64)> VariableValueComparator
Definition: constraint_solver.h:751
operations_research::ModelVisitor::kSum
static const char kSum[]
Definition: constraint_solver.h:3405
operations_research::Solver::MarkerType
MarkerType
This enum is used internally in private methods Solver::PushState and Solver::PopState to tag states ...
Definition: constraint_solver.h:716
operations_research::Solver::MakeLexicalLessOrEqual
Constraint * MakeLexicalLessOrEqual(const std::vector< IntVar * > &left, const std::vector< IntVar * > &right)
Creates a constraint that enforces that left is lexicographically less than or equal to right.
Definition: constraints.cc:545
operations_research::Solver::GetPropagationMonitor
PropagationMonitor * GetPropagationMonitor() const
Returns the propagation monitor.
Definition: constraint_solver.cc:3134
operations_research::SymmetryBreaker
A symmetry breaker is an object that will visit a decision and create the 'symmetrical' decision in r...
Definition: constraint_solveri.h:1994
operations_research::Solver::MakeDecisionBuilderFromAssignment
DecisionBuilder * MakeDecisionBuilderFromAssignment(Assignment *const assignment, DecisionBuilder *const db, const std::vector< IntVar * > &vars)
Returns a decision builder for which the left-most leaf corresponds to assignment,...
Definition: search.cc:2195
operations_research::IntervalVar::SetDurationRange
virtual void SetDurationRange(int64 mi, int64 ma)=0
operations_research::IntervalVar::WhenDurationRange
virtual void WhenDurationRange(Demon *const d)=0
operations_research::DisjunctiveConstraint::actives
virtual const std::vector< IntVar * > & actives() const =0
operations_research::ModelVisitor::kTransition
static const char kTransition[]
Definition: constraint_solver.h:3410
operations_research::ModelVisitor::kCountAssignedItemsExtension
static const char kCountAssignedItemsExtension[]
Extension names:
Definition: constraint_solver.h:3416
operations_research::Solver::wall_time
int64 wall_time() const
DEPRECATED: Use Now() instead.
Definition: constraint_solver.cc:1520
operations_research::IntVarElement::DebugString
std::string DebugString() const
Definition: constraint_solver/assignment.cc:97
operations_research::Solver::MakeTemporalDisjunction
Constraint * MakeTemporalDisjunction(IntervalVar *const t1, IntervalVar *const t2, IntVar *const alt)
This constraint implements a temporal disjunction between two interval vars t1 and t2.
Definition: timetabling.cc:403
operations_research::IntVarIterator::DebugString
std::string DebugString() const override
Pretty Print.
Definition: constraint_solver.h:3926
operations_research::SequenceVar
A sequence variable is a variable whose domain is a set of possible orderings of the interval variabl...
Definition: constraint_solver.h:4543
operations_research::Solver::MakeIsMemberCt
Constraint * MakeIsMemberCt(IntExpr *const expr, const std::vector< int64 > &values, IntVar *const boolvar)
boolvar == (expr in set)
Definition: expr_cst.cc:1478
operations_research::SearchMonitor
A search monitor is a simple set of callbacks to monitor all search events.
Definition: constraint_solver.h:3630
operations_research::NumericalRevArray
Subclass of RevArray<T> which adds numerical operations.
Definition: constraint_solver.h:3811
operations_research::Solver::TSPOPT
@ TSPOPT
Sliding TSP operator.
Definition: constraint_solver.h:580
operations_research::Solver::MakeIsMemberVar
IntVar * MakeIsMemberVar(IntExpr *const expr, const std::vector< int64 > &values)
Definition: expr_cst.cc:1490
operations_research::ModelVisitor::kLateDateArgument
static const char kLateDateArgument[]
Definition: constraint_solver.h:3457
operations_research::DefaultPhaseParameters::DefaultPhaseParameters
DefaultPhaseParameters()
Definition: default_search.cc:46
operations_research::SearchMonitor::Install
virtual void Install()
Registers itself on the solver such that it gets notified of the search and propagation events.
Definition: constraint_solver.cc:2892
bounds
SharedBoundsManager * bounds
Definition: cp_model_solver.cc:2104
macros.h
operations_research::ModelVisitor::kSortingConstraint
static const char kSortingConstraint[]
Definition: constraint_solver.h:3402
operations_research::Solver::CHOOSE_PATH
@ CHOOSE_PATH
Selects the next unbound variable on a path, the path being defined by the variables: var[i] correspo...
Definition: constraint_solver.h:344
operations_research::Solver::MakeIndexOfFirstMinValueConstraint
Constraint * MakeIndexOfFirstMinValueConstraint(IntVar *index, const std::vector< IntVar * > &vars)
Creates a constraint that binds the index variable to the index of the first variable with the minimu...
Definition: constraints.cc:560
gtl::FindWithDefault
const Collection::value_type::second_type & FindWithDefault(const Collection &collection, const typename Collection::value_type::first_type &key, const typename Collection::value_type::second_type &value)
Definition: map_util.h:26
operations_research::DisjunctiveConstraint::MakeSequenceVar
virtual SequenceVar * MakeSequenceVar()=0
Creates a sequence variable from the constraint.
operations_research::Pack::IsPossible
bool IsPossible(int var_index, int bin_index) const
Definition: pack.cc:427
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::Solver::MakeScheduleOrPostpone
Decision * MakeScheduleOrPostpone(IntervalVar *const var, int64 est, int64 *const marker)
Returns a decision that tries to schedule a task at a given time.
Definition: sched_search.cc:834
operations_research::RegularLimit::IsUncheckedSolutionLimitReached
bool IsUncheckedSolutionLimitReached() override
Returns true if the limit of solutions has been reached including unchecked solutions.
Definition: search.cc:4039
operations_research::Solver::MINIMIZATION
@ MINIMIZATION
Definition: constraint_solver.h:735
operations_research::Solver::MakeIsGreaterOrEqualCt
Constraint * MakeIsGreaterOrEqualCt(IntExpr *const left, IntExpr *const right, IntVar *const b)
b == (left >= right)
Definition: range_cst.cc:790
operations_research::IntervalVarElement::SetDurationMin
void SetDurationMin(int64 m)
Definition: constraint_solver.h:4745
operations_research::Decision::Apply
virtual void Apply(Solver *const s)=0
Apply will be called first when the decision is executed.
operations_research::ModelVisitor::kIsEqual
static const char kIsEqual[]
Definition: constraint_solver.h:3367
operations_research::Solver::MakeIsEqualCstCt
Constraint * MakeIsEqualCstCt(IntExpr *const var, int64 value, IntVar *const boolvar)
boolvar == (var == value)
Definition: expr_cst.cc:485
operations_research::RegularLimit
Usual limit based on wall_time, number of explored branches and number of failures in the search tree...
Definition: constraint_solver.h:4276
operations_research::Demon::DebugString
std::string DebugString() const override
Definition: constraint_solver.cc:197
operations_research::Solver::MakeIsLessOrEqualCstCt
Constraint * MakeIsLessOrEqualCstCt(IntExpr *const var, int64 value, IntVar *const boolvar)
boolvar == (var <= value)
Definition: expr_cst.cc:797
operations_research::ModelVisitor::kWeightedSumOfAssignedEqualVariableExtension
static const char kWeightedSumOfAssignedEqualVariableExtension[]
Definition: constraint_solver.h:3427
operations_research::ModelVisitor::kSizeXArgument
static const char kSizeXArgument[]
Definition: constraint_solver.h:3474
operations_research::SolutionCollector::SolutionData::branches
int64 branches
Definition: constraint_solver.h:4165
operations_research::ModelVisitor::kEndExpr
static const char kEndExpr[]
Definition: constraint_solver.h:3353
operations_research::ModelVisitor::kOpposite
static const char kOpposite[]
Definition: constraint_solver.h:3389
operations_research::Solver::VariableValueSelector
std::function< int64(const IntVar *v, int64 id)> VariableValueSelector
Definition: constraint_solver.h:750
operations_research::Assignment::HasObjective
bool HasObjective() const
Definition: constraint_solver.h:5076
operations_research::ModelVisitor::kMinArgument
static const char kMinArgument[]
Definition: constraint_solver.h:3461
tuple_set.h
operations_research::Solver::SolveDepth
int SolveDepth() const
Gets the number of nested searches.
Definition: constraint_solver.cc:1171
operations_research::IntervalVarElement::SetStartMax
void SetStartMax(int64 m)
Definition: constraint_solver.h:4736
operations_research::ModelVisitor::VisitIntegerVariableEvaluatorArgument
virtual void VisitIntegerVariableEvaluatorArgument(const std::string &arg_name, const Solver::Int64ToIntVar &arguments)
Helpers.
Definition: constraint_solver.cc:2795
operations_research::DefaultPhaseParameters::CHOOSE_MAX_SUM_IMPACT
@ CHOOSE_MAX_SUM_IMPACT
Definition: constraint_solver.h:175
operations_research::IntervalVarElement::StartMax
int64 StartMax() const
Definition: constraint_solver.h:4712
operations_research::Solver::demon_runs
int64 demon_runs(DemonPriority p) const
The number of demons executed during search for a given priority.
Definition: constraint_solver.h:991
operations_research::Solver::CHOOSE_MIN_SLACK_RANK_FORWARD
@ CHOOSE_MIN_SLACK_RANK_FORWARD
Definition: constraint_solver.h:408
operations_research::ModelVisitor::BeginVisitModel
virtual void BeginVisitModel(const std::string &type_name)
--— Virtual methods for visitors --—
Definition: constraint_solver.cc:2734
operations_research::IntVarIterator::Value
virtual int64 Value() const =0
This method returns the current value of the iterator.
ABSL_DECLARE_FLAG
ABSL_DECLARE_FLAG(int64, cp_random_seed)
Declaration of the core objects for the constraint solver.
operations_research::ModelVisitor::kBranchesLimitArgument
static const char kBranchesLimitArgument[]
Definition: constraint_solver.h:3432
operations_research::SequenceVarElement::operator==
bool operator==(const SequenceVarElement &element) const
Definition: constraint_solver/assignment.cc:329
operations_research::InitAndGetValues::Iterator::Begin
static Iterator Begin(IntVarIterator *it)
These are the only way to construct an Iterator.
Definition: constraint_solver.h:3954
operations_research::Solver::IntegerCastInfo
Holds semantic information stating that the 'expression' has been cast into 'variable' using the Var(...
Definition: constraint_solver.h:254
operations_research::ModelVisitor::BeginVisitExtension
virtual void BeginVisitExtension(const std::string &type)
Definition: constraint_solver.cc:2742
operations_research::ModelVisitor::kAbs
static const char kAbs[]
Constraint and Expression types.
Definition: constraint_solver.h:3332
operations_research::ModelVisitor::VisitIntegerExpressionArgument
virtual void VisitIntegerExpressionArgument(const std::string &arg_name, IntExpr *const argument)
Visit integer expression argument.
Definition: constraint_solver.cc:2790
operations_research::ImprovementSearchLimit::MakeClone
SearchLimit * MakeClone() const override
Allocates a clone of the limit.
Definition: search.cc:4187
operations_research::OptimizeVar::found_initial_solution_
bool found_initial_solution_
Definition: constraint_solver.h:4227
operations_research::IntVarElement::Clone
IntVarElement * Clone()
Definition: constraint_solver/assignment.cc:47
operations_research::ModelVisitor::kNotMember
static const char kNotMember[]
Definition: constraint_solver.h:3387
operations_research::PropagationBaseObject::PropagationBaseObject
PropagationBaseObject(Solver *const s)
Definition: constraint_solver.h:3164
operations_research::Assignment::Store
void Store()
Definition: constraint_solver/assignment.cc:425
operations_research::Solver::MakeAllDifferent
Constraint * MakeAllDifferent(const std::vector< IntVar * > &vars)
All variables are pairwise different.
Definition: alldiff_cst.cc:690
operations_research::RegularLimit::duration_limit
absl::Duration duration_limit() const
Definition: constraint_solver.h:4290
operations_research::Solver::STARTS_AFTER_START
@ STARTS_AFTER_START
t1 starts after t2 start, i.e. Start(t1) >= Start(t2) + delay.
Definition: constraint_solver.h:639
operations_research::IntervalVarElement::WriteToProto
void WriteToProto(IntervalVarAssignment *interval_var_assignment_proto) const
Definition: constraint_solver/assignment.cc:187
operations_research::NumericalRevArray::NumericalRevArray
NumericalRevArray(int size, const T &val)
Definition: constraint_solver.h:3813
operations_research::OptimizeVar::ApplyBound
void ApplyBound()
Definition: search.cc:2753
operations_research::Solver::MakeNeighborhoodLimit
LocalSearchOperator * MakeNeighborhoodLimit(LocalSearchOperator *const op, int64 limit)
Creates a local search operator that wraps another local search operator and limits the number of nei...
Definition: local_search.cc:1882
operations_research::Assignment::Size
int Size() const
Definition: constraint_solver.h:5050
operations_research::ModelVisitor::VisitSequenceArgument
virtual void VisitSequenceArgument(const std::string &arg_name, SequenceVar *const argument)
Visit sequence argument.
Definition: constraint_solver.cc:2813
operations_research::ModelVisitor::kTargetArgument
static const char kTargetArgument[]
Definition: constraint_solver.h:3482
operations_research::SolutionPool
This class is used to manage a pool of solutions.
Definition: constraint_solver.h:5372
operations_research::Solver::NewSearch
void NewSearch(DecisionBuilder *const db, const std::vector< SearchMonitor * > &monitors)
Definition: constraint_solver.cc:1843
operations_research::Solver::SearchLogParameters::branch_period
int branch_period
SearchMonitors will display a periodic search log every branch_period branches explored.
Definition: constraint_solver.h:2295
operations_research::DefaultPhaseParameters::run_all_heuristics
bool run_all_heuristics
The default phase will run heuristics periodically.
Definition: constraint_solver.h:201
operations_research::Solver::ENDS_AFTER_START
@ ENDS_AFTER_START
t1 ends after t2 start, i.e. End(t1) >= Start(t2) + delay.
Definition: constraint_solver.h:627
operations_research::IntVarElement::Max
int64 Max() const
Definition: constraint_solver.h:4668
operations_research::SequenceVarElement::Reset
void Reset(SequenceVar *const var)
Definition: constraint_solver/assignment.cc:249
operations_research::IntervalVarElement::operator!=
bool operator!=(const IntervalVarElement &element) const
Definition: constraint_solver.h:4781
operations_research::ModelVisitor::kCover
static const char kCover[]
Definition: constraint_solver.h:3343
operations_research::Solver::DebugString
std::string DebugString() const
!defined(SWIG)
Definition: constraint_solver.cc:1487
operations_research::SequenceVarElement::LoadFromProto
void LoadFromProto(const SequenceVarAssignment &sequence_var_assignment_proto)
Definition: constraint_solver/assignment.cc:282
operations_research::Solver::IntegerCastInfo::expression
IntExpr * expression
Definition: constraint_solver.h:260
operations_research::SequenceVar::ComputeStatistics
void ComputeStatistics(int *const ranked, int *const not_ranked, int *const unperformed) const
Compute statistics on the sequence.
Definition: sched_search.cc:144
operations_research::SequenceVar::DurationRange
void DurationRange(int64 *const dmin, int64 *const dmax) const
Returns the minimum and maximum duration of combined interval vars in the sequence.
Definition: sched_search.cc:75
operations_research::Assignment::SetObjectiveRange
void SetObjectiveRange(int64 l, int64 u)
Definition: constraint_solver/assignment.cc:920
operations_research::RegularLimit::ExitSearch
void ExitSearch() override
End of the search.
Definition: search.cc:4020
operations_research::Solver::MakeScalProdLessOrEqual
Constraint * MakeScalProdLessOrEqual(const std::vector< IntVar * > &vars, const std::vector< int64 > &coefficients, int64 cst)
Definition: expr_array.cc:3526
operations_research::ModelVisitor::kCountArgument
static const char kCountArgument[]
Definition: constraint_solver.h:3436
operations_research::Pack::OneDomain
void OneDomain(int var_index)
Definition: pack.cc:333
operations_research::IntervalVarElement::SetEndValue
void SetEndValue(int64 v)
Definition: constraint_solver.h:4761
operations_research::Solver::MakeFixedDurationEndSyncedOnEndIntervalVar
IntervalVar * MakeFixedDurationEndSyncedOnEndIntervalVar(IntervalVar *const interval_var, int64 duration, int64 offset)
Creates an interval var with a fixed duration whose end is synchronized with the end of another inter...
Definition: interval.cc:2417
operations_research::Solver::DemonProfiler
friend class DemonProfiler
Definition: constraint_solver.h:2939
operations_research::OptimizeVar::maximize_
bool maximize_
Definition: constraint_solver.h:4226
operations_research::Solver::NextSolution
bool NextSolution()
Definition: constraint_solver.cc:2093
operations_research::Solver::ENDS_AFTER
@ ENDS_AFTER
t ends after d, i.e. End(t) >= d.
Definition: constraint_solver.h:657
operations_research::IntervalVar::DurationMax
virtual int64 DurationMax() const =0
operations_research::ModelVisitor::kSumGreaterOrEqual
static const char kSumGreaterOrEqual[]
Definition: constraint_solver.h:3407
operations_research::OptimizeVar
This class encapsulates an objective.
Definition: constraint_solver.h:4199
operations_research::Solver::STARTS_AT_END
@ STARTS_AT_END
t1 starts at t2 end, i.e. Start(t1) == End(t2) + delay.
Definition: constraint_solver.h:642
operations_research::DefaultPhaseParameters::heuristic_period
int heuristic_period
The distance in nodes between each run of the heuristics.
Definition: constraint_solver.h:206
operations_research::Solver::stamp
uint64 stamp() const
The stamp indicates how many moves in the search tree we have performed.
Definition: constraint_solver.cc:1643
operations_research::Pack::DebugString
std::string DebugString() const override
Definition: pack.cc:379
operations_research::ModelVisitor::kFalseConstraint
static const char kFalseConstraint[]
Definition: constraint_solver.h:3355
operations_research::ModelVisitor::kCumulativeArgument
static const char kCumulativeArgument[]
Definition: constraint_solver.h:3437
int64
int64_t int64
Definition: integral_types.h:34
operations_research::BaseIntExpr
This is the base class for all expressions that are not variables.
Definition: constraint_solveri.h:109
operations_research::Solver::CHOOSE_STATIC_GLOBAL_BEST
@ CHOOSE_STATIC_GLOBAL_BEST
Pairs are compared at the first call of the selector, and results are cached.
Definition: constraint_solver.h:395
operations_research::Solver::MakeIndexExpression
IntExpr * MakeIndexExpression(const std::vector< IntVar * > &vars, int64 value)
Returns the expression expr such that vars[expr] == value.
Definition: element.cc:1745
operations_research::ModelVisitor::kMapDomain
static const char kMapDomain[]
Definition: constraint_solver.h:3377
operations_research::OptimizeVar::BeginNextDecision
void BeginNextDecision(DecisionBuilder *const db) override
Before calling DecisionBuilder::Next.
Definition: search.cc:2747
operations_research::Solver::SolverState
SolverState
This enum represents the state of the solver w.r.t. the search.
Definition: constraint_solver.h:719
operations_research::Solver::PROBLEM_INFEASIBLE
@ PROBLEM_INFEASIBLE
After search, the model is infeasible.
Definition: constraint_solver.h:731
operations_research::SearchLimit::Check
virtual bool Check()=0
This method is called to check the status of the limit.
operations_research::Solver::MakeTabuSearch
SearchMonitor * MakeTabuSearch(bool maximize, IntVar *const v, int64 step, const std::vector< IntVar * > &vars, int64 keep_tenure, int64 forbid_tenure, double tabu_factor)
MetaHeuristics which try to get the search out of local optima.
Definition: search.cc:3240
operations_research::Solver::EXTENDEDSWAPACTIVE
@ EXTENDEDSWAPACTIVE
Operator which makes an inactive node active and an active one inactive.
Definition: constraint_solver.h:520
operations_research::SequenceVar::RankLast
void RankLast(int index)
Ranks the index_th interval var first of all unranked interval vars.
Definition: sched_search.cc:314
operations_research::DecisionVisitor::DecisionVisitor
DecisionVisitor()
Definition: constraint_solver.h:3246
operations_research::Solver::~Solver
~Solver()
Definition: constraint_solver.cc:1471
operations_research::AssignmentElement::Deactivate
void Deactivate()
Definition: constraint_solver.h:4639
operations_research::Solver::MakeDisjunctiveConstraint
DisjunctiveConstraint * MakeDisjunctiveConstraint(const std::vector< IntervalVar * > &intervals, const std::string &name)
This constraint forces all interval vars into an non-overlapping sequence.
Definition: resource.cc:2574
operations_research::Solver::CurrentlyInSolve
bool CurrentlyInSolve() const
Returns true whether the current search has been created using a Solve() call instead of a NewSearch ...
Definition: constraint_solver.cc:1746
operations_research::BaseObject::DebugString
virtual std::string DebugString() const
Definition: constraint_solver.h:3151
operations_research::DecisionBuilder::Accept
virtual void Accept(ModelVisitor *const visitor) const
Definition: constraint_solver.cc:2532
operations_research::SolutionCollector::SolutionData::solution
Assignment * solution
Definition: constraint_solver.h:4163
operations_research::ModelVisitor::kSumOperation
static const char kSumOperation[]
Definition: constraint_solver.h:3496
operations_research::ModelVisitor::kScalProd
static const char kScalProd[]
Definition: constraint_solver.h:3396
operations_research::ModelVisitor::kElementEqual
static const char kElementEqual[]
Definition: constraint_solver.h:3352
operations_research::Assignment::SetUnperformed
void SetUnperformed(const SequenceVar *const var, const std::vector< int > &unperformed)
Definition: constraint_solver/assignment.cc:865
operations_research::SolutionCollector::FreeSolution
void FreeSolution(Assignment *solution)
Definition: search.cc:2309
operations_research::ModelVisitor::kTraceOperation
static const char kTraceOperation[]
Definition: constraint_solver.h:3501
operations_research::Solver::RegisterIntervalVar
IntervalVar * RegisterIntervalVar(IntervalVar *const var)
Registers a new IntervalVar and wraps it inside a TraceIntervalVar if necessary.
Definition: trace.cc:865
operations_research::ModelVisitor::kCapacityArgument
static const char kCapacityArgument[]
Definition: constraint_solver.h:3433
operations_research::Solver::MakeAtMost
Constraint * MakeAtMost(std::vector< IntVar * > vars, int64 value, int64 max_count)
|{i | vars[i] == value}| <= max_count
Definition: count_cst.cc:955
operations_research::Solver::MakeIsEqualCt
Constraint * MakeIsEqualCt(IntExpr *const v1, IntExpr *v2, IntVar *const b)
b == (v1 == v2)
Definition: range_cst.cc:622
operations_research::SequenceVar::RankFirst
void RankFirst(int index)
Ranks the index_th interval var first of all unranked interval vars.
Definition: sched_search.cc:291
operations_research::Solver::Accept
void Accept(ModelVisitor *const visitor) const
Accepts the given model visitor.
Definition: constraint_solver.cc:1693
operations_research::IntVar::WhenDomain
void WhenDomain(Solver::Closure closure)
This method attaches a closure that will watch any domain modification of the domain of the variable.
Definition: constraint_solver.h:4040
operations_research::DefaultPhaseParameters::CHOOSE_MAX_AVERAGE_IMPACT
@ CHOOSE_MAX_AVERAGE_IMPACT
Definition: constraint_solver.h:176
operations_research::DisjunctiveConstraint::intervals_
const std::vector< IntervalVar * > intervals_
Definition: constraint_solver.h:5363
operations_research::SequenceVarElement
The SequenceVarElement stores a partial representation of ranked interval variables in the underlying...
Definition: constraint_solver.h:4810
operations_research::Solver::ASSIGN_CENTER_VALUE
@ ASSIGN_CENTER_VALUE
Selects the first possible value which is the closest to the center of the domain of the selected var...
Definition: constraint_solver.h:369
operations_research::PropagationBaseObject::reset_action_on_fail
void reset_action_on_fail()
This method clears the failure callback.
Definition: constraint_solver.h:3201
operations_research::Solver::demon_profiler
DemonProfiler * demon_profiler() const
Access to demon profiler.
Definition: constraint_solver.h:2875
operations_research::Solver::InternalSaveBooleanVarValue
friend void InternalSaveBooleanVarValue(Solver *const, IntVar *const)
Definition: constraint_solver.cc:947
operations_research::IntervalVar::EndExpr
virtual IntExpr * EndExpr()=0
operations_research::IntervalVar::SafeEndExpr
virtual IntExpr * SafeEndExpr(int64 unperformed_value)=0
operations_research::Assignment::SetEndRange
void SetEndRange(const IntervalVar *const var, int64 mi, int64 ma)
Definition: constraint_solver/assignment.cc:789
operations_research::Pack::AddWeightedSumEqualVarDimension
void AddWeightedSumEqualVarDimension(const std::vector< int64 > &weights, const std::vector< IntVar * > &loads)
This dimension imposes that for all bins b, the weighted sum (weights[i]) of all objects i assigned t...
Definition: pack.cc:1558
operations_research::Assignment::ActivateObjective
void ActivateObjective()
Definition: constraint_solver/assignment.cc:968
operations_research::Assignment::Add
IntVarElement * Add(IntVar *const var)
Definition: constraint_solver/assignment.cc:637
index
int index
Definition: pack.cc:508
operations_research::SolutionCollector::PerformedValue
int64 PerformedValue(int n, IntervalVar *const var) const
This is a shortcut to get the PerformedValue of 'var' in the nth solution.
Definition: search.cc:2363
operations_research::Solver::ReSeed
void ReSeed(int32 seed)
Reseed the solver random generator.
Definition: constraint_solver.h:2835
operations_research::Solver::GetConstraintSolverStatistics
ConstraintSolverStatistics GetConstraintSolverStatistics() const
Returns detailed cp search statistics.
Definition: constraint_solver.cc:1546
operations_research::SequenceVarElement::Store
void Store()
Definition: constraint_solver/assignment.cc:274
operations_research::Solver::balancing_decision
Decision * balancing_decision() const
Definition: constraint_solver.h:2865
int32
int int32
Definition: integral_types.h:33
operations_research::IntervalVar::OldEndMax
virtual int64 OldEndMax() const =0
operations_research::BaseObject
A BaseObject is the root of all reversibly allocated objects.
Definition: constraint_solver.h:3147
operations_research::Solver::MakeIsLessCstVar
IntVar * MakeIsLessCstVar(IntExpr *const var, int64 value)
status var of (var < value)
Definition: expr_cst.cc:793
operations_research::IntVar::IsLessOrEqual
virtual IntVar * IsLessOrEqual(int64 constant)=0
operations_research::SearchMonitor::SearchMonitor
SearchMonitor(Solver *const s)
Definition: constraint_solver.h:3634
operations_research::PropagationBaseObject::~PropagationBaseObject
~PropagationBaseObject() override
Definition: constraint_solver.h:3165
operations_research::Solver::MakeAllDifferentExcept
Constraint * MakeAllDifferentExcept(const std::vector< IntVar * > &vars, int64 escape_value)
All variables are pairwise different, unless they are assigned to the escape value.
Definition: alldiff_cst.cc:720
operations_research::Solver::IntegerCastInfo::IntegerCastInfo
IntegerCastInfo(IntVar *const v, IntExpr *const e, Constraint *const c)
Definition: constraint_solver.h:257
operations_research::IntervalVar::WhenStartBound
virtual void WhenStartBound(Demon *const d)=0
operations_research::Solver::MakeFailDecision
Decision * MakeFailDecision()
Definition: constraint_solver.cc:1379
operations_research::ModelVisitor::kSquare
static const char kSquare[]
Definition: constraint_solver.h:3403
operations_research::ModelVisitor::kBetween
static const char kBetween[]
Definition: constraint_solver.h:3338
operations_research::IntervalVar::WasPerformedBound
virtual bool WasPerformedBound() const =0
operations_research::SolutionCollector::recycle_solutions_
std::vector< Assignment * > recycle_solutions_
Definition: constraint_solver.h:4186
operations_research::Solver::CHOOSE_MAX_SIZE
@ CHOOSE_MAX_SIZE
Among unbound variables, select the variable with the highest size.
Definition: constraint_solver.h:336
operations_research::OptimizeVar::DebugString
std::string DebugString() const override
Definition: search.cc:2828
operations_research::ModelVisitor::kInitialState
static const char kInitialState[]
Definition: constraint_solver.h:3453
operations_research::Assignment::DebugString
std::string DebugString() const override
Definition: constraint_solver/assignment.cc:623
operations_research::Solver::MakeVariableDomainFilter
LocalSearchFilter * MakeVariableDomainFilter()
Definition: local_search.cc:3233
operations_research::Solver::SIMPLE_MARKER
@ SIMPLE_MARKER
Definition: constraint_solver.h:716
operations_research::IntExpr::Bound
virtual bool Bound() const
Returns true if the min and the max of the expression are equal.
Definition: constraint_solver.h:3857
operations_research::Assignment::SetObjectiveMin
void SetObjectiveMin(int64 m)
Definition: constraint_solver/assignment.cc:908
operations_research::Solver::MakeSumLessOrEqual
Constraint * MakeSumLessOrEqual(const std::vector< IntVar * > &vars, int64 cst)
Variation on arrays.
Definition: expr_array.cc:3408
operations_research::Solver::IntVarStrategy
IntVarStrategy
This enum describes the strategy used to select the next branching variable at each node during the s...
Definition: constraint_solver.h:269
operations_research::ModelVisitor::kVarValueWatcher
static const char kVarValueWatcher[]
Definition: constraint_solver.h:3413
operations_research::ModelVisitor::kModuloArgument
static const char kModuloArgument[]
Definition: constraint_solver.h:3462
operations_research::DisjunctiveConstraint
Definition: constraint_solver.h:5334
operations_research::Solver::MemoryUsage
static int64 MemoryUsage()
Current memory usage in bytes.
Definition: constraint_solver.cc:1518
operations_research::Solver::NO_CHANGE
@ NO_CHANGE
Keeps the default behavior, i.e.
Definition: constraint_solver.h:693
operations_research::Solver::ClearLocalSearchState
void ClearLocalSearchState()
Clears the local search state.
Definition: constraint_solver.h:2929
operations_research::IntervalVarElement::DurationValue
int64 DurationValue() const
Definition: constraint_solver.h:4719
operations_research::Solver::PropagationBaseObject
friend class PropagationBaseObject
Definition: constraint_solver.h:2942
operations_research::ImprovementSearchLimit::Init
void Init() override
This method is called when the search limit is initialized.
Definition: search.cc:4162
operations_research::AssignmentContainer
Definition: constraint_solver.h:4854
operations_research::Solver::SWITCH_BRANCHES
@ SWITCH_BRANCHES
Applies right branch first.
Definition: constraint_solver.h:711
operations_research::ModelVisitor::kDurationMaxArgument
static const char kDurationMaxArgument[]
Definition: constraint_solver.h:3440
operations_research::DecisionBuilder::~DecisionBuilder
~DecisionBuilder() override
Definition: constraint_solver.h:3266
operations_research::Solver::MakeFailuresLimit
RegularLimit * MakeFailuresLimit(int64 failures)
Creates a search limit that constrains the number of failures that can happen when exploring the sear...
Definition: search.cc:4100
operations_research::Pack::InitialPropagate
void InitialPropagate() override
This method performs the initial propagation of the constraint.
Definition: pack.cc:189
operations_research::IntervalVar::IntervalVar
IntervalVar(Solver *const solver, const std::string &name)
Definition: constraint_solver.h:4395
operations_research::OptimizeVar::best_
int64 best_
Definition: constraint_solver.h:4225
operations_research::Solver::MakeDifference
IntExpr * MakeDifference(IntExpr *const left, IntExpr *const right)
left - right
Definition: expressions.cc:6634
operations_research::Solver::MakeCircuit
Constraint * MakeCircuit(const std::vector< IntVar * > &nexts)
Force the "nexts" variable to create a complete Hamiltonian path.
Definition: graph_constraints.cc:638
operations_research::Assignment::PerformedValue
int64 PerformedValue(const IntervalVar *const var) const
Definition: constraint_solver/assignment.cc:743
operations_research::Solver::INT_VAR_SIMPLE
@ INT_VAR_SIMPLE
The simple selection is CHOOSE_FIRST_UNBOUND.
Definition: constraint_solver.h:274
operations_research::SolutionCollector::DebugString
std::string DebugString() const override
Definition: constraint_solver.h:4101
operations_research::Solver::NO_MORE_SOLUTIONS
@ NO_MORE_SOLUTIONS
After failed NextSolution and before EndSearch.
Definition: constraint_solver.h:729
operations_research::Solver::HasName
bool HasName(const PropagationBaseObject *object) const
Returns whether the object has been named or not.
Definition: constraint_solver.cc:2485
operations_research::SolutionCollector::SolutionData
Definition: constraint_solver.h:4162
operations_research::Solver::MakeScalProdGreaterOrEqual
Constraint * MakeScalProdGreaterOrEqual(const std::vector< IntVar * > &vars, const std::vector< int64 > &coeffs, int64 cst)
Definition: expr_array.cc:3512
operations_research::Decision::~Decision
~Decision() override
Definition: constraint_solver.h:3226
operations_research::ModelVisitor::kPerformedExpr
static const char kPerformedExpr[]
Definition: constraint_solver.h:3393
operations_research::Assignment::ActivatedObjective
bool ActivatedObjective() const
Definition: constraint_solver/assignment.cc:980
operations_research::IntervalVar::PerformedExpr
virtual IntExpr * PerformedExpr()=0
operations_research::AssignmentContainer::MutableElementOrNull
E * MutableElementOrNull(const V *const var)
Definition: constraint_solver.h:4929
operations_research::Decision::Accept
virtual void Accept(DecisionVisitor *const visitor) const
Accepts the given visitor.
Definition: constraint_solver.cc:2536
operations_research::Solver::INTERVAL_SET_TIMES_BACKWARD
@ INTERVAL_SET_TIMES_BACKWARD
Selects the variable with the highest ending time of all variables, and fixes the ending time to this...
Definition: constraint_solver.h:424
operations_research::Solver::MakeBestValueSolutionCollector
SolutionCollector * MakeBestValueSolutionCollector(const Assignment *const assignment, bool maximize)
Collect the solution corresponding to the optimal value of the objective of 'assignment'; if 'assignm...
Definition: search.cc:2548
operations_research::Solver::MakeConstraintInitialPropagateCallback
Demon * MakeConstraintInitialPropagateCallback(Constraint *const ct)
This method is a specialized case of the MakeConstraintDemon method to call the InitiatePropagate of ...
Definition: constraints.cc:33
operations_research::Constraint::Var
virtual IntVar * Var()
Creates a Boolean variable representing the status of the constraint (false = constraint is violated,...
Definition: constraint_solver.cc:3257
operations_research::DefaultPhaseParameters::persistent_impact
bool persistent_impact
Whether to keep the impact from the first search for other searches, or to recompute the impact for e...
Definition: constraint_solver.h:213
operations_research::Solver::MakeScalProd
IntExpr * MakeScalProd(const std::vector< IntVar * > &vars, const std::vector< int64 > &coefs)
scalar product
Definition: expr_array.cc:3541
operations_research::ModelVisitor::kNoCycle
static const char kNoCycle[]
Definition: constraint_solver.h:3384
operations_research::Solver::Int64ToIntVar
std::function< IntVar *(int64)> Int64ToIntVar
Definition: constraint_solver.h:744
operations_research::LocalSearchFilter
Local Search Filters are used for fast neighbor pruning.
Definition: constraint_solveri.h:1719
operations_research::IntExpr::SetValue
virtual void SetValue(int64 v)
This method sets the value of the expression.
Definition: constraint_solver.h:3854
operations_research::IntVarElement::Bound
bool Bound() const
Definition: constraint_solver.h:4675
operations_research::Pack::Propagate
void Propagate()
Definition: pack.cc:274
operations_research::SequenceVar::SequenceVar
SequenceVar(Solver *const s, const std::vector< IntervalVar * > &intervals, const std::vector< IntVar * > &nexts, const std::string &name)
Definition: sched_search.cc:37
operations_research::PropagationBaseObject::HasName
bool HasName() const
Returns whether the object has been named or not.
Definition: constraint_solver.cc:2513
operations_research::IntVar::RemoveInterval
virtual void RemoveInterval(int64 l, int64 u)=0
This method removes the interval 'l' .
operations_research::IntervalVarElement::DurationMax
int64 DurationMax() const
Definition: constraint_solver.h:4718
operations_research::Solver::PopState
void PopState()
Definition: constraint_solver.cc:1561
operations_research::IntExpr::Max
virtual int64 Max() const =0
operations_research::IntervalVarElement::IntervalVarElement
IntervalVarElement()
Definition: constraint_solver/assignment.cc:111
operations_research::ModelVisitor::kEarlyDateArgument
static const char kEarlyDateArgument[]
Definition: constraint_solver.h:3443
operations_research::ModelVisitor::kTrueConstraint
static const char kTrueConstraint[]
Definition: constraint_solver.h:3411
operations_research::Assignment::SetBackwardSequence
void SetBackwardSequence(const SequenceVar *const var, const std::vector< int > &backward_sequence)
Definition: constraint_solver/assignment.cc:859
operations_research::IntervalVar::StartMax
virtual int64 StartMax() const =0
DEBUG_MODE
const bool DEBUG_MODE
Definition: macros.h:24
operations_research::Solver::MakeSplitVariableDomain
Decision * MakeSplitVariableDomain(IntVar *const var, int64 val, bool start_with_lower_half)
Definition: search.cc:1679
operations_research::ModelVisitor::kSolutionLimitArgument
static const char kSolutionLimitArgument[]
Definition: constraint_solver.h:3477
operations_research::ModelVisitor::kActiveArgument
static const char kActiveArgument[]
argument names:
Definition: constraint_solver.h:3430
operations_research::Assignment::Bound
bool Bound(const IntVar *const var) const
Definition: constraint_solver/assignment.cc:663
operations_research::IntervalVar::EndMax
virtual int64 EndMax() const =0
operations_research::SequenceVarElement::SetBackwardSequence
void SetBackwardSequence(const std::vector< int > &backward_sequence)
Definition: constraint_solver/assignment.cc:372
operations_research::ModelVisitor::VisitIntegerMatrixArgument
virtual void VisitIntegerMatrixArgument(const std::string &arg_name, const IntTupleSet &tuples)
Definition: constraint_solver.cc:2787
operations_research::Solver::MakeGreater
Constraint * MakeGreater(IntExpr *const left, IntExpr *const right)
left > right
Definition: range_cst.cc:560
operations_research::DefaultPhaseParameters::value_selection_schema
ValueSelection value_selection_schema
This parameter describes which value to select for a given var.
Definition: constraint_solver.h:192
operations_research::RegularLimit::branches
int64 branches() const
Definition: constraint_solver.h:4296
operations_research::Solver::MultiArmedBanditConcatenateOperators
LocalSearchOperator * MultiArmedBanditConcatenateOperators(const std::vector< LocalSearchOperator * > &ops, double memory_coefficient, double exploration_coefficient, bool maximize)
Creates a local search operator which concatenates a vector of operators.
Definition: local_search.cc:2267
a
int64 a
Definition: constraint_solver/table.cc:42
operations_research::IntVarElement::WriteToProto
void WriteToProto(IntVarAssignment *int_var_assignment_proto) const
Definition: constraint_solver/assignment.cc:89
operations_research::Solver::Cache
ModelCache * Cache() const
Returns the cache of the model.
Definition: model_cache.cc:849
operations_research::DefaultPhaseParameters::SELECT_MAX_IMPACT
@ SELECT_MAX_IMPACT
Definition: constraint_solver.h:182
operations_research::ModelVisitor::kSizeArgument
static const char kSizeArgument[]
Definition: constraint_solver.h:3473
operations_research::ModelVisitor::kEarlyCostArgument
static const char kEarlyCostArgument[]
Definition: constraint_solver.h:3442
operations_research::PropagationBaseObject::BaseName
virtual std::string BaseName() const
Returns a base name for automatic naming.
Definition: constraint_solver.cc:2515
operations_research::Solver::IntegerCastInfo::maintainer
Constraint * maintainer
Definition: constraint_solver.h:261
operations_research::Solver::RestartSearch
void RestartSearch()
Definition: constraint_solver.cc:1985
operations_research::Assignment::SetPerformedMax
void SetPerformedMax(const IntervalVar *const var, int64 m)
Definition: constraint_solver/assignment.cc:801
operations_research::NumericalRev::Add
void Add(Solver *const s, const T &to_add)
Definition: constraint_solver.h:3757
operations_research::ModelVisitor::kEndsArgument
static const char kEndsArgument[]
Definition: constraint_solver.h:3446
operations_research::Solver::MakeNonOverlappingNonStrictBoxesConstraint
Constraint * MakeNonOverlappingNonStrictBoxesConstraint(const std::vector< IntVar * > &x_vars, const std::vector< IntVar * > &y_vars, const std::vector< IntVar * > &x_size, const std::vector< IntVar * > &y_size)
This constraint states that all the boxes must not overlap.
Definition: constraint_solver/diffn.cc:328
operations_research::Solver::REVERSIBLE_ACTION
@ REVERSIBLE_ACTION
Definition: constraint_solver.h:716
File
Definition: base/file.h:32
operations_research::Solver::MakeSearchLog
SearchMonitor * MakeSearchLog(int branch_period)
The SearchMonitors below will display a periodic search log on LOG(INFO) every branch_period branches...
Definition: search.cc:284
operations_research::IntVarIterator::Next
virtual void Next()=0
This method moves the iterator to the next value.
operations_research::Solver::CROSS_DATE
@ CROSS_DATE
STARTS_BEFORE and ENDS_AFTER at the same time, i.e.
Definition: constraint_solver.h:677
operations_research::ModelVisitor::kElement
static const char kElement[]
Definition: constraint_solver.h:3351
operations_research::SearchLimit::BeginNextDecision
void BeginNextDecision(DecisionBuilder *const b) override
Before calling DecisionBuilder::Next.
Definition: search.cc:3924
operations_research::Solver::MakeIntervalVarRelation
Constraint * MakeIntervalVarRelation(IntervalVar *const t, UnaryIntervalRelation r, int64 d)
This method creates a relation between an interval var and a date.
Definition: timetabling.cc:113
operations_research::ModelVisitor::EndVisitModel
virtual void EndVisitModel(const std::string &type_name)
Definition: constraint_solver.cc:2735
operations_research::Solver::MakeAllowedAssignments
Constraint * MakeAllowedAssignments(const std::vector< IntVar * > &vars, const IntTupleSet &tuples)
This method creates a constraint where the graph of the relation between the variables is given in ex...
Definition: constraint_solver/table.cc:1251
operations_research::Solver::IndexFilter1
std::function< bool(int64)> IndexFilter1
Definition: constraint_solver.h:742
operations_research::ModelVisitor::kIndexArgument
static const char kIndexArgument[]
Definition: constraint_solver.h:3452
operations_research::Solver::IntVar
friend class IntVar
Definition: constraint_solver.h:2941
operations_research::Demon::~Demon
~Demon() override
Definition: constraint_solver.h:3301
operations_research::Solver::CheckAssignment
bool CheckAssignment(Assignment *const solution)
Checks whether the given assignment satisfies all relevant constraints.
Definition: constraint_solver.cc:2293
operations_research::Solver::IsProduct
bool IsProduct(IntExpr *const expr, IntExpr **inner_expr, int64 *coefficient)
Returns true if expr represents a product of a expr and a constant.
Definition: expressions.cc:7461
operations_research::SimpleRevFIFO
This class represent a reversible FIFO structure.
Definition: constraint_solveri.h:145
operations_research::Solver::MakeIntervalVarRelationWithDelay
Constraint * MakeIntervalVarRelationWithDelay(IntervalVar *const t1, BinaryIntervalRelation r, IntervalVar *const t2, int64 delay)
This method creates a relation between two interval vars.
Definition: timetabling.cc:238
operations_research::Assignment::SetSequence
void SetSequence(const SequenceVar *const var, const std::vector< int > &forward_sequence, const std::vector< int > &backward_sequence, const std::vector< int > &unperformed)
Definition: constraint_solver/assignment.cc:845
operations_research::RegularLimit::AbsoluteSolverDeadline
absl::Time AbsoluteSolverDeadline() const
Definition: constraint_solver.h:4303
operations_research::ModelVisitor::kFinalStatesArgument
static const char kFinalStatesArgument[]
Definition: constraint_solver.h:3449
operations_research::IntVar::SetValues
virtual void SetValues(const std::vector< int64 > &values)
This method intersects the current domain with the values in the array.
Definition: expressions.cc:7323
operations_research::Solver::STARTS_AT
@ STARTS_AT
t starts at d, i.e. Start(t) == d.
Definition: constraint_solver.h:669
operations_research::Solver::AddCastConstraint
void AddCastConstraint(CastConstraint *const constraint, IntVar *const target_var, IntExpr *const expr)
Adds 'constraint' to the solver and marks it as a cast constraint, that is, a constraint created call...
Definition: constraint_solver.cc:1681
operations_research::ModelVisitor::VisitSequenceVariable
virtual void VisitSequenceVariable(const SequenceVar *const variable)
Definition: constraint_solver.cc:2774
operations_research::Rev::Value
const T & Value() const
Definition: constraint_solver.h:3734
operations_research::AssignmentContainer::ElementPtrOrNull
const E * ElementPtrOrNull(const V *const var) const
Definition: constraint_solver.h:4942
operations_research::SolutionCollector::AddObjective
void AddObjective(IntVar *const objective)
Definition: search.cc:2257
operations_research::CastConstraint::~CastConstraint
~CastConstraint() override
Definition: constraint_solver.h:3621
operations_research::Assignment::SetStartMin
void SetStartMin(const IntervalVar *const var, int64 m)
Definition: constraint_solver/assignment.cc:747
operations_research::SortedDisjointIntervalList
This class represents a sorted list of disjoint, closed intervals.
Definition: sorted_interval_list.h:390
operations_research::LocalSearchMonitor
Definition: constraint_solveri.h:1915
operations_research::Assignment::Save
bool Save(const std::string &filename) const
Saves the assignment to a file.
Definition: constraint_solver/assignment.cc:557
operations_research::SequenceVar::Next
IntVar * Next(int index) const
Returns the next of the index_th interval of the sequence.
Definition: sched_search.cc:54
operations_research::IntervalVar::WhenAnything
void WhenAnything(Solver::Closure closure)
Attaches a closure awakened when anything about this interval changes.
Definition: constraint_solver.h:4506
operations_research::ModelVisitor::kProductOperation
static const char kProductOperation[]
Definition: constraint_solver.h:3498
operations_research::SequenceVar::HorizonRange
void HorizonRange(int64 *const hmin, int64 *const hmax) const
Returns the minimum start min and the maximum end max of all interval vars in the sequence.
Definition: sched_search.cc:91
operations_research::Solver::MakeEquality
Constraint * MakeEquality(IntExpr *const left, IntExpr *const right)
left == right
Definition: range_cst.cc:512
operations_research::Assignment
An Assignment is a variable -> domains mapping, used to report solutions to the user.
Definition: constraint_solver.h:5033
operations_research::Solver::MakeIsBetweenVar
IntVar * MakeIsBetweenVar(IntExpr *const v, int64 l, int64 u)
Definition: expr_cst.cc:1084
operations_research::IntervalVarElement::Clone
IntervalVarElement * Clone()
Definition: constraint_solver/assignment.cc:127
operations_research::Solver::MakeMin
IntExpr * MakeMin(const std::vector< IntVar * > &vars)
std::min(vars)
Definition: expr_array.cc:3278
operations_research::AssignmentContainer::Element
const E & Element(const V *const var) const
Definition: constraint_solver.h:4936
operations_research::Solver::MakeAbs
IntExpr * MakeAbs(IntExpr *const expr)
|expr|
Definition: expressions.cc:6984
operations_research::RegularLimit::failures
int64 failures() const
Definition: constraint_solver.h:4297
operations_research::IntVar::RemoveValues
virtual void RemoveValues(const std::vector< int64 > &values)
This method remove the values from the domain of the variable.
Definition: expressions.cc:7266
operations_research::RegularLimit::~RegularLimit
~RegularLimit() override
Definition: search.cc:3967
operations_research::Solver::IntervalStrategy
IntervalStrategy
This enum describes the straregy used to select the next interval variable and its value to be fixed.
Definition: constraint_solver.h:414
operations_research::NumericalRevArray::Decr
void Decr(Solver *const s, int index)
Definition: constraint_solver.h:3821
operations_research::Assignment::Deactivate
void Deactivate(const IntVar *const var)
Definition: constraint_solver/assignment.cc:936
operations_research::RevArray::SetValue
void SetValue(Solver *const s, int index, const T &val)
Definition: constraint_solver.h:3792
operations_research::DisjunctiveConstraint::time_slacks
virtual const std::vector< IntVar * > & time_slacks() const =0
operations_research::IntervalVar::WhenStartRange
void WhenStartRange(Solver::Closure closure)
Definition: constraint_solver.h:4411
operations_research::IntervalVar::WhenEndRange
void WhenEndRange(Solver::Action action)
Definition: constraint_solver.h:4469
operations_research::Solver::SequenceStrategy
SequenceStrategy
Used for scheduling. Not yet implemented.
Definition: constraint_solver.h:405
operations_research::ModelVisitor::kCircuit
static const char kCircuit[]
Definition: constraint_solver.h:3340
operations_research::DefaultPhaseParameters::random_seed
int random_seed
Seed used to initialize the random part in some heuristics.
Definition: constraint_solver.h:216
operations_research::Assignment::StartValue
int64 StartValue(const IntervalVar *const var) const
Definition: constraint_solver/assignment.cc:707
operations_research::Solver::tmp_vector_
std::vector< int64 > tmp_vector_
Unsafe temporary vector.
Definition: constraint_solver.h:2935
operations_research::Solver::MakeMemberCt
Constraint * MakeMemberCt(IntExpr *const expr, const std::vector< int64 > &values)
expr in set.
Definition: expr_cst.cc:1160
operations_research::DecisionVisitor::VisitUnknownDecision
virtual void VisitUnknownDecision()
Definition: constraint_solver.cc:2543
operations_research::SolutionCollector::branches
int64 branches(int n) const
Returns the number of branches when the nth solution was found.
Definition: search.cc:2332
operations_research::Solver::MakePrintModelVisitor
ModelVisitor * MakePrintModelVisitor()
Prints the model.
Definition: utilities.cc:807
operations_research::AssignmentContainer::MutableElement
E * MutableElement(int index)
Definition: constraint_solver.h:4950
operations_research::IntervalVar::WhenDurationRange
void WhenDurationRange(Solver::Action action)
Definition: constraint_solver.h:4442
operations_research::IntervalVar::Accept
virtual void Accept(ModelVisitor *const visitor) const =0
Accepts the given visitor.
operations_research::Pack::PropagateDelayed
void PropagateDelayed()
Definition: pack.cc:153
operations_research::DecisionBuilder::DecisionBuilder
DecisionBuilder()
Definition: constraint_solver.h:3265
operations_research::Solver::CHOOSE_MIN_SIZE
@ CHOOSE_MIN_SIZE
Among unbound variables, select the variable with the smallest size.
Definition: constraint_solver.h:331
operations_research::ModelVisitor::kVariableGroupExtension
static const char kVariableGroupExtension[]
Definition: constraint_solver.h:3425
operations_research::Solver::ENDS_AT_END
@ ENDS_AT_END
t1 ends at t2 end, i.e. End(t1) == End(t2) + delay.
Definition: constraint_solver.h:630
operations_research::Assignment::SetDurationRange
void SetDurationRange(const IntervalVar *const var, int64 mi, int64 ma)
Definition: constraint_solver/assignment.cc:772
operations_research::InitAndGetValues::Iterator::operator*
int64 operator*() const
Definition: constraint_solver.h:3961
operations_research::Assignment::IntContainer
AssignmentContainer< IntVar, IntVarElement > IntContainer
Definition: constraint_solver.h:5035
operations_research::IntervalVar::WhenStartRange
virtual void WhenStartRange(Demon *const d)=0
operations_research::SolutionCollector::solution_data_
std::vector< SolutionData > solution_data_
Definition: constraint_solver.h:4185
operations_research::Solver::MakeGuidedLocalSearch
SearchMonitor * MakeGuidedLocalSearch(bool maximize, IntVar *const objective, IndexEvaluator2 objective_function, int64 step, const std::vector< IntVar * > &vars, double penalty_factor)
Creates a Guided Local Search monitor.
Definition: search.cc:3894
operations_research::Solver::INT_VAR_DEFAULT
@ INT_VAR_DEFAULT
The default behavior is CHOOSE_FIRST_UNBOUND.
Definition: constraint_solver.h:271
operations_research::SequenceVar::RankSequence
void RankSequence(const std::vector< int > &rank_first, const std::vector< int > &rank_last, const std::vector< int > &unperformed)
Applies the following sequence of ranks, ranks first, then rank last.
Definition: sched_search.cc:266
operations_research::Assignment::EndMax
int64 EndMax(const IntervalVar *const var) const
Definition: constraint_solver/assignment.cc:727
sysinfo.h
operations_research::ModelVisitor::kScalProdEqual
static const char kScalProdEqual[]
Definition: constraint_solver.h:3397
operations_research::AssignmentContainer::Add
E * Add(V *var)
Definition: constraint_solver.h:4857
operations_research::Solver::RandomConcatenateOperators
LocalSearchOperator * RandomConcatenateOperators(const std::vector< LocalSearchOperator * > &ops)
Randomized version of local search concatenator; calls a random operator at each call to MakeNextNeig...
Definition: local_search.cc:2105
operations_research::Assignment::IntervalVarContainer
const IntervalContainer & IntervalVarContainer() const
Definition: constraint_solver.h:5186
operations_research::IntervalVar::WhenDurationBound
virtual void WhenDurationBound(Demon *const d)=0
operations_research::Queue
Definition: constraint_solver.cc:215
operations_research::Solver::ENDS_AT_START
@ ENDS_AT_START
t1 ends at t2 start, i.e. End(t1) == Start(t2) + delay.
Definition: constraint_solver.h:633
operations_research::ModelVisitor::kInt64ToBoolExtension
static const char kInt64ToBoolExtension[]
Definition: constraint_solver.h:3418
operations_research::IntervalVar::EndMin
virtual int64 EndMin() const =0
These methods query, set, and watch the end position of the interval var.
operations_research::Solver::MakeLastSolutionCollector
SolutionCollector * MakeLastSolutionCollector()
Collect the last solution of the search.
Definition: search.cc:2481
operations_research::Solver::AVOID_DATE
@ AVOID_DATE
STARTS_AFTER or ENDS_BEFORE, i.e.
Definition: constraint_solver.h:682
operations_research::PiecewiseLinearFunction
Definition: piecewise_linear_function.h:101
timer.h
operations_research::IntervalVar::OldStartMax
virtual int64 OldStartMax() const =0
operations_research::SequenceVarElement::SetSequence
void SetSequence(const std::vector< int > &forward_sequence, const std::vector< int > &backward_sequence, const std::vector< int > &unperformed)
Definition: constraint_solver/assignment.cc:358
operations_research::CastConstraint
Cast constraints are special channeling constraints designed to keep a variable in sync with an expre...
Definition: constraint_solver.h:3615
operations_research::PropagationBaseObject
NOLINT.
Definition: constraint_solver.h:3162
operations_research::ModelVisitor::EndVisitConstraint
virtual void EndVisitConstraint(const std::string &type_name, const Constraint *const constraint)
Definition: constraint_solver.cc:2739
operations_research::Solver::MakeStoreAssignment
DecisionBuilder * MakeStoreAssignment(Assignment *assignment)
Returns a DecisionBuilder which stores an Assignment (calls void Assignment::Store())
Definition: constraint_solver/assignment.cc:1085
operations_research::Solver::BranchSelector
std::function< DecisionModification()> BranchSelector
Definition: constraint_solver.h:752
operations_research::DecisionVisitor::VisitSetVariableValue
virtual void VisitSetVariableValue(IntVar *const var, int64 value)
Definition: constraint_solver.cc:2540
operations_research::SolutionCollector::BackwardSequence
const std::vector< int > & BackwardSequence(int n, SequenceVar *const var) const
This is a shortcut to get the BackwardSequence of 'var' in the nth solution.
Definition: search.cc:2372
operations_research::IntervalVarElement::SetPerformedRange
void SetPerformedRange(int64 mi, int64 ma)
Definition: constraint_solver.h:4767
operations_research::Solver::Rand32
int32 Rand32(int32 size)
Returns a random value between 0 and 'size' - 1;.
Definition: constraint_solver.h:2829
operations_research::ModelVisitor::kVariableArgument
static const char kVariableArgument[]
Definition: constraint_solver.h:3488
operations_research::Assignment::SequenceVarContainer
const SequenceContainer & SequenceVarContainer() const
Definition: constraint_solver.h:5192
operations_research::Pack::SetUnassigned
void SetUnassigned(int var_index)
Definition: pack.cc:443
operations_research::SearchMonitor::EnterSearch
virtual void EnterSearch()
Beginning of the search.
Definition: constraint_solver.cc:2867
operations_research::Assignment::Assignment
Assignment(Solver *const s)
Definition: constraint_solver/assignment.cc:413
operations_research::ModelVisitor::kValueArgument
static const char kValueArgument[]
Definition: constraint_solver.h:3486
operations_research::ModelVisitor::kPositionXArgument
static const char kPositionXArgument[]
Definition: constraint_solver.h:3466
operations_research::Assignment::SequenceContainer
AssignmentContainer< SequenceVar, SequenceVarElement > SequenceContainer
Definition: constraint_solver.h:5039
operations_research::Solver::MakeMirrorInterval
IntervalVar * MakeMirrorInterval(IntervalVar *const interval_var)
Creates an interval var that is the mirror image of the given one, that is, the interval var obtained...
Definition: interval.cc:2204
operations_research::Assignment::Unperformed
const std::vector< int > & Unperformed(const SequenceVar *const var) const
Definition: constraint_solver/assignment.cc:840
operations_research::IntervalVarElement::EndMin
int64 EndMin() const
Definition: constraint_solver.h:4723
operations_research::Solver::NOT_SET
@ NOT_SET
Definition: constraint_solver.h:735
operations_research::Solver::MakeSymmetryManager
SearchMonitor * MakeSymmetryManager(const std::vector< SymmetryBreaker * > &visitors)
Symmetry Breaking.
Definition: search.cc:4815
search_stats.pb.h
operations_research::DefaultPhaseParameters::DisplayLevel
DisplayLevel
Definition: constraint_solver.h:185
operations_research::Solver::AddBacktrackAction
void AddBacktrackAction(Action a, bool fast)
When SaveValue() is not the best way to go, one can create a reversible action that will be called up...
Definition: constraint_solver.cc:1589
operations_research::ModelVisitor::kIntervalArgument
static const char kIntervalArgument[]
Definition: constraint_solver.h:3454
operations_research::Solver::MakeInversePermutationConstraint
Constraint * MakeInversePermutationConstraint(const std::vector< IntVar * > &left, const std::vector< IntVar * > &right)
Creates a constraint that enforces that 'left' and 'right' both represent permutations of [0....
Definition: constraints.cc:550
operations_research::Solver::MakeLocalSearchPhase
DecisionBuilder * MakeLocalSearchPhase(Assignment *const assignment, LocalSearchPhaseParameters *const parameters)
Local Search decision builders factories.
Definition: local_search.cc:4773
operations_research::Solver::LocalSearchFilterBound
LocalSearchFilterBound
This enum is used in Solver::MakeLocalSearchObjectiveFilter.
Definition: constraint_solver.h:595
operations_research::Solver::MakePower
IntExpr * MakePower(IntExpr *const expr, int64 n)
expr ^ n (n > 0)
Definition: expressions.cc:7023
operations_research::Solver::MakeModulo
IntExpr * MakeModulo(IntExpr *const x, int64 mod)
Modulo expression x % mod (with the python convention for modulo).
Definition: expressions.cc:7240
operations_research::NumericalRev
Subclass of Rev<T> which adds numerical operations.
Definition: constraint_solver.h:3753
operations_research::IntervalVarElement::SetStartValue
void SetStartValue(int64 v)
Definition: constraint_solver.h:4741
operations_research::SolutionCollector::wall_time
int64 wall_time(int n) const
Returns the wall time in ms for the nth solution.
Definition: search.cc:2327
operations_research::OptimizeVar::AcceptSolution
bool AcceptSolution() override
This method is called when a solution is found.
Definition: search.cc:2765
operations_research::IntervalVar::SetDurationMax
virtual void SetDurationMax(int64 m)=0
operations_research::Solver::MakeCover
Constraint * MakeCover(const std::vector< IntervalVar * > &vars, IntervalVar *const target_var)
This constraint states that the target_var is the convex hull of the intervals.
Definition: sched_constraints.cc:585
operations_research::PropagationBaseObject::DebugString
std::string DebugString() const override
Definition: constraint_solver.h:3167
operations_research::IntVarElement::IntVarElement
IntVarElement()
Definition: constraint_solver/assignment.cc:37
operations_research::RevArray::~RevArray
~RevArray()
Definition: constraint_solver.h:3782
operations_research::ModelVisitor::kEndMaxArgument
static const char kEndMaxArgument[]
Definition: constraint_solver.h:3444
operations_research::Solver::MakeDefaultSolutionPool
SolutionPool * MakeDefaultSolutionPool()
Solution Pool.
Definition: local_search.cc:4769
operations_research::Solver::MakePathConnected
Constraint * MakePathConnected(std::vector< IntVar * > nexts, std::vector< int64 > sources, std::vector< int64 > sinks, std::vector< IntVar * > status)
Constraint enforcing that status[i] is true iff there's a path defined on next variables from sources...
Definition: graph_constraints.cc:1434
operations_research::ModelVisitor::EndVisitIntegerExpression
virtual void EndVisitIntegerExpression(const std::string &type_name, const IntExpr *const expr)
Definition: constraint_solver.cc:2747
operations_research::DisjunctiveConstraint::transition_time_
Solver::IndexEvaluator2 transition_time_
Definition: constraint_solver.h:5364
operations_research::SolutionCollector::Unperformed
const std::vector< int > & Unperformed(int n, SequenceVar *const var) const
This is a shortcut to get the list of unperformed of 'var' in the nth solution.
Definition: search.cc:2377
operations_research::Solver::RevAllocArray
T * RevAllocArray(T *object)
Like RevAlloc() above, but for an array of objects: the array must have been allocated with the new[]...
Definition: constraint_solver.h:802
CHECK_EQ
#define CHECK_EQ(val1, val2)
Definition: base/logging.h:697
operations_research::Solver::MakeMaxEquality
Constraint * MakeMaxEquality(const std::vector< IntVar * > &vars, IntVar *const max_var)
Definition: expr_array.cc:3386
operations_research::SearchMonitor::IsUncheckedSolutionLimitReached
virtual bool IsUncheckedSolutionLimitReached()
Returns true if the limit of solutions has been reached including unchecked solutions.
Definition: constraint_solver.h:3701
operations_research::Solver::state
SolverState state() const
State of the solver.
Definition: constraint_solver.h:952
operations_research::ModelVisitor::BeginVisitIntegerExpression
virtual void BeginVisitIntegerExpression(const std::string &type_name, const IntExpr *const expr)
Definition: constraint_solver.cc:2745
operations_research::Solver::MakeSemiContinuousExpr
IntExpr * MakeSemiContinuousExpr(IntExpr *const expr, int64 fixed_charge, int64 step)
Semi continuous Expression (x <= 0 -> f(x) = 0; x > 0 -> f(x) = ax + b) a >= 0 and b >= 0.
Definition: expressions.cc:7136
operations_research::Solver::INTERVAL_DEFAULT
@ INTERVAL_DEFAULT
The default is INTERVAL_SET_TIMES_FORWARD.
Definition: constraint_solver.h:416
operations_research::ModelVisitor::kIsMember
static const char kIsMember[]
Definition: constraint_solver.h:3372
operations_research::IntExpr::SetMax
virtual void SetMax(int64 m)=0
operations_research::ModelVisitor::VisitIntervalArrayArgument
virtual void VisitIntervalArrayArgument(const std::string &arg_name, const std::vector< IntervalVar * > &arguments)
Definition: constraint_solver.cc:2808
operations_research::SolutionPool::SyncNeeded
virtual bool SyncNeeded(Assignment *const local_assignment)=0
This method checks if the local solution needs to be updated with an external one.
operations_research::Solver::MakeIsGreaterVar
IntVar * MakeIsGreaterVar(IntExpr *const left, IntExpr *const right)
status var of (left > right)
Definition: range_cst.cc:796
operations_research::SolutionCollector::prototype_
std::unique_ptr< Assignment > prototype_
Definition: constraint_solver.h:4184
operations_research::ModelVisitor::EndVisitExtension
virtual void EndVisitExtension(const std::string &type)
Definition: constraint_solver.cc:2743
operations_research::AssignmentContainer::Contains
bool Contains(const V *const var) const
Definition: constraint_solver.h:4919
operations_research::SequenceVar::size
int64 size() const
Returns the number of interval vars in the sequence.
Definition: constraint_solver.h:4619
operations_research::IntervalVar::WhenAnything
void WhenAnything(Demon *const d)
Attaches a demon awakened when anything about this interval changes.
Definition: interval.cc:2227
operations_research::ModelVisitor::kIntervalVariable
static const char kIntervalVariable[]
Definition: constraint_solver.h:3363
operations_research::Assignment::ObjectiveValue
int64 ObjectiveValue() const
Definition: constraint_solver/assignment.cc:894
operations_research::Solver::FULLPATHLNS
@ FULLPATHLNS
Operator which relaxes one entire path and all inactive nodes, thus defining num_paths neighbors.
Definition: constraint_solver.h:533
operations_research::SolutionCollector::PopSolution
void PopSolution()
Remove and delete the last popped solution.
Definition: search.cc:2276
operations_research::Pack::Accept
void Accept(ModelVisitor *const visitor) const override
Accepts the given visitor.
Definition: pack.cc:392
operations_research::Solver::RegisterIntVar
IntVar * RegisterIntVar(IntVar *const var)
Registers a new IntVar and wraps it inside a TraceIntVar if necessary.
Definition: trace.cc:856
operations_research::ModelVisitor::kNullIntersect
static const char kNullIntersect[]
Definition: constraint_solver.h:3388
operations_research::Assignment::ClearObjective
void ClearObjective()
Definition: constraint_solver.h:5074
operations_research::Constraint::InitialPropagate
virtual void InitialPropagate()=0
This method performs the initial propagation of the constraint.
operations_research::IntervalVarElement::PerformedMax
int64 PerformedMax() const
Definition: constraint_solver.h:4730
operations_research::ModelVisitor::kAssumePathsArgument
static const char kAssumePathsArgument[]
Definition: constraint_solver.h:3431
operations_research::ModelVisitor::kInt64ToInt64Extension
static const char kInt64ToInt64Extension[]
Definition: constraint_solver.h:3419
operations_research::Assignment::SetStartRange
void SetStartRange(const IntervalVar *const var, int64 mi, int64 ma)
Definition: constraint_solver/assignment.cc:755
operations_research::ModelVisitor::kTuplesArgument
static const char kTuplesArgument[]
Definition: constraint_solver.h:3485
operations_research::Solver::MAKEINACTIVE
@ MAKEINACTIVE
Operator which makes path nodes inactive.
Definition: constraint_solver.h:493
operations_research::Solver::CheckFail
void CheckFail()
Definition: constraint_solver.h:2981
operations_research::DecisionBuilder
A DecisionBuilder is responsible for creating the search tree.
Definition: constraint_solver.h:3263
operations_research::Solver::unchecked_solutions
int64 unchecked_solutions() const
The number of unchecked solutions found by local search.
Definition: constraint_solver.cc:1530
operations_research::IntervalVar::StartMin
virtual int64 StartMin() const =0
These methods query, set, and watch the start position of the interval var.
operations_research::IntExpr::WhenRange
virtual void WhenRange(Demon *d)=0
Attach a demon that will watch the min or the max of the expression.
operations_research::SolutionCollector::BuildSolutionDataForCurrentState
SolutionData BuildSolutionDataForCurrentState()
Definition: search.cc:2284
operations_research::IntervalVarElement::operator==
bool operator==(const IntervalVarElement &element) const
Definition: constraint_solver/assignment.cc:223
operations_research::IntVarElement
Definition: constraint_solver.h:4646
operations_research::DecisionVisitor::VisitSplitVariableDomain
virtual void VisitSplitVariableDomain(IntVar *const var, int64 value, bool start_with_lower_half)
Definition: constraint_solver.cc:2541
operations_research::Solver::CastExpression
IntExpr * CastExpression(const IntVar *const var) const
!defined(SWIG)
Definition: constraint_solver.cc:2437
operations_research::AssignmentElement::Activate
void Activate()
Definition: constraint_solver.h:4638
operations_research::Solver::MakeOperator
LocalSearchOperator * MakeOperator(const std::vector< IntVar * > &vars, LocalSearchOperators op)
Local Search Operators.
Definition: local_search.cc:2310
operations_research::Solver::MakeSumObjectiveFilter
IntVarLocalSearchFilter * MakeSumObjectiveFilter(const std::vector< IntVar * > &vars, IndexEvaluator2 values, Solver::LocalSearchFilterBound filter_enum)
Definition: local_search.cc:3524
operations_research::ModelVisitor::kPartialArgument
static const char kPartialArgument[]
Definition: constraint_solver.h:3465
operations_research::ModelVisitor::kScalProdGreaterOrEqual
static const char kScalProdGreaterOrEqual[]
Definition: constraint_solver.h:3398
operations_research::Solver::constraints
int constraints() const
Counts the number of constraints that have been added to the solver before the search.
Definition: constraint_solver.h:2860
operations_research::Solver::MakeNonEquality
Constraint * MakeNonEquality(IntExpr *const left, IntExpr *const right)
left != right
Definition: range_cst.cc:564
operations_research::ModelVisitor::kRelaxedMinOperation
static const char kRelaxedMinOperation[]
Definition: constraint_solver.h:3495
operations_research::Solver::ENDS_AFTER_END
@ ENDS_AFTER_END
t1 ends after t2 end, i.e. End(t1) >= End(t2) + delay.
Definition: constraint_solver.h:624
operations_research::operator<<
std::ostream & operator<<(std::ostream &out, const Assignment &assignment)
Definition: constraint_solver/assignment.cc:1089
operations_research::DisjunctiveConstraint::~DisjunctiveConstraint
~DisjunctiveConstraint() override
Definition: resource.cc:2561
operations_research::InitAndGetValues::Iterator
Definition: constraint_solver.h:3952
operations_research::Solver::MakeLexicalLess
Constraint * MakeLexicalLess(const std::vector< IntVar * > &left, const std::vector< IntVar * > &right)
Creates a constraint that enforces that left is lexicographically less than right.
Definition: constraints.cc:540
operations_research::IntervalVar::WhenEndBound
virtual void WhenEndBound(Demon *const d)=0
operations_research::Solver::MakeIsLessCt
Constraint * MakeIsLessCt(IntExpr *const left, IntExpr *const right, IntVar *const b)
b == (left < right)
Definition: range_cst.cc:773
operations_research::Solver::SaveValue
void SaveValue(T *o)
reversibility
Definition: constraint_solver.h:774
operations_research::Solver::MakePathCumul
Constraint * MakePathCumul(const std::vector< IntVar * > &nexts, const std::vector< IntVar * > &active, const std::vector< IntVar * > &cumuls, const std::vector< IntVar * > &transits)
Creates a constraint which accumulates values along a path such that: cumuls[next[i]] = cumuls[i] + t...
Definition: graph_constraints.cc:1297
operations_research::SearchMonitor::BeginNextDecision
virtual void BeginNextDecision(DecisionBuilder *const b)
Before calling DecisionBuilder::Next.
Definition: constraint_solver.cc:2870
operations_research::Assignment::SetPerformedValue
void SetPerformedValue(const IntervalVar *const var, int64 value)
Definition: constraint_solver/assignment.cc:810
operations_research::ModelVisitor::kValuesArgument
static const char kValuesArgument[]
Definition: constraint_solver.h:3487
operations_research::IntExpr::VarWithName
IntVar * VarWithName(const std::string &name)
Creates a variable from the expression and set the name of the resulting var.
Definition: expressions.cc:49
operations_research::IntVarElement::Copy
void Copy(const IntVarElement &element)
Definition: constraint_solver/assignment.cc:53
operations_research::Solver::MakeScheduleOrExpedite
Decision * MakeScheduleOrExpedite(IntervalVar *const var, int64 est, int64 *const marker)
Returns a decision that tries to schedule a task at a given time.
Definition: sched_search.cc:841
operations_research::ModelVisitor::kLess
static const char kLess[]
Definition: constraint_solver.h:3373
operations_research::Solver::MakeIndexOfConstraint
Constraint * MakeIndexOfConstraint(const std::vector< IntVar * > &vars, IntVar *const index, int64 target)
This constraint is a special case of the element constraint with an array of integer variables,...
Definition: element.cc:1730
operations_research::Assignment::SetEndValue
void SetEndValue(const IntervalVar *const var, int64 value)
Definition: constraint_solver/assignment.cc:793
ct
const Constraint * ct
Definition: demon_profiler.cc:42
operations_research::IntervalVar::WhenEndBound
void WhenEndBound(Solver::Closure closure)
Definition: constraint_solver.h:4474
operations_research::ModelVisitor::kIndex2Argument
static const char kIndex2Argument[]
Definition: constraint_solver.h:3451
operations_research::SearchMonitor::kNoProgress
static constexpr int kNoProgress
Definition: constraint_solver.h:3632
operations_research::SequenceVarElement::WriteToProto
void WriteToProto(SequenceVarAssignment *sequence_var_assignment_proto) const
Definition: constraint_solver/assignment.cc:303
operations_research::SolutionCollector::ForwardSequence
const std::vector< int > & ForwardSequence(int n, SequenceVar *const var) const
This is a shortcut to get the ForwardSequence of 'var' in the nth solution.
Definition: search.cc:2367
operations_research::IntVar::MakeDomainIterator
virtual IntVarIterator * MakeDomainIterator(bool reversible) const =0
Creates a domain iterator.
operations_research::ModelVisitor::kIsBetween
static const char kIsBetween[]
Definition: constraint_solver.h:3365
operations_research::IntervalVarElement::SetDurationMax
void SetDurationMax(int64 m)
Definition: constraint_solver.h:4746
operations_research::Solver::MakeSubCircuit
Constraint * MakeSubCircuit(const std::vector< IntVar * > &nexts)
Force the "nexts" variable to create a complete Hamiltonian path for those that do not loop upon them...
Definition: graph_constraints.cc:642
operations_research::Solver::SEQUENCE_DEFAULT
@ SEQUENCE_DEFAULT
Definition: constraint_solver.h:406
operations_research::IntervalVarElement::StartMin
int64 StartMin() const
Definition: constraint_solver.h:4711
operations_research::Solver::MakeRejectFilter
LocalSearchFilter * MakeRejectFilter()
Definition: local_search.cc:2555
operations_research::Solver::UNACTIVELNS
@ UNACTIVELNS
Operator which relaxes all inactive nodes and one sub-chain of six consecutive arcs.
Definition: constraint_solver.h:538
operations_research::Solver::Closure
std::function< void()> Closure
Definition: constraint_solver.h:755
operations_research::Solver::CHOOSE_LOWEST_MIN
@ CHOOSE_LOWEST_MIN
Among unbound variables, select the variable with the smallest minimal value.
Definition: constraint_solver.h:320
operations_research::NumericalRevArray::Add
void Add(Solver *const s, int index, const T &to_add)
Definition: constraint_solver.h:3815
start_max
Rev< int64 > start_max
Definition: sched_constraints.cc:242
operations_research::Solver::MakeAssignVariableValueOrFail
Decision * MakeAssignVariableValueOrFail(IntVar *const var, int64 value)
Definition: search.cc:1596
operations_research::SequenceVarElement::Unperformed
const std::vector< int > & Unperformed() const
Definition: constraint_solver/assignment.cc:354
operations_research::IntervalVar::SetDurationMin
virtual void SetDurationMin(int64 m)=0
operations_research::Solver::failures
int64 failures() const
The number of failures encountered since the creation of the solver.
Definition: constraint_solver.h:994
operations_research::ModelVisitor::kIndexOf
static const char kIndexOf[]
Definition: constraint_solver.h:3337
operations_research::ModelVisitor::kDisjunctive
static const char kDisjunctive[]
Definition: constraint_solver.h:3347
operations_research::IntervalVar::WhenDurationBound
void WhenDurationBound(Solver::Action action)
Definition: constraint_solver.h:4451
operations_research::RevImmutableMultiMap
Reversible Immutable MultiMap class.
Definition: constraint_solveri.h:281
operations_research::IntVarElement::LoadFromProto
void LoadFromProto(const IntVarAssignment &int_var_assignment_proto)
Definition: constraint_solver/assignment.cc:63
operations_research::Assignment::MutableSequenceVarContainer
SequenceContainer * MutableSequenceVarContainer()
Definition: constraint_solver.h:5195
uint64
uint64_t uint64
Definition: integral_types.h:39
operations_research::Solver::Now
absl::Time Now() const
The 'absolute time' as seen by the solver.
Definition: constraint_solver.cc:1524
operations_research::Assignment::Activated
bool Activated(const IntVar *const var) const
Definition: constraint_solver/assignment.cc:940
operations_research::AssignmentElement::Activated
bool Activated() const
Definition: constraint_solver.h:4640
operations_research::Pack::AddSumVariableWeightsLessOrEqualConstantDimension
void AddSumVariableWeightsLessOrEqualConstantDimension(const std::vector< IntVar * > &usage, const std::vector< int64 > &capacity)
This dimension imposes: forall b in bins, sum (i in items: usage[i] * is_assigned(i,...
Definition: pack.cc:1587
operations_research::Solver::MakeBranchesLimit
RegularLimit * MakeBranchesLimit(int64 branches)
Creates a search limit that constrains the number of branches explored in the search tree.
Definition: search.cc:4095
operations_research::Solver::MakeSum
IntExpr * MakeSum(IntExpr *const left, IntExpr *const right)
left + right.
Definition: expressions.cc:6531
operations_research::IntExpr::WhenRange
void WhenRange(Solver::Closure closure)
Attach a demon that will watch the min or the max of the expression.
Definition: constraint_solver.h:3874
operations_research::Solver::Action
std::function< void(Solver *)> Action
Definition: constraint_solver.h:754
operations_research::SequenceVarElement::SetUnperformed
void SetUnperformed(const std::vector< int > &unperformed)
Definition: constraint_solver/assignment.cc:377
operations_research::Solver::CHOOSE_MIN_SIZE_LOWEST_MIN
@ CHOOSE_MIN_SIZE_LOWEST_MIN
Among unbound variables, select the variable with the smallest size, i.e., the smallest number of pos...
Definition: constraint_solver.h:290
operations_research::Solver::filtered_neighbors
int64 filtered_neighbors() const
The number of filtered neighbors (neighbors accepted by filters).
Definition: constraint_solver.h:1000
operations_research::DefaultPhaseParameters::initialization_splits
int initialization_splits
Maximum number of intervals that the initialization of impacts will scan per variable.
Definition: constraint_solver.h:196
operations_research::Solver::accepted_neighbors
int64 accepted_neighbors() const
The number of accepted neighbors.
Definition: constraint_solver.h:1003
operations_research::OptimizeVar::Print
virtual std::string Print() const
Definition: search.cc:2824
operations_research::Pack::AddCountAssignedItemsDimension
void AddCountAssignedItemsDimension(IntVar *const count_var)
This dimension links 'count_var' to the actual number of items assigned to a bin in the pack.
Definition: pack.cc:1604
operations_research::Decision::DebugString
std::string DebugString() const override
Definition: constraint_solver.h:3234
operations_research::OptimizeVar::OptimizeVar
OptimizeVar(Solver *const s, bool maximize, IntVar *const a, int64 step)
Definition: search.cc:2717
operations_research::Constraint::Post
virtual void Post()=0
This method is called when the constraint is processed by the solver.
operations_research::Solver::IntegerCastInfo::variable
IntVar * variable
Definition: constraint_solver.h:259
operations_research::IntervalVarElement::SetDurationValue
void SetDurationValue(int64 v)
Definition: constraint_solver.h:4751
operations_research::ModelVisitor::kCumulative
static const char kCumulative[]
Definition: constraint_solver.h:3344
operations_research::Solver::MakeConstraintAdder
DecisionBuilder * MakeConstraintAdder(Constraint *const ct)
Returns a decision builder that will add the given constraint to the model.
Definition: constraint_solver.cc:2368
DCHECK
#define DCHECK(condition)
Definition: base/logging.h:884
operations_research::IntVarElement::Min
int64 Min() const
Definition: constraint_solver.h:4666
operations_research::Solver::MakeGreaterOrEqual
Constraint * MakeGreaterOrEqual(IntExpr *const left, IntExpr *const right)
left >= right
Definition: range_cst.cc:542
operations_research::IntervalVarElement::EndValue
int64 EndValue() const
Definition: constraint_solver.h:4725
operations_research::Solver::MakeExitSearchCallback
SearchMonitor * MakeExitSearchCallback(std::function< void()> callback)
Definition: search.cc:458
operations_research::ModelVisitor::kPower
static const char kPower[]
Definition: constraint_solver.h:3394
operations_research::CastConstraint::target_var_
IntVar *const target_var_
Definition: constraint_solver.h:3626
operations_research::Pack::Pack
Pack(Solver *const s, const std::vector< IntVar * > &vars, int number_of_bins)
Definition: pack.cc:107
operations_research::Solver::MakeIsGreaterCt
Constraint * MakeIsGreaterCt(IntExpr *const left, IntExpr *const right, IntVar *const b)
b == (left > right)
Definition: range_cst.cc:800
operations_research::ModelVisitor::VisitInt64ToInt64Extension
void VisitInt64ToInt64Extension(const Solver::IndexEvaluator1 &eval, int64 index_min, int64 index_max)
Definition: constraint_solver.cc:2840
operations_research::ModelVisitor::kIntervalsArgument
static const char kIntervalsArgument[]
Definition: constraint_solver.h:3455
operations_research::InitAndGetValues::begin
Iterator begin()
Definition: constraint_solver.h:3943
operations_research::Solver::MakeFixedInterval
IntervalVar * MakeFixedInterval(int64 start, int64 duration, const std::string &name)
Creates a fixed and performed interval.
Definition: interval.cc:2234
operations_research::Solver::model_name
std::string model_name() const
Returns the name of the model.
Definition: constraint_solver.cc:1397
operations_research::Rev::SetValue
void SetValue(Solver *const s, const T &val)
Definition: constraint_solver.h:3736
operations_research::ModelVisitor::kIntervalBinaryRelation
static const char kIntervalBinaryRelation[]
Definition: constraint_solver.h:3360
operations_research::IntervalVar
Interval variables are often used in scheduling.
Definition: constraint_solver.h:4389
operations_research::Solver::ASSIGN_RANDOM_VALUE
@ ASSIGN_RANDOM_VALUE
Selects randomly one of the possible values of the selected variable.
Definition: constraint_solver.h:364
operations_research::Solver::SearchLogParameters::variable
IntVar * variable
Definition: constraint_solver.h:2299
operations_research::Solver::MAXIMIZATION
@ MAXIMIZATION
Definition: constraint_solver.h:735
operations_research::DecisionVisitor
A DecisionVisitor is used to inspect a decision.
Definition: constraint_solver.h:3244
operations_research::Solver::SIMPLELNS
@ SIMPLELNS
Operator which defines one neighbor per variable.
Definition: constraint_solver.h:562
operations_research::IntVarElement::Reset
void Reset(IntVar *const var)
Definition: constraint_solver/assignment.cc:41
operations_research::SearchMonitor::AfterDecision
virtual void AfterDecision(Decision *const d, bool apply)
Just after refuting or applying the decision, apply is true after Apply.
Definition: constraint_solver.cc:2875
operations_research::OptimizeVar::~OptimizeVar
~OptimizeVar() override
Definition: search.cc:2736
operations_research::IntervalVarElement::Bound
bool Bound() const
Definition: constraint_solver.h:4775
operations_research::Solver::DECREMENT
@ DECREMENT
Operator which defines a neighborhood to decrement values.
Definition: constraint_solver.h:553
operations_research::Solver::MakeAcceptFilter
LocalSearchFilter * MakeAcceptFilter()
Local Search Filters.
Definition: local_search.cc:2537
operations_research::Assignment::operator==
bool operator==(const Assignment &assignment) const
Definition: constraint_solver.h:5198
operations_research::Solver::MakeConditionalExpression
IntExpr * MakeConditionalExpression(IntVar *const condition, IntExpr *const expr, int64 unperformed_value)
Conditional Expr condition ? expr : unperformed_value.
Definition: expressions.cc:7216
operations_research::Solver::GetLocalSearchMonitor
LocalSearchMonitor * GetLocalSearchMonitor() const
Returns the local search monitor.
Definition: constraint_solver.cc:3211
operations_research::Assignment::StartMin
int64 StartMin(const IntervalVar *const var) const
Definition: constraint_solver/assignment.cc:699
operations_research::Solver::STARTS_AFTER_END
@ STARTS_AFTER_END
t1 starts after t2 end, i.e. Start(t1) >= End(t2) + delay.
Definition: constraint_solver.h:636
operations_research::RevArray::Value
const T & Value(int index) const
Definition: constraint_solver.h:3786
operations_research::ModelVisitor::kSearchLimitExtension
static const char kSearchLimitExtension[]
Definition: constraint_solver.h:3421
operations_research::Solver::VariableIndexSelector
std::function< int64(Solver *solver, const std::vector< IntVar * > &vars, int64 first_unbound, int64 last_unbound)> VariableIndexSelector
Definition: constraint_solver.h:748
operations_research::DecisionVisitor::VisitRankFirstInterval
virtual void VisitRankFirstInterval(SequenceVar *const sequence, int index)
Definition: constraint_solver.cc:2548
operations_research::SearchLimit::~SearchLimit
~SearchLimit() override
Definition: search.cc:3917
operations_research::DefaultPhaseParameters::ValueSelection
ValueSelection
Definition: constraint_solver.h:180
operations_research::ModelVisitor::kObjectiveExtension
static const char kObjectiveExtension[]
Definition: constraint_solver.h:3420
sorted_interval_list.h
operations_research::IntervalVar::OldStartMin
virtual int64 OldStartMin() const =0
operations_research::IntVar::WhenDomain
virtual void WhenDomain(Demon *d)=0
This method attaches a demon that will watch any domain modification of the domain of the variable.
operations_research::Solver::PATHLNS
@ PATHLNS
Operator which relaxes two sub-chains of three consecutive arcs each.
Definition: constraint_solver.h:529
operations_research::ModelVisitor::kSizeYArgument
static const char kSizeYArgument[]
Definition: constraint_solver.h:3475
operations_research::SearchLimit::EnterSearch
void EnterSearch() override
Internal methods.
Definition: search.cc:3919
operations_research::Assignment::ObjectiveMax
int64 ObjectiveMax() const
Definition: constraint_solver/assignment.cc:887
operations_research::Assignment::SetObjectiveValue
void SetObjectiveValue(int64 value)
Definition: constraint_solver/assignment.cc:926
operations_research::IntVar::Size
virtual uint64 Size() const =0
This method returns the number of values in the domain of the variable.
operations_research::ModelVisitor::kRelationArgument
static const char kRelationArgument[]
Definition: constraint_solver.h:3469
operations_research::AssignmentContainer::AddAtPosition
E * AddAtPosition(V *var, int position)
Advanced usage: Adds element at a given position; position has to have been allocated with Assignment...
Definition: constraint_solver.h:4874
operations_research::Solver::Fail
void Fail()
Abandon the current branch in the search tree. A backtrack will follow.
Definition: constraint_solver.cc:2416
operations_research::Solver::MakeLubyRestart
SearchMonitor * MakeLubyRestart(int scale_factor)
This search monitor will restart the search periodically.
Definition: search.cc:4643
operations_research::IntVar::Accept
void Accept(ModelVisitor *const visitor) const override
Accepts the given visitor.
Definition: expressions.cc:7318
operations_research::Solver::MakeIsGreaterCstCt
Constraint * MakeIsGreaterCstCt(IntExpr *const v, int64 c, IntVar *const b)
b == (v > c)
Definition: expr_cst.cc:714
operations_research::IntervalVar::kMinValidValue
static const int64 kMinValidValue
The smallest acceptable value to be returned by StartMin()
Definition: constraint_solver.h:4392
operations_research::DecisionBuilder::AppendMonitors
virtual void AppendMonitors(Solver *const solver, std::vector< SearchMonitor * > *const extras)
This method will be called at the start of the search.
Definition: constraint_solver.cc:2529
operations_research::IntervalVar::SetEndMax
virtual void SetEndMax(int64 m)=0
operations_research::Solver::MakeMinEquality
Constraint * MakeMinEquality(const std::vector< IntVar * > &vars, IntVar *const min_var)
Definition: expr_array.cc:3364
callback
MPCallback * callback
Definition: gurobi_interface.cc:510
operations_research::Solver::MakeIntervalRelaxedMin
IntervalVar * MakeIntervalRelaxedMin(IntervalVar *const interval_var)
Creates and returns an interval variable that wraps around the given one, relaxing the min start and ...
Definition: interval.cc:2218
operations_research::Pack
Definition: constraint_solver.h:5229
operations_research::Solver::SearchLeftDepth
int SearchLeftDepth() const
Gets the search left depth of the current active search.
Definition: constraint_solver.cc:1177
operations_research::Pack::IsAssignedStatusKnown
bool IsAssignedStatusKnown(int var_index) const
Definition: pack.cc:423
operations_research::Pack::IsUndecided
bool IsUndecided(int var_index, int bin_index) const
Definition: pack.cc:403
operations_research::Assignment::Load
bool Load(const std::string &filename)
Loads an assignment from a file; does not add variables to the assignment (only the variables contain...
Definition: constraint_solver/assignment.cc:481
operations_research::Solver::INTERVAL_SIMPLE
@ INTERVAL_SIMPLE
The simple is INTERVAL_SET_TIMES_FORWARD.
Definition: constraint_solver.h:418
operations_research::Solver::MakeIsLessOrEqualCstVar
IntVar * MakeIsLessOrEqualCstVar(IntExpr *const var, int64 value)
status var of (var <= value)
Definition: expr_cst.cc:776
operations_research::Assignment::FastAdd
IntVarElement * FastAdd(IntVar *const var)
Adds without checking if variable has been previously added.
Definition: constraint_solver/assignment.cc:647
DCHECK_GE
#define DCHECK_GE(val1, val2)
Definition: base/logging.h:889
operations_research::Solver::CHOOSE_MIN_SIZE_HIGHEST_MAX
@ CHOOSE_MIN_SIZE_HIGHEST_MAX
Among unbound variables, select the variable with the smallest size, i.e., the smallest number of pos...
Definition: constraint_solver.h:314
operations_research::IntervalVar::OldDurationMin
virtual int64 OldDurationMin() const =0
operations_research::IntVarElement::SetMin
void SetMin(int64 m)
Definition: constraint_solver.h:4667
operations_research::Solver::MakeOptimize
OptimizeVar * MakeOptimize(bool maximize, IntVar *const v, int64 step)
Creates a objective with a given sense (true = maximization).
Definition: search.cc:2857
operations_research::ModelVisitor::VisitSequenceArrayArgument
virtual void VisitSequenceArrayArgument(const std::string &arg_name, const std::vector< SequenceVar * > &arguments)
Definition: constraint_solver.cc:2818
operations_research::SearchMonitor::LocalOptimum
virtual bool LocalOptimum()
When a local optimum is reached.
Definition: constraint_solver.cc:2883
operations_research::ModelVisitor::VisitIntegerVariableArrayArgument
virtual void VisitIntegerVariableArrayArgument(const std::string &arg_name, const std::vector< IntVar * > &arguments)
Definition: constraint_solver.cc:2798
operations_research::Assignment::SetMax
void SetMax(const IntVar *const var, int64 m)
Definition: constraint_solver/assignment.cc:671
operations_research::Constraint
A constraint is the main modeling object.
Definition: constraint_solver.h:3579
operations_research::Assignment::MutableIntVarContainer
IntContainer * MutableIntVarContainer()
Definition: constraint_solver.h:5185
operations_research::IntervalVar::MustBePerformed
virtual bool MustBePerformed() const =0
These methods query, set, and watch the performed status of the interval var.
operations_research::Solver
Solver Class.
Definition: constraint_solver.h:248
operations_research::ModelVisitor::kLeftArgument
static const char kLeftArgument[]
Definition: constraint_solver.h:3458
operations_research::ModelVisitor::kStartMaxArgument
static const char kStartMaxArgument[]
Definition: constraint_solver.h:3478
operations_research::Solver::MakeCustomLimit
SearchLimit * MakeCustomLimit(std::function< bool()> limiter)
Callback-based search limit.
Definition: search.cc:4370
operations_research::NumericalRev::Incr
void Incr(Solver *const s)
Definition: constraint_solver.h:3761
operations_research::Solver::MakeSolutionsLimit
RegularLimit * MakeSolutionsLimit(int64 solutions)
Creates a search limit that constrains the number of solutions found during the search.
Definition: search.cc:4105
operations_research::Solver::SENTINEL
@ SENTINEL
Definition: constraint_solver.h:716
operations_research::Solver::MakeTimeLimit
RegularLimit * MakeTimeLimit(int64 time_in_ms)
Definition: constraint_solver.h:2206
operations_research::ModelVisitor::kConditionalExpr
static const char kConditionalExpr[]
Definition: constraint_solver.h:3339
operations_research::Assignment::EndMin
int64 EndMin(const IntervalVar *const var) const
Definition: constraint_solver/assignment.cc:723
operations_research::InitAndGetValues::Iterator::End
static Iterator End(IntVarIterator *it)
Definition: constraint_solver.h:3957
operations_research::SolutionPool::~SolutionPool
~SolutionPool() override
Definition: constraint_solver.h:5375
operations_research::Solver::ShouldFail
void ShouldFail()
These methods are only useful for the SWIG wrappers, which need a way to externally cause the Solver ...
Definition: constraint_solver.h:2980
operations_research::ModelVisitor::kAbsEqual
static const char kAbsEqual[]
Definition: constraint_solver.h:3333
operations_research::Solver::KEEP_LEFT
@ KEEP_LEFT
Right branches are ignored.
Definition: constraint_solver.h:698
operations_research::Solver::EQ
@ EQ
Move is accepted when the current objective value is in the interval objective.Min .
Definition: constraint_solver.h:602
operations_research::Rev::Rev
Rev(const T &val)
Definition: constraint_solver.h:3732
operations_research::Pack::AssignAllRemainingItems
void AssignAllRemainingItems()
Definition: pack.cc:482
operations_research::SolutionPool::Initialize
virtual void Initialize(Assignment *const assignment)=0
This method is called to initialize the solution pool with the assignment from the local search.
operations_research::PropagationMonitor
Definition: constraint_solveri.h:1851
operations_research::SequenceVarElement::Clone
SequenceVarElement * Clone()
Definition: constraint_solver/assignment.cc:256
operations_research::Solver::MakeIsDifferentVar
IntVar * MakeIsDifferentVar(IntExpr *const v1, IntExpr *const v2)
status var of (v1 != v2)
Definition: range_cst.cc:641
operations_research::SearchLimit::Init
virtual void Init()=0
This method is called when the search limit is initialized.
operations_research::Solver::MakeVariableLessOrEqualValue
Decision * MakeVariableLessOrEqualValue(IntVar *const var, int64 value)
Definition: search.cc:1684
operations_research::Solver::MakeIndexOfFirstMaxValueConstraint
Constraint * MakeIndexOfFirstMaxValueConstraint(IntVar *index, const std::vector< IntVar * > &vars)
Creates a constraint that binds the index variable to the index of the first variable with the maximu...
Definition: constraints.cc:555
operations_research::Solver::LE
@ LE
Move is accepted when the current objective value <= objective.Max.
Definition: constraint_solver.h:599
operations_research::ModelVisitor::kDurationMinArgument
static const char kDurationMinArgument[]
Definition: constraint_solver.h:3441
operations_research::ModelVisitor::kPathCumul
static const char kPathCumul[]
Definition: constraint_solver.h:3391
operations_research::SolutionCollector::check_index
void check_index(int n) const
Definition: search.cc:2315
operations_research::ModelVisitor::kExpressionArgument
static const char kExpressionArgument[]
Definition: constraint_solver.h:3447
operations_research::ImprovementSearchLimit::ImprovementSearchLimit
ImprovementSearchLimit(Solver *const s, IntVar *objective_var, bool maximize, double objective_scaling_factor, double objective_offset, double improvement_rate_coefficient, int improvement_rate_solutions_distance)
Definition: search.cc:4144
operations_research::Solver::MakeIsGreaterOrEqualCstVar
IntVar * MakeIsGreaterOrEqualCstVar(IntExpr *const var, int64 value)
status var of (var >= value)
Definition: expr_cst.cc:677
operations_research::SearchMonitor::NoMoreSolutions
virtual void NoMoreSolutions()
When the search tree is finished.
Definition: constraint_solver.cc:2882
operations_research::LocalSearchFilterManager
Filter manager: when a move is made, filters are executed to decide whether the solution is feasible ...
Definition: constraint_solveri.h:1763
operations_research::Solver::MakeIntervalRelaxedMax
IntervalVar * MakeIntervalRelaxedMax(IntervalVar *const interval_var)
Creates and returns an interval variable that wraps around the given one, relaxing the max start and ...
Definition: interval.cc:2209
operations_research::SearchMonitor::AcceptDelta
virtual bool AcceptDelta(Assignment *delta, Assignment *deltadelta)
Definition: constraint_solver.cc:2884
operations_research::SolutionPool::SolutionPool
SolutionPool()
Definition: constraint_solver.h:5374
operations_research::Solver::Rand64
int64 Rand64(int64 size)
Returns a random value between 0 and 'size' - 1;.
Definition: constraint_solver.h:2823
operations_research::Demon::Demon
Demon()
This indicates the priority of a demon.
Definition: constraint_solver.h:3300
operations_research::Solver::ASSIGN_MIN_VALUE
@ ASSIGN_MIN_VALUE
Selects the min value of the selected variable.
Definition: constraint_solver.h:358
operations_research::IntervalVar::WhenDurationRange
void WhenDurationRange(Solver::Closure closure)
Definition: constraint_solver.h:4438
operations_research::Solver::MakePathPrecedenceConstraint
Constraint * MakePathPrecedenceConstraint(std::vector< IntVar * > nexts, const std::vector< std::pair< int, int >> &precedences)
Contraint enforcing, for each pair (i,j) in precedences, i to be before j in paths defined by next va...
Definition: graph_constraints.cc:1619
operations_research::SequenceVar::~SequenceVar
~SequenceVar() override
Definition: sched_search.cc:48
operations_research::Solver::MakeDistribute
Constraint * MakeDistribute(const std::vector< IntVar * > &vars, const std::vector< int64 > &values, const std::vector< IntVar * > &cards)
Aggregated version of count: |{i | v[i] == values[j]}| == cards[j].
Definition: count_cst.cc:964
operations_research::Assignment::SetDurationValue
void SetDurationValue(const IntervalVar *const var, int64 value)
Definition: constraint_solver/assignment.cc:777
operations_research::Pack::AssignAllPossibleToBin
void AssignAllPossibleToBin(int bin_index)
Definition: pack.cc:465
operations_research::ModelVisitor::kCountEqual
static const char kCountEqual[]
Definition: constraint_solver.h:3342
operations_research::IntVarElement::SetRange
void SetRange(int64 l, int64 u)
Definition: constraint_solver.h:4676
operations_research::ModelVisitor::kEndMinArgument
static const char kEndMinArgument[]
Definition: constraint_solver.h:3445
operations_research::IntVar::Value
virtual int64 Value() const =0
This method returns the value of the variable.
operations_research::Demon
A Demon is the base element of a propagation queue.
Definition: constraint_solver.h:3296
operations_research::Solver::MakeIsGreaterOrEqualVar
IntVar * MakeIsGreaterOrEqualVar(IntExpr *const left, IntExpr *const right)
status var of (left >= right)
Definition: range_cst.cc:785
operations_research::SequenceVarElement::DebugString
std::string DebugString() const
Definition: constraint_solver/assignment.cc:318
coefficient
int64 coefficient
Definition: routing_search.cc:972
operations_research::ModelVisitor::kFailuresLimitArgument
static const char kFailuresLimitArgument[]
Definition: constraint_solver.h:3448
operations_research::Solver::SearchLogParameters::display_on_new_solutions_only
bool display_on_new_solutions_only
To be used to protect from cases where display_callback assumes variables are instantiated,...
Definition: constraint_solver.h:2311
operations_research::AssignmentContainer::elements
const std::vector< E > & elements() const
Definition: constraint_solver.h:4949
operations_research::Demon::desinhibit
void desinhibit(Solver *const s)
This method un-inhibits the demon that was previously inhibited.
Definition: constraint_solver.cc:205
operations_research::IntervalVar::SetPerformed
virtual void SetPerformed(bool val)=0
operations_research::Assignment::SetRange
void SetRange(const IntVar *const var, int64 l, int64 u)
Definition: constraint_solver/assignment.cc:675
operations_research::Solver::MakeRankLastInterval
Decision * MakeRankLastInterval(SequenceVar *const sequence, int index)
Returns a decision that tries to rank last the ith interval var in the sequence variable.
Definition: sched_search.cc:868
operations_research::Solver::IndexEvaluator1
std::function< int64(int64)> IndexEvaluator1
Callback typedefs.
Definition: constraint_solver.h:738
operations_research::IntVar::WhenBound
virtual void WhenBound(Demon *d)=0
This method attaches a demon that will be awakened when the variable is bound.
operations_research::Solver::Solver
Solver(const std::string &name)
Solver API.
Definition: constraint_solver.cc:1417
operations_research::Solver::MakeMoveTowardTargetOperator
LocalSearchOperator * MakeMoveTowardTargetOperator(const Assignment &target)
Creates a local search operator that tries to move the assignment of some variables toward a target.
Definition: local_search.cc:269
operations_research::IntVar::~IntVar
~IntVar() override
Definition: constraint_solver.h:3996
operations_research::ModelVisitor::kUsageEqualVariableExtension
static const char kUsageEqualVariableExtension[]
Definition: constraint_solver.h:3422
operations_research::ModelVisitor::kModulo
static const char kModulo[]
Definition: constraint_solver.h:3383
operations_research::IntExpr::IntExpr
IntExpr(Solver *const s)
Definition: constraint_solver.h:3833
operations_research::ModelVisitor::kRightArgument
static const char kRightArgument[]
Definition: constraint_solver.h:3470
operations_research::IntervalVarElement
Definition: constraint_solver.h:4697
operations_research::Solver::MakeIfThenElseCt
Constraint * MakeIfThenElseCt(IntVar *const condition, IntExpr *const then_expr, IntExpr *const else_expr, IntVar *const target_var)
Special cases with arrays of size two.
Definition: element.cc:1597
operations_research::AssignmentContainer::Store
void Store()
Definition: constraint_solver.h:4953
operations_research::SolutionCollector::failures
int64 failures(int n) const
Returns the number of failures encountered at the time of the nth solution.
Definition: search.cc:2337
operations_research::IntervalVarElement::PerformedMin
int64 PerformedMin() const
Definition: constraint_solver.h:4729
operations_research::IntVar::OldMin
virtual int64 OldMin() const =0
Returns the previous min.
operations_research::Solver::AddPropagationMonitor
void AddPropagationMonitor(PropagationMonitor *const monitor)
Adds the propagation monitor to the solver.
Definition: constraint_solver.cc:3129
operations_research::Assignment::SetObjectiveMax
void SetObjectiveMax(int64 m)
Definition: constraint_solver/assignment.cc:914
operations_research::OptimizeVar::AtSolution
bool AtSolution() override
This method is called when a valid solution is found.
Definition: search.cc:2777
operations_research::IntervalVarElement::LoadFromProto
void LoadFromProto(const IntervalVarAssignment &interval_var_assignment_proto)
Definition: constraint_solver/assignment.cc:170
operations_research::Solver::CHOOSE_RANDOM_RANK_FORWARD
@ CHOOSE_RANDOM_RANK_FORWARD
Definition: constraint_solver.h:409
operations_research::ModelVisitor::kDistribute
static const char kDistribute[]
Definition: constraint_solver.h:3348
operations_research::IntervalVarElement::Store
void Store()
Definition: constraint_solver/assignment.cc:146
operations_research::Solver::IsProfilingEnabled
bool IsProfilingEnabled() const
Returns whether we are profiling the solver.
Definition: constraint_solver.cc:173
operations_research::NumericalRev::NumericalRev
NumericalRev(const T &val)
Definition: constraint_solver.h:3755
operations_research::AssignmentContainer::Resize
void Resize(size_t size)
Advanced usage: Resizes the container, potentially adding elements with null variables.
Definition: constraint_solver.h:4886
end_min
Rev< int64 > end_min
Definition: sched_constraints.cc:243
operations_research::Solver::MakeSearchTrace
SearchMonitor * MakeSearchTrace(const std::string &prefix)
Creates a search monitor that will trace precisely the behavior of the search.
Definition: search.cc:394
operations_research::AssignmentContainer::AreAllElementsBound
bool AreAllElementsBound() const
Definition: constraint_solver.h:4965
operations_research::CastConstraint::CastConstraint
CastConstraint(Solver *const solver, IntVar *const target_var)
Definition: constraint_solver.h:3617
operations_research::DefaultPhaseParameters::use_last_conflict
bool use_last_conflict
Should we use last conflict method. The default is false.
Definition: constraint_solver.h:223
operations_research::SearchMonitor::RefuteDecision
virtual void RefuteDecision(Decision *const d)
Before refuting the decision.
Definition: constraint_solver.cc:2874
operations_research::IntervalVarElement::PerformedValue
int64 PerformedValue() const
Definition: constraint_solver.h:4731
operations_research::Assignment::SetPerformedMin
void SetPerformedMin(const IntervalVar *const var, int64 m)
Definition: constraint_solver/assignment.cc:797
operations_research::RevArray::operator[]
const T & operator[](int index) const
Definition: constraint_solver.h:3789
operations_research::ModelVisitor::kIsGreaterOrEqual
static const char kIsGreaterOrEqual[]
Definition: constraint_solver.h:3369
operations_research::BaseObject::BaseObject
BaseObject()
Definition: constraint_solver.h:3149
operations_research::AssignmentContainer::Clear
void Clear()
Definition: constraint_solver.h:4878
operations_research::SearchMonitor::AtSolution
virtual bool AtSolution()
This method is called when a valid solution is found.
Definition: constraint_solver.cc:2881
operations_research::IntervalVarElement::SetEndMin
void SetEndMin(int64 m)
Definition: constraint_solver.h:4755
operations_research::Solver::MakeIsGreaterOrEqualCstCt
Constraint * MakeIsGreaterOrEqualCstCt(IntExpr *const var, int64 value, IntVar *const boolvar)
boolvar == (var >= value)
Definition: expr_cst.cc:698
operations_research::IntervalVarElement::SetEndRange
void SetEndRange(int64 mi, int64 ma)
Definition: constraint_solver.h:4757
operations_research::SearchMonitor::AcceptSolution
virtual bool AcceptSolution()
This method is called when a solution is found.
Definition: constraint_solver.cc:2880
operations_research::IntVar::index
int index() const
Returns the index of the variable.
Definition: constraint_solver.h:4086
operations_research::Solver::MakeDefaultPhase
DecisionBuilder * MakeDefaultPhase(const std::vector< IntVar * > &vars)
Definition: default_search.cc:1110
operations_research::SearchLimit::SearchLimit
SearchLimit(Solver *const s)
Definition: constraint_solver.h:4236
operations_research::IntervalVarElement::DurationMin
int64 DurationMin() const
Definition: constraint_solver.h:4717
operations_research::IntervalVar::WhenStartBound
void WhenStartBound(Solver::Closure closure)
Definition: constraint_solver.h:4420
operations_research::DecisionVisitor::VisitScheduleOrExpedite
virtual void VisitScheduleOrExpedite(IntervalVar *const var, int64 est)
Definition: constraint_solver.cc:2546
operations_research::Pack::AssignFirstPossibleToBin
void AssignFirstPossibleToBin(int bin_index)
Definition: pack.cc:475
operations_research::SolutionCollector::StartValue
int64 StartValue(int n, IntervalVar *const var) const
This is a shortcut to get the StartValue of 'var' in the nth solution.
Definition: search.cc:2351
operations_research::ModelVisitor::kIsLess
static const char kIsLess[]
Definition: constraint_solver.h:3370
operations_research::Solver::MakeAssignVariablesValues
Decision * MakeAssignVariablesValues(const std::vector< IntVar * > &vars, const std::vector< int64 > &values)
Definition: search.cc:1752
operations_research::Solver::MakeActionDemon
Demon * MakeActionDemon(Action action)
Creates a demon from a callback.
Definition: constraints.cc:507
operations_research::Solver::MakeIntVar
IntVar * MakeIntVar(int64 min, int64 max, const std::string &name)
MakeIntVar will create the best range based int var for the bounds given.
Definition: expressions.cc:6355
file
Definition: file.cc:141
operations_research::Assignment::StartMax
int64 StartMax(const IntervalVar *const var) const
Definition: constraint_solver/assignment.cc:703
operations_research::Solver::set_fail_intercept
void set_fail_intercept(std::function< void()> fail_intercept)
Internal.
Definition: constraint_solver.h:2869
operations_research::ModelVisitor::kDeviation
static const char kDeviation[]
Definition: constraint_solver.h:3345
operations_research::Solver::MakeTransitionConstraint
Constraint * MakeTransitionConstraint(const std::vector< IntVar * > &vars, const IntTupleSet &transition_table, int64 initial_state, const std::vector< int64 > &final_states)
This constraint create a finite automaton that will check the sequence of variables vars.
Definition: constraint_solver/table.cc:1264
operations_research::ModelVisitor::kSequenceVariable
static const char kSequenceVariable[]
Definition: constraint_solver.h:3401
operations_research::ModelVisitor::kPack
static const char kPack[]
Definition: constraint_solver.h:3390
operations_research::InitAndGetValues::InitAndGetValues
InitAndGetValues(IntVarIterator *it)
Definition: constraint_solver.h:3938
operations_research::IntervalVarElement::SetDurationRange
void SetDurationRange(int64 mi, int64 ma)
Definition: constraint_solver.h:4747
operations_research::InitAndGetValues::Iterator::operator++
Iterator & operator++()
Definition: constraint_solver.h:3965
operations_research::Pack::SetImpossible
void SetImpossible(int var_index, int bin_index)
Definition: pack.cc:407
operations_research::IntervalVar::WhenEndBound
void WhenEndBound(Solver::Action action)
Definition: constraint_solver.h:4478
operations_research::SequenceVar::DebugString
std::string DebugString() const override
Definition: sched_search.cc:56
operations_research::Solver::MakeAssignVariableValueOrDoNothing
Decision * MakeAssignVariableValueOrDoNothing(IntVar *const var, int64 value)
Definition: search.cc:1625
operations_research::Pack::UnassignAllRemainingItems
void UnassignAllRemainingItems()
Definition: pack.cc:492
operations_research::IntervalVar::WhenStartBound
void WhenStartBound(Solver::Action action)
Definition: constraint_solver.h:4424
operations_research::SearchMonitor::AcceptNeighbor
virtual void AcceptNeighbor()
After accepting a neighbor during local search.
Definition: constraint_solver.cc:2887
operations_research::Solver::VAR_PRIORITY
@ VAR_PRIORITY
VAR_PRIORITY is between DELAYED_PRIORITY and NORMAL_PRIORITY.
Definition: constraint_solver.h:614
operations_research::Solver::IN_ROOT_NODE
@ IN_ROOT_NODE
Executing the root node.
Definition: constraint_solver.h:723
operations_research::PropagationBaseObject::FreezeQueue
void FreezeQueue()
This method freezes the propagation queue.
Definition: constraint_solver.h:3178
operations_research::Assignment::Value
int64 Value(const IntVar *const var) const
Definition: constraint_solver/assignment.cc:659
operations_research::SequenceVarElement::SequenceVarElement
SequenceVarElement()
Definition: constraint_solver/assignment.cc:245
operations_research::SequenceVar::FillSequence
void FillSequence(std::vector< int > *const rank_first, std::vector< int > *const rank_last, std::vector< int > *const unperformed) const
Clears 'rank_first' and 'rank_last', and fills them with the intervals in the order of the ranks.
Definition: sched_search.cc:346
operations_research::Constraint::Accept
virtual void Accept(ModelVisitor *const visitor) const
Accepts the given visitor.
Definition: constraint_solver.cc:3247
operations_research::DefaultPhaseParameters::VERBOSE
@ VERBOSE
Definition: constraint_solver.h:185
operations_research::SearchMonitor::~SearchMonitor
~SearchMonitor() override
Definition: constraint_solver.h:3635
operations_research::ImprovementSearchLimit::AtSolution
bool AtSolution() override
This method is called when a valid solution is found.
Definition: search.cc:4218
operations_research::Solver::SearchLogParameters
Creates a search monitor from logging parameters.
Definition: constraint_solver.h:2292
operations_research::Solver::CHOOSE_MIN_SIZE_LOWEST_MAX
@ CHOOSE_MIN_SIZE_LOWEST_MAX
Among unbound variables, select the variable with the smallest size, i.e., the smallest number of pos...
Definition: constraint_solver.h:306
operations_research::DisjunctiveConstraint::nexts
virtual const std::vector< IntVar * > & nexts() const =0
operations_research::Solver::FinishCurrentSearch
void FinishCurrentSearch()
Tells the solver to kill or restart the current search.
Definition: constraint_solver.cc:2427
operations_research::IntExpr::Accept
virtual void Accept(ModelVisitor *const visitor) const
Accepts the given visitor.
Definition: constraint_solver.cc:3261
operations_research::Solver::MAKECHAININACTIVE
@ MAKECHAININACTIVE
Operator which makes a "chain" of path nodes inactive.
Definition: constraint_solver.h:501
operations_research::ModelVisitor::kIsLessOrEqual
static const char kIsLessOrEqual[]
Definition: constraint_solver.h:3371
operations_research::One
int64 One()
This method returns 1.
Definition: constraint_solver.h:3142
operations_research::Assignment::SetEndMax
void SetEndMax(const IntervalVar *const var, int64 m)
Definition: constraint_solver/assignment.cc:785
operations_research::AssignmentElement
Definition: constraint_solver.h:4634
operations_research::ModelVisitor::kSequencesArgument
static const char kSequencesArgument[]
Definition: constraint_solver.h:3472
operations_research::SolutionCollector::Add
void Add(IntVar *const var)
Add API.
Definition: search.cc:2221
operations_research::Solver::MakePiecewiseLinearExpr
IntExpr * MakePiecewiseLinearExpr(IntExpr *expr, const PiecewiseLinearFunction &f)
General piecewise-linear function expression, built from f(x) where f is piecewise-linear.
Definition: expressions.cc:7209
operations_research::Assignment::MutableIntervalVarContainer
IntervalContainer * MutableIntervalVarContainer()
Definition: constraint_solver.h:5189
operations_research::SolutionCollector::DurationValue
int64 DurationValue(int n, IntervalVar *const var) const
This is a shortcut to get the DurationValue of 'var' in the nth solution.
Definition: search.cc:2355
operations_research::Solver::InstrumentsVariables
bool InstrumentsVariables() const
Returns whether we are tracing variables.
Definition: constraint_solver.cc:183
operations_research::Solver::SetBranchSelector
void SetBranchSelector(BranchSelector bs)
Sets the given branch selector on the current active search.
Definition: constraint_solver.cc:1152
operations_research::SolutionCollector
This class is the root class of all solution collectors.
Definition: constraint_solver.h:4096
operations_research::IntExpr::SetRange
virtual void SetRange(int64 l, int64 u)
This method sets both the min and the max of the expression.
Definition: constraint_solver.h:3848
operations_research::Solver::STAYS_IN_SYNC
@ STAYS_IN_SYNC
STARTS_AT_START and ENDS_AT_END at the same time.
Definition: constraint_solver.h:650
operations_research::Solver::MakeLocalSearchPhaseParameters
LocalSearchPhaseParameters * MakeLocalSearchPhaseParameters(IntVar *objective, LocalSearchOperator *const ls_operator, DecisionBuilder *const sub_decision_builder)
Local Search Phase Parameters.
Definition: local_search.cc:4329
operations_research::SequenceVar::Interval
IntervalVar * Interval(int index) const
Returns the index_th interval of the sequence.
Definition: sched_search.cc:50
operations_research::Solver::MakeFixedDurationIntervalVarArray
void MakeFixedDurationIntervalVarArray(int count, int64 start_min, int64 start_max, int64 duration, bool optional, const std::string &name, std::vector< IntervalVar * > *const array)
This method fills the vector with 'count' interval variables built with the corresponding parameters.
Definition: interval.cc:2253
operations_research::Solver::ConcatenateOperators
LocalSearchOperator * ConcatenateOperators(const std::vector< LocalSearchOperator * > &ops)
Creates a local search operator which concatenates a vector of operators.
Definition: local_search.cc:2015
operations_research::Solver::MakeNoCycle
Constraint * MakeNoCycle(const std::vector< IntVar * > &nexts, const std::vector< IntVar * > &active, IndexFilter1 sink_handler=nullptr)
Prevent cycles.
Definition: graph_constraints.cc:631
operations_research::Solver::UseFastLocalSearch
bool UseFastLocalSearch() const
Returns true if fast local search is enabled.
Definition: constraint_solver.h:2883
DCHECK_EQ
#define DCHECK_EQ(val1, val2)
Definition: base/logging.h:885
operations_research::IntervalVarElement::SetStartRange
void SetStartRange(int64 mi, int64 ma)
Definition: constraint_solver.h:4737
operations_research::Solver::clear_fail_intercept
void clear_fail_intercept()
Definition: constraint_solver.h:2873
hash.h
operations_research::Solver::EvaluatorStrategy
EvaluatorStrategy
This enum is used by Solver::MakePhase to specify how to select variables and values during the searc...
Definition: constraint_solver.h:390
operations_research::Assignment::Clear
void Clear()
Definition: constraint_solver/assignment.cc:418
operations_research::ModelVisitor::kGlobalCardinality
static const char kGlobalCardinality[]
Definition: constraint_solver.h:3356
operations_research::ModelVisitor::kMaxArgument
static const char kMaxArgument[]
Definition: constraint_solver.h:3459
operations_research::RegularLimit::UpdateLimits
void UpdateLimits(absl::Duration time, int64 branches, int64 failures, int64 solutions)
Definition: search.cc:4031
operations_research::IntVarLocalSearchFilter
Definition: constraint_solveri.h:1811
operations_research::ModelVisitor::kSumEqual
static const char kSumEqual[]
Definition: constraint_solver.h:3406
operations_research::AssignmentContainer::AssignmentContainer
AssignmentContainer()
Definition: constraint_solver.h:4856
operations_research::Solver::kNumPriorities
static constexpr int kNumPriorities
Number of priorities for demons.
Definition: constraint_solver.h:265
operations_research::Assignment::NumIntVars
int NumIntVars() const
Definition: constraint_solver.h:5053
operations_research::Solver::MakeAssignVariableValue
Decision * MakeAssignVariableValue(IntVar *const var, int64 val)
Decisions.
Definition: search.cc:1558
operations_research::ModelVisitor::kDelayedPathCumul
static const char kDelayedPathCumul[]
Definition: constraint_solver.h:3392
operations_research::Assignment::DurationValue
int64 DurationValue(const IntervalVar *const var) const
Definition: constraint_solver/assignment.cc:719
delta
int64 delta
Definition: resource.cc:1684
operations_research::Solver::ExportProfilingOverview
void ExportProfilingOverview(const std::string &filename)
Exports the profiling information in a human readable overview.
Definition: demon_profiler.cc:430
operations_research::Solver::MakeIntervalVar
IntervalVar * MakeIntervalVar(int64 start_min, int64 start_max, int64 duration_min, int64 duration_max, int64 end_min, int64 end_max, bool optional, const std::string &name)
Creates an interval var by specifying the bounds on start, duration, and end.
Definition: interval.cc:2370
operations_research::Solver::MakeIntConst
IntVar * MakeIntConst(int64 val, const std::string &name)
IntConst will create a constant expression.
Definition: expressions.cc:6447
operations_research::Solver::MakeVariableGreaterOrEqualValue
Decision * MakeVariableGreaterOrEqualValue(IntVar *const var, int64 value)
Definition: search.cc:1688
operations_research::SearchMonitor::EndNextDecision
virtual void EndNextDecision(DecisionBuilder *const b, Decision *const d)
After calling DecisionBuilder::Next, along with the returned decision.
Definition: constraint_solver.cc:2871
operations_research::AssignmentContainer::MutableElement
E * MutableElement(const V *const var)
Definition: constraint_solver.h:4923
operations_research::IntVar::MakeHoleIterator
virtual IntVarIterator * MakeHoleIterator(bool reversible) const =0
Creates a hole iterator.
operations_research::Assignment::AreAllElementsBound
bool AreAllElementsBound() const
Definition: constraint_solver.h:5168
operations_research::LocalSearchProfiler
Definition: local_search.cc:3619
operations_research::Solver::NORMAL_PRIORITY
@ NORMAL_PRIORITY
NORMAL_PRIORITY is the highest priority: Demons will be processed first.
Definition: constraint_solver.h:617
b
int64 b
Definition: constraint_solver/table.cc:43
operations_research::PropagationBaseObject::set_name
void set_name(const std::string &name)
Definition: constraint_solver.cc:2509
operations_research::Solver::MakeAtSolutionCallback
SearchMonitor * MakeAtSolutionCallback(std::function< void()> callback)
Definition: search.cc:418
DISALLOW_COPY_AND_ASSIGN
#define DISALLOW_COPY_AND_ASSIGN(TypeName)
Definition: macros.h:29
operations_research::Solver::MakeDefaultRegularLimitParameters
RegularLimitParameters MakeDefaultRegularLimitParameters() const
Creates a regular limit proto containing default values.
Definition: search.cc:4131
operations_research::IntervalVar::WhenEndRange
void WhenEndRange(Solver::Closure closure)
Definition: constraint_solver.h:4465
operations_research::RevArray
Reversible array of POD types.
Definition: constraint_solver.h:3772
operations_research::IntExpr
The class IntExpr is the base of all integer expressions in constraint programming.
Definition: constraint_solver.h:3831
operations_research::Solver::MakeTrueConstraint
Constraint * MakeTrueConstraint()
This constraint always succeeds.
Definition: constraints.cc:515
operations_research::ModelVisitor::kGreater
static const char kGreater[]
Definition: constraint_solver.h:3357
operations_research::Solver::CHOOSE_MAX_REGRET_ON_MIN
@ CHOOSE_MAX_REGRET_ON_MIN
Among unbound variables, select the variable with the largest gap between the first and the second va...
Definition: constraint_solver.h:340
operations_research::Solver::DecisionModification
DecisionModification
The Solver is responsible for creating the search tree.
Definition: constraint_solver.h:690
operations_research::SolutionCollector::solution_count
int solution_count() const
Returns how many solutions were stored during the search.
Definition: search.cc:2325
operations_research::Solver::MakeImprovementLimit
ImprovementSearchLimit * MakeImprovementLimit(IntVar *objective_var, bool maximize, double objective_scaling_factor, double objective_offset, double improvement_rate_coefficient, int improvement_rate_solutions_distance)
Limits the search based on the improvements of 'objective_var'.
Definition: search.cc:4259
operations_research::Solver::solutions
int64 solutions() const
The number of solutions found since the start of the search.
Definition: constraint_solver.cc:1528
operations_research::IntervalVar::CannotBePerformed
bool CannotBePerformed() const
Definition: constraint_solver.h:4487
operations_research::IntVarElement::SetMax
void SetMax(int64 m)
Definition: constraint_solver.h:4669
operations_research::SolutionCollector::objective_value
int64 objective_value(int n) const
Returns the objective value of the nth solution.
Definition: search.cc:2342
operations_research::Solver::SEQUENCE_SIMPLE
@ SEQUENCE_SIMPLE
Definition: constraint_solver.h:407
capacity
int64 capacity
Definition: routing_flow.cc:129
operations_research::Solver::MakeDiv
IntExpr * MakeDiv(IntExpr *const expr, int64 value)
expr / value (integer division)
Definition: expressions.cc:6956
operations_research::IntVar::OldMax
virtual int64 OldMax() const =0
Returns the previous max.
operations_research::ModelVisitor::VisitIntervalVariable
virtual void VisitIntervalVariable(const IntervalVar *const variable, const std::string &operation, int64 value, IntervalVar *const delegate)
Definition: constraint_solver.cc:2765
operations_research::LocalSearchOperator
The base class for all local search operators.
Definition: constraint_solveri.h:798
operations_research::ModelVisitor::kRangeArgument
static const char kRangeArgument[]
Definition: constraint_solver.h:3468
operations_research::PropagationBaseObject::EnqueueAll
void EnqueueAll(const SimpleRevFIFO< Demon * > &demons)
Definition: constraint_solver.cc:2521
operations_research::ModelVisitor::kFixedChargeArgument
static const char kFixedChargeArgument[]
Definition: constraint_solver.h:3450
operations_research::Solver::MakeOpposite
IntExpr * MakeOpposite(IntExpr *const expr)
-expr
Definition: expressions.cc:6728
operations_research::IntTupleSet
Definition: tuple_set.h:49
operations_research::Solver::MakeIntervalVarArray
void MakeIntervalVarArray(int count, int64 start_min, int64 start_max, int64 duration_min, int64 duration_max, int64 end_min, int64 end_max, bool optional, const std::string &name, std::vector< IntervalVar * > *const array)
This method fills the vector with 'count' interval var built with the corresponding parameters.
Definition: interval.cc:2379
operations_research::Assignment::DurationMax
int64 DurationMax(const IntervalVar *const var) const
Definition: constraint_solver/assignment.cc:715
operations_research::RegularLimit::DebugString
std::string DebugString() const override
Definition: search.cc:4045
operations_research::ModelVisitor::kLexLess
static const char kLexLess[]
Definition: constraint_solver.h:3375
operations_research::DefaultPhaseParameters::VariableSelection
VariableSelection
Definition: constraint_solver.h:174
operations_research::Solver::DefaultSolverParameters
static ConstraintSolverParameters DefaultSolverParameters()
Create a ConstraintSolverParameters proto with all the default values.
Definition: constraint_solver.cc:118
operations_research::Assignment::Empty
bool Empty() const
Definition: constraint_solver.h:5046
operations_research::NumericalRev::Decr
void Decr(Solver *const s)
Definition: constraint_solver.h:3763
operations_research::OptimizeVar::best
int64 best() const
Returns the best value found during search.
Definition: constraint_solver.h:4205
operations_research::Solver::AT_SOLUTION
@ AT_SOLUTION
After successful NextSolution and before EndSearch.
Definition: constraint_solver.h:727
operations_research::ModelVisitor::kMaxEqual
static const char kMaxEqual[]
Definition: constraint_solver.h:3379
operations_research::Assignment::SetDurationMax
void SetDurationMax(const IntervalVar *const var, int64 m)
Definition: constraint_solver/assignment.cc:768
operations_research::Solver::MakeFirstSolutionCollector
SolutionCollector * MakeFirstSolutionCollector()
Collect the first solution of the search.
Definition: search.cc:2435
operations_research::Solver::MakeLimit
RegularLimit * MakeLimit(absl::Duration time, int64 branches, int64 failures, int64 solutions, bool smart_time_check=false, bool cumulative=false)
Limits the search with the 'time', 'branches', 'failures' and 'solutions' limits.
Definition: search.cc:4117
operations_research::Assignment::PerformedMin
int64 PerformedMin(const IntervalVar *const var) const
Definition: constraint_solver/assignment.cc:735
operations_research::ModelVisitor::kProduct
static const char kProduct[]
Definition: constraint_solver.h:3395
operations_research::Solver::IntValueStrategy
IntValueStrategy
This enum describes the strategy used to select the next variable value to set.
Definition: constraint_solver.h:350
proto
CpModelProto proto
Definition: cp_model_fz_solver.cc:107
operations_research::Assignment::SetPerformedRange
void SetPerformedRange(const IntervalVar *const var, int64 mi, int64 ma)
Definition: constraint_solver/assignment.cc:805
operations_research::Solver::INT_VALUE_SIMPLE
@ INT_VALUE_SIMPLE
The simple selection is ASSIGN_MIN_VALUE.
Definition: constraint_solver.h:355
operations_research::SequenceVarElement::Restore
void Restore()
Definition: constraint_solver/assignment.cc:278
operations_research::ModelCache
Implements a complete cache for model elements: expressions and constraints.
Definition: constraint_solveri.h:2073
operations_research::Solver::TopPeriodicCheck
void TopPeriodicCheck()
Performs PeriodicCheck on the top-level search; for instance, can be called from a nested solve to ch...
Definition: constraint_solver.cc:1542
operations_research::Solver::OptimizationDirection
OptimizationDirection
Optimization directions.
Definition: constraint_solver.h:735
operations_research::Solver::MakeCumulative
Constraint * MakeCumulative(const std::vector< IntervalVar * > &intervals, const std::vector< int64 > &demands, int64 capacity, const std::string &name)
This constraint forces that, for any integer t, the sum of the demands corresponding to an interval c...
Definition: resource.cc:2586
operations_research::PropagationBaseObject::set_variable_to_clean_on_fail
void set_variable_to_clean_on_fail(IntVar *v)
Shortcut for variable cleaner.
Definition: constraint_solver.h:3204
operations_research::SearchMonitor::AcceptUncheckedNeighbor
virtual void AcceptUncheckedNeighbor()
After accepting an unchecked neighbor during local search.
Definition: constraint_solver.cc:2888
operations_research::Solver::BinaryIntervalRelation
BinaryIntervalRelation
This enum is used in Solver::MakeIntervalVarRelation to specify the temporal relation between the two...
Definition: constraint_solver.h:622
operations_research::Solver::LocalSearchProfile
std::string LocalSearchProfile() const
Returns local search profiling information in a human readable format.
Definition: local_search.cc:3843
operations_research::AssignmentContainer::Copy
void Copy(const AssignmentContainer< V, E > &container)
Copies all the elements of 'container' to this container, clearing its previous content.
Definition: constraint_solver.h:4912
operations_research::ModelVisitor::kDurationExpr
static const char kDurationExpr[]
Definition: constraint_solver.h:3350
operations_research::Solver::MakeNullIntersectExcept
Constraint * MakeNullIntersectExcept(const std::vector< IntVar * > &first_vars, const std::vector< IntVar * > &second_vars, int64 escape_value)
Creates a constraint that states that all variables in the first vector are different from all variab...
Definition: alldiff_cst.cc:738
operations_research::Solver::SearchLogParameters::objective
OptimizeVar * objective
SearchMonitors will display values of objective or variable (both cannot be used together).
Definition: constraint_solver.h:2298
operations_research::ImprovementSearchLimit::Copy
void Copy(const SearchLimit *const limit) override
Copy a limit.
Definition: search.cc:4170
operations_research::IntervalVarElement::SetPerformedMin
void SetPerformedMin(int64 m)
Definition: constraint_solver.h:4765
operations_research::ModelVisitor::kDifference
static const char kDifference[]
Definition: constraint_solver.h:3346
operations_research::Solver::MakeTimeLimit
RegularLimit * MakeTimeLimit(absl::Duration time)
Creates a search limit that constrains the running time.
Definition: search.cc:4090
operations_research::IntVar::IntVar
IntVar(Solver *const s)
Definition: expressions.cc:57
operations_research::OptimizeVar::AcceptDelta
bool AcceptDelta(Assignment *delta, Assignment *deltadelta) override
Internal methods.
Definition: search.cc:2790
operations_research::IntExpr::~IntExpr
~IntExpr() override
Definition: constraint_solver.h:3834
operations_research::Solver::SearchLogParameters::display_callback
std::function< std::string()> display_callback
SearchMonitors will display the result of display_callback at each new solution found and when the se...
Definition: constraint_solver.h:2308
operations_research::Solver::MakeIsGreaterCstVar
IntVar * MakeIsGreaterCstVar(IntExpr *const var, int64 value)
status var of (var > value)
Definition: expr_cst.cc:694
operations_research::ModelVisitor::VisitInt64ToInt64AsArray
void VisitInt64ToInt64AsArray(const Solver::IndexEvaluator1 &eval, const std::string &arg_name, int64 index_max)
Expands function as array when index min is 0.
Definition: constraint_solver.cc:2854
operations_research::Solver::MakeMax
IntExpr * MakeMax(const std::vector< IntVar * > &vars)
std::max(vars)
Definition: expr_array.cc:3321
operations_research::DisjunctiveConstraint::SetTransitionTime
void SetTransitionTime(Solver::IndexEvaluator2 transition_time)
Add a transition time between intervals.
Definition: resource.cc:2563
operations_research::SequenceVar::RankNotFirst
void RankNotFirst(int index)
Indicates that the index_th interval var will not be ranked first of all currently unranked interval ...
Definition: sched_search.cc:306
operations_research::Decision::Refute
virtual void Refute(Solver *const s)=0
Refute will be called after a backtrack.
operations_research::Solver::MakeWeightedOptimize
OptimizeVar * MakeWeightedOptimize(bool maximize, const std::vector< IntVar * > &sub_objectives, const std::vector< int64 > &weights, int64 step)
Creates a weighted objective with a given sense (true = maximization).
Definition: search.cc:2896
operations_research::DecisionVisitor::VisitScheduleOrPostpone
virtual void VisitScheduleOrPostpone(IntervalVar *const var, int64 est)
Definition: constraint_solver.cc:2544
operations_research::Solver::MakeNotBetweenCt
Constraint * MakeNotBetweenCt(IntExpr *const expr, int64 l, int64 u)
(expr < l || expr > u) This constraint is lazy as it will not make holes in the domain of variables.
Definition: expr_cst.cc:953
operations_research::Solver::CHOOSE_FIRST_UNBOUND
@ CHOOSE_FIRST_UNBOUND
Select the first unbound variable.
Definition: constraint_solver.h:279
operations_research::Solver::SWAPACTIVE
@ SWAPACTIVE
Operator which replaces an active node by an inactive one.
Definition: constraint_solver.h:508
operations_research::RegularLimit::Init
void Init() override
This method is called when the search limit is initialized.
Definition: search.cc:4009
operations_research::SequenceVarElement::ForwardSequence
const std::vector< int > & ForwardSequence() const
Definition: constraint_solver/assignment.cc:346
operations_research::IntervalVar::IsPerformedBound
bool IsPerformedBound() const
Definition: constraint_solver.h:4488
operations_research::Solver::MakeSimulatedAnnealing
SearchMonitor * MakeSimulatedAnnealing(bool maximize, IntVar *const v, int64 step, int64 initial_temperature)
Creates a Simulated Annealing monitor.
Definition: search.cc:3352
operations_research::SolutionCollector::EndValue
int64 EndValue(int n, IntervalVar *const var) const
This is a shortcut to get the EndValue of 'var' in the nth solution.
Definition: search.cc:2359
operations_research::Demon::priority
virtual Solver::DemonPriority priority() const
This method returns the priority of the demon.
Definition: constraint_solver.cc:193
operations_research::ModelVisitor::kMinEqual
static const char kMinEqual[]
Definition: constraint_solver.h:3382
operations_research::DefaultPhaseParameters::decision_builder
DecisionBuilder * decision_builder
When defined, this overrides the default impact based decision builder.
Definition: constraint_solver.h:226
operations_research::Solver::MakeIsDifferentCstCt
Constraint * MakeIsDifferentCstCt(IntExpr *const var, int64 value, IntVar *const boolvar)
boolvar == (var != value)
Definition: expr_cst.cc:587
operations_research::Solver::MakeWeightedMaximize
OptimizeVar * MakeWeightedMaximize(const std::vector< IntVar * > &sub_objectives, const std::vector< int64 > &weights, int64 step)
Creates a maximization weigthed objective.
Definition: search.cc:2910
operations_research::SearchLimit::DebugString
std::string DebugString() const override
Definition: constraint_solver.h:4263
operations_research::SearchMonitor::ExitSearch
virtual void ExitSearch()
End of the search.
Definition: constraint_solver.cc:2869
operations_research::SearchMonitor::Accept
virtual void Accept(ModelVisitor *const visitor) const
Accepts the given model visitor.
Definition: constraint_solver.cc:2890
operations_research::SetAssignmentFromAssignment
void SetAssignmentFromAssignment(Assignment *target_assignment, const std::vector< IntVar * > &target_vars, const Assignment *source_assignment, const std::vector< IntVar * > &source_vars)
NOLINT.
Definition: constraint_solver/assignment.cc:1016
operations_research::PropagationBaseObject::solver
Solver * solver() const
Definition: constraint_solver.h:3174
operations_research::Solver::INTERVAL_SET_TIMES_FORWARD
@ INTERVAL_SET_TIMES_FORWARD
Selects the variable with the lowest starting time of all variables, and fixes its starting time to t...
Definition: constraint_solver.h:421
operations_research::Solver::EndSearch
void EndSearch()
Definition: constraint_solver.cc:2263
operations_research::Solver::MakeIsLessOrEqualCt
Constraint * MakeIsLessOrEqualCt(IntExpr *const left, IntExpr *const right, IntVar *const b)
b == (left <= right)
Definition: range_cst.cc:730
operations_research::Solver::IsLocalSearchProfilingEnabled
bool IsLocalSearchProfilingEnabled() const
Returns whether we are profiling local search.
Definition: constraint_solver.cc:178
operations_research::Assignment::Activate
void Activate(const IntVar *const var)
Definition: constraint_solver/assignment.cc:932
operations_research::ModelVisitor::kNextsArgument
static const char kNextsArgument[]
Definition: constraint_solver.h:3463
operations_research::Solver::MakePhase
DecisionBuilder * MakePhase(const std::vector< IntVar * > &vars, IntVarStrategy var_str, IntValueStrategy val_str)
Phases on IntVar arrays.
Definition: search.cc:2008
operations_research::Solver::LK
@ LK
Lin-Kernighan local search.
Definition: constraint_solver.h:572
operations_research::OptimizeVar::EnterSearch
void EnterSearch() override
Beginning of the search.
Definition: search.cc:2738
operations_research::IntVarElement::Restore
void Restore()
Definition: constraint_solver.h:4658
operations_research::Solver::Compose
DecisionBuilder * Compose(DecisionBuilder *const db1, DecisionBuilder *const db2)
Creates a decision builder which sequentially composes decision builders.
Definition: search.cc:552
gtl::FindCopy
bool FindCopy(const Collection &collection, const Key &key, Value *const value)
Definition: map_util.h:155
operations_research::ModelVisitor::kMirrorOperation
static const char kMirrorOperation[]
Operations.
Definition: constraint_solver.h:3493
operations_research::ModelVisitor::kLateCostArgument
static const char kLateCostArgument[]
Definition: constraint_solver.h:3456
operations_research::ModelVisitor::kIntervalUnaryRelation
static const char kIntervalUnaryRelation[]
Definition: constraint_solver.h:3362
operations_research::Solver::MakeElement
IntExpr * MakeElement(const std::vector< int64 > &values, IntVar *const index)
values[index]
Definition: element.cc:647
operations_research::IntervalVarElement::Var
IntervalVar * Var() const
Definition: constraint_solver.h:4704
operations_research::ModelVisitor::kStartMinArgument
static const char kStartMinArgument[]
Definition: constraint_solver.h:3479
operations_research::Solver::INT_VALUE_DEFAULT
@ INT_VALUE_DEFAULT
The default behavior is ASSIGN_MIN_VALUE.
Definition: constraint_solver.h:352
operations_research::ModelVisitor::kStartSyncOnStartOperation
static const char kStartSyncOnStartOperation[]
Definition: constraint_solver.h:3499
operations_research::Solver::MakeStatisticsModelVisitor
ModelVisitor * MakeStatisticsModelVisitor()
Displays some nice statistics on the model.
Definition: utilities.cc:811
operations_research::SequenceVarElement::Copy
void Copy(const SequenceVarElement &element)
Definition: constraint_solver/assignment.cc:262
operations_research::IntVarIterator::~IntVarIterator
~IntVarIterator() override
Definition: constraint_solver.h:3911
operations_research::Solver::UnaryIntervalRelation
UnaryIntervalRelation
This enum is used in Solver::MakeIntervalVarRelation to specify the temporal relation between an inte...
Definition: constraint_solver.h:655
operations_research::Solver::MakeMaximize
OptimizeVar * MakeMaximize(IntVar *const v, int64 step)
Creates a maximization objective.
Definition: search.cc:2853
operations_research::Solver::CHOOSE_MIN_SIZE_HIGHEST_MIN
@ CHOOSE_MIN_SIZE_HIGHEST_MIN
Among unbound variables, select the variable with the smallest size, i.e., the smallest number of pos...
Definition: constraint_solver.h:298
operations_research::Solver::DemonPriority
DemonPriority
This enum represents the three possible priorities for a demon in the Solver queue.
Definition: constraint_solver.h:608
operations_research::Solver::GetOrCreateLocalSearchState
Assignment * GetOrCreateLocalSearchState()
Returns (or creates) an assignment representing the state of local search.
Definition: constraint_solver.cc:3228
operations_research::OptimizeVar::RefuteDecision
void RefuteDecision(Decision *const d) override
Before refuting the decision.
Definition: search.cc:2763
operations_research::SequenceVar::RankNotLast
void RankNotLast(int index)
Indicates that the index_th interval var will not be ranked first of all currently unranked interval ...
Definition: sched_search.cc:329
operations_research::Solver::MakeFixedDurationStartSyncedOnStartIntervalVar
IntervalVar * MakeFixedDurationStartSyncedOnStartIntervalVar(IntervalVar *const interval_var, int64 duration, int64 offset)
Creates an interval var with a fixed duration whose start is synchronized with the start of another i...
Definition: interval.cc:2396
operations_research::RegularLimit::Accept
void Accept(ModelVisitor *const visitor) const override
Accepts the given model visitor.
Definition: search.cc:4053
operations_research::Solver::SearchMonitor
friend class SearchMonitor
Definition: constraint_solver.h:2944
operations_research::IntervalVar::WhenPerformedBound
void WhenPerformedBound(Solver::Closure closure)
Definition: constraint_solver.h:4494
operations_research::Assignment::SetEndMin
void SetEndMin(const IntervalVar *const var, int64 m)
Definition: constraint_solver/assignment.cc:781
operations_research::Solver::INCREMENT
@ INCREMENT
Operator which defines one neighbor per variable.
Definition: constraint_solver.h:548
operations_research::IntervalVar::DurationMin
virtual int64 DurationMin() const =0
These methods query, set, and watch the duration of the interval var.
operations_research::SearchMonitor::EndInitialPropagation
virtual void EndInitialPropagation()
After the initial propagation.
Definition: constraint_solver.cc:2879
operations_research::Solver::MakeProd
IntExpr * MakeProd(IntExpr *const left, IntExpr *const right)
left * right
Definition: expressions.cc:6836
operations_research::ModelVisitor::kMaximizeArgument
static const char kMaximizeArgument[]
Definition: constraint_solver.h:3460
operations_research::AssignmentContainer::Restore
void Restore()
Definition: constraint_solver.h:4958
operations_research::Solver::MakeStrictDisjunctiveConstraint
DisjunctiveConstraint * MakeStrictDisjunctiveConstraint(const std::vector< IntervalVar * > &intervals, const std::string &name)
This constraint forces all interval vars into an non-overlapping sequence.
Definition: resource.cc:2579
operations_research::Solver::OROPT
@ OROPT
Relocate: OROPT and RELOCATE.
Definition: constraint_solver.h:455
operations_research::Assignment::NumIntervalVars
int NumIntervalVars() const
Definition: constraint_solver.h:5054
operations_research::IntVar::IsEqual
virtual IntVar * IsEqual(int64 constant)=0
IsEqual.
operations_research::Solver::neighbors
int64 neighbors() const
The number of neighbors created.
Definition: constraint_solver.h:997
operations_research::ModelVisitor::kEvaluatorArgument
static const char kEvaluatorArgument[]
Definition: constraint_solver.h:3490
operations_research::Pack::ClearAll
void ClearAll()
Definition: pack.cc:142
operations_research::Solver::branches
int64 branches() const
The number of branches explored since the creation of the solver.
Definition: constraint_solver.h:982
operations_research::SearchLimit::Copy
virtual void Copy(const SearchLimit *const limit)=0
Copy a limit.
operations_research::Pack::RemoveAllPossibleFromBin
void RemoveAllPossibleFromBin(int bin_index)
Definition: pack.cc:455
operations_research::Solver::CHOOSE_DYNAMIC_GLOBAL_BEST
@ CHOOSE_DYNAMIC_GLOBAL_BEST
Pairs are compared each time a variable is selected.
Definition: constraint_solver.h:401
operations_research::OptimizeVar::step_
int64 step_
Definition: constraint_solver.h:4224
operations_research::DisjunctiveConstraint::DisjunctiveConstraint
DisjunctiveConstraint(Solver *const s, const std::vector< IntervalVar * > &intervals, const std::string &name)
Definition: resource.cc:2551
CHECK
#define CHECK(condition)
Definition: base/logging.h:495
operations_research::Assignment::NumSequenceVars
int NumSequenceVars() const
Definition: constraint_solver.h:5055
operations_research::SolutionCollector::solution
Assignment * solution(int n) const
Returns the nth solution.
Definition: search.cc:2320
operations_research::Solver::SaveAndAdd
void SaveAndAdd(T *adr, T val)
All-in-one SaveAndAdd_value.
Definition: constraint_solver.h:2815
commandlineflags.h
operations_research::IntExpr::Var
virtual IntVar * Var()=0
Creates a variable from the expression.
operations_research::ModelVisitor::kGreaterOrEqual
static const char kGreaterOrEqual[]
Definition: constraint_solver.h:3358
operations_research::Solver::EvaluatorLocalSearchOperators
EvaluatorLocalSearchOperators
This enum is used in Solver::MakeOperator associated with an evaluator to specify the neighborhood to...
Definition: constraint_solver.h:567
operations_research::Solver::ASSIGN_MAX_VALUE
@ ASSIGN_MAX_VALUE
Selects the max value of the selected variable.
Definition: constraint_solver.h:361
operations_research::Solver::MakeDeviation
Constraint * MakeDeviation(const std::vector< IntVar * > &vars, IntVar *const deviation_var, int64 total_sum)
Deviation constraint: sum_i |n * vars[i] - total_sum| <= deviation_var and sum_i vars[i] == total_sum...
Definition: deviation.cc:411
operations_research::SolutionCollector::SolutionData::operator<
bool operator<(const SolutionData &other) const
Definition: constraint_solver.h:4168
operations_research::Solver::CHOOSE_RANDOM
@ CHOOSE_RANDOM
Randomly select one of the remaining unbound variables.
Definition: constraint_solver.h:282
operations_research::IntVarElement::operator==
bool operator==(const IntVarElement &element) const
Definition: constraint_solver/assignment.cc:74
operations_research::SearchLimit
Base class of all search limits.
Definition: constraint_solver.h:4234
operations_research::ModelVisitor::kTrace
static const char kTrace[]
Definition: constraint_solver.h:3409
operations_research::RegularLimit::MakeIdenticalClone
RegularLimit * MakeIdenticalClone() const
Definition: search.cc:3982
operations_research::OptimizeVar::var_
IntVar *const var_
Definition: constraint_solver.h:4223
operations_research::IntervalVar::MayBePerformed
virtual bool MayBePerformed() const =0
operations_research::Solver::ActiveSearch
Search * ActiveSearch() const
Returns the active search, nullptr outside search.
Definition: constraint_solver.cc:1127
name
const std::string name
Definition: default_search.cc:808
operations_research::SearchLimit::crossed
bool crossed() const
Returns true if the limit has been crossed.
Definition: constraint_solver.h:4240
operations_research::IntVar::Var
IntVar * Var() override
Creates a variable from the expression.
Definition: constraint_solver.h:3999
operations_research::ModelVisitor::kIsDifferent
static const char kIsDifferent[]
Definition: constraint_solver.h:3366
operations_research::Solver::KEEP_RIGHT
@ KEEP_RIGHT
Left branches are ignored.
Definition: constraint_solver.h:703
operations_research::DefaultPhaseParameters
This struct holds all parameters for the default search.
Definition: constraint_solver.h:172
operations_research::Solver::CHOICE_POINT
@ CHOICE_POINT
Definition: constraint_solver.h:716
operations_research::Solver::MakeIsBetweenCt
Constraint * MakeIsBetweenCt(IntExpr *const expr, int64 l, int64 u, IntVar *const b)
b == (l <= expr <= u)
Definition: expr_cst.cc:1048
operations_research::Constraint::IsCastConstraint
bool IsCastConstraint() const
Is the constraint created by a cast from expression to integer variable?
Definition: constraint_solver.cc:3253
operations_research::ModelVisitor::VisitIntegerVariable
virtual void VisitIntegerVariable(const IntVar *const variable, IntExpr *const delegate)
Definition: constraint_solver.cc:2750
operations_research::ModelVisitor::kRelaxedMaxOperation
static const char kRelaxedMaxOperation[]
Definition: constraint_solver.h:3494
operations_research::ModelVisitor::kStepArgument
static const char kStepArgument[]
Definition: constraint_solver.h:3481
operations_research::Solver::MakeLessOrEqual
Constraint * MakeLessOrEqual(IntExpr *const left, IntExpr *const right)
left <= right
Definition: range_cst.cc:526
operations_research::Solver::LocalSearchOperators
LocalSearchOperators
This enum is used in Solver::MakeOperator to specify the neighborhood to create.
Definition: constraint_solver.h:429
operations_research::IntervalVarElement::StartValue
int64 StartValue() const
Definition: constraint_solver.h:4713
operations_research::AssignmentElement::AssignmentElement
AssignmentElement()
Definition: constraint_solver.h:4636
operations_research::Solver::EXCHANGE
@ EXCHANGE
Operator which exchanges the positions of two nodes.
Definition: constraint_solver.h:467
operations_research::ModelVisitor::kPositionYArgument
static const char kPositionYArgument[]
Definition: constraint_solver.h:3467
operations_research::Solver::MakeNotMemberCt
Constraint * MakeNotMemberCt(IntExpr *const expr, const std::vector< int64 > &values)
expr not in set.
Definition: expr_cst.cc:1229
operations_research::SequenceVarElement::SetForwardSequence
void SetForwardSequence(const std::vector< int > &forward_sequence)
Definition: constraint_solver/assignment.cc:367
operations_research::IntervalVarElement::Reset
void Reset(IntervalVar *const var)
Definition: constraint_solver/assignment.cc:115
operations_research::IntervalVarElement::EndMax
int64 EndMax() const
Definition: constraint_solver.h:4724
operations_research::Pack::Post
void Post() override
This method is called when the constraint is processed by the solver.
Definition: pack.cc:126
operations_research::DefaultPhaseParameters::NORMAL
@ NORMAL
Definition: constraint_solver.h:185
operations_research::ModelVisitor::BeginVisitConstraint
virtual void BeginVisitConstraint(const std::string &type_name, const Constraint *const constraint)
Definition: constraint_solver.cc:2737
operations_research::ModelVisitor::kMember
static const char kMember[]
Definition: constraint_solver.h:3380
operations_research::SearchMonitor::BeginInitialPropagation
virtual void BeginInitialPropagation()
Before the initial propagation.
Definition: constraint_solver.cc:2878
operations_research::Solver::TSPLNS
@ TSPLNS
TSP-base LNS.
Definition: constraint_solver.h:588
kint64max
static const int64 kint64max
Definition: integral_types.h:62
operations_research::ModelVisitor::kVarBoundWatcher
static const char kVarBoundWatcher[]
Definition: constraint_solver.h:3412
operations_research::Solver::RegisterIntExpr
IntExpr * RegisterIntExpr(IntExpr *const expr)
Registers a new IntExpr and wraps it inside a TraceIntExpr if necessary.
Definition: trace.cc:844
operations_research::Solver::MakeDelayedPathCumul
Constraint * MakeDelayedPathCumul(const std::vector< IntVar * > &nexts, const std::vector< IntVar * > &active, const std::vector< IntVar * > &cumuls, const std::vector< IntVar * > &transits)
Delayed version of the same constraint: propagation on the nexts variables is delayed until all const...
Definition: graph_constraints.cc:1325
operations_research::Solver::MakeElementEquality
Constraint * MakeElementEquality(const std::vector< int64 > &vals, IntVar *const index, IntVar *const target)
Definition: element.cc:1667
operations_research::Solver::TopProgressPercent
int TopProgressPercent()
Returns a percentage representing the propress of the search before reaching the limits of the top-le...
Definition: constraint_solver.cc:1544
operations_research::Assignment::ObjectiveMin
int64 ObjectiveMin() const
Definition: constraint_solver/assignment.cc:880
operations_research::Solver::MakeFixedDurationStartSyncedOnEndIntervalVar
IntervalVar * MakeFixedDurationStartSyncedOnEndIntervalVar(IntervalVar *const interval_var, int64 duration, int64 offset)
Creates an interval var with a fixed duration whose start is synchronized with the end of another int...
Definition: interval.cc:2403
operations_research::Solver::MakeAbsEquality
Constraint * MakeAbsEquality(IntVar *const var, IntVar *const abs_var)
Creates the constraint abs(var) == abs_var.
Definition: expressions.cc:6977
time
int64 time
Definition: resource.cc:1683
operations_research::Solver::MakeFixedDurationIntervalVar
IntervalVar * MakeFixedDurationIntervalVar(int64 start_min, int64 start_max, int64 duration, bool optional, const std::string &name)
Creates an interval var with a fixed duration.
Definition: interval.cc:2239
operations_research::Solver::RELOCATE
@ RELOCATE
Relocate neighborhood with length of 1 (see OROPT comment).
Definition: constraint_solver.h:458
operations_research::Solver::GetLocalSearchStatistics
LocalSearchStatistics GetLocalSearchStatistics() const
Returns detailed local search statistics.
Definition: local_search.cc:3850
operations_research::IntervalVar::SetStartMin
virtual void SetStartMin(int64 m)=0
operations_research::PropagationBaseObject::ExecuteAll
void ExecuteAll(const SimpleRevFIFO< Demon * > &demons)
Definition: constraint_solver.cc:2517
operations_research::Solver::MakeSolveOnce
DecisionBuilder * MakeSolveOnce(DecisionBuilder *const db)
SolveOnce will collapse a search tree described by a decision builder 'db' and a set of monitors and ...
Definition: search.cc:4413
operations_research::Assignment::Min
int64 Min(const IntVar *const var) const
Definition: constraint_solver/assignment.cc:651
operations_research::SolutionCollector::SolutionData::time
int64 time
Definition: constraint_solver.h:4164
operations_research::IntervalVarElement::SetPerformedValue
void SetPerformedValue(int64 v)
Definition: constraint_solver.h:4771
operations_research::SequenceVar::ActiveHorizonRange
void ActiveHorizonRange(int64 *const hmin, int64 *const hmax) const
Returns the minimum start min and the maximum end max of all unranked interval vars in the sequence.
Definition: sched_search.cc:106
operations_research::SolutionPool::RegisterNewSolution
virtual void RegisterNewSolution(Assignment *const assignment)=0
This method is called when a new solution has been accepted by the local search.
operations_research::Solver::MakeRestoreAssignment
DecisionBuilder * MakeRestoreAssignment(Assignment *assignment)
Returns a DecisionBuilder which restores an Assignment (calls void Assignment::Restore())
Definition: constraint_solver/assignment.cc:1081
operations_research::IntervalVar::WhenDurationBound
void WhenDurationBound(Solver::Closure closure)
Definition: constraint_solver.h:4447
operations_research::Solver::InstrumentsDemons
bool InstrumentsDemons() const
Returns whether we are instrumenting demons.
Definition: constraint_solver.cc:169
operations_research::Solver::MakeCount
Constraint * MakeCount(const std::vector< IntVar * > &vars, int64 value, int64 max_count)
|{i | vars[i] == value}| == max_count
Definition: count_cst.cc:30
operations_research::Solver::Try
DecisionBuilder * Try(DecisionBuilder *const db1, DecisionBuilder *const db2)
Creates a decision builder which will create a search tree where each decision builder is called from...
Definition: search.cc:700
operations_research::ModelVisitor::kCoefficientsArgument
static const char kCoefficientsArgument[]
Definition: constraint_solver.h:3435
operations_research::ModelVisitor::kLessOrEqual
static const char kLessOrEqual[]
Definition: constraint_solver.h:3374
operations_research::DemonProfiler
Definition: demon_profiler.cc:50
operations_research::ModelVisitor::VisitInt64ToBoolExtension
void VisitInt64ToBoolExtension(Solver::IndexFilter1 filter, int64 index_min, int64 index_max)
Using SWIG on callbacks is troublesome, so we hide these methods during the wrapping.
Definition: constraint_solver.cc:2825
solver_parameters.pb.h
operations_research::Solver::SearchContext
std::string SearchContext() const
Definition: constraint_solver.cc:3220
operations_research::ModelVisitor::kTransitsArgument
static const char kTransitsArgument[]
Definition: constraint_solver.h:3484
operations_research::Decision
A Decision represents a choice point in the search tree.
Definition: constraint_solver.h:3223