C++ Reference
C++ Reference: Routing
constraint_solver.h
static const char kNextsArgument[]
Definition: constraint_solver.h:3420
int64 PerformedValue() const
Definition: constraint_solver.h:4647
bool IsVar() const override
Returns true if the expression is indeed a variable.
Definition: constraint_solver.h:3955
void AddPropagationMonitor(PropagationMonitor *const monitor)
Adds the propagation monitor to the solver.
void SetForwardSequence(const SequenceVar *const var, const std::vector< int > &forward_sequence)
~Pack() override
void AddObjective(IntVar *const v)
virtual int64 OldStartMin() const =0
uint64 stamp() const
The stamp indicates how many moves in the search tree we have performed.
Decision * MakeAssignVariableValueOrDoNothing(IntVar *const var, int64 value)
SolutionCollector * MakeBestValueSolutionCollector(const Assignment *const assignment, bool maximize)
Collect the solution corresponding to the optimal value of the objective of 'assignment'; if 'assignm...
virtual IntVar * IsDifferent(int64 constant)=0
virtual int64 Value() const =0
This method returns the value of the variable.
Solver::IndexEvaluator2 transition_time_
Definition: constraint_solver.h:5280
int NumSequenceVars() const
Definition: constraint_solver.h:4971
Constraint * MakeIsMemberCt(IntExpr *const expr, const std::vector< int64 > &values, IntVar *const boolvar)
boolvar == (expr in set)
bool IsUncheckedSolutionLimitReached() override
Returns true if the limit of solutions has been reached including unchecked solutions.
const IntContainer & IntVarContainer() const
Definition: constraint_solver.h:5100
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.
void CopyIntersection(const AssignmentContainer< V, E > &container)
Copies the elements of 'container' which are already in the calling container.
Definition: constraint_solver.h:4806
static const char kIntervalsArgument[]
Definition: constraint_solver.h:3412
static const char kVarBoundWatcher[]
Definition: constraint_solver.h:3369
static const char kEarlyCostArgument[]
Definition: constraint_solver.h:3399
int64 DurationValue(const IntervalVar *const var) const
void AddCountAssignedItemsDimension(IntVar *const count_var)
This dimension links 'count_var' to the actual number of items assigned to a bin in the pack.
std::string DebugString() const override
static const char kVarsArgument[]
Definition: constraint_solver.h:3446
void SetEndValue(int64 v)
Definition: constraint_solver.h:4677
bool AreAllElementsBound() const
Definition: constraint_solver.h:4881
static const char kCardsArgument[]
Definition: constraint_solver.h:3391
Decision * MakeFailDecision()
virtual bool IsVar() const
Returns true if the expression is indeed a variable.
Definition: constraint_solver.h:3817
static const char kStartMaxArgument[]
Definition: constraint_solver.h:3435
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...
IntervalVar * MakeFixedInterval(int64 start, int64 duration, const std::string &name)
Creates a fixed and performed interval.
static const char kIsDifferent[]
Definition: constraint_solver.h:3323
static const char kLexLess[]
Definition: constraint_solver.h:3332
@ CROSS
Operator which cross exchanges the starting chains of 2 paths, including exchanging the whole paths.
Definition: constraint_solver.h:473
static const char kSizeYArgument[]
Definition: constraint_solver.h:3432
static const char kPartialArgument[]
Definition: constraint_solver.h:3422
const std::vector< int > & Unperformed(const SequenceVar *const var) const
Decision * MakeScheduleOrExpedite(IntervalVar *const var, int64 est, int64 *const marker)
Returns a decision that tries to schedule a task at a given time.
void SetDurationValue(int64 v)
Definition: constraint_solver.h:4667
virtual std::string BaseName() const
Returns a base name for automatic naming.
Constraint(Solver *const solver)
Definition: constraint_solver.h:3538
virtual const std::vector< IntVar * > & nexts() const =0
virtual void Accept(ModelVisitor *const visitor) const
Accepts the given model visitor.
ModelVisitor * MakePrintModelVisitor()
Prints the model.
Demon * MakeActionDemon(Action action)
Creates a demon from a callback.
int solution_count() const
Returns how many solutions were stored during the search.
virtual void VisitIntegerArgument(const std::string &arg_name, int64 value)
Visit integer arguments.
NumericalRev(const T &val)
Definition: constraint_solver.h:3712
IntVar * MakeIntVar(int64 min, int64 max, const std::string &name)
MakeIntVar will create the best range based int var for the bounds given.
bool Empty() const
Definition: constraint_solver.h:4803
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...
static const char kInt64ToBoolExtension[]
Definition: constraint_solver.h:3375
LocalSearchOperator * RandomConcatenateOperators(const std::vector< LocalSearchOperator * > &ops)
Randomized version of local search concatenator; calls a random operator at each call to MakeNextNeig...
void RefuteDecision(Decision *const d) override
Before refuting the decision.
virtual bool Bound() const
Returns true if the min and the max of the expression are equal.
Definition: constraint_solver.h:3814
@ STARTS_AT_END
t1 starts at t2 end, i.e. Start(t1) == End(t2) + delay.
Definition: constraint_solver.h:637
void Restore()
void LoadFromProto(const IntervalVarAssignment &interval_var_assignment_proto)
std::string DebugString() const override
static const char kIntervalArgument[]
Definition: constraint_solver.h:3411
IntervalContainer * MutableIntervalVarContainer()
Definition: constraint_solver.h:5105
std::function< IntVar *(int64)> Int64ToIntVar
Definition: constraint_solver.h:739
void AddConstraint(Constraint *const c)
Adds the constraint 'c' to the model.
static const char kPower[]
Definition: constraint_solver.h:3351
bool operator!=(const Iterator &other) const
Definition: constraint_solver.h:3927
@ DELAYED_PRIORITY
DELAYED_PRIORITY is the lowest priority: Demons will be processed after VAR_PRIORITY and NORMAL_PRIOR...
Definition: constraint_solver.h:606
IntExpr * MakePower(IntExpr *const expr, int64 n)
expr ^ n (n > 0)
@ NO_MORE_SOLUTIONS
After failed NextSolution and before EndSearch.
Definition: constraint_solver.h:724
static const char kObjectiveExtension[]
Definition: constraint_solver.h:3377
void WhenEndRange(Solver::Closure closure)
Definition: constraint_solver.h:4381
~DisjunctiveConstraint() override
static const char kScalProdGreaterOrEqual[]
Definition: constraint_solver.h:3355
void SetStartValue(int64 v)
Definition: constraint_solver.h:4657
A BaseObject is the root of all reversibly allocated objects.
Definition: constraint_solver.h:3104
static const char kEarlyDateArgument[]
Definition: constraint_solver.h:3400
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.
static const char kAssumePathsArgument[]
Definition: constraint_solver.h:3388
static const char kGreater[]
Definition: constraint_solver.h:3314
@ CHOOSE_MAX_VALUE_IMPACT
Definition: constraint_solver.h:172
virtual uint64 Size() const =0
This method returns the number of values in the domain of the variable.
Constraint * MakeScalProdGreaterOrEqual(const std::vector< IntVar * > &vars, const std::vector< int64 > &coeffs, int64 cst)
IntVar * variable
Definition: constraint_solver.h:2277
This class is used to manage a pool of solutions.
Definition: constraint_solver.h:5288
void WhenAnything(Solver::Closure closure)
Attaches a closure awakened when anything about this interval changes.
Definition: constraint_solver.h:4422
Constraint * MakeMinEquality(const std::vector< IntVar * > &vars, IntVar *const min_var)
~PropagationBaseObject() override
Definition: constraint_solver.h:3122
Decision * MakeScheduleOrPostpone(IntervalVar *const var, int64 est, int64 *const marker)
Returns a decision that tries to schedule a task at a given time.
IntExpr * MakeMin(const std::vector< IntVar * > &vars)
std::min(vars)
The class Iterator has two direct subclasses.
Definition: constraint_solver.h:3866
std::string DebugString() const override
Definition: constraint_solver.h:4220
int64 DurationMax(const IntervalVar *const var) const
Constraint * MakeAbsEquality(IntVar *const var, IntVar *const abs_var)
Creates the constraint abs(var) == abs_var.
@ 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:309
OptimizeVar * objective
SearchMonitors will display values of objective or variable (both cannot be used together).
Definition: constraint_solver.h:2276
friend class PropagationBaseObject
Definition: constraint_solver.h:2899
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...
void RankLast(int index)
Ranks the index_th interval var first of all unranked interval vars.
static const char kMaximizeArgument[]
Definition: constraint_solver.h:3417
~DecisionBuilder() override
Definition: constraint_solver.h:3223
Assignment * MakeAssignment()
This method creates an empty assignment.
static const char kEndExpr[]
Definition: constraint_solver.h:3310
LocalSearchFilterBound
This enum is used in Solver::MakeLocalSearchObjectiveFilter.
Definition: constraint_solver.h:590
IntValueStrategy
This enum describes the strategy used to select the next variable value to set.
Definition: constraint_solver.h:345
IntVarElement * Clone()
void ComputeStatistics(int *const ranked, int *const not_ranked, int *const unperformed) const
Compute statistics on the sequence.
void EnqueueAll(const SimpleRevFIFO< Demon * > &demons)
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.
Pack(Solver *const s, const std::vector< IntVar * > &vars, int number_of_bins)
virtual void RemoveValues(const std::vector< int64 > &values)
This method remove the values from the domain of the variable.
static const char kDurationMaxArgument[]
Definition: constraint_solver.h:3397
Assignment(Solver *const s)
LocalSearchPhaseParameters * MakeLocalSearchPhaseParameters(IntVar *objective, LocalSearchOperator *const ls_operator, DecisionBuilder *const sub_decision_builder)
Local Search Phase Parameters.
Constraint * MakeLess(IntExpr *const left, IntExpr *const right)
left < right
IntervalVar(Solver *const solver, const std::string &name)
Definition: constraint_solver.h:4311
void SetTransitionTime(Solver::IndexEvaluator2 transition_time)
Add a transition time between intervals.
IntVar * MakeIsEqualVar(IntExpr *const v1, IntExpr *v2)
status var of (v1 == v2)
virtual int VarType() const
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].
IntervalVar * Var() const
Definition: constraint_solver.h:4620
virtual void EndVisitIntegerExpression(const std::string &type_name, const IntExpr *const expr)
static const char kSmartTimeCheckArgument[]
Definition: constraint_solver.h:3433
int64 StartMin() const
Definition: constraint_solver.h:4627
void SetSearchContext(Search *search, const std::string &search_context)
virtual void VisitSequenceVariable(const SequenceVar *const variable)
void ExecuteAll(const SimpleRevFIFO< Demon * > &demons)
RegularLimit * MakeIdenticalClone() const
SearchMonitor * MakeConstantRestart(int frequency)
This search monitor will restart the search periodically after 'frequency' failures.
static const char kStepArgument[]
Definition: constraint_solver.h:3438
void RestartCurrentSearch()
static const char kLateCostArgument[]
Definition: constraint_solver.h:3413
SearchLimit * MakeClone() const override
Allocates a clone of the limit.
void Reset(IntervalVar *const var)
int64 demon_runs(DemonPriority p) const
The number of demons executed during search for a given priority.
Definition: constraint_solver.h:986
IntervalVar * MakeFixedDurationIntervalVar(int64 start_min, int64 start_max, int64 duration, bool optional, const std::string &name)
Creates an interval var with a fixed duration.
void EnqueueDelayedDemon(Demon *const d)
This method pushes the demon onto the propagation queue.
Definition: constraint_solver.h:3144
void ActivateObjective()
Definition: routing.h:211
bool Bound() const
Definition: constraint_solver.h:4691
bool IsUndecided(int var_index, int bin_index) const
static const char kIsMember[]
Definition: constraint_solver.h:3329
void SetValue(const IntVar *const var, int64 value)
IntVar * MakeIsLessVar(IntExpr *const left, IntExpr *const right)
status var of (left < right)
IntVar * MakeIsDifferentCstVar(IntExpr *const var, int64 value)
status var of (var != value)
virtual IntExpr * SafeStartExpr(int64 unperformed_value)=0
These methods create expressions encapsulating the start, end and duration of the interval var.
int NumIntervalVars() const
Definition: constraint_solver.h:4970
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.
void SetObjectiveMax(int64 m)
static const char kInitialState[]
Definition: constraint_solver.h:3410
virtual void RemoveInterval(int64 l, int64 u)=0
This method removes the interval 'l' .
virtual void VisitIntervalVariable(const IntervalVar *const variable, const std::string &operation, int64 value, IntervalVar *const delegate)
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...
ModelVisitor * MakeVariableDegreeVisitor(absl::flat_hash_map< const IntVar *, int > *const map)
Compute the number of constraints a variable is attached to.
bool operator!=(const IntervalVarElement &element) const
Definition: constraint_solver.h:4697
void WhenEndBound(Solver::Action action)
Definition: constraint_solver.h:4394
virtual void WhenEndBound(Demon *const d)=0
@ STARTS_AFTER_END
t1 starts after t2 end, i.e. Start(t1) >= End(t2) + delay.
Definition: constraint_solver.h:631
virtual bool Ok() const =0
This method indicates if we can call Value() or not.
int64 EndValue() const
Definition: constraint_solver.h:4641
int branch_period
SearchMonitors will display a periodic search log every branch_period branches explored.
Definition: constraint_solver.h:2273
void Store()
void LoadFromProto(const SequenceVarAssignment &sequence_var_assignment_proto)
Constraint * MakeIsGreaterOrEqualCstCt(IntExpr *const var, int64 value, IntVar *const boolvar)
boolvar == (var >= value)
PropagationBaseObject(Solver *const s)
Definition: constraint_solver.h:3121
This struct holds all parameters for the default search.
Definition: constraint_solver.h:167
Constraint * MakeTemporalDisjunction(IntervalVar *const t1, IntervalVar *const t2, IntVar *const alt)
This constraint implements a temporal disjunction between two interval vars t1 and t2.
This class represents a reversible bitset.
Definition: constraint_solveri.h:435
double offset
Definition: constraint_solver.h:2282
Constraint * MakeSumGreaterOrEqual(const std::vector< IntVar * > &vars, int64 cst)
IntExpr * MakeConvexPiecewiseExpr(IntExpr *expr, int64 early_cost, int64 early_date, int64 late_date, int64 late_cost)
Convex piecewise function.
virtual void BeginVisitExtension(const std::string &type)
LocalSearchOperators
This enum is used in Solver::MakeOperator to specify the neighborhood to create.
Definition: constraint_solver.h:424
@ LE
Move is accepted when the current objective value <= objective.Max.
Definition: constraint_solver.h:594
virtual IntVar * IsGreaterOrEqual(int64 constant)=0
static const char kIsBetween[]
Definition: constraint_solver.h:3322
E * FastAdd(V *var)
Adds element without checking its presence in the container.
Definition: constraint_solver.h:4783
static const char kStartExpr[]
Definition: constraint_solver.h:3361
static const char kGreaterOrEqual[]
Definition: constraint_solver.h:3315
void SetAssigned(int var_index)
@ ASSIGN_RANDOM_VALUE
Selects randomly one of the possible values of the selected variable.
Definition: constraint_solver.h:359
void Post() override
This method is called when the constraint is processed by the solver.
static const char kAllowedAssignments[]
Definition: constraint_solver.h:3292
int64 failures(int n) const
Returns the number of failures encountered at the time of the nth solution.
void Incr(Solver *const s)
Definition: constraint_solver.h:3718
@ ASSIGN_MIN_VALUE
Selects the min value of the selected variable.
Definition: constraint_solver.h:353
void SetObjectiveMin(int64 m)
bool IsLocalSearchProfilingEnabled() const
Returns whether we are profiling local search.
SequenceVarElement()
std::function< std::string()> display_callback
SearchMonitors will display the result of display_callback at each new solution found.
Definition: constraint_solver.h:2285
int64 DurationMin(const IntervalVar *const var) const
Constraint * MakeCircuit(const std::vector< IntVar * > &nexts)
Force the "nexts" variable to create a complete Hamiltonian path.
Constraint * MakeIntervalVarRelationWithDelay(IntervalVar *const t1, BinaryIntervalRelation r, IntervalVar *const t2, int64 delay)
This method creates a relation between two interval vars.
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...
RegularLimit * MakeFailuresLimit(int64 failures)
Creates a search limit that constrains the number of failures that can happen when exploring the sear...
void VisitInt64ToInt64Extension(const Solver::IndexEvaluator1 &eval, int64 index_min, int64 index_max)
const std::vector< int > & Unperformed() const
friend class SearchMonitor
Definition: constraint_solver.h:2901
static const char kCircuit[]
Definition: constraint_solver.h:3297
int initialization_splits
Maximum number of intervals that the initialization of impacts will scan per variable.
Definition: constraint_solver.h:191
@ CHOOSE_MAX_SUM_IMPACT
Definition: constraint_solver.h:170
static const char kDifference[]
Definition: constraint_solver.h:3303
void RankNotLast(int index)
Indicates that the index_th interval var will not be ranked first of all currently unranked interval ...
Constraint * MakeIfThenElseCt(IntVar *const condition, IntExpr *const then_expr, IntExpr *const else_expr, IntVar *const target_var)
Special cases with arrays of size two.
@ ENDS_AFTER_END
t1 ends after t2 end, i.e. End(t1) >= End(t2) + delay.
Definition: constraint_solver.h:619
Search * ActiveSearch() const
Returns the active search, nullptr outside search.
static const char kCountUsedBinsExtension[]
Definition: constraint_solver.h:3374
Base class of all search limits.
Definition: constraint_solver.h:4191
virtual void VisitSetVariableValue(IntVar *const var, int64 value)
virtual void VisitIntegerExpressionArgument(const std::string &arg_name, IntExpr *const argument)
Visit integer expression argument.
void ApplyBound()
Constraint * MakeLexicalLess(const std::vector< IntVar * > &left, const std::vector< IntVar * > &right)
Creates a constraint that enforces that left is lexicographically less than right.
void inhibit(Solver *const s)
This method inhibits the demon in the search tree below the current position.
VariableSelection var_selection_schema
This parameter describes how the next variable to instantiate will be chosen.
Definition: constraint_solver.h:184
void RemoveAllPossibleFromBin(int bin_index)
void RefuteDecision(Decision *const d) override
Before refuting the decision.
Pack * MakePack(const std::vector< IntVar * > &vars, int number_of_bins)
This constraint packs all variables onto 'number_of_bins' variables.
virtual void Post()=0
This method is called when the constraint is processed by the solver.
virtual int64 OldStartMax() const =0
void SetPerformedMax(const IntervalVar *const var, int64 m)
A DecisionBuilder is responsible for creating the search tree.
Definition: constraint_solver.h:3220
void LoadFromProto(const IntVarAssignment &int_var_assignment_proto)
virtual void SetEndRange(int64 mi, int64 ma)=0
bool operator==(const SequenceVarElement &element) const
void SetValue(int64 v)
Definition: constraint_solver.h:4596
virtual void AfterDecision(Decision *const d, bool apply)
Just after refuting or applying the decision, apply is true after Apply.
virtual void Accept(ModelVisitor *const visitor) const
Accepts the given visitor.
Reversible Immutable MultiMap class.
Definition: constraint_solveri.h:288
~Assignment() override
ValueSelection value_selection_schema
This parameter describes which value to select for a given var.
Definition: constraint_solver.h:187
const E & Element(const V *const var) const
Definition: constraint_solver.h:4852
@ 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:416
std::string DebugString() const override
Definition: constraint_solver.h:4058
absl::Time AbsoluteSolverDeadline() const
Definition: constraint_solver.h:4259
static const char kMember[]
Definition: constraint_solver.h:3337
Constraint * MakeGreater(IntExpr *const left, IntExpr *const right)
left > right
void SetObjectiveRange(int64 l, int64 u)
Decision * MakeRankFirstInterval(SequenceVar *const sequence, int index)
Returns a decision that tries to rank first the ith interval var in the sequence variable.
bool Save(const std::string &filename) const
Saves the assignment to a file.
virtual void AppendMonitors(Solver *const solver, std::vector< SearchMonitor * > *const extras)
This method will be called at the start of the search.
NumericalRevArray(int size, const T &val)
Definition: constraint_solver.h:3770
IntExpr * expression
Definition: constraint_solver.h:255
void Copy(const AssignmentContainer< V, E > &container)
Copies all the elements of 'container' to this container, clearing its previous content.
Definition: constraint_solver.h:4828
bool Activated(const IntVar *const var) const
static const char kTrueConstraint[]
Definition: constraint_solver.h:3368
int64 StartValue(const IntervalVar *const var) const
void Deactivate(const IntVar *const var)
std::function< void(Solver *)> Action
Definition: constraint_solver.h:749
IntVar * MakeIsGreaterVar(IntExpr *const left, IntExpr *const right)
status var of (left > right)
void SetStartMin(const IntervalVar *const var, int64 m)
static const char kCumulativeArgument[]
Definition: constraint_solver.h:3394
Decision * MakeDecision(Action apply, Action refute)
DecisionBuilder * MakeSolveOnce(DecisionBuilder *const db)
SolveOnce will collapse a search tree described by a decision builder 'db' and a set of monitors and ...
static const char kSumOperation[]
Definition: constraint_solver.h:3453
static const char kSumEqual[]
Definition: constraint_solver.h:3363
virtual IntVar * IsLessOrEqual(int64 constant)=0
int64 ObjectiveMin() const
static const char kVariableArgument[]
Definition: constraint_solver.h:3445
std::string LocalSearchProfile() const
Returns local search profiling information in a human readable format.
static const char kTrace[]
Definition: constraint_solver.h:3366
@ 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:293
void SetPerformedRange(int64 mi, int64 ma)
Definition: constraint_solver.h:4683
RegularLimit * MakeLimit(int64 time, int64 branches, int64 failures, int64 solutions)
Limits the search with the 'time', 'branches', 'failures' and 'solutions' limits.
@ VAR_PRIORITY
VAR_PRIORITY is between DELAYED_PRIORITY and NORMAL_PRIORITY.
Definition: constraint_solver.h:609
void Reset(SequenceVar *const var)
RegularLimit(Solver *const s, int64 time, int64 branches, int64 failures, int64 solutions, bool smart_time_check, bool cumulative)
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:4891
The vehicle routing library lets one model and solve generic vehicle routing problems ranging from th...
Definition: constraint_solver.h:98
SolutionCollector * MakeNBestValueSolutionCollector(const Assignment *const assignment, int solution_count, bool maximize)
Same as MakeBestValueSolutionCollector but collects the best solution_count solutions.
int64 EndMin(const IntervalVar *const var) const
Constraint * MakeIsLessCt(IntExpr *const left, IntExpr *const right, IntVar *const b)
b == (left < right)
virtual void GetNextSolution(Assignment *const assignment)=0
This method is called when the local search starts a new neighborhood to initialize the default assig...
void BeginNextDecision(DecisionBuilder *const b) override
Before calling DecisionBuilder::Next.
static const char kTraceOperation[]
Definition: constraint_solver.h:3458
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.
virtual void EndInitialPropagation()
After the initial propagation.
static const char kIsEqual[]
Definition: constraint_solver.h:3324
int64 PerformedValue(const IntervalVar *const var) const
bool CheckConstraint(Constraint *const ct)
Checks whether adding this constraint will lead to an immediate failure.
IntVar * MakeIntConst(int64 val, const std::string &name)
IntConst will create a constant expression.
bool IsCastConstraint() const
Is the constraint created by a cast from expression to integer variable?
static const char kIntervalVariable[]
Definition: constraint_solver.h:3320
IntervalVar * RegisterIntervalVar(IntervalVar *const var)
Registers a new IntervalVar and wraps it inside a TraceIntervalVar if necessary.
IntegerCastInfo()
Definition: constraint_solver.h:250
OptimizeVar * MakeWeightedMaximize(const std::vector< IntVar * > &sub_objectives, const std::vector< int64 > &weights, int64 step)
Creates a maximization weigthed objective.
static const char kNotBetween[]
Definition: constraint_solver.h:3343
static const char kIndexArgument[]
Definition: constraint_solver.h:3409
DisplayLevel
Definition: constraint_solver.h:180
void set_variable_to_clean_on_fail(IntVar *v)
Shortcut for variable cleaner.
Definition: constraint_solver.h:3161
void Copy(const Assignment *assignment)
Copies 'assignment' to the current assignment, clearing its previous content.
IntVar * MakeIsLessOrEqualCstVar(IntExpr *const var, int64 value)
status var of (var <= value)
static const char kTargetArgument[]
Definition: constraint_solver.h:3439
std::ostream & operator<<(std::ostream &out, const Solver *const s)
virtual bool AtSolution()
This method is called when a valid solution is found.
SearchMonitor(Solver *const s)
Definition: constraint_solver.h:3591
static const char kGlobalCardinality[]
Definition: constraint_solver.h:3313
LocalSearchOperator * MakeOperator(const std::vector< IntVar * > &vars, LocalSearchOperators op)
Local Search Operators.
bool AcceptSolution() override
This method is called when a solution is found.
IntExpr * MakeModulo(IntExpr *const x, int64 mod)
Modulo expression x % mod (with the python convention for modulo).
virtual int64 OldDurationMax() const =0
std::function< int64(int64, int64, int64)> IndexEvaluator3
Definition: constraint_solver.h:735
int64 StartValue(int n, IntervalVar *const var) const
This is a shortcut to get the StartValue of 'var' in the nth solution.
~Constraint() override
Definition: constraint_solver.h:3539
void EndSearch()
IntVar * variable
Definition: constraint_solver.h:254
int64 DurationValue(int n, IntervalVar *const var) const
This is a shortcut to get the DurationValue of 'var' in the nth solution.
std::string DebugString() const override
int64 branches(int n) const
Returns the number of branches when the nth solution was found.
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.
IntVarStrategy
This enum describes the strategy used to select the next branching variable at each node during the s...
Definition: constraint_solver.h:264
@ 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:364
SearchMonitor * MakeSearchLog(int branch_period)
The SearchMonitors below will display a periodic search log on LOG(INFO) every branch_period branches...
void ShouldFail()
These methods are only useful for the SWIG wrappers, which need a way to externally cause the Solver ...
Definition: constraint_solver.h:2937
Constraint * MakeEquality(IntExpr *const left, IntExpr *const right)
left == right
void desinhibit(Solver *const s)
This method un-inhibits the demon that was previously inhibited.
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....
void SetEndRange(int64 mi, int64 ma)
Definition: constraint_solver.h:4673
void SetBranchSelector(BranchSelector bs)
Sets the given branch selector on the current active search.
static const char kSemiContinuous[]
Definition: constraint_solver.h:3357
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:3800
@ STARTS_AFTER_START
t1 starts after t2 start, i.e. Start(t1) >= Start(t2) + delay.
Definition: constraint_solver.h:634
@ SPLIT_UPPER_HALF
Split the domain in two around the center, and choose the lower part first.
Definition: constraint_solver.h:372
static const char kMinArgument[]
Definition: constraint_solver.h:3418
bool AcceptDelta(Assignment *delta, Assignment *deltadelta) override
Internal methods.
void PopSolution()
Remove and delete the last popped solution.
void reset_action_on_fail()
This method clears the failure callback.
Definition: constraint_solver.h:3158
static const char kRangeArgument[]
Definition: constraint_solver.h:3425
std::unique_ptr< Assignment > prototype_
Definition: constraint_solver.h:4141
virtual void EndVisitExtension(const std::string &type)
void WhenEndBound(Solver::Closure closure)
Definition: constraint_solver.h:4390
static const char kDisjunctive[]
Definition: constraint_solver.h:3304
bool operator!=(const Assignment &assignment) const
Definition: constraint_solver.h:5120
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...
void Store()
Decision * MakeVariableLessOrEqualValue(IntVar *const var, int64 value)
virtual bool Contains(int64 v) const =0
This method returns whether the value 'v' is in the domain of the variable.
std::string DebugString() const
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...
@ 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:335
void SetPerformedMin(int64 m)
Definition: constraint_solver.h:4681
static const char kVariableGroupExtension[]
Definition: constraint_solver.h:3382
Constraint * MakeAllDifferent(const std::vector< IntVar * > &vars)
All variables are pairwise different.
virtual void WhenPerformedBound(Demon *const d)=0
void check_index(int n) const
virtual void RemoveValue(int64 v)=0
This method removes the value 'v' from the domain of the variable.
Constraint * MakeCount(const std::vector< IntVar * > &vars, int64 value, int64 max_count)
|{i | vars[i] == value}| == max_count
static const char kSizeArgument[]
Definition: constraint_solver.h:3430
void PopState()
bool NextSolution()
static const char kIsLess[]
Definition: constraint_solver.h:3327
void WhenStartRange(Solver::Action action)
Definition: constraint_solver.h:4331
Constraint * MakeSumEquality(const std::vector< IntVar * > &vars, int64 cst)
virtual ~BaseObject()
Definition: constraint_solver.h:3107
virtual bool MayBePerformed() const =0
bool operator==(const Assignment &assignment) const
Definition: constraint_solver.h:5114
DemonPriority
This enum represents the three possible priorities for a demon in the Solver queue.
Definition: constraint_solver.h:603
int64 failures() const
The number of failures encountered since the creation of the solver.
Definition: constraint_solver.h:989
bool Bound(const IntVar *const var) const
IntVar * MakeIsGreaterOrEqualCstVar(IntExpr *const var, int64 value)
status var of (var >= value)
void Propagate()
bool Bound() const
Definition: constraint_solver.h:4749
static const char kSumGreaterOrEqual[]
Definition: constraint_solver.h:3364
void SetPerformedMax(int64 m)
Definition: constraint_solver.h:4682
std::string DebugString() const override
Definition: constraint_solver.h:3124
virtual void BeginVisitModel(const std::string &type_name)
--— Virtual methods for visitors --—
virtual IntExpr * DurationExpr()=0
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.
int SearchDepth() const
Gets the search depth of the current active search.
void Reset(IntVar *const var)
bool UseFastLocalSearch() const
Returns true if fast local search is enabled.
Definition: constraint_solver.h:2840
int64 DurationMin() const
Definition: constraint_solver.h:4633
static const char kScalProdLessOrEqual[]
Definition: constraint_solver.h:3356
IntExpr * MakeConditionalExpression(IntVar *const condition, IntExpr *const expr, int64 unperformed_value)
Conditional Expr condition ? expr : unperformed_value.
int64 EndMax() const
Definition: constraint_solver.h:4640
A sequence variable is a variable whose domain is a set of possible orderings of the interval variabl...
Definition: constraint_solver.h:4459
static const char kLinkExprVar[]
Definition: constraint_solver.h:3333
static const char kPerformedExpr[]
Definition: constraint_solver.h:3350
~Solver()
void Incr(Solver *const s, int index)
Definition: constraint_solver.h:3776
void Push(const SolutionData &data)
Definition: constraint_solver.h:4134
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...
void set_action_on_fail(Solver::Action a)
Definition: constraint_solver.h:3152
std::string DebugString() const override
@ 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:301
void SetDurationMin(int64 m)
Definition: constraint_solver.h:4661
bool operator!=(const SequenceVarElement &element) const
Definition: constraint_solver.h:4756
int64 TransitionTime(int before_index, int after_index)
Definition: constraint_solver.h:5266
static const char kDelayedPathCumul[]
Definition: constraint_solver.h:3349
void Copy(const IntervalVarElement &element)
void SetStartMax(int64 m)
Definition: constraint_solver.h:4652
static const char kSequenceVariable[]
Definition: constraint_solver.h:3358
IntVar * Objective() const
int64 accepted_neighbors() const
The number of accepted neighbors.
Definition: constraint_solver.h:998
SolutionCollector * MakeFirstSolutionCollector()
Collect the first solution of the search.
EvaluatorLocalSearchOperators
This enum is used in Solver::MakeOperator associated with an evaluator to specify the neighborhood to...
Definition: constraint_solver.h:562
void SetValue(Solver *const s, int index, const T &val)
Definition: constraint_solver.h:3749
SearchMonitor * MakeExitSearchCallback(std::function< void()> callback)
int64 EndValue(const IntervalVar *const var) const
friend class SearchLimit
Definition: constraint_solver.h:2902
The class IntVar is a subset of IntExpr.
Definition: constraint_solver.h:3949
static const char kCumulsArgument[]
Definition: constraint_solver.h:3395
SolverState
This enum represents the state of the solver w.r.t. the search.
Definition: constraint_solver.h:714
Constraint * MakeIsLessCstCt(IntExpr *const v, int64 c, IntVar *const b)
b == (v < c)
virtual int64 StartMin() const =0
These methods query, set, and watch the start position of the interval var.
virtual int64 OldEndMin() const =0
IntExpr * MakePiecewiseLinearExpr(IntExpr *expr, const PiecewiseLinearFunction &f)
General piecewise-linear function expression, built from f(x) where f is piecewise-linear.
@ PATHLNS
Operator which relaxes two sub-chains of three consecutive arcs each.
Definition: constraint_solver.h:524
static const char kScalProdEqual[]
Definition: constraint_solver.h:3354
void SetStartValue(const IntervalVar *const var, int64 value)
virtual void AcceptNeighbor()
After accepting a neighbor during local search.
virtual void SetDurationMax(int64 m)=0
void Add(Solver *const s, int index, const T &to_add)
Definition: constraint_solver.h:3772
IntExpr * MakeElement(const std::vector< int64 > &values, IntVar *const index)
values[index]
bool Contains(const V *const var) const
Definition: constraint_solver.h:4835
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.
virtual int64 Max() const =0
static const char kCountEqual[]
Definition: constraint_solver.h:3299
int64 EndValue(int n, IntervalVar *const var) const
This is a shortcut to get the EndValue of 'var' in the nth solution.
static const int64 kMinValidValue
The smallest acceptable value to be returned by StartMin()
Definition: constraint_solver.h:4308
virtual void SetEndMin(int64 m)=0
bool Contains(const IntVar *const var) const
LocalSearchMonitor * GetLocalSearchMonitor() const
Returns the local search monitor.
DecisionBuilder * decision_builder
When defined, this overrides the default impact based decision builder.
Definition: constraint_solver.h:221
void WhenPerformedBound(Solver::Closure closure)
Definition: constraint_solver.h:4410
std::string DebugString() const override
virtual bool AcceptSolution()
This method is called when a solution is found.
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...
void ClearAll()
virtual void WhenDurationRange(Demon *const d)=0
static const char kVariableUsageLessConstantExtension[]
Definition: constraint_solver.h:3383
IntVarElement * FastAdd(IntVar *const var)
Adds without checking if variable has been previously added.
bool CannotBePerformed() const
Definition: constraint_solver.h:4403
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,...
Constraint * MakeIsGreaterOrEqualCt(IntExpr *const left, IntExpr *const right, IntVar *const b)
b == (left >= right)
virtual void VisitRankLastInterval(SequenceVar *const sequence, int index)
A Decision represents a choice point in the search tree.
Definition: constraint_solver.h:3180
int64 EndMax(const IntervalVar *const var) const
static const char kTimeLimitArgument[]
Definition: constraint_solver.h:3440
The base class for all local search operators.
Definition: constraint_solveri.h:805
int64 wall_time(int n) const
Returns the wall time in ms for the nth solution.
static const char kSequenceArgument[]
Definition: constraint_solver.h:3428
static const char kDurationMinArgument[]
Definition: constraint_solver.h:3398
static const char kTransition[]
Definition: constraint_solver.h:3367
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...
void SetUnassigned(int var_index)
void SetBackwardSequence(const SequenceVar *const var, const std::vector< int > &backward_sequence)
static const char kAllDifferent[]
Definition: constraint_solver.h:3291
SolutionData BuildSolutionDataForCurrentState()
bool HasName() const
Returns whether the object has been named or not.
virtual bool IsUncheckedSolutionLimitReached()
Returns true if the limit of solutions has been reached including unchecked solutions.
Definition: constraint_solver.h:3658
VariableSelection
Definition: constraint_solver.h:169
void BeginNextDecision(DecisionBuilder *const db) override
Before calling DecisionBuilder::Next.
void SetUnperformed(const std::vector< int > &unperformed)
void InitialPropagate() override
This method performs the initial propagation of the constraint.
E * MutableElement(int index)
Definition: constraint_solver.h:4866
@ CHOOSE_RANDOM
Randomly select one of the remaining unbound variables.
Definition: constraint_solver.h:277
Decision * MakeAssignVariableValue(IntVar *const var, int64 val)
Decisions.
static const char kBetween[]
Definition: constraint_solver.h:3295
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).
static const char kInversePermutation[]
Definition: constraint_solver.h:3321
std::function< bool(int64, int64, int64)> VariableValueComparator
Definition: constraint_solver.h:746
virtual bool LocalOptimum()
When a local optimum is reached.
virtual void Accept(ModelVisitor *const visitor) const
Accepts the given visitor.
SearchLimit * MakeCustomLimit(std::function< bool()> limiter)
Callback-based search limit.
Subclass of Rev<T> which adds numerical operations.
Definition: constraint_solver.h:3710
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:797
static const char kStartSyncOnEndOperation[]
Definition: constraint_solver.h:3457
void SetObjectiveValue(int64 value)
IntExpr * MakeIndexExpression(const std::vector< IntVar * > &vars, int64 value)
Returns the expression expr such that vars[expr] == value.
bool operator<(const SolutionData &other) const
Definition: constraint_solver.h:4125
static const char kLeftArgument[]
Definition: constraint_solver.h:3415
void PushState()
The PushState and PopState methods manipulates the states of the reversible objects.
bool Check() override
This method is called to check the status of the limit.
Decision * MakeRankLastInterval(SequenceVar *const sequence, int index)
Returns a decision that tries to rank last the ith interval var in the sequence variable.
@ CHOOSE_LOWEST_MIN
Among unbound variables, select the variable with the smallest minimal value.
Definition: constraint_solver.h:315
const T & operator[](int index) const
Definition: constraint_solver.h:3746
static const char kExpressionArgument[]
Definition: constraint_solver.h:3404
void Copy(const SequenceVarElement &element)
static const char kStartMinArgument[]
Definition: constraint_solver.h:3436
void SetAssignmentFromAssignment(Assignment *target_assignment, const std::vector< IntVar * > &target_vars, const Assignment *source_assignment, const std::vector< IntVar * > &source_vars)
NOLINT.
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...
DisjunctiveConstraint(Solver *const s, const std::vector< IntervalVar * > &intervals, const std::string &name)
@ EXTENDEDSWAPACTIVE
Operator which makes an inactive node active and an active one inactive.
Definition: constraint_solver.h:515
@ EQ
Move is accepted when the current objective value is in the interval objective.Min .
Definition: constraint_solver.h:597
const T & Value(int index) const
Definition: constraint_solver.h:3743
ValueSelection
Definition: constraint_solver.h:175
Cast constraints are special channeling constraints designed to keep a variable in sync with an expre...
Definition: constraint_solver.h:3572
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.
bool operator!=(const AssignmentContainer< V, E > &container) const
Definition: constraint_solver.h:4910
virtual void Copy(const SearchLimit *const limit)=0
Copy a limit.
const std::vector< IntervalVar * > intervals_
Definition: constraint_solver.h:5279
DecisionBuilder * MakeStoreAssignment(Assignment *assignment)
Returns a DecisionBuilder which stores an Assignment (calls void Assignment::Store())
@ 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:285
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...
const E & Element(int index) const
Definition: constraint_solver.h:4867
static const char kCumulative[]
Definition: constraint_solver.h:3301
LocalSearchFilter * MakeRejectFilter()
void Decr(Solver *const s, int index)
Definition: constraint_solver.h:3778
static const char kEndMaxArgument[]
Definition: constraint_solver.h:3401
~SolutionPool() override
Definition: constraint_solver.h:5291
IntVar(Solver *const s)
bool IsPossible(int var_index, int bin_index) const
void SetValue(Solver *const s, const T &val)
Definition: constraint_solver.h:3693
const IntervalContainer & IntervalVarContainer() const
Definition: constraint_solver.h:5102
virtual int ProgressPercent()
Returns a percentage representing the propress of the search before reaching limits.
Definition: constraint_solver.h:3667
Demon * MakeConstraintInitialPropagateCallback(Constraint *const ct)
This method is a specialized case of the MakeConstraintDemon method to call the InitiatePropagate of ...
bool use_last_conflict
Should we use last conflict method. The default is false.
Definition: constraint_solver.h:218
DecisionBuilder * MakeApplyBranchSelector(BranchSelector bs)
Creates a decision builder that will set the branch selector.
void WriteToProto(IntVarAssignment *int_var_assignment_proto) const
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...
bool NameAllVariables() const
Returns whether all variables should be named.
DecisionBuilder * MakeConstraintAdder(Constraint *const ct)
Returns a decision builder that will add the given constraint to the model.
static const char kTuplesArgument[]
Definition: constraint_solver.h:3442
@ CHOOSE_RANDOM_RANK_FORWARD
Definition: constraint_solver.h:404
static const char kEvaluatorArgument[]
Definition: constraint_solver.h:3447
void Copy(const SearchLimit *const limit) override
Copy a limit.
Implements a complete cache for model elements: expressions and constraints.
Definition: constraint_solveri.h:2055
int64 PerformedMin() const
Definition: constraint_solver.h:4645
OptimizeVar * MakeMinimize(IntVar *const v, int64 step)
Creates a minimization objective.
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...
OptimizationDirection optimization_direction() const
The direction of optimization, getter and setter.
Definition: constraint_solver.h:1008
Constraint * MakeIsLessOrEqualCt(IntExpr *const left, IntExpr *const right, IntVar *const b)
b == (left <= right)
This class is the root class of all solution collectors.
Definition: constraint_solver.h:4053
virtual IntVarIterator * MakeDomainIterator(bool reversible) const =0
Creates a domain iterator.
@ ENDS_AT_START
t1 ends at t2 start, i.e. End(t1) == Start(t2) + delay.
Definition: constraint_solver.h:628
Constraint * MakeMapDomain(IntVar *const var, const std::vector< IntVar * > &actives)
This constraint maps the domain of 'var' onto the array of variables 'actives'.
static const char kPositionXArgument[]
Definition: constraint_solver.h:3423
static const char kBranchesLimitArgument[]
Definition: constraint_solver.h:3389
static const char kLess[]
Definition: constraint_solver.h:3330
void SetPerformedRange(const IntervalVar *const var, int64 mi, int64 ma)
virtual bool SyncNeeded(Assignment *const local_assignment)=0
This method checks if the local solution needs to be updated with an external one.
bool AtSolution() override
This method is called when a valid solution is found.
void CopyIntersection(const Assignment *assignment)
Copies the intersection of the two assignments to the current assignment.
static const char kConvexPiecewise[]
Definition: constraint_solver.h:3298
OptimizeVar * MakeMaximize(IntVar *const v, int64 step)
Creates a maximization objective.
@ CHOOSE_PATH
Selects the next unbound variable on a path, the path being defined by the variables: var[i] correspo...
Definition: constraint_solver.h:339
void OneDomain(int var_index)
AssignmentElement()
Definition: constraint_solver.h:4552
void PeriodicCheck() override
Periodic call to check limits in long running methods.
@ UNACTIVELNS
Operator which relaxes all inactive nodes and one sub-chain of six consecutive arcs.
Definition: constraint_solver.h:533
void SetEndMin(int64 m)
Definition: constraint_solver.h:4671
bool IsProfilingEnabled() const
Returns whether we are profiling the solver.
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,...
virtual int64 Min() const =0
virtual Solver::DemonPriority priority() const
This method returns the priority of the demon.
static const char kFixedChargeArgument[]
Definition: constraint_solver.h:3407
friend void InternalSaveBooleanVarValue(Solver *const, IntVar *const)
static const char kCountAssignedItemsExtension[]
Extension names:
Definition: constraint_solver.h:3373
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.
virtual void Accept(DecisionVisitor *const visitor) const
Accepts the given visitor.
int64 StartMax(const IntervalVar *const var) const
static Iterator Begin(IntVarIterator *it)
These are the only way to construct an Iterator.
Definition: constraint_solver.h:3911
virtual void VisitIntervalArrayArgument(const std::string &arg_name, const std::vector< IntervalVar * > &arguments)
static const char kSortingConstraint[]
Definition: constraint_solver.h:3359
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 ...
static const char kIsLessOrEqual[]
Definition: constraint_solver.h:3328
static const char kSearchLimitExtension[]
Definition: constraint_solver.h:3378
void WhenStartBound(Solver::Closure closure)
Definition: constraint_solver.h:4336
int64 Rand64(int64 size)
Returns a random value between 0 and 'size' - 1;.
Definition: constraint_solver.h:2786
static const char kInt64ToInt64Extension[]
Definition: constraint_solver.h:3376
static const char kPack[]
Definition: constraint_solver.h:3347
void SetEndValue(const IntervalVar *const var, int64 value)
static const char kRelationArgument[]
Definition: constraint_solver.h:3426
virtual IntVarIterator * MakeHoleIterator(bool reversible) const =0
Creates a hole iterator.
DecisionBuilder()
Definition: constraint_solver.h:3222
IntVar * MakeIsLessOrEqualVar(IntExpr *const left, IntExpr *const right)
status var of (left <= right)
IntVar * MakeIsEqualCstVar(IntExpr *const var, int64 value)
status var of (var == value)
virtual bool MustBePerformed() const =0
These methods query, set, and watch the performed status of the interval var.
OptimizeVar * MakeWeightedMinimize(const std::vector< IntVar * > &sub_objectives, const std::vector< int64 > &weights, int64 step)
Creates a minimization weighted objective.
Assignment * solution
Definition: constraint_solver.h:4120
SearchMonitor * MakeAtSolutionCallback(std::function< void()> callback)
void SetDurationValue(const IntervalVar *const var, int64 value)
virtual void WhenDomain(Demon *d)=0
This method attaches a demon that will watch any domain modification of the domain of the variable.
virtual int64 Value() const =0
This method returns the current value of the iterator.
int random_seed
Seed used to initialize the random part in some heuristics.
Definition: constraint_solver.h:211
Constraint * MakeBetweenCt(IntExpr *const expr, int64 l, int64 u)
(l <= expr <= u)
int64 ObjectiveValue() const
bool Activated() const
Definition: constraint_solver.h:4556
bool ActivatedObjective() const
static const char kPathCumul[]
Definition: constraint_solver.h:3348
int heuristic_num_failures_limit
The failure limit for each heuristic that we run.
Definition: constraint_solver.h:204
static const char kSquare[]
Definition: constraint_solver.h:3360
absl::Duration duration_limit() const
Definition: constraint_solver.h:4246
@ DECREMENT
Operator which defines a neighborhood to decrement values.
Definition: constraint_solver.h:548
std::function< void()> Closure
Definition: constraint_solver.h:750
IntContainer * MutableIntVarContainer()
Definition: constraint_solver.h:5101
int constraints() const
Counts the number of constraints that have been added to the solver before the search.
Definition: constraint_solver.h:2817
static const char kNotMember[]
Definition: constraint_solver.h:3344
void Clear()
void WriteToProto(SequenceVarAssignment *sequence_var_assignment_proto) const
static const char kIntervalUnaryRelation[]
Definition: constraint_solver.h:3319
virtual void WhenStartBound(Demon *const d)=0
DecisionBuilder * MakeRestoreAssignment(Assignment *assignment)
Returns a DecisionBuilder which restores an Assignment (calls void Assignment::Restore())
static const char kFinalStatesArgument[]
Definition: constraint_solver.h:3406
friend class DemonProfiler
Definition: constraint_solver.h:2896
virtual void VisitScheduleOrPostpone(IntervalVar *const var, int64 est)
static const char kCountArgument[]
Definition: constraint_solver.h:3393
int64 time
Definition: constraint_solver.h:4121
void DurationRange(int64 *const dmin, int64 *const dmax) const
Returns the minimum and maximum duration of combined interval vars in the sequence.
int32 Rand32(int32 size)
Returns a random value between 0 and 'size' - 1;.
Definition: constraint_solver.h:2792
static const int kNoProgress
Definition: constraint_solver.h:3589
@ ASSIGN_MAX_VALUE
Selects the max value of the selected variable.
Definition: constraint_solver.h:356
virtual IntExpr * StartExpr()=0
These methods create expressions encapsulating the start, end and duration of the interval var.
int64 solutions() const
Definition: constraint_solver.h:4254
@ SELECT_MAX_IMPACT
Definition: constraint_solver.h:177
virtual void WhenStartRange(Demon *const d)=0
bool HasObjective() const
Definition: constraint_solver.h:4992
Constraint * maintainer
Definition: constraint_solver.h:256
IntVarLocalSearchFilter * MakeSumObjectiveFilter(const std::vector< IntVar * > &vars, IndexEvaluator2 values, Solver::LocalSearchFilterBound filter_enum)
static const char kEndsArgument[]
Definition: constraint_solver.h:3403
virtual void BeginNextDecision(DecisionBuilder *const b)
Before calling DecisionBuilder::Next.
~SearchLimit() override
virtual void SetRange(int64 l, int64 u)
This method sets both the min and the max of the expression.
Definition: constraint_solver.h:3805
@ SWAPACTIVE
Operator which replaces an active node by an inactive one.
Definition: constraint_solver.h:503
void AddObjective(IntVar *const objective)
void clear_fail_intercept()
Definition: constraint_solver.h:2830
virtual int64 OldEndMax() const =0
The class IntExpr is the base of all integer expressions in constraint programming.
Definition: constraint_solver.h:3788
void WhenEndRange(Solver::Action action)
Definition: constraint_solver.h:4385
SearchLimit(Solver *const s)
Definition: constraint_solver.h:4193
bool IsProduct(IntExpr *const expr, IntExpr **inner_expr, int64 *coefficient)
Returns true if expr represents a product of a expr and a constant.
Constraint * MakeSumLessOrEqual(const std::vector< IntVar * > &vars, int64 cst)
Variation on arrays.
void SetDurationMax(int64 m)
Definition: constraint_solver.h:4662
void set_optimization_direction(OptimizationDirection direction)
Definition: constraint_solver.h:1011
static const char kSequencesArgument[]
Definition: constraint_solver.h:3429
int64 Value(int n, IntVar *const var) const
This is a shortcut to get the Value of 'var' in the nth solution.
virtual void VisitIntegerVariableArrayArgument(const std::string &arg_name, const std::vector< IntVar * > &arguments)
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...
virtual SequenceVar * MakeSequenceVar()=0
Creates a sequence variable from the constraint.
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.
OptimizeVar * MakeOptimize(bool maximize, IntVar *const v, int64 step)
Creates a objective with a given sense (true = maximization).
void SetDurationRange(int64 mi, int64 ma)
Definition: constraint_solver.h:4663
virtual void VisitUnknownDecision()
void AddLocalSearchMonitor(LocalSearchMonitor *monitor)
Adds the local search monitor to the solver.
virtual void SetStartMax(int64 m)=0
@ CHOOSE_HIGHEST_MAX
Among unbound variables, select the variable with the highest maximal value.
Definition: constraint_solver.h:321
SequenceVarElement * Clone()
std::vector< Assignment * > recycle_solutions_
Definition: constraint_solver.h:4143
SearchMonitor * MakeSearchTrace(const std::string &prefix)
Creates a search monitor that will trace precisely the behavior of the search.
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:3997
@ 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:419
static const char kFailuresLimitArgument[]
Definition: constraint_solver.h:3405
std::vector< SolutionData > solution_data_
Definition: constraint_solver.h:4142
Constraint * MakeNonEquality(IntExpr *const left, IntExpr *const right)
left != right
static const char kEndMinArgument[]
Definition: constraint_solver.h:3402
std::string DebugString() const override
Definition: constraint_solver.h:3191
virtual int64 StartMax() const =0
void EnterSearch() override
Beginning of the search.
void WhenBound(Solver::Closure closure)
This method attaches a closure that will be awakened when the variable is bound.
Definition: constraint_solver.h:3980
virtual const std::vector< IntVar * > & time_slacks() const =0
void PostAndPropagate()
Calls Post and then Propagate to initialize the constraints.
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...
void Init() override
This method is called when the search limit is initialized.
bool CheckAssignment(Assignment *const solution)
Checks whether the given assignment satisfies all relevant constraints.
void PropagateDelayed()
Constraint * MakeNotMemberCt(IntExpr *const expr, const std::vector< int64 > &values)
expr not in set.
void DeactivateObjective()
static const char kModuloArgument[]
Definition: constraint_solver.h:3419
@ FULLPATHLNS
Operator which relaxes one entire path and all inactive nodes, thus defining num_paths neighbors.
Definition: constraint_solver.h:528
int64 filtered_neighbors() const
The number of filtered neighbors (neighbors accepted by filters).
Definition: constraint_solver.h:995
SolutionPool * MakeDefaultSolutionPool()
Solution Pool.
virtual void RefuteDecision(Decision *const d)
Before refuting the decision.
A search monitor is a simple set of callbacks to monitor all search events.
Definition: constraint_solver.h:3587
int64 PerformedMin(const IntervalVar *const var) const
@ SPLIT_LOWER_HALF
Split the domain in two around the center, and choose the lower part first.
Definition: constraint_solver.h:368
static const char kStartSyncOnStartOperation[]
Definition: constraint_solver.h:3456
void AddCountUsedBinDimension(IntVar *const count_var)
This dimension links 'count_var' to the actual number of bins used in the pack.
const std::vector< int > & ForwardSequence(const SequenceVar *const var) const
const std::vector< int > & BackwardSequence() const
static const char kNoCycle[]
Definition: constraint_solver.h:3341
IntVar *const target_var_
Definition: constraint_solver.h:3583
static const char kSumLessOrEqual[]
Definition: constraint_solver.h:3365
void SetDurationMax(const IntervalVar *const var, int64 m)
Constraint * MakeNoCycle(const std::vector< IntVar * > &nexts, const std::vector< IntVar * > &active, IndexFilter1 sink_handler=nullptr)
Prevent cycles.
~RegularLimit() override
void Copy(const IntVarElement &element)
SearchMonitor * MakeEnterSearchCallback(std::function< void()> callback)
--— Callback-based search monitors --—
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.
virtual void EndNextDecision(DecisionBuilder *const b, Decision *const d)
After calling DecisionBuilder::Next, along with the returned decision.
Constraint * MakeAllDifferentExcept(const std::vector< IntVar * > &vars, int64 escape_value)
All variables are pairwise different, unless they are assigned to the escape value.
void SetEndMax(int64 m)
Definition: constraint_solver.h:4672
static const char kConditionalExpr[]
Definition: constraint_solver.h:3296
Constraint * MakeAtMost(std::vector< IntVar * > vars, int64 value, int64 max_count)
|{i | vars[i] == value}| <= max_count
std::function< int64(const IntVar *v, int64 id)> VariableValueSelector
Definition: constraint_solver.h:745
virtual void WhenEndRange(Demon *const d)=0
static const char kTransitsArgument[]
Definition: constraint_solver.h:3441
IntExpr * MakeMax(const std::vector< IntVar * > &vars)
std::max(vars)
~IntVarIterator() override
Definition: constraint_solver.h:3868
virtual bool Check()=0
This method is called to check the status of the limit.
void Resize(size_t size)
Advanced usage: Resizes the container, potentially adding elements with null variables.
Definition: constraint_solver.h:4802
static const char kRelaxedMinOperation[]
Definition: constraint_solver.h:3452
int NumIntVars() const
Definition: constraint_solver.h:4969
int64 failures() const
Definition: constraint_solver.h:4253
SolutionCollector * MakeLastSolutionCollector()
Collect the last solution of the search.
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...
static const char kOptionalArgument[]
Definition: constraint_solver.h:3421
~SequenceVar() override
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.
IntegerCastInfo(IntVar *const v, IntExpr *const e, Constraint *const c)
Definition: constraint_solver.h:252
bool HasName(const PropagationBaseObject *object) const
Returns whether the object has been named or not.
void FinishCurrentSearch()
Tells the solver to kill or restart the current search.
virtual void InitialPropagate()=0
This method performs the initial propagation of the constraint.
std::string DebugString() const override
std::string DebugString() const override
bool InstrumentsDemons() const
Returns whether we are instrumenting demons.
std::function< int64(Solver *solver, const std::vector< IntVar * > &vars, int64 first_unbound, int64 last_unbound)> VariableIndexSelector
Definition: constraint_solver.h:743
static const char kRightArgument[]
Definition: constraint_solver.h:3427
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.
void Accept(ModelVisitor *const visitor) const override
Accepts the given model visitor.
virtual void SetMax(int64 m)=0
SolutionCollector * MakeAllSolutionCollector()
Collect all solutions of the search.
IntervalVar * MakeIntervalRelaxedMin(IntervalVar *const interval_var)
Creates and returns an interval variable that wraps around the given one, relaxing the min start and ...
IntervalVarElement * Clone()
DecisionBuilder * Compose(DecisionBuilder *const db1, DecisionBuilder *const db2)
Creates a decision builder which sequentially composes decision builders.
static Iterator End(IntVarIterator *it)
Definition: constraint_solver.h:3914
BinaryIntervalRelation
This enum is used in Solver::MakeIntervalVarRelation to specify the temporal relation between the two...
Definition: constraint_solver.h:617
void SetStartMax(const IntervalVar *const var, int64 m)
DisjunctiveConstraint * MakeDisjunctiveConstraint(const std::vector< IntervalVar * > &intervals, const std::string &name)
This constraint forces all interval vars into an non-overlapping sequence.
SequenceVar(Solver *const s, const std::vector< IntervalVar * > &intervals, const std::vector< IntVar * > &nexts, const std::string &name)
static const char kIntervalDisjunction[]
Definition: constraint_solver.h:3318
static const char kValuesArgument[]
Definition: constraint_solver.h:3444
virtual bool AcceptDelta(Assignment *delta, Assignment *deltadelta)
DecisionVisitor()
Definition: constraint_solver.h:3203
IntVar * MakeIsGreaterOrEqualVar(IntExpr *const left, IntExpr *const right)
status var of (left >= right)
@ REVERSIBLE_ACTION
Definition: constraint_solver.h:711
DecisionBuilder * MakePhase(const std::vector< IntVar * > &vars, IntVarStrategy var_str, IntValueStrategy val_str)
Phases on IntVar arrays.
int TopProgressPercent()
Returns a percentage representing the propress of the search before reaching the limits of the top-le...
virtual void SetDurationMin(int64 m)=0
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...
std::string SearchContext() const
void Fail()
Abandon the current branch in the search tree. A backtrack will follow.
IntervalStrategy
This enum describes the straregy used to select the next interval variable and its value to be fixed.
Definition: constraint_solver.h:409
void PushSolution()
Push the current state as a new solution.
virtual std::string DebugString() const
Definition: constraint_solver.h:3108
SearchMonitor * MakeLubyRestart(int scale_factor)
This search monitor will restart the search periodically.
virtual void Accept(ModelVisitor *const visitor) const =0
Accepts the given visitor.
int64 wall_time() const
Definition: constraint_solver.h:4247
void WhenAnything(Demon *const d)
Attaches a demon awakened when anything about this interval changes.
static const char kDeviation[]
Definition: constraint_solver.h:3302
static const char kWeightedSumOfAssignedEqualVariableExtension[]
Definition: constraint_solver.h:3384
@ CHOOSE_MIN_SLACK_RANK_FORWARD
Definition: constraint_solver.h:403
Constraint * MakeMemberCt(IntExpr *const expr, const std::vector< int64 > &values)
expr in set.
~OptimizeVar() override
static const char kVarValueWatcher[]
Definition: constraint_solver.h:3370
virtual void SetValue(int64 v)
This method sets the value of the expression.
Definition: constraint_solver.h:3811
static const char kCoefficientsArgument[]
Definition: constraint_solver.h:3392
virtual void VisitIntegerVariable(const IntVar *const variable, IntExpr *const delegate)
Constraint * MakeElementEquality(const std::vector< int64 > &vals, IntVar *const index, IntVar *const target)
virtual void SetEndMax(int64 m)=0
A symmetry breaker is an object that will visit a decision and create the 'symmetrical' decision in r...
Definition: constraint_solveri.h:1978
virtual IntExpr * SafeDurationExpr(int64 unperformed_value)=0
Usual limit based on wall_time, number of explored branches and number of failures in the search tree...
Definition: constraint_solver.h:4233
IntVar * MakeIsLessCstVar(IntExpr *const var, int64 value)
status var of (var < value)
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...
~ModelVisitor() override
uint64 fail_stamp() const
The fail_stamp() is incremented after each backtrack.
Constraint * MakeFalseConstraint()
This constraint always fails.
IntExpr * MakeSum(IntExpr *const left, IntExpr *const right)
left + right.
const std::vector< E > & elements() const
Definition: constraint_solver.h:4865
static const char kIndexOf[]
Definition: constraint_solver.h:3294
DecisionBuilder * MakeDefaultPhase(const std::vector< IntVar * > &vars)
virtual void NoMoreSolutions()
When the search tree is finished.
static const char kFalseConstraint[]
Definition: constraint_solver.h:3312
virtual void WhenRange(Demon *d)=0
Attach a demon that will watch the min or the max of the expression.
friend class FindOneNeighbor
Definition: constraint_solver.h:2897
void AssignAllPossibleToBin(int bin_index)
bool IsAssignedStatusKnown(int var_index) const
Constraint * MakeIsEqualCstCt(IntExpr *const var, int64 value, IntVar *const boolvar)
boolvar == (var == value)
IntVar * RegisterIntVar(IntVar *const var)
Registers a new IntVar and wraps it inside a TraceIntVar if necessary.
@ CHOOSE_MAX_AVERAGE_IMPACT
Definition: constraint_solver.h:171
DECLARE_int64(cp_random_seed)
Declaration of the core objects for the constraint solver.
InitAndGetValues(IntVarIterator *it)
Definition: constraint_solver.h:3895
A constraint is the main modeling object.
Definition: constraint_solver.h:3536
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.
static const char kMinEqual[]
Definition: constraint_solver.h:3339
int64 PerformedValue(int n, IntervalVar *const var) const
This is a shortcut to get the PerformedValue of 'var' in the nth solution.
virtual void BeginVisitIntegerExpression(const std::string &type_name, const IntExpr *const expr)
void UpdateLimits(int64 time, int64 branches, int64 failures, int64 solutions)
IntervalVar * Interval(int index) const
Returns the index_th interval of the sequence.
static const char kProduct[]
Definition: constraint_solver.h:3352
Decision * MakeVariableGreaterOrEqualValue(IntVar *const var, int64 value)
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:208
virtual void VisitScheduleOrExpedite(IntervalVar *const var, int64 est)
int64 branches
Definition: constraint_solver.h:4122
IntVar * target_var() const
Definition: constraint_solver.h:3580
int64 Max(const IntVar *const var) const
AssignmentContainer< IntVar, IntVarElement > IntContainer
Definition: constraint_solver.h:4951
IntVarElement * Add(IntVar *const var)
void SetMin(const IntVar *const var, int64 m)
virtual void VisitIntegerVariableEvaluatorArgument(const std::string &arg_name, const Solver::Int64ToIntVar &arguments)
Helpers.
Decision * MakeAssignVariableValueOrFail(IntVar *const var, int64 value)
Solver * solver() const
Definition: constraint_solver.h:3131
IntVar * MakeIsGreaterCstVar(IntExpr *const var, int64 value)
status var of (var > value)
LocalSearchFilter * MakeAcceptFilter()
Local Search Filters.
static const char kUsageLessConstantExtension[]
Definition: constraint_solver.h:3381
@ RELOCATE
Relocate neighborhood with length of 1 (see OROPT comment).
Definition: constraint_solver.h:453
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.
virtual void EndVisitConstraint(const std::string &type_name, const Constraint *const constraint)
Demon * MakeDelayedConstraintInitialPropagateCallback(Constraint *const ct)
This method is a specialized case of the MakeConstraintDemon method to call the InitiatePropagate of ...
void UnfreezeQueue()
This method unfreezes the propagation queue.
Definition: constraint_solver.h:3139
IntExpr * MakeProd(IntExpr *const left, IntExpr *const right)
left * right
int64 solutions() const
The number of solutions found since the start of the search.
Holds semantic information stating that the 'expression' has been cast into 'variable' using the Var(...
Definition: constraint_solver.h:249
Local Search Filters are used for fast neighbor pruning.
Definition: constraint_solveri.h:1724
bool InstrumentsVariables() const
Returns whether we are tracing variables.
~CastConstraint() override
Definition: constraint_solver.h:3578
void AssignAllRemainingItems()
void Assign(int var_index, int bin_index)
DecisionBuilder * MakeLocalSearchPhase(Assignment *const assignment, LocalSearchPhaseParameters *const parameters)
Local Search decision builders factories.
virtual void Initialize(Assignment *const assignment)=0
This method is called to initialize the solution pool with the assignment from the local search.
T * RevAlloc(T *object)
Registers the given object as being reversible.
Definition: constraint_solver.h:786
DefaultPhaseParameters()
static const char kOpposite[]
Definition: constraint_solver.h:3346
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...
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,...
int SearchLeftDepth() const
Gets the search left depth of the current active search.
static const char kAtMost[]
Definition: constraint_solver.h:3293
void Restore()
CastConstraint(Solver *const solver, IntVar *const target_var)
Definition: constraint_solver.h:3574
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...
const SequenceContainer & SequenceVarContainer() const
Definition: constraint_solver.h:5108
virtual void Apply(Solver *const s)=0
Apply will be called first when the decision is executed.
virtual void Run(Solver *const s)=0
This is the main callback of the demon.
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:4790
SequenceVar * Var() const
Definition: constraint_solver.h:4733
This class represent a reversible FIFO structure.
Definition: constraint_solver.h:156
int64 size() const
Returns the number of interval vars in the sequence.
Definition: constraint_solver.h:4535
static const char kValueArgument[]
Definition: constraint_solver.h:3443
ModelVisitor * MakeStatisticsModelVisitor()
Displays some nice statistics on the model.
virtual int64 OldDurationMin() const =0
int64 failures
Definition: constraint_solver.h:4123
void SetSequence(const std::vector< int > &forward_sequence, const std::vector< int > &backward_sequence, const std::vector< int > &unperformed)
static const char kMaxArgument[]
Definition: constraint_solver.h:3416
virtual void Init()=0
This method must be called before each loop.
DisplayLevel display_level
This represents the amount of information displayed by the default search.
Definition: constraint_solver.h:215
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.
Matrix version of the RevBitSet class.
Definition: constraint_solveri.h:470
@ CHOOSE_MAX_SIZE
Among unbound variables, select the variable with the highest size.
Definition: constraint_solver.h:331
IntExpr * MakeScalProd(const std::vector< IntVar * > &vars, const std::vector< int64 > &coefs)
scalar product
SolutionCollector(Solver *const solver, const Assignment *assignment)
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.
int64 branches() const
Definition: constraint_solver.h:4252
void ExportProfilingOverview(const std::string &filename)
Exports the profiling information in a human readable overview.
void VisitInt64ToInt64AsArray(const Solver::IndexEvaluator1 &eval, const std::string &arg_name, int64 index_max)
Expands function as array when index min is 0.
void SetRange(const IntVar *const var, int64 l, int64 u)
IntVarElement()
const std::vector< int > & BackwardSequence(const SequenceVar *const var) const
void RankFirst(int index)
Ranks the index_th interval var first of all unranked interval vars.
Decision * MakeAssignVariablesValues(const std::vector< IntVar * > &vars, const std::vector< int64 > &values)
void AssignFirstPossibleToBin(int bin_index)
void Accept(ModelVisitor *const visitor) const
Accepts the given model visitor.
@ CHOOSE_MIN_SIZE
Among unbound variables, select the variable with the smallest size.
Definition: constraint_solver.h:326
bool operator==(const IntVarElement &element) const
void FreeSolution(Assignment *solution)
UnaryIntervalRelation
This enum is used in Solver::MakeIntervalVarRelation to specify the temporal relation between an inte...
Definition: constraint_solver.h:650
IntVar * VarWithName(const std::string &name)
Creates a variable from the expression and set the name of the resulting var.
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...
IntervalVar * MakeIntervalRelaxedMax(IntervalVar *const interval_var)
Creates and returns an interval variable that wraps around the given one, relaxing the max start and ...
static const char kSizeXArgument[]
Definition: constraint_solver.h:3431
Constraint * MakeIsGreaterCstCt(IntExpr *const v, int64 c, IntVar *const b)
b == (v > c)
IntVar * MakeBoolVar()
MakeBoolVar will create a variable with a {0, 1} domain.
virtual void SetMin(int64 m)=0
std::string DebugString() const
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...
An Assignment is a variable -> domains mapping, used to report solutions to the user.
Definition: constraint_solver.h:4949
int64 DurationValue() const
Definition: constraint_solver.h:4635
AssignmentContainer< IntervalVar, IntervalVarElement > IntervalContainer
Definition: constraint_solver.h:4953
RegularLimitParameters MakeDefaultRegularLimitParameters() const
Creates a regular limit proto containing default values.
static const char kElement[]
Definition: constraint_solver.h:3308
void SetForwardSequence(const std::vector< int > &forward_sequence)
DecisionModification
The Solver is responsible for creating the search tree.
Definition: constraint_solver.h:685
bool Solve(DecisionBuilder *const db, const std::vector< SearchMonitor * > &monitors)
static ConstraintSolverParameters DefaultSolverParameters()
Create a ConstraintSolverParameters proto with all the default values.
void NewSearch(DecisionBuilder *const db, const std::vector< SearchMonitor * > &monitors)
IntExpr * CastExpression(const IntVar *const var) const
!defined(SWIG)
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.
virtual int64 EndMin() const =0
These methods query, set, and watch the end position of the interval var.
static const char kIntervalBinaryRelation[]
Definition: constraint_solver.h:3317
static const char kIsGreater[]
Definition: constraint_solver.h:3325
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.
@ SELECT_MIN_IMPACT
Definition: constraint_solver.h:176
void Add(Solver *const s, const T &to_add)
Definition: constraint_solver.h:3714
int64 PerformedMax() const
Definition: constraint_solver.h:4646
IntVar * Next(int index) const
Returns the next of the index_th interval of the sequence.
void SetUnperformed(const SequenceVar *const var, const std::vector< int > &unperformed)
bool ObjectiveBound() const
int64 branches() const
The number of branches explored since the creation of the solver.
Definition: constraint_solver.h:977
virtual void BeginInitialPropagation()
Before the initial propagation.
virtual void Install()
Registers itself on the solver such that it gets notified of the search and propagation events.
void Activate(const IntVar *const var)
virtual IntExpr * PerformedExpr()=0
virtual void AcceptUncheckedNeighbor()
After accepting an unchecked neighbor during local search.
void RestartSearch()
IntVar * MakeIsDifferentVar(IntExpr *const v1, IntExpr *const v2)
status var of (v1 != v2)
static const char kNonEqual[]
Definition: constraint_solver.h:3342
virtual void Accept(ModelVisitor *const visitor) const
~SearchMonitor() override
Definition: constraint_solver.h:3592
int64 DurationMax() const
Definition: constraint_solver.h:4634
static const char kEquality[]
Definition: constraint_solver.h:3311
~DecisionVisitor() override
Definition: constraint_solver.h:3204
void SetPerformedMin(const IntervalVar *const var, int64 m)
bool operator==(const IntervalVarElement &element) const
Constraint * MakeIsBetweenCt(IntExpr *const expr, int64 l, int64 u, IntVar *const b)
b == (l <= expr <= u)
virtual void VisitSplitVariableDomain(IntVar *const var, int64 value, bool start_with_lower_half)
int64 ObjectiveMax() const
bool operator!=(const IntVarElement &element) const
Definition: constraint_solver.h:4603
static const int64 kMaxValidValue
The largest acceptable value to be returned by EndMax()
Definition: constraint_solver.h:4310
void SetEndMin(const IntervalVar *const var, int64 m)
virtual Decision * Next(Solver *const s)=0
This is the main method of the decision builder class.
This class encapsulates an objective.
Definition: constraint_solver.h:4156
virtual void VisitIntegerMatrixArgument(const std::string &arg_name, const IntTupleSet &tuples)
IntExpr * MakeDiv(IntExpr *const expr, int64 value)
expr / value (integer division)
Constraint * MakeIsDifferentCstCt(IntExpr *const var, int64 value, IntVar *const boolvar)
boolvar == (var != value)
std::string DebugString() const
void Accept(ModelVisitor *const visitor) const override
Accepts the given model visitor.
virtual int64 DurationMax() const =0
Constraint * MakeIntervalVarRelation(IntervalVar *const t, UnaryIntervalRelation r, int64 d)
This method creates a relation between an interval var and a date.
void set_fail_intercept(std::function< void()> fail_intercept)
Internal.
Definition: constraint_solver.h:2826
void ClearObjective()
Definition: constraint_solver.h:4990
void SetStartRange(const IntervalVar *const var, int64 mi, int64 ma)
PropagationMonitor * GetPropagationMonitor() const
Returns the propagation monitor.
@ CHOOSE_STATIC_GLOBAL_BEST
Pairs are compared at the first call of the selector, and results are cached.
Definition: constraint_solver.h:390
virtual int64 EndMax() const =0
virtual void BeginVisitConstraint(const std::string &type_name, const Constraint *const constraint)
void Deactivate()
Definition: constraint_solver.h:4555
void SetDurationMin(const IntervalVar *const var, int64 m)
Solver * solver() const
Definition: constraint_solver.h:3660
void Restore()
OptimizeVar(Solver *const s, bool maximize, IntVar *const a, int64 step)
void SetEndRange(const IntervalVar *const var, int64 mi, int64 ma)
Subclass of RevArray<T> which adds numerical operations.
Definition: constraint_solver.h:3768
void SetEndMax(const IntervalVar *const var, int64 m)
static const char kMaxEqual[]
Definition: constraint_solver.h:3336
virtual void RegisterNewSolution(Assignment *const assignment)=0
This method is called when a new solution has been accepted by the local search.
Assignment * GetOrCreateLocalSearchState()
Returns (or creates) an assignment representing the state of local search.
static const char kModulo[]
Definition: constraint_solver.h:3340
virtual bool WasPerformedBound() const =0
The SequenceVarElement stores a partial representation of ranked interval variables in the underlying...
Definition: constraint_solver.h:4726
static const char kAbsEqual[]
Definition: constraint_solver.h:3290
void WhenDurationBound(Solver::Action action)
Definition: constraint_solver.h:4367
bool Load(const std::string &filename)
Loads an assignment from a file; does not add variables to the assignment (only the variables contain...
Iterator & operator++()
Definition: constraint_solver.h:3922
Constraint * MakeScalProdEquality(const std::vector< IntVar * > &vars, const std::vector< int64 > &coefficients, int64 cst)
static const char kElementEqual[]
Definition: constraint_solver.h:3309
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.
IntExpr * MakeMonotonicElement(IndexEvaluator1 values, bool increasing, IntVar *const index)
Function based element.
void SetPerformedValue(int64 v)
Definition: constraint_solver.h:4687
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|.
@ NORMAL_PRIORITY
NORMAL_PRIORITY is the highest priority: Demons will be processed first.
Definition: constraint_solver.h:612
EvaluatorStrategy
This enum is used by Solver::MakePhase to specify how to select variables and values during the searc...
Definition: constraint_solver.h:385
void SetSequence(const SequenceVar *const var, const std::vector< int > &forward_sequence, const std::vector< int > &backward_sequence, const std::vector< int > &unperformed)
Constraint * MakeTrueConstraint()
This constraint always succeeds.
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...
void SetStartMin(int64 m)
Definition: constraint_solver.h:4651
virtual void ApplyDecision(Decision *const d)
Before applying the decision.
void WhenPerformedBound(Solver::Action action)
Definition: constraint_solver.h:4414
static const char kDivide[]
Definition: constraint_solver.h:3306
LocalSearchFilter * MakeVariableDomainFilter()
static const char kRelaxedMaxOperation[]
Definition: constraint_solver.h:3451
void WhenDurationRange(Solver::Closure closure)
Definition: constraint_solver.h:4354
bool CurrentlyInSolve() const
Returns true whether the current search has been created using a Solve() call instead of a NewSearch ...
void WhenDurationRange(Solver::Action action)
Definition: constraint_solver.h:4358
E * MutableElement(const V *const var)
Definition: constraint_solver.h:4839
void SetPerformedValue(const IntervalVar *const var, int64 value)
void WhenStartRange(Solver::Closure closure)
Definition: constraint_solver.h:4327
const E * ElementPtrOrNull(const V *const var) const
Definition: constraint_solver.h:4858
static const char kNullIntersect[]
Definition: constraint_solver.h:3345
static const char kPositionYArgument[]
Definition: constraint_solver.h:3424
void WhenDurationBound(Solver::Closure closure)
Definition: constraint_solver.h:4363
void Accept(ModelVisitor *const visitor) const override
Accepts the given visitor.
AssignmentContainer()
Definition: constraint_solver.h:4772
virtual void WhenBound(Demon *d)=0
This method attaches a demon that will be awakened when the variable is bound.
MarkerType
This enum is used internally in private methods Solver::PushState and Solver::PopState to tag states ...
Definition: constraint_solver.h:711
int64 objective_value
Definition: constraint_solver.h:4124
Constraint * MakeIsLessOrEqualCstCt(IntExpr *const var, int64 value, IntVar *const boolvar)
boolvar == (var <= value)
void set_name(const std::string &name)
const std::vector< int > & ForwardSequence() const
std::string DebugString() const override
Decision * balancing_decision() const
Definition: constraint_solver.h:2822
static const char kIsGreaterOrEqual[]
Definition: constraint_solver.h:3326
int64 StartMin(const IntervalVar *const var) const
IntervalVarElement()
Assignment * solution(int n) const
Returns the nth solution.
std::function< int64(int64, int64)> IndexEvaluator2
Definition: constraint_solver.h:734
virtual const std::vector< IntVar * > & time_cumuls() const =0
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...
static const char kMapDomain[]
Definition: constraint_solver.h:3334
virtual void SetStartMin(int64 m)=0
virtual void VisitSequenceArgument(const std::string &arg_name, SequenceVar *const argument)
Visit sequence argument.
virtual void Next()=0
This method moves the iterator to the next value.
Constraint * MakeIsDifferentCt(IntExpr *const v1, IntExpr *const v2, IntVar *const b)
b == (v1 != v2)
IntExpr * RegisterIntExpr(IntExpr *const expr)
Registers a new IntExpr and wraps it inside a TraceIntExpr if necessary.
@ CHOOSE_DYNAMIC_GLOBAL_BEST
Pairs are compared each time a variable is selected.
Definition: constraint_solver.h:396
~SolutionCollector() override
void WhenRange(Solver::Closure closure)
Attach a demon that will watch the min or the max of the expression.
Definition: constraint_solver.h:3831
IntVar * MakeIsMemberVar(IntExpr *const expr, const std::vector< int64 > &values)
virtual void SetDurationRange(int64 mi, int64 ma)=0
Constraint * MakeLessOrEqual(IntExpr *const left, IntExpr *const right)
left <= right
Constraint * MakeGreaterOrEqual(IntExpr *const left, IntExpr *const right)
left >= right
virtual void EndVisitModel(const std::string &type_name)
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...
bool run_all_heuristics
The default phase will run heuristics periodically.
Definition: constraint_solver.h:196
IntVar * MakeIsBetweenVar(IntExpr *const v, int64 l, int64 u)
virtual void WhenDurationBound(Demon *const d)=0
void WriteToProto(IntervalVarAssignment *interval_var_assignment_proto) const
static const char kDifferenceOperation[]
Definition: constraint_solver.h:3454
A Demon is the base element of a propagation queue.
Definition: constraint_solver.h:3253
void Decr(Solver *const s)
Definition: constraint_solver.h:3720
Interval variables are often used in scheduling.
Definition: constraint_solver.h:4305
static const char kIndex2Argument[]
Definition: constraint_solver.h:3408
void SetImpossible(int var_index, int bin_index)
void EnqueueVar(Demon *const d)
Definition: constraint_solver.h:3145
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...
virtual void PeriodicCheck()
Periodic call to check limits in long running methods.
virtual std::string Print() const
virtual void SetPerformed(bool val)=0
This is the base class for all expressions that are not variables.
Definition: constraint_solveri.h:109
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:2281
int64 operator*() const
Definition: constraint_solver.h:3918
static const char kScalProd[]
Definition: constraint_solver.h:3353
Constraint * MakeIsGreaterCt(IntExpr *const left, IntExpr *const right, IntVar *const b)
b == (left > right)
Creates a search monitor from logging parameters.
Definition: constraint_solver.h:2270
IntExpr * MakeDifference(IntExpr *const left, IntExpr *const right)
left - right
void SetUseFastLocalSearch(bool use_fast_local_search)
enabled for metaheuristics.
Definition: constraint_solver.h:2836
bool IsPerformedBound() const
Definition: constraint_solver.h:4404
LocalSearchOperator * ConcatenateOperators(const std::vector< LocalSearchOperator * > &ops)
Creates a local search operator which concatenates a vector of operators.
void SetMax(const IntVar *const var, int64 m)
void RankNotFirst(int index)
Indicates that the index_th interval var will not be ranked first of all currently unranked interval ...
int64 EndMin() const
Definition: constraint_solver.h:4639
SearchMonitor * MakeSymmetryManager(const std::vector< SymmetryBreaker * > &visitors)
Symmetry Breaking.
Decision * MakeSplitVariableDomain(IntVar *const var, int64 val, bool start_with_lower_half)
@ GE
Move is accepted when the current objective value >= objective.Min.
Definition: constraint_solver.h:592
AssignmentContainer< SequenceVar, SequenceVarElement > SequenceContainer
Definition: constraint_solver.h:4955
@ ENDS_AFTER_START
t1 ends after t2 start, i.e. End(t1) >= Start(t2) + delay.
Definition: constraint_solver.h:622
LocalSearchOperator * MakeNeighborhoodLimit(LocalSearchOperator *const op, int64 limit)
Creates a local search operator that wraps another local search operator and limits the number of nei...
static const char kProductOperation[]
Definition: constraint_solver.h:3455
static const char kSolutionLimitArgument[]
Definition: constraint_solver.h:3434
void SetBackwardSequence(const std::vector< int > &backward_sequence)
DisjunctiveConstraint * MakeStrictDisjunctiveConstraint(const std::vector< IntervalVar * > &intervals, const std::string &name)
This constraint forces all interval vars into an non-overlapping sequence.
static const char kLessOrEqual[]
Definition: constraint_solver.h:3331
virtual void Refute(Solver *const s)=0
Refute will be called after a backtrack.
virtual int64 DurationMin() const =0
These methods query, set, and watch the duration of the interval var.
static const char kDurationExpr[]
Definition: constraint_solver.h:3307
@ MAKECHAININACTIVE
Operator which makes a "chain" of path nodes inactive.
Definition: constraint_solver.h:496
virtual void VisitSequenceArrayArgument(const std::string &arg_name, const std::vector< SequenceVar * > &arguments)
RegularLimit * MakeSolutionsLimit(int64 solutions)
Creates a search limit that constrains the number of solutions found during the search.
int64 PerformedMax(const IntervalVar *const var) const
void SetDurationRange(const IntervalVar *const var, int64 mi, int64 ma)
virtual void SetStartRange(int64 mi, int64 ma)=0
LocalSearchOperator * MakeMoveTowardTargetOperator(const Assignment &target)
Creates a local search operator that tries to move the assignment of some variables toward a target.
void Accept(ModelVisitor *const visitor) const override
Accepts the given visitor.
static const char kIntegerVariable[]
Definition: constraint_solver.h:3316
static const char kDistribute[]
Definition: constraint_solver.h:3305
int64 StartValue() const
Definition: constraint_solver.h:4629
static const char kLateDateArgument[]
Definition: constraint_solver.h:3414
RegularLimit * MakeTimeLimit(int64 time_in_ms)
Creates a search limit that constrains the running time given in milliseconds.
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.
E * MutableElementOrNull(const V *const var)
Definition: constraint_solver.h:4845
A DecisionVisitor is used to inspect a decision.
Definition: constraint_solver.h:3201
SearchMonitor * MakeSimulatedAnnealing(bool maximize, IntVar *const v, int64 step, int64 initial_temperature)
Creates a Simulated Annealing monitor.
virtual const std::vector< IntVar * > & actives() const =0
void WhenStartBound(Solver::Action action)
Definition: constraint_solver.h:4340
bool found_initial_solution_
Definition: constraint_solver.h:4184
static const char kCapacityArgument[]
Definition: constraint_solver.h:3390
int ProgressPercent() override
Returns a percentage representing the propress of the search before reaching limits.
@ STARTS_AT_START
t1 starts at t2 start, i.e. Start(t1) == Start(t2) + delay.
Definition: constraint_solver.h:640
virtual void Accept(ModelVisitor *const visitor) const
Accepts the given visitor.
This class adds reversibility to a POD type.
Definition: constraint_solver.h:3687
static const char kDemandsArgument[]
Definition: constraint_solver.h:3396
friend class LocalSearchProfiler
Definition: constraint_solver.h:2904
virtual void VisitIntegerArrayArgument(const std::string &arg_name, const std::vector< int64 > &values)
void SetRange(int64 l, int64 u)
Definition: constraint_solver.h:4592
SequenceContainer * MutableSequenceVarContainer()
Definition: constraint_solver.h:5111
virtual void Init()=0
This method is called when the search limit is initialized.
void TopPeriodicCheck()
Performs PeriodicCheck on the top-level search; for instance, can be called from a nested solve to ch...
Demon * RegisterDemon(Demon *const demon)
Adds a new demon and wraps it inside a DemonProfiler if necessary.
virtual void SetValues(const std::vector< int64 > &values)
This method intersects the current domain with the values in the array.
int64 StartMax() const
Definition: constraint_solver.h:4628
virtual IntExpr * SafeEndExpr(int64 unperformed_value)=0
void Store()
RevArray(int size, const T &val)
Definition: constraint_solver.h:3731
int64 Value(const IntVar *const var) const
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...
virtual SearchLimit * MakeClone() const =0
Allocates a clone of the limit.
Constraint * MakeMaxEquality(const std::vector< IntVar * > &vars, IntVar *const max_var)
void UnassignAllRemainingItems()
int64 unchecked_solutions() const
The number of unchecked solutions found by local search.
bool AreAllElementsBound() const
Definition: constraint_solver.h:5084
Constraint * MakeIsEqualCt(IntExpr *const v1, IntExpr *v2, IntVar *const b)
b == (v1 == v2)
void SetStartRange(int64 mi, int64 ma)
Definition: constraint_solver.h:4653
Constraint * MakeScalProdLessOrEqual(const std::vector< IntVar * > &vars, const std::vector< int64 > &coefficients, int64 cst)
std::function< bool(int64)> IndexFilter1
Definition: constraint_solver.h:737
virtual IntVar * Var()
Creates a Boolean variable representing the status of the constraint (false = constraint is violated,...
virtual void VisitRankFirstInterval(SequenceVar *const sequence, int index)
int heuristic_period
The distance in nodes between each run of the heuristics.
Definition: constraint_solver.h:201
bool IsBooleanVar(IntExpr *const expr, IntVar **inner_var, bool *is_negated) const
Returns true if expr represents either boolean_var or 1 - boolean_var.
int64 objective_value(int n) const
Returns the objective value of the nth solution.
IntVar * AssignVar(int var_index, int bin_index) const
virtual IntExpr * EndExpr()=0
virtual void VisitIntervalArgument(const std::string &arg_name, IntervalVar *const argument)
Visit interval argument.
RegularLimit * MakeBranchesLimit(int64 branches)
Creates a search limit that constrains the number of branches explored in the search tree.
int64 Min(const IntVar *const var) const
static const char kCover[]
Definition: constraint_solver.h:3300
std::function< DecisionModification()> BranchSelector
Definition: constraint_solver.h:747
static const char kStartsArgument[]
Definition: constraint_solver.h:3437
static const char kUsageEqualVariableExtension[]
Definition: constraint_solver.h:3379
~IntervalVar() override
Definition: constraint_solver.h:4315