C++ Reference
C++ Reference: Routing
constraint_solver.h
Go to the documentation of this file.
426 };
564 };
590 };
604 };
652 };
684 };
713 };
733 };
1756 Constraint* MakeMapDomain(IntVar* const var,
bool AreAllElementsBound() const
Definition: constraint_solver.h:5103
E * MutableElement(const V *const var)
Definition: constraint_solver.h:5061
E * MutableElementOrNull(const V *const var)
Definition: constraint_solver.h:5067
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:5113
const E * ElementPtrOrNull(const V *const var) const
Definition: constraint_solver.h:5080
const std::vector< E > & elements() const
Definition: constraint_solver.h:5087
bool Contains(const V *const var) const
Definition: constraint_solver.h:5057
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:5012
const E & Element(int index) const
Definition: constraint_solver.h:5089
void Copy(const AssignmentContainer< V, E > &container)
Copies all the elements of 'container' to this container, clearing its previous content.
Definition: constraint_solver.h:5050
bool operator!=(const AssignmentContainer< V, E > &container) const
Definition: constraint_solver.h:5132
AssignmentContainer()
Definition: constraint_solver.h:4994
E * MutableElement(int index)
Definition: constraint_solver.h:5088
const E & Element(const V *const var) const
Definition: constraint_solver.h:5074
void CopyIntersection(const AssignmentContainer< V, E > &container)
Copies the elements of 'container' which are already in the calling container.
Definition: constraint_solver.h:5028
bool Empty() const
Definition: constraint_solver.h:5025
void Resize(size_t size)
Advanced usage: Resizes the container, potentially adding elements with null variables.
Definition: constraint_solver.h:5024
E * FastAdd(V *var)
Adds element without checking its presence in the container.
Definition: constraint_solver.h:5005
void Deactivate()
Definition: constraint_solver.h:4777
bool Activated() const
Definition: constraint_solver.h:4778
AssignmentElement()
Definition: constraint_solver.h:4774
An Assignment is a variable -> domains mapping, used to report solutions to the user.
Definition: constraint_solver.h:5171
bool ActivatedObjective() const
IntVarElement * Add(IntVar *const var)
bool Activated(const IntervalVar *const var) const
void SetForwardSequence(const SequenceVar *const var, const std::vector< int > &forward_sequence)
void SetStartRange(const IntervalVar *const var, int64_t mi, int64_t ma)
void Deactivate(const IntVar *const var)
IntContainer * MutableIntVarContainer()
Definition: constraint_solver.h:5327
int64_t EndMin(const IntervalVar *const var) const
bool Save(File *file) const
int64_t PerformedMin(const IntervalVar *const var) const
int64_t EndMax(const IntervalVar *const var) const
void Restore()
void SetBackwardSequence(const SequenceVar *const var, const std::vector< int > &backward_sequence)
int64_t StartMax(const IntervalVar *const var) const
const IntContainer & IntVarContainer() const
Definition: constraint_solver.h:5326
bool AreAllElementsBound() const
Definition: constraint_solver.h:5310
void SetStartMin(const IntervalVar *const var, int64_t m)
SequenceVarElement * Add(SequenceVar *const var)
int64_t DurationMin(const IntervalVar *const var) const
int64_t EndValue(const IntervalVar *const var) const
int64_t ObjectiveMax() const
Assignment(Solver *const s)
void SetRange(const IntVar *const var, int64_t l, int64_t u)
const SequenceContainer & SequenceVarContainer() const
Definition: constraint_solver.h:5334
void Deactivate(const SequenceVar *const var)
AssignmentContainer< SequenceVar, SequenceVarElement > SequenceContainer
Definition: constraint_solver.h:5177
int NumSequenceVars() const
Definition: constraint_solver.h:5193
void ActivateObjective()
void Store()
bool Activated(const SequenceVar *const var) const
int64_t StartValue(const IntervalVar *const var) const
void ClearObjective()
Definition: constraint_solver.h:5216
bool Contains(const SequenceVar *const var) const
const std::vector< int > & Unperformed(const SequenceVar *const var) const
void SetObjectiveValue(int64_t value)
IntervalVarElement * Add(IntervalVar *const var)
void Add(const std::vector< SequenceVar * > &vars)
void SetObjectiveMax(int64_t m)
bool Load(const std::string &filename)
Loads an assignment from a file; does not add variables to the assignment (only the variables contain...
void SetMax(const IntVar *const var, int64_t m)
const std::vector< int > & ForwardSequence(const SequenceVar *const var) const
void SetDurationMin(const IntervalVar *const var, int64_t m)
int64_t PerformedValue(const IntervalVar *const var) const
int64_t DurationMax(const IntervalVar *const var) const
IntervalVarElement * FastAdd(IntervalVar *const var)
Adds without checking if variable has been previously added.
bool Contains(const IntVar *const var) const
void SetEndRange(const IntervalVar *const var, int64_t mi, int64_t ma)
void Add(const std::vector< IntVar * > &vars)
void Activate(const SequenceVar *const var)
bool Contains(const IntervalVar *const var) const
int64_t ObjectiveValue() const
bool Activated(const IntVar *const var) const
bool Save(const std::string &filename) const
Saves the assignment to a file.
void Add(const std::vector< IntervalVar * > &vars)
void SetPerformedRange(const IntervalVar *const var, int64_t mi, int64_t ma)
int64_t DurationValue(const IntervalVar *const var) const
const std::vector< int > & BackwardSequence(const SequenceVar *const var) const
bool HasObjective() const
Definition: constraint_solver.h:5218
~Assignment() override
void SetDurationRange(const IntervalVar *const var, int64_t mi, int64_t ma)
void AddObjective(IntVar *const v)
Definition: constraint_solver.h:5211
void SetEndMin(const IntervalVar *const var, int64_t m)
void SetValue(const IntVar *const var, int64_t value)
void Activate(const IntVar *const var)
void DeactivateObjective()
int64_t ObjectiveMin() const
void SetDurationMax(const IntervalVar *const var, int64_t m)
SequenceContainer * MutableSequenceVarContainer()
Definition: constraint_solver.h:5337
int64_t Max(const IntVar *const var) const
int64_t Value(const IntVar *const var) const
void SetStartMax(const IntervalVar *const var, int64_t m)
void SetPerformedMax(const IntervalVar *const var, int64_t m)
bool Load(File *file)
IntervalContainer * MutableIntervalVarContainer()
Definition: constraint_solver.h:5331
void SetUnperformed(const SequenceVar *const var, const std::vector< int > &unperformed)
void SetObjectiveRange(int64_t l, int64_t u)
void SetMin(const IntVar *const var, int64_t m)
void Clear()
int64_t PerformedMax(const IntervalVar *const var) const
void SetObjectiveMin(int64_t m)
void Deactivate(const IntervalVar *const var)
bool operator==(const Assignment &assignment) const
Definition: constraint_solver.h:5340
void SetDurationValue(const IntervalVar *const var, int64_t value)
void CopyIntersection(const Assignment *assignment)
Copies the intersection of the two assignments to the current assignment.
int NumIntervalVars() const
Definition: constraint_solver.h:5192
void SetEndValue(const IntervalVar *const var, int64_t value)
bool ObjectiveBound() const
AssignmentContainer< IntervalVar, IntervalVarElement > IntervalContainer
Definition: constraint_solver.h:5175
SequenceVarElement * FastAdd(SequenceVar *const var)
Adds without checking if the variable had been previously added.
void SetStartValue(const IntervalVar *const var, int64_t value)
void Activate(const IntervalVar *const var)
void SetEndMax(const IntervalVar *const var, int64_t m)
void SetPerformedValue(const IntervalVar *const var, int64_t value)
void SetPerformedMin(const IntervalVar *const var, int64_t m)
void Load(const AssignmentProto &assignment_proto)
#if !defined(SWIG)
void Copy(const Assignment *assignment)
Copies 'assignment' to the current assignment, clearing its previous content.
AssignmentContainer< IntVar, IntVarElement > IntContainer
Definition: constraint_solver.h:5173
void SetSequence(const SequenceVar *const var, const std::vector< int > &forward_sequence, const std::vector< int > &backward_sequence, const std::vector< int > &unperformed)
int NumIntVars() const
Definition: constraint_solver.h:5191
IntVarElement * FastAdd(IntVar *const var)
Adds without checking if variable has been previously added.
IntVar * Objective() const
Definition: constraint_solver.h:5217
const IntervalContainer & IntervalVarContainer() const
Definition: constraint_solver.h:5328
bool Bound(const IntVar *const var) const
std::string DebugString() const override
int64_t Min(const IntVar *const var) const
void Save(AssignmentProto *const assignment_proto) const
Assignment(const Assignment *const copy)
int64_t StartMin(const IntervalVar *const var) const
bool operator!=(const Assignment &assignment) const
Definition: constraint_solver.h:5346
A BaseObject is the root of all reversibly allocated objects.
Definition: constraint_solver.h:3247
virtual std::string DebugString() const
Definition: constraint_solver.h:3251
virtual ~BaseObject()
Definition: constraint_solver.h:3250
Cast constraints are special channeling constraints designed to keep a variable in sync with an expre...
Definition: constraint_solver.h:3741
IntVar * target_var() const
Definition: constraint_solver.h:3749
~CastConstraint() override
Definition: constraint_solver.h:3747
IntVar *const target_var_
Definition: constraint_solver.h:3752
CastConstraint(Solver *const solver, IntVar *const target_var)
Definition: constraint_solver.h:3743
A constraint is the main modeling object.
Definition: constraint_solver.h:3705
~Constraint() override
Definition: constraint_solver.h:3708
void PostAndPropagate()
Calls Post and then Propagate to initialize the constraints.
bool IsCastConstraint() const
Is the constraint created by a cast from expression to integer variable?
virtual void InitialPropagate()=0
This method performs the initial propagation of the constraint.
virtual IntVar * Var()
Creates a Boolean variable representing the status of the constraint (false = constraint is violated,...
Constraint(Solver *const solver)
Definition: constraint_solver.h:3707
std::string DebugString() const override
virtual void Post()=0
This method is called when the constraint is processed by the solver.
virtual void Accept(ModelVisitor *const visitor) const
Accepts the given visitor.
A DecisionBuilder is responsible for creating the search tree.
Definition: constraint_solver.h:3363
virtual Decision * Next(Solver *const s)=0
This is the main method of the decision builder class.
virtual void AppendMonitors(Solver *const solver, std::vector< SearchMonitor * > *const extras)
This method will be called at the start of the search.
std::string GetName() const
DecisionBuilder()
Definition: constraint_solver.h:3365
~DecisionBuilder() override
Definition: constraint_solver.h:3366
void set_name(const std::string &name)
Definition: constraint_solver.h:3382
std::string DebugString() const override
virtual void Accept(ModelVisitor *const visitor) const
A Decision represents a choice point in the search tree.
Definition: constraint_solver.h:3323
virtual void Apply(Solver *const s)=0
Apply will be called first when the decision is executed.
virtual void Accept(DecisionVisitor *const visitor) const
Accepts the given visitor.
virtual void Refute(Solver *const s)=0
Refute will be called after a backtrack.
std::string DebugString() const override
Definition: constraint_solver.h:3334
A DecisionVisitor is used to inspect a decision.
Definition: constraint_solver.h:3344
~DecisionVisitor() override
Definition: constraint_solver.h:3347
virtual void VisitScheduleOrExpedite(IntervalVar *const var, int64_t est)
virtual void VisitSetVariableValue(IntVar *const var, int64_t value)
virtual void VisitSplitVariableDomain(IntVar *const var, int64_t value, bool start_with_lower_half)
virtual void VisitRankLastInterval(SequenceVar *const sequence, int index)
virtual void VisitRankFirstInterval(SequenceVar *const sequence, int index)
virtual void VisitUnknownDecision()
virtual void VisitScheduleOrPostpone(IntervalVar *const var, int64_t est)
DecisionVisitor()
Definition: constraint_solver.h:3346
A Demon is the base element of a propagation queue.
Definition: constraint_solver.h:3420
void inhibit(Solver *const s)
This method inhibits the demon in the search tree below the current position.
void desinhibit(Solver *const s)
This method un-inhibits the demon that was previously inhibited.
virtual Solver::DemonPriority priority() const
This method returns the priority of the demon.
std::string DebugString() const override
virtual void Run(Solver *const s)=0
This is the main callback of the demon.
const std::vector< IntervalVar * > intervals_
Definition: constraint_solver.h:5505
virtual const std::vector< IntVar * > & time_cumuls() const =0
int64_t TransitionTime(int before_index, int after_index)
Definition: constraint_solver.h:5492
virtual const std::vector< IntVar * > & actives() const =0
virtual SequenceVar * MakeSequenceVar()=0
Creates a sequence variable from the constraint.
~DisjunctiveConstraint() override
virtual const std::vector< IntVar * > & nexts() const =0
DisjunctiveConstraint(Solver *const s, const std::vector< IntervalVar * > &intervals, const std::string &name)
void SetTransitionTime(Solver::IndexEvaluator2 transition_time)
Add a transition time between intervals.
virtual const std::vector< IntVar * > & time_slacks() const =0
Solver::IndexEvaluator2 transition_time_
Definition: constraint_solver.h:5506
void Install() override
Registers itself on the solver such that it gets notified of the search and propagation events.
void Init() override
This method is called when the search limit is initialized.
~ImprovementSearchLimit() override
void Copy(const SearchLimit *const limit) override
Copy a limit.
bool AtSolution() override
This method is called when a valid solution is found.
bool CheckWithOffset(absl::Duration offset) override
Same as Check() but adds the 'offset' value to the current time when time is considered in the limit.
SearchLimit * MakeClone() const override
Allocates a clone of the limit.
ImprovementSearchLimit(Solver *const s, IntVar *objective_var, bool maximize, double objective_scaling_factor, double objective_offset, double improvement_rate_coefficient, int improvement_rate_solutions_distance)
Utility class to encapsulate an IntVarIterator and use it in a range-based loop.
Definition: constraint_solver.h:4066
InitAndGetValues(IntVarIterator *it)
Definition: constraint_solver.h:4068
The class IntExpr is the base of all integer expressions in constraint programming.
Definition: constraint_solver.h:3961
virtual void SetRange(int64_t l, int64_t u)
This method sets both the min and the max of the expression.
Definition: constraint_solver.h:3978
void WhenRange(Solver::Closure closure)
Attach a demon that will watch the min or the max of the expression.
Definition: constraint_solver.h:4004
virtual bool Bound() const
Returns true if the min and the max of the expression are equal.
Definition: constraint_solver.h:3987
IntVar * VarWithName(const std::string &name)
Creates a variable from the expression and set the name of the resulting var.
virtual void SetValue(int64_t v)
This method sets the value of the expression.
Definition: constraint_solver.h:3984
virtual bool IsVar() const
Returns true if the expression is indeed a variable.
Definition: constraint_solver.h:3990
virtual int64_t Min() const =0
virtual void SetMax(int64_t m)=0
virtual void SetMin(int64_t m)=0
virtual int64_t Max() const =0
virtual void Range(int64_t *l, int64_t *u)
By default calls Min() and Max(), but can be redefined when Min and Max code can be factorized.
Definition: constraint_solver.h:3973
virtual void WhenRange(Demon *d)=0
Attach a demon that will watch the min or the max of the expression.
void WhenRange(Solver::Action action)
Attach a demon that will watch the min or the max of the expression.
Definition: constraint_solver.h:4010
virtual void Accept(ModelVisitor *const visitor) const
Accepts the given visitor.
void Copy(const IntVarElement &element)
void SetMax(int64_t m)
Definition: constraint_solver.h:4807
bool operator!=(const IntVarElement &element) const
Definition: constraint_solver.h:4825
void SetMin(int64_t m)
Definition: constraint_solver.h:4805
void Reset(IntVar *const var)
bool operator==(const IntVarElement &element) const
IntVarElement * Clone()
IntVarElement(IntVar *const var)
IntVarElement()
std::string DebugString() const
void WriteToProto(IntVarAssignment *int_var_assignment_proto) const
void LoadFromProto(const IntVarAssignment &int_var_assignment_proto)
void SetValue(int64_t v)
Definition: constraint_solver.h:4818
void SetRange(int64_t l, int64_t u)
Definition: constraint_solver.h:4814
The class IntVar is a subset of IntExpr.
Definition: constraint_solver.h:4123
virtual bool Contains(int64_t v) const =0
This method returns whether the value 'v' is in the domain of the variable.
virtual IntVar * IsDifferent(int64_t constant)=0
virtual IntVar * IsGreaterOrEqual(int64_t constant)=0
virtual void RemoveValue(int64_t v)=0
This method removes the value 'v' from the domain of the variable.
void WhenBound(Solver::Closure closure)
This method attaches a closure that will be awakened when the variable is bound.
Definition: constraint_solver.h:4154
IntVar(Solver *const s)
virtual void WhenBound(Demon *d)=0
This method attaches a demon that will be awakened when the variable is bound.
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:4171
virtual IntVarIterator * MakeHoleIterator(bool reversible) const =0
Creates a hole iterator.
virtual void RemoveValues(const std::vector< int64_t > &values)
This method remove the values from the domain of the variable.
virtual IntVar * IsLessOrEqual(int64_t constant)=0
void WhenDomain(Solver::Action action)
This method attaches an action that will watch any domain modification of the domain of the variable.
Definition: constraint_solver.h:4177
virtual void SetValues(const std::vector< int64_t > &values)
This method intersects the current domain with the values in the array.
void Accept(ModelVisitor *const visitor) const override
Accepts the given visitor.
virtual IntVarIterator * MakeDomainIterator(bool reversible) const =0
Creates a domain iterator.
virtual void RemoveInterval(int64_t l, int64_t u)=0
This method removes the interval 'l' .
virtual void WhenDomain(Demon *d)=0
This method attaches a demon that will watch any domain modification of the domain of the variable.
IntVar(Solver *const s, const std::string &name)
virtual int64_t Value() const =0
This method returns the value of the variable.
void WhenBound(Solver::Action action)
This method attaches an action that will be awakened when the variable is bound.
Definition: constraint_solver.h:4161
virtual int VarType() const
bool IsVar() const override
Returns true if the expression is indeed a variable.
Definition: constraint_solver.h:4129
virtual uint64_t Size() const =0
This method returns the number of values in the domain of the variable.
The class Iterator has two direct subclasses.
Definition: constraint_solver.h:4039
virtual void Init()=0
This method must be called before each loop.
virtual void Next()=0
This method moves the iterator to the next value.
virtual int64_t Value() const =0
This method returns the current value of the iterator.
~IntVarIterator() override
Definition: constraint_solver.h:4041
virtual bool Ok() const =0
This method indicates if we can call Value() or not.
void LoadFromProto(const IntervalVarAssignment &interval_var_assignment_proto)
int64_t StartValue() const
Definition: constraint_solver.h:4851
void Restore()
void SetDurationRange(int64_t mi, int64_t ma)
Definition: constraint_solver.h:4885
bool operator!=(const IntervalVarElement &element) const
Definition: constraint_solver.h:4919
void Reset(IntervalVar *const var)
int64_t PerformedMax() const
Definition: constraint_solver.h:4868
int64_t DurationMax() const
Definition: constraint_solver.h:4856
void SetPerformedRange(int64_t mi, int64_t ma)
Definition: constraint_solver.h:4905
int64_t DurationMin() const
Definition: constraint_solver.h:4855
void SetEndRange(int64_t mi, int64_t ma)
Definition: constraint_solver.h:4895
void Store()
void SetEndValue(int64_t v)
Definition: constraint_solver.h:4899
bool Bound() const
Definition: constraint_solver.h:4913
void SetEndMin(int64_t m)
Definition: constraint_solver.h:4893
void SetDurationValue(int64_t v)
Definition: constraint_solver.h:4889
void SetPerformedMin(int64_t m)
Definition: constraint_solver.h:4903
int64_t StartMin() const
Definition: constraint_solver.h:4849
void SetStartRange(int64_t mi, int64_t ma)
Definition: constraint_solver.h:4875
int64_t EndValue() const
Definition: constraint_solver.h:4863
void SetDurationMin(int64_t m)
Definition: constraint_solver.h:4883
IntervalVarElement * Clone()
void SetEndMax(int64_t m)
Definition: constraint_solver.h:4894
std::string DebugString() const
void SetStartMin(int64_t m)
Definition: constraint_solver.h:4873
IntervalVarElement(IntervalVar *const var)
void SetStartMax(int64_t m)
Definition: constraint_solver.h:4874
int64_t PerformedMin() const
Definition: constraint_solver.h:4867
void SetPerformedValue(int64_t v)
Definition: constraint_solver.h:4909
int64_t EndMin() const
Definition: constraint_solver.h:4861
int64_t PerformedValue() const
Definition: constraint_solver.h:4869
IntervalVarElement()
bool operator==(const IntervalVarElement &element) const
void Copy(const IntervalVarElement &element)
void WriteToProto(IntervalVarAssignment *interval_var_assignment_proto) const
void SetPerformedMax(int64_t m)
Definition: constraint_solver.h:4904
int64_t StartMax() const
Definition: constraint_solver.h:4850
void SetDurationMax(int64_t m)
Definition: constraint_solver.h:4884
void SetStartValue(int64_t v)
Definition: constraint_solver.h:4879
int64_t DurationValue() const
Definition: constraint_solver.h:4857
int64_t EndMax() const
Definition: constraint_solver.h:4862
IntervalVar * Var() const
Definition: constraint_solver.h:4842
Interval variables are often used in scheduling.
Definition: constraint_solver.h:4527
virtual void SetDurationMin(int64_t m)=0
void WhenDurationRange(Solver::Closure closure)
Definition: constraint_solver.h:4576
virtual IntExpr * SafeStartExpr(int64_t unperformed_value)=0
These methods create expressions encapsulating the start, end and duration of the interval var.
void WhenAnything(Solver::Closure closure)
Attaches a closure awakened when anything about this interval changes.
Definition: constraint_solver.h:4644
void WhenStartBound(Solver::Closure closure)
Definition: constraint_solver.h:4558
virtual int64_t DurationMax() const =0
virtual void WhenStartBound(Demon *const d)=0
virtual void SetEndMax(int64_t m)=0
void WhenEndRange(Solver::Closure closure)
Definition: constraint_solver.h:4603
void WhenAnything(Demon *const d)
Attaches a demon awakened when anything about this interval changes.
virtual int64_t DurationMin() const =0
These methods query, set, and watch the duration of the interval var.
virtual void SetPerformed(bool val)=0
virtual void SetDurationMax(int64_t m)=0
void WhenEndBound(Solver::Action action)
Definition: constraint_solver.h:4616
virtual void WhenEndRange(Demon *const d)=0
virtual int64_t OldEndMax() const =0
virtual void WhenDurationBound(Demon *const d)=0
virtual bool WasPerformedBound() const =0
virtual void SetStartMax(int64_t m)=0
void WhenStartRange(Solver::Action action)
Definition: constraint_solver.h:4553
static const int64_t kMinValidValue
The smallest acceptable value to be returned by StartMin()
Definition: constraint_solver.h:4530
virtual void SetStartRange(int64_t mi, int64_t ma)=0
virtual void WhenDurationRange(Demon *const d)=0
virtual IntExpr * SafeEndExpr(int64_t unperformed_value)=0
virtual int64_t OldStartMax() const =0
virtual int64_t OldDurationMin() const =0
static const int64_t kMaxValidValue
The largest acceptable value to be returned by EndMax()
Definition: constraint_solver.h:4532
virtual int64_t OldEndMin() const =0
virtual void WhenEndBound(Demon *const d)=0
virtual int64_t OldDurationMax() const =0
virtual void Accept(ModelVisitor *const visitor) const =0
Accepts the given visitor.
void WhenDurationBound(Solver::Action action)
Definition: constraint_solver.h:4589
virtual bool MustBePerformed() const =0
These methods query, set, and watch the performed status of the interval var.
IntervalVar(Solver *const solver, const std::string &name)
Definition: constraint_solver.h:4533
virtual void WhenPerformedBound(Demon *const d)=0
~IntervalVar() override
Definition: constraint_solver.h:4537
virtual IntExpr * EndExpr()=0
void WhenStartBound(Solver::Action action)
Definition: constraint_solver.h:4562
virtual void SetEndMin(int64_t m)=0
virtual int64_t EndMin() const =0
These methods query, set, and watch the end position of the interval var.
void WhenAnything(Solver::Action action)
Attaches an action awakened when anything about this interval changes.
Definition: constraint_solver.h:4649
virtual IntExpr * PerformedExpr()=0
virtual int64_t StartMin() const =0
These methods query, set, and watch the start position of the interval var.
virtual IntExpr * DurationExpr()=0
void WhenEndRange(Solver::Action action)
Definition: constraint_solver.h:4607
void WhenStartRange(Solver::Closure closure)
Definition: constraint_solver.h:4549
virtual void WhenStartRange(Demon *const d)=0
virtual IntExpr * StartExpr()=0
These methods create expressions encapsulating the start, end and duration of the interval var.
bool IsPerformedBound() const
Definition: constraint_solver.h:4626
virtual void SetDurationRange(int64_t mi, int64_t ma)=0
void WhenPerformedBound(Solver::Action action)
Definition: constraint_solver.h:4636
virtual int64_t EndMax() const =0
void WhenPerformedBound(Solver::Closure closure)
Definition: constraint_solver.h:4632
void WhenEndBound(Solver::Closure closure)
Definition: constraint_solver.h:4612
virtual void SetStartMin(int64_t m)=0
virtual bool MayBePerformed() const =0
void WhenDurationRange(Solver::Action action)
Definition: constraint_solver.h:4580
bool CannotBePerformed() const
Definition: constraint_solver.h:4625
virtual void SetEndRange(int64_t mi, int64_t ma)=0
virtual int64_t OldStartMin() const =0
virtual int64_t StartMax() const =0
virtual IntExpr * SafeDurationExpr(int64_t unperformed_value)=0
void WhenDurationBound(Solver::Closure closure)
Definition: constraint_solver.h:4585
Local Search Filters are used for fast neighbor pruning.
Definition: constraint_solveri.h:1724
Filter manager: when a move is made, filters are executed to decide whether the solution is feasible ...
Definition: constraint_solveri.h:1768
The base class for all local search operators.
Definition: constraint_solveri.h:912
Implements a complete cache for model elements: expressions and constraints.
Definition: constraint_solveri.h:2085
static const char kIsMember[]
Definition: constraint_solver.h:3497
static const char kDistribute[]
Definition: constraint_solver.h:3472
virtual void EndVisitIntegerExpression(const std::string &type_name, const IntExpr *const expr)
static const char kIndexOf[]
Definition: constraint_solver.h:3461
static const char kObjectiveExtension[]
Definition: constraint_solver.h:3545
virtual void VisitIntegerVariable(const IntVar *const variable, IntExpr *const delegate)
static const char kOpposite[]
Definition: constraint_solver.h:3514
static const char kElement[]
Definition: constraint_solver.h:3475
static const char kIntervalVariable[]
Definition: constraint_solver.h:3488
static const char kStepArgument[]
Definition: constraint_solver.h:3606
static const char kPathCumul[]
Definition: constraint_solver.h:3516
virtual void VisitIntegerVariableEvaluatorArgument(const std::string &arg_name, const Solver::Int64ToIntVar &arguments)
Helpers.
~ModelVisitor() override
static const char kRelaxedMinOperation[]
Definition: constraint_solver.h:3620
static const char kTrace[]
Definition: constraint_solver.h:3534
static const char kUsageEqualVariableExtension[]
Definition: constraint_solver.h:3547
static const char kTransition[]
Definition: constraint_solver.h:3535
static const char kAllowedAssignments[]
Definition: constraint_solver.h:3459
static const char kDemandsArgument[]
Definition: constraint_solver.h:3564
static const char kSizeYArgument[]
Definition: constraint_solver.h:3600
static const char kDeviation[]
Definition: constraint_solver.h:3469
static const char kDivide[]
Definition: constraint_solver.h:3473
static const char kCircuit[]
Definition: constraint_solver.h:3464
static const char kMaxEqual[]
Definition: constraint_solver.h:3504
static const char kCapacityArgument[]
Definition: constraint_solver.h:3558
static const char kRangeArgument[]
Definition: constraint_solver.h:3593
static const char kInt64ToBoolExtension[]
Definition: constraint_solver.h:3543
static const char kCumulativeArgument[]
Definition: constraint_solver.h:3562
static const char kLinkExprVar[]
Definition: constraint_solver.h:3501
static const char kCountUsedBinsExtension[]
Definition: constraint_solver.h:3542
static const char kIsDifferent[]
Definition: constraint_solver.h:3491
virtual void BeginVisitExtension(const std::string &type)
static const char kVarsArgument[]
Definition: constraint_solver.h:3614
static const char kDifferenceOperation[]
Definition: constraint_solver.h:3622
virtual void VisitIntegerVariableArrayArgument(const std::string &arg_name, const std::vector< IntVar * > &arguments)
static const char kCardsArgument[]
Definition: constraint_solver.h:3559
static const char kCountEqual[]
Definition: constraint_solver.h:3466
static const char kMinEqual[]
Definition: constraint_solver.h:3507
virtual void VisitIntegerVariable(const IntVar *const variable, const std::string &operation, int64_t value, IntVar *const delegate)
static const char kEndsArgument[]
Definition: constraint_solver.h:3571
static const char kTimeLimitArgument[]
Definition: constraint_solver.h:3608
static const char kSizeArgument[]
Definition: constraint_solver.h:3598
static const char kVariableGroupExtension[]
Definition: constraint_solver.h:3550
void VisitInt64ToInt64AsArray(const Solver::IndexEvaluator1 &eval, const std::string &arg_name, int64_t index_max)
Expands function as array when index min is 0.
static const char kIntervalUnaryRelation[]
Definition: constraint_solver.h:3487
static const char kPartialArgument[]
Definition: constraint_solver.h:3590
static const char kMapDomain[]
Definition: constraint_solver.h:3502
static const char kTargetArgument[]
Definition: constraint_solver.h:3607
static const char kIntervalBinaryRelation[]
Definition: constraint_solver.h:3485
static const char kSumOperation[]
Definition: constraint_solver.h:3621
static const char kInt64ToInt64Extension[]
Definition: constraint_solver.h:3544
static const char kGreater[]
Definition: constraint_solver.h:3482
static const char kNextsArgument[]
Definition: constraint_solver.h:3588
static const char kVarValueWatcher[]
Definition: constraint_solver.h:3538
void VisitInt64ToInt64Extension(const Solver::IndexEvaluator1 &eval, int64_t index_min, int64_t index_max)
static const char kEquality[]
Definition: constraint_solver.h:3479
static const char kEvaluatorArgument[]
Definition: constraint_solver.h:3615
static const char kEarlyDateArgument[]
Definition: constraint_solver.h:3568
static const char kUsageLessConstantExtension[]
Definition: constraint_solver.h:3549
virtual void VisitSequenceVariable(const SequenceVar *const variable)
static const char kRightArgument[]
Definition: constraint_solver.h:3595
void VisitInt64ToBoolExtension(Solver::IndexFilter1 filter, int64_t index_min, int64_t index_max)
Using SWIG on callbacks is troublesome, so we hide these methods during the wrapping.
static const char kBetween[]
Definition: constraint_solver.h:3462
static const char kIsGreater[]
Definition: constraint_solver.h:3493
static const char kSortingConstraint[]
Definition: constraint_solver.h:3527
static const char kLessOrEqual[]
Definition: constraint_solver.h:3499
static const char kDurationExpr[]
Definition: constraint_solver.h:3474
static const char kAssumePathsArgument[]
Definition: constraint_solver.h:3556
static const char kIsEqual[]
Definition: constraint_solver.h:3492
static const char kModulo[]
Definition: constraint_solver.h:3508
static const char kScalProdLessOrEqual[]
Definition: constraint_solver.h:3524
static const char kAllDifferent[]
Definition: constraint_solver.h:3458
static const char kSearchLimitExtension[]
Definition: constraint_solver.h:3546
static const char kVariableArgument[]
Definition: constraint_solver.h:3613
static const char kLateCostArgument[]
Definition: constraint_solver.h:3581
static const char kFixedChargeArgument[]
Definition: constraint_solver.h:3575
static const char kRelationArgument[]
Definition: constraint_solver.h:3594
static const char kIndexArgument[]
Definition: constraint_solver.h:3577
static const char kDelayedPathCumul[]
Definition: constraint_solver.h:3517
static const char kMember[]
Definition: constraint_solver.h:3505
virtual void VisitIntegerArrayArgument(const std::string &arg_name, const std::vector< int64_t > &values)
virtual void BeginVisitModel(const std::string &type_name)
--— Virtual methods for visitors --—
static const char kScalProdEqual[]
Definition: constraint_solver.h:3522
static const char kValuesArgument[]
Definition: constraint_solver.h:3612
static const char kConvexPiecewise[]
Definition: constraint_solver.h:3465
static const char kModuloArgument[]
Definition: constraint_solver.h:3587
static const char kLeftArgument[]
Definition: constraint_solver.h:3583
static const char kLess[]
Definition: constraint_solver.h:3498
static const char kNoCycle[]
Definition: constraint_solver.h:3509
static const char kGlobalCardinality[]
Definition: constraint_solver.h:3481
static const char kDurationMaxArgument[]
Definition: constraint_solver.h:3565
static const char kStartMaxArgument[]
Definition: constraint_solver.h:3603
static const char kNonEqual[]
Definition: constraint_solver.h:3510
virtual void BeginVisitIntegerExpression(const std::string &type_name, const IntExpr *const expr)
static const char kDurationMinArgument[]
Definition: constraint_solver.h:3566
virtual void BeginVisitConstraint(const std::string &type_name, const Constraint *const constraint)
static const char kSumLessOrEqual[]
Definition: constraint_solver.h:3533
static const char kIsLess[]
Definition: constraint_solver.h:3495
static const char kPerformedExpr[]
Definition: constraint_solver.h:3518
virtual void EndVisitConstraint(const std::string &type_name, const Constraint *const constraint)
static const char kDifference[]
Definition: constraint_solver.h:3470
static const char kAbsEqual[]
Definition: constraint_solver.h:3457
virtual void EndVisitExtension(const std::string &type)
static const char kEndMinArgument[]
Definition: constraint_solver.h:3570
static const char kLateDateArgument[]
Definition: constraint_solver.h:3582
static const char kCumulative[]
Definition: constraint_solver.h:3468
static const char kSmartTimeCheckArgument[]
Definition: constraint_solver.h:3601
static const char kNotBetween[]
Definition: constraint_solver.h:3511
static const char kNullIntersect[]
Definition: constraint_solver.h:3513
static const char kEndMaxArgument[]
Definition: constraint_solver.h:3569
virtual void VisitIntegerMatrixArgument(const std::string &arg_name, const IntTupleSet &tuples)
static const char kFalseConstraint[]
Definition: constraint_solver.h:3480
static const char kSequenceVariable[]
Definition: constraint_solver.h:3526
static const char kDisjunctive[]
Definition: constraint_solver.h:3471
static const char kTrueConstraint[]
Definition: constraint_solver.h:3536
static const char kEndExpr[]
Definition: constraint_solver.h:3478
static const char kMaxArgument[]
Definition: constraint_solver.h:3584
static const char kSquare[]
Definition: constraint_solver.h:3528
static const char kFinalStatesArgument[]
Definition: constraint_solver.h:3574
static const char kCountAssignedItemsExtension[]
Extension names:
Definition: constraint_solver.h:3541
static const char kTuplesArgument[]
Definition: constraint_solver.h:3610
static const char kSolutionLimitArgument[]
Definition: constraint_solver.h:3602
static const char kValueArgument[]
Definition: constraint_solver.h:3611
virtual void VisitIntervalVariable(const IntervalVar *const variable, const std::string &operation, int64_t value, IntervalVar *const delegate)
static const char kIntervalsArgument[]
Definition: constraint_solver.h:3580
static const char kOptionalArgument[]
Definition: constraint_solver.h:3589
static const char kElementEqual[]
Definition: constraint_solver.h:3477
static const char kGreaterOrEqual[]
Definition: constraint_solver.h:3483
static const char kIsGreaterOrEqual[]
Definition: constraint_solver.h:3494
static const char kCoefficientsArgument[]
Definition: constraint_solver.h:3560
static const char kCumulsArgument[]
Definition: constraint_solver.h:3563
static const char kSumGreaterOrEqual[]
Definition: constraint_solver.h:3532
static const char kLightElementEqual[]
Definition: constraint_solver.h:3476
static const char kIsBetween[]
Definition: constraint_solver.h:3490
static const char kMaximizeArgument[]
Definition: constraint_solver.h:3585
static const char kIntervalArgument[]
Definition: constraint_solver.h:3579
static const char kPack[]
Definition: constraint_solver.h:3515
static const char kIntegerVariable[]
Definition: constraint_solver.h:3484
static const char kCover[]
Definition: constraint_solver.h:3467
virtual void VisitIntervalArrayArgument(const std::string &arg_name, const std::vector< IntervalVar * > &arguments)
static const char kSequenceArgument[]
Definition: constraint_solver.h:3596
static const char kIndex2Argument[]
Definition: constraint_solver.h:3576
static const char kMinArgument[]
Definition: constraint_solver.h:3586
static const char kFailuresLimitArgument[]
Definition: constraint_solver.h:3573
static const char kScalProd[]
Definition: constraint_solver.h:3521
static const char kVarBoundWatcher[]
Definition: constraint_solver.h:3537
static const char kProductOperation[]
Definition: constraint_solver.h:3623
static const char kPower[]
Definition: constraint_solver.h:3519
static const char kBranchesLimitArgument[]
Definition: constraint_solver.h:3557
static const char kAtMost[]
Definition: constraint_solver.h:3460
static const char kNotMember[]
Definition: constraint_solver.h:3512
static const char kStartSyncOnStartOperation[]
Definition: constraint_solver.h:3624
virtual void VisitIntegerExpressionArgument(const std::string &arg_name, IntExpr *const argument)
Visit integer expression argument.
static const char kStartExpr[]
Definition: constraint_solver.h:3529
static const char kEarlyCostArgument[]
Definition: constraint_solver.h:3567
static const char kTransitsArgument[]
Definition: constraint_solver.h:3609
virtual void VisitSequenceArrayArgument(const std::string &arg_name, const std::vector< SequenceVar * > &arguments)
static const char kSizeXArgument[]
Definition: constraint_solver.h:3599
virtual void VisitIntervalArgument(const std::string &arg_name, IntervalVar *const argument)
Visit interval argument.
static const char kInitialState[]
Definition: constraint_solver.h:3578
static const char kCountArgument[]
Definition: constraint_solver.h:3561
static const char kRelaxedMaxOperation[]
Definition: constraint_solver.h:3619
static const char kPositionYArgument[]
Definition: constraint_solver.h:3592
static const char kStartMinArgument[]
Definition: constraint_solver.h:3604
static const char kExpressionArgument[]
Definition: constraint_solver.h:3572
static const char kScalProdGreaterOrEqual[]
Definition: constraint_solver.h:3523
static const char kWeightedSumOfAssignedEqualVariableExtension[]
Definition: constraint_solver.h:3552
static const char kStartsArgument[]
Definition: constraint_solver.h:3605
virtual void VisitIntegerArgument(const std::string &arg_name, int64_t value)
Visit integer arguments.
virtual void VisitSequenceArgument(const std::string &arg_name, SequenceVar *const argument)
Visit sequence argument.
static const char kInversePermutation[]
Definition: constraint_solver.h:3489
static const char kIsLessOrEqual[]
Definition: constraint_solver.h:3496
static const char kPositionXArgument[]
Definition: constraint_solver.h:3591
static const char kVariableUsageLessConstantExtension[]
Definition: constraint_solver.h:3551
static const char kStartSyncOnEndOperation[]
Definition: constraint_solver.h:3625
static const char kSumEqual[]
Definition: constraint_solver.h:3531
virtual void EndVisitModel(const std::string &type_name)
static const char kLexLess[]
Definition: constraint_solver.h:3500
static const char kSemiContinuous[]
Definition: constraint_solver.h:3525
static const char kConditionalExpr[]
Definition: constraint_solver.h:3463
static const char kSequencesArgument[]
Definition: constraint_solver.h:3597
static const char kTraceOperation[]
Definition: constraint_solver.h:3626
static const char kProduct[]
Definition: constraint_solver.h:3520
static const char kIntervalDisjunction[]
Definition: constraint_solver.h:3486
Subclass of RevArray<T> which adds numerical operations.
Definition: constraint_solver.h:3941
void Decr(Solver *const s, int index)
Definition: constraint_solver.h:3951
NumericalRevArray(int size, const T &val)
Definition: constraint_solver.h:3943
void Add(Solver *const s, int index, const T &to_add)
Definition: constraint_solver.h:3945
void Incr(Solver *const s, int index)
Definition: constraint_solver.h:3949
Subclass of Rev<T> which adds numerical operations.
Definition: constraint_solver.h:3883
NumericalRev(const T &val)
Definition: constraint_solver.h:3885
void Decr(Solver *const s)
Definition: constraint_solver.h:3893
void Incr(Solver *const s)
Definition: constraint_solver.h:3891
void Add(Solver *const s, const T &to_add)
Definition: constraint_solver.h:3887
This class encapsulates an objective.
Definition: constraint_solver.h:4331
void ApplyBound()
void BeginNextDecision(DecisionBuilder *const db) override
Before calling DecisionBuilder::Next.
OptimizeVar(Solver *const s, bool maximize, IntVar *const a, int64_t step)
~OptimizeVar() override
bool found_initial_solution_
Definition: constraint_solver.h:4359
void Accept(ModelVisitor *const visitor) const override
Accepts the given model visitor.
bool AcceptSolution() override
This method is called when a solution is found.
bool AtSolution() override
This method is called when a valid solution is found.
virtual std::string Print() const
void RefuteDecision(Decision *const d) override
Before refuting the decision.
bool AcceptDelta(Assignment *delta, Assignment *deltadelta) override
Internal methods.
std::string DebugString() const override
void Propagate()
bool IsAssignedStatusKnown(int var_index) const
void AddWeightedSumEqualVarDimension(const std::vector< int64_t > &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...
void Post() override
This method is called when the constraint is processed by the solver.
void AddCountAssignedItemsDimension(IntVar *const count_var)
This dimension links 'count_var' to the actual number of items assigned to a bin in the pack.
void AddSumVariableWeightsLessOrEqualConstantDimension(const std::vector< IntVar * > &usage, const std::vector< int64_t > &capacity)
This dimension imposes: forall b in bins, sum (i in items: usage[i] * is_assigned(i,...
void AddWeightedSumLessOrEqualConstantDimension(const std::vector< int64_t > &weights, const std::vector< int64_t > &bounds)
Dimensions are additional constraints than can restrict what is possible with the pack constraint.
void InitialPropagate() override
This method performs the initial propagation of the constraint.
void AddWeightedSumEqualVarDimension(Solver::IndexEvaluator2 weights, const std::vector< IntVar * > &loads)
This dimension imposes that for all bins b, the weighted sum (weights->Run(i, b)) of all objects i as...
Pack(Solver *const s, const std::vector< IntVar * > &vars, int number_of_bins)
void SetImpossible(int var_index, int bin_index)
void SetAssigned(int var_index)
bool IsUndecided(int var_index, int bin_index) const
void AddWeightedSumOfAssignedDimension(const std::vector< int64_t > &weights, IntVar *const cost_var)
This dimension enforces that cost_var == sum of weights[i] for all objects 'i' assigned to a bin.
~Pack() override
bool IsPossible(int var_index, int bin_index) const
void AssignFirstPossibleToBin(int bin_index)
void AddCountUsedBinDimension(IntVar *const count_var)
This dimension links 'count_var' to the actual number of bins used in the pack.
void AddWeightedSumLessOrEqualConstantDimension(Solver::IndexEvaluator1 weights, const std::vector< int64_t > &bounds)
This dimension imposes that for all bins b, the weighted sum (weights->Run(i)) of all objects i assig...
IntVar * AssignVar(int var_index, int bin_index) const
void AddWeightedSumLessOrEqualConstantDimension(Solver::IndexEvaluator2 weights, const std::vector< int64_t > &bounds)
This dimension imposes that for all bins b, the weighted sum (weights->Run(i, b) of all objects i ass...
void OneDomain(int var_index)
void SetUnassigned(int var_index)
void Accept(ModelVisitor *const visitor) const override
Accepts the given visitor.
void AssignAllPossibleToBin(int bin_index)
void ClearAll()
void PropagateDelayed()
void Assign(int var_index, int bin_index)
void UnassignAllRemainingItems()
std::string DebugString() const override
void AssignAllRemainingItems()
void RemoveAllPossibleFromBin(int bin_index)
ProfiledDecisionBuilder(DecisionBuilder *db)
double seconds() const
Definition: constraint_solver.h:3396
Decision * Next(Solver *const solver) override
This is the main method of the decision builder class.
void AppendMonitors(Solver *const solver, std::vector< SearchMonitor * > *const extras) override
This method will be called at the start of the search.
~ProfiledDecisionBuilder() override
Definition: constraint_solver.h:3394
void Accept(ModelVisitor *const visitor) const override
const std::string & name() const
Definition: constraint_solver.h:3395
std::string DebugString() const override
virtual std::string BaseName() const
Returns a base name for automatic naming.
void EnqueueDelayedDemon(Demon *const d)
This method pushes the demon onto the propagation queue.
Definition: constraint_solver.h:3287
void reset_action_on_fail()
This method clears the failure callback.
Definition: constraint_solver.h:3301
bool HasName() const
Returns whether the object has been named or not.
void set_action_on_fail(Solver::Action a)
Definition: constraint_solver.h:3295
void ExecuteAll(const SimpleRevFIFO< Demon * > &demons)
void EnqueueVar(Demon *const d)
Definition: constraint_solver.h:3288
void EnqueueAll(const SimpleRevFIFO< Demon * > &demons)
Solver * solver() const
Definition: constraint_solver.h:3274
~PropagationBaseObject() override
Definition: constraint_solver.h:3265
void set_variable_to_clean_on_fail(IntVar *v)
Shortcut for variable cleaner.
Definition: constraint_solver.h:3304
PropagationBaseObject(Solver *const s)
Definition: constraint_solver.h:3264
void set_name(const std::string &name)
void UnfreezeQueue()
This method unfreezes the propagation queue.
Definition: constraint_solver.h:3282
std::string DebugString() const override
Definition: constraint_solver.h:3267
Usual limit based on wall_time, number of explored branches and number of failures in the search tree...
Definition: constraint_solver.h:4412
absl::Duration duration_limit() const
Definition: constraint_solver.h:4426
void Install() override
Registers itself on the solver such that it gets notified of the search and propagation events.
int64_t branches() const
Definition: constraint_solver.h:4432
bool IsUncheckedSolutionLimitReached() override
Returns true if the limit of solutions has been reached including unchecked solutions.
void UpdateLimits(absl::Duration time, int64_t branches, int64_t failures, int64_t solutions)
void Init() override
This method is called when the search limit is initialized.
~RegularLimit() override
int64_t wall_time() const
Definition: constraint_solver.h:4427
int ProgressPercent() override
Returns a percentage representing the propress of the search before reaching limits.
int64_t failures() const
Definition: constraint_solver.h:4433
absl::Time AbsoluteSolverDeadline() const
Definition: constraint_solver.h:4440
RegularLimit * MakeIdenticalClone() const
void Accept(ModelVisitor *const visitor) const override
Accepts the given model visitor.
void Copy(const SearchLimit *const limit) override
Copy a limit.
bool CheckWithOffset(absl::Duration offset) override
Same as Check() but adds the 'offset' value to the current time when time is considered in the limit.
SearchLimit * MakeClone() const override
Allocates a clone of the limit.
RegularLimit(Solver *const s, absl::Duration time, int64_t branches, int64_t failures, int64_t solutions, bool smart_time_check, bool cumulative)
std::string DebugString() const override
int64_t solutions() const
Definition: constraint_solver.h:4434
const T & Value(int index) const
Definition: constraint_solver.h:3916
RevArray(int size, const T &val)
Definition: constraint_solver.h:3904
void SetValue(Solver *const s, int index, const T &val)
Definition: constraint_solver.h:3922
const T & operator[](int index) const
Definition: constraint_solver.h:3919
Matrix version of the RevBitSet class.
Definition: constraint_solveri.h:457
This class adds reversibility to a POD type.
Definition: constraint_solver.h:3860
void SetValue(Solver *const s, const T &val)
Definition: constraint_solver.h:3866
Reversible Immutable MultiMap class.
Definition: constraint_solveri.h:275
Definition: routing.h:246
Base class of all search limits.
Definition: constraint_solver.h:4366
virtual bool CheckWithOffset(absl::Duration offset)=0
Same as Check() but adds the 'offset' value to the current time when time is considered in the limit.
void Install() override
Registers itself on the solver such that it gets notified of the search and propagation events.
SearchLimit(Solver *const s)
Definition: constraint_solver.h:4368
void PeriodicCheck() override
Periodic call to check limits in long running methods.
virtual void Init()=0
This method is called when the search limit is initialized.
~SearchLimit() override
void BeginNextDecision(DecisionBuilder *const b) override
Before calling DecisionBuilder::Next.
virtual void Copy(const SearchLimit *const limit)=0
Copy a limit.
virtual SearchLimit * MakeClone() const =0
Allocates a clone of the limit.
void RefuteDecision(Decision *const d) override
Before refuting the decision.
bool Check()
This method is called to check the status of the limit.
Definition: constraint_solver.h:4378
std::string DebugString() const override
Definition: constraint_solver.h:4398
A search monitor is a simple set of callbacks to monitor all search events.
Definition: constraint_solver.h:3756
SearchMonitor(Solver *const s)
Definition: constraint_solver.h:3760
virtual void RefuteDecision(Decision *const d)
Before refuting the decision.
virtual void Install()
Registers itself on the solver such that it gets notified of the search and propagation events.
virtual bool IsUncheckedSolutionLimitReached()
Returns true if the limit of solutions has been reached including unchecked solutions.
Definition: constraint_solver.h:3827
virtual void EndInitialPropagation()
After the initial propagation.
virtual void PeriodicCheck()
Periodic call to check limits in long running methods.
virtual bool AcceptSolution()
This method is called when a solution is found.
virtual int ProgressPercent()
Returns a percentage representing the propress of the search before reaching limits.
Definition: constraint_solver.h:3834
virtual void AcceptNeighbor()
After accepting a neighbor during local search.
void ListenToEvent(Solver::MonitorEvent event)
Solver * solver() const
Definition: constraint_solver.h:3844
virtual void NoMoreSolutions()
When the search tree is finished.
~SearchMonitor() override
Definition: constraint_solver.h:3761
static constexpr int kNoProgress
Definition: constraint_solver.h:3758
virtual bool AcceptDelta(Assignment *delta, Assignment *deltadelta)
virtual void AfterDecision(Decision *const d, bool apply)
Just after refuting or applying the decision, apply is true after Apply.
virtual bool AtSolution()
This method is called when a valid solution is found.
virtual void EndNextDecision(DecisionBuilder *const b, Decision *const d)
After calling DecisionBuilder::Next, along with the returned decision.
virtual bool LocalOptimum()
When a local optimum is reached.
virtual void BeginNextDecision(DecisionBuilder *const b)
Before calling DecisionBuilder::Next.
virtual void BeginInitialPropagation()
Before the initial propagation.
virtual void AcceptUncheckedNeighbor()
After accepting an unchecked neighbor during local search.
virtual void ApplyDecision(Decision *const d)
Before applying the decision.
virtual void Accept(ModelVisitor *const visitor) const
Accepts the given model visitor.
The SequenceVarElement stores a partial representation of ranked interval variables in the underlying...
Definition: constraint_solver.h:4948
void SetSequence(const std::vector< int > &forward_sequence, const std::vector< int > &backward_sequence, const std::vector< int > &unperformed)
SequenceVarElement * Clone()
void Restore()
void Reset(SequenceVar *const var)
bool operator==(const SequenceVarElement &element) const
bool operator!=(const SequenceVarElement &element) const
Definition: constraint_solver.h:4978
void Store()
void SetBackwardSequence(const std::vector< int > &backward_sequence)
bool Bound() const
Definition: constraint_solver.h:4971
SequenceVarElement()
void SetUnperformed(const std::vector< int > &unperformed)
std::string DebugString() const
SequenceVar * Var() const
Definition: constraint_solver.h:4955
const std::vector< int > & BackwardSequence() const
void Copy(const SequenceVarElement &element)
SequenceVarElement(SequenceVar *const var)
void LoadFromProto(const SequenceVarAssignment &sequence_var_assignment_proto)
void WriteToProto(SequenceVarAssignment *sequence_var_assignment_proto) const
void SetForwardSequence(const std::vector< int > &forward_sequence)
const std::vector< int > & ForwardSequence() const
const std::vector< int > & Unperformed() const
A sequence variable is a variable whose domain is a set of possible orderings of the interval variabl...
Definition: constraint_solver.h:4681
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...
void HorizonRange(int64_t *const hmin, int64_t *const hmax) const
Returns the minimum start min and the maximum end max of all interval vars in the sequence.
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.
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.
void ComputeStatistics(int *const ranked, int *const not_ranked, int *const unperformed) const
Compute statistics on the sequence.
void DurationRange(int64_t *const dmin, int64_t *const dmax) const
Returns the minimum and maximum duration of combined interval vars in the sequence.
~SequenceVar() override
IntVar * Next(int index) const
Returns the next of the index_th interval of the sequence.
IntervalVar * Interval(int index) const
Returns the index_th interval of the sequence.
void ActiveHorizonRange(int64_t *const hmin, int64_t *const hmax) const
Returns the minimum start min and the maximum end max of all unranked interval vars in the sequence.
int64_t size() const
Returns the number of interval vars in the sequence.
Definition: constraint_solver.h:4757
void RankLast(int index)
Ranks the index_th interval var first of all unranked interval vars.
void RankFirst(int index)
Ranks the index_th interval var first of all unranked interval vars.
void RankNotLast(int index)
Indicates that the index_th interval var will not be ranked first of all currently unranked interval ...
void RankNotFirst(int index)
Indicates that the index_th interval var will not be ranked first of all currently unranked interval ...
SequenceVar(Solver *const s, const std::vector< IntervalVar * > &intervals, const std::vector< IntVar * > &nexts, const std::string &name)
std::string DebugString() const override
virtual void Accept(ModelVisitor *const visitor) const
Accepts the given visitor.
This class represent a reversible FIFO structure.
Definition: constraint_solveri.h:137
This class is the root class of all solution collectors.
Definition: constraint_solver.h:4227
void check_index(int n) const
void EnterSearch() override
Beginning of the search.
void Install() override
Registers itself on the solver such that it gets notified of the search and propagation events.
Assignment * solution(int n) const
Returns the nth solution.
~SolutionCollector() override
void Push(const SolutionData &data)
Definition: constraint_solver.h:4309
void PushSolution()
Push the current state as a new solution.
void AddObjective(IntVar *const objective)
std::vector< Assignment * > recycle_solutions_
Definition: constraint_solver.h:4318
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.
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.
void Add(const std::vector< SequenceVar * > &vars)
std::vector< SolutionData > solution_data_
Definition: constraint_solver.h:4317
SolutionCollector(Solver *const solver)
int solution_count() const
Returns how many solutions were stored during the search.
void Add(const std::vector< IntVar * > &vars)
void Add(IntervalVar *const var)
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.
void Add(const std::vector< IntervalVar * > &vars)
SolutionData BuildSolutionDataForCurrentState()
int64_t Value(int n, IntVar *const var) const
This is a shortcut to get the Value of 'var' in the nth solution.
int64_t DurationValue(int n, IntervalVar *const var) const
This is a shortcut to get the DurationValue of 'var' in the nth solution.
int64_t StartValue(int n, IntervalVar *const var) const
This is a shortcut to get the StartValue of 'var' in the nth solution.
int64_t EndValue(int n, IntervalVar *const var) const
This is a shortcut to get the EndValue of 'var' in the nth solution.
int64_t objective_value(int n) const
Returns the objective value of the nth solution.
int64_t wall_time(int n) const
Returns the wall time in ms for the nth solution.
int64_t branches(int n) const
Returns the number of branches when the nth solution was found.
int64_t PerformedValue(int n, IntervalVar *const var) const
This is a shortcut to get the PerformedValue of 'var' in the nth solution.
void FreeSolution(Assignment *solution)
int64_t failures(int n) const
Returns the number of failures encountered at the time of the nth solution.
std::unique_ptr< Assignment > prototype_
Definition: constraint_solver.h:4316
SolutionCollector(Solver *const solver, const Assignment *assignment)
void PopSolution()
Remove and delete the last popped solution.
std::string DebugString() const override
Definition: constraint_solver.h:4233
void Add(SequenceVar *const var)
This class is used to manage a pool of solutions.
Definition: constraint_solver.h:5514
virtual bool SyncNeeded(Assignment *const local_assignment)=0
This method checks if the local solution needs to be updated with an external one.
virtual void RegisterNewSolution(Assignment *const assignment)=0
This method is called when a new solution has been accepted by the local search.
virtual void GetNextSolution(Assignment *const assignment)=0
This method is called when the local search starts a new neighborhood to initialize the default assig...
~SolutionPool() override
Definition: constraint_solver.h:5517
virtual void Initialize(Assignment *const assignment)=0
This method is called to initialize the solution pool with the assignment from the local search.
Constraint * MakePathConnected(std::vector< IntVar * > nexts, std::vector< int64_t > sources, std::vector< int64_t > sinks, std::vector< IntVar * > status)
Constraint enforcing that status[i] is true iff there's a path defined on next variables from sources...
Constraint * MakeEquality(IntervalVar *const var1, IntervalVar *const var2)
This constraints states that the two interval variables are equal.
Decision * MakeAssignVariableValue(IntVar *const var, int64_t val)
Decisions.
DecisionBuilder * MakeProfiledDecisionBuilderWrapper(DecisionBuilder *db)
Activates profiling on a decision builder.
Constraint * MakeScalProdEquality(const std::vector< IntVar * > &vars, const std::vector< int64_t > &coefficients, IntVar *const target)
Constraint * MakeLightElement(F values, IntVar *const var, IntVar *const index, std::function< bool()> deep_serialize=nullptr)
Light versions of function-based elements, in constraint version only, well-suited for use within Loc...
Definition: constraint_solver.h:1210
IntVar * MakeIsGreaterVar(IntExpr *const left, IntExpr *const right)
status var of (left > right)
DecisionModification
The Solver is responsible for creating the search tree.
Definition: constraint_solver.h:691
bool IsBooleanVar(IntExpr *const expr, IntVar **inner_var, bool *is_negated) const
Returns true if expr represents either boolean_var or 1 - boolean_var.
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...
DecisionBuilder * MakePhase(const std::vector< IntVar * > &vars, IndexEvaluator2 eval, EvaluatorStrategy str)
Returns a decision builder which assigns values to variables which minimize the values returned by th...
DecisionBuilder * MakeNestedOptimize(DecisionBuilder *const db, Assignment *const solution, bool maximize, int64_t step, const std::vector< SearchMonitor * > &monitors)
Constraint * MakeScalProdGreaterOrEqual(const std::vector< IntVar * > &vars, const std::vector< int64_t > &coeffs, int64_t cst)
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.
Decision * MakeScheduleOrPostpone(IntervalVar *const var, int64_t est, int64_t *const marker)
Returns a decision that tries to schedule a task at a given time.
Constraint * MakeCount(const std::vector< IntVar * > &vars, int64_t value, IntVar *const max_count)
|{i | vars[i] == value}| == max_count
Constraint * MakeIsMemberCt(IntExpr *const expr, const std::vector< int64_t > &values, IntVar *const boolvar)
boolvar == (expr in set)
bool SolveAndCommit(DecisionBuilder *const db)
IntVar * MakeIsGreaterOrEqualVar(IntExpr *const left, IntExpr *const right)
status var of (left >= right)
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...
Constraint * MakeIntervalVarRelationWithDelay(IntervalVar *const t1, BinaryIntervalRelation r, IntervalVar *const t2, int64_t delay)
This method creates a relation between two interval vars.
bool HasName(const PropagationBaseObject *object) const
Returns whether the object has been named or not.
Constraint * MakeIsGreaterCt(IntExpr *const left, IntExpr *const right, IntVar *const b)
b == (left > right)
SearchMonitor * MakeSearchLog(int branch_period, OptimizeVar *const opt_var, std::function< std::string()> display_callback)
Creates a search monitor that will also print the result of the display callback.
IntExpr * MakeSemiContinuousExpr(IntExpr *const expr, int64_t fixed_charge, int64_t step)
Semi continuous Expression (x <= 0 -> f(x) = 0; x > 0 -> f(x) = ax + b) a >= 0 and b >= 0.
Decision * MakeAssignVariablesValues(const std::vector< IntVar * > &vars, const std::vector< int64_t > &values)
void RestartSearch()
Constraint * MakeCumulative(const std::vector< IntervalVar * > &intervals, const std::vector< IntVar * > &demands, IntVar *const capacity, const std::string &name)
This constraint enforces that, for any integer t, the sum of demands corresponding to an interval con...
DecisionBuilder * MakeConstraintAdder(Constraint *const ct)
Returns a decision builder that will add the given constraint to the model.
DisjunctiveConstraint * MakeStrictDisjunctiveConstraint(const std::vector< IntervalVar * > &intervals, const std::string &name)
This constraint forces all interval vars into an non-overlapping sequence.
IntExpr * MakeMin(IntExpr *const expr, int value)
std::min(expr, value)
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...
LocalSearchOperator * MakeRandomLnsOperator(const std::vector< IntVar * > &vars, int number_of_variables, int32_t seed)
SolutionCollector * MakeFirstSolutionCollector(const Assignment *const assignment)
Collect the first solution of the search.
int64_t branches() const
The number of branches explored since the creation of the solver.
Definition: constraint_solver.h:1021
const ConstraintSolverParameters & const_parameters() const
Definition: constraint_solver.h:800
Constraint * MakeDistribute(const std::vector< IntVar * > &vars, const std::vector< int > &card_min, const std::vector< int > &card_max)
Aggregated version of count with bounded cardinalities: forall j in 0 .
void RestartCurrentSearch()
IntVar * MakeIntVar(const std::vector< int64_t > &values, const std::string &name)
MakeIntVar will create a variable with the given sparse domain.
friend class DemonProfiler
Definition: constraint_solver.h:3034
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...
bool SolveAndCommit(DecisionBuilder *const db, SearchMonitor *const m1, SearchMonitor *const m2, SearchMonitor *const m3)
friend void InternalSaveBooleanVarValue(Solver *const, IntVar *const)
IntervalVar * MakeFixedDurationStartSyncedOnStartIntervalVar(IntervalVar *const interval_var, int64_t duration, int64_t offset)
Creates an interval var with a fixed duration whose start is synchronized with the start of another i...
IntVarLocalSearchFilter * MakeSumObjectiveFilter(const std::vector< IntVar * > &vars, IndexEvaluator2 values, Solver::LocalSearchFilterBound filter_enum)
IntervalVar * MakeFixedDurationEndSyncedOnEndIntervalVar(IntervalVar *const interval_var, int64_t duration, int64_t offset)
Creates an interval var with a fixed duration whose end is synchronized with the end of another inter...
Constraint * MakeDistribute(const std::vector< IntVar * > &vars, const std::vector< int64_t > &values, const std::vector< IntVar * > &cards)
Aggregated version of count: |{i | v[i] == values[j]}| == cards[j].
Constraint * MakeFalseConstraint(const std::string &explanation)
SearchMonitor * MakeSymmetryManager(SymmetryBreaker *const v1)
IntVar * MakeBoolVar()
MakeBoolVar will create a variable with a {0, 1} domain.
Constraint * MakeDistribute(const std::vector< IntVar * > &vars, const std::vector< int64_t > &card_min, const std::vector< int64_t > &card_max)
Aggregated version of count with bounded cardinalities: forall j in 0 .
SearchMonitor * MakeSymmetryManager(SymmetryBreaker *const v1, SymmetryBreaker *const v2, SymmetryBreaker *const v3, SymmetryBreaker *const v4)
DecisionBuilder * MakePhase(const std::vector< IntVar * > &vars, IntVarStrategy var_str, IndexEvaluator2 value_evaluator)
void NewSearch(DecisionBuilder *const db)
LocalSearchPhaseParameters * MakeLocalSearchPhaseParameters(IntVar *objective, SolutionPool *const pool, LocalSearchOperator *const ls_operator, DecisionBuilder *const sub_decision_builder, RegularLimit *const limit, LocalSearchFilterManager *filter_manager)
Constraint * MakeNotMemberCt(IntExpr *const expr, const std::vector< int64_t > &values)
expr not in set.
void MakeFixedDurationIntervalVarArray(const std::vector< IntVar * > &start_variables, const std::vector< int64_t > &durations, const std::string &name, std::vector< IntervalVar * > *const array)
This method fills the vector with interval variables built with the corresponding start variables.
LocalSearchPhaseParameters * MakeLocalSearchPhaseParameters(IntVar *objective, SolutionPool *const pool, LocalSearchOperator *const ls_operator, DecisionBuilder *const sub_decision_builder, RegularLimit *const limit)
IntVar * MakeIsLessOrEqualCstVar(IntExpr *const var, int64_t value)
status var of (var <= value)
SearchMonitor * MakeSymmetryManager(const std::vector< SymmetryBreaker * > &visitors)
Symmetry Breaking.
ConstraintSolverStatistics GetConstraintSolverStatistics() const
Returns detailed cp search statistics.
IntVar ** MakeIntVarArray(int var_count, int64_t vmin, int64_t vmax, const std::string &name)
Same but allocates an array and returns it.
ModelVisitor * MakePrintModelVisitor()
Prints the model.
SearchMonitor * MakeSearchLog(SearchLogParameters parameters)
LocalSearchStatistics GetLocalSearchStatistics() const
Returns detailed local search statistics.
Constraint * MakeMemberCt(IntExpr *const expr, const std::vector< int64_t > &values)
expr in set.
DecisionBuilder * MakeNestedOptimize(DecisionBuilder *const db, Assignment *const solution, bool maximize, int64_t step, SearchMonitor *const monitor1, SearchMonitor *const monitor2, SearchMonitor *const monitor3, SearchMonitor *const monitor4)
IntVar * MakeIsGreaterOrEqualCstVar(IntExpr *const var, int64_t value)
status var of (var >= value)
Constraint * MakeLess(IntExpr *const expr, int64_t value)
expr < value
static constexpr int kNumPriorities
Number of priorities for demons.
Definition: constraint_solver.h:266
Constraint * MakeScalProdLessOrEqual(const std::vector< IntVar * > &vars, const std::vector< int > &coefficients, int64_t cst)
DemonPriority
This enum represents the three possible priorities for a demon in the Solver queue.
Definition: constraint_solver.h:609
@ VAR_PRIORITY
VAR_PRIORITY is between DELAYED_PRIORITY and NORMAL_PRIORITY.
Definition: constraint_solver.h:615
@ DELAYED_PRIORITY
DELAYED_PRIORITY is the lowest priority: Demons will be processed after VAR_PRIORITY and NORMAL_PRIOR...
Definition: constraint_solver.h:612
@ NORMAL_PRIORITY
NORMAL_PRIORITY is the highest priority: Demons will be processed first.
Definition: constraint_solver.h:618
Demon * MakeConstraintInitialPropagateCallback(Constraint *const ct)
This method is a specialized case of the MakeConstraintDemon method to call the InitiatePropagate of ...
Constraint * MakeGreater(IntExpr *const expr, int64_t value)
expr > value
LocalSearchPhaseParameters * MakeLocalSearchPhaseParameters(IntVar *objective, LocalSearchOperator *const ls_operator, DecisionBuilder *const sub_decision_builder)
Local Search Phase Parameters.
SolutionCollector * MakeBestValueSolutionCollector(bool maximize)
Collect the solution corresponding to the optimal value of the objective of 'assignment'; if 'assignm...
DecisionBuilder * Compose(DecisionBuilder *const db1, DecisionBuilder *const db2, DecisionBuilder *const db3, DecisionBuilder *const db4)
IntVar * MakeIsLessVar(IntExpr *const left, IntExpr *const right)
status var of (left < right)
IntervalVar * MakeFixedDurationEndSyncedOnStartIntervalVar(IntervalVar *const interval_var, int64_t duration, int64_t offset)
Creates an interval var with a fixed duration whose end is synchronized with the start of another int...
Constraint * MakeGreaterOrEqual(IntExpr *const expr, int value)
expr >= value
LocalSearchFilter * MakeVariableDomainFilter()
int64_t filtered_neighbors() const
The number of filtered neighbors (neighbors accepted by filters).
Definition: constraint_solver.h:1039
Assignment * MakeAssignment()
This method creates an empty assignment.
SolverState
This enum represents the state of the solver w.r.t. the search.
Definition: constraint_solver.h:720
@ NO_MORE_SOLUTIONS
After failed NextSolution and before EndSearch.
Definition: constraint_solver.h:730
Constraint * MakeNullIntersectExcept(const std::vector< IntVar * > &first_vars, const std::vector< IntVar * > &second_vars, int64_t escape_value)
Creates a constraint that states that all variables in the first vector are different from all variab...
Decision * MakeAssignVariableValueOrFail(IntVar *const var, int64_t value)
IntExpr * MakeDifference(IntExpr *const left, IntExpr *const right)
left - right
std::string SearchContext() const
Constraint * MakeAtMost(std::vector< IntVar * > vars, int64_t value, int64_t max_count)
|{i | vars[i] == value}| <= max_count
bool CheckAssignment(Assignment *const solution)
Checks whether the given assignment satisfies all relevant constraints.
Constraint * MakeCumulative(const std::vector< IntervalVar * > &intervals, const std::vector< int > &demands, int64_t capacity, const std::string &name)
This constraint forces that, for any integer t, the sum of the demands corresponding to an interval c...
bool IsProduct(IntExpr *const expr, IntExpr **inner_expr, int64_t *coefficient)
Returns true if expr represents a product of a expr and a constant.
void EndSearch()
ABSL_MUST_USE_RESULT SearchLimit * MakeCustomLimit(std::function< bool()> limiter)
Callback-based search limit.
Decision * MakeScheduleOrExpedite(IntervalVar *const var, int64_t est, int64_t *const marker)
Returns a decision that tries to schedule a task at a given time.
LocalSearchOperator * RandomConcatenateOperators(const std::vector< LocalSearchOperator * > &ops, int32_t seed)
Randomized version of local search concatenator; calls a random operator at each call to MakeNextNeig...
IntVar * MakeIntVar(const std::vector< int > &values)
MakeIntVar will create a variable with the given sparse domain.
IntVar * MakeBoolVar(const std::string &name)
MakeBoolVar will create a variable with a {0, 1} domain.
DecisionBuilder * MakeApplyBranchSelector(BranchSelector bs)
Creates a decision builder that will set the branch selector.
Search * ActiveSearch() const
Returns the active search, nullptr outside search.
DecisionBuilder * MakeLocalSearchPhase(const std::vector< IntVar * > &vars, DecisionBuilder *const first_solution, DecisionBuilder *const first_solution_sub_decision_builder, LocalSearchPhaseParameters *const parameters)
Variant with a sub_decison_builder specific to the first solution.
SearchMonitor * MakeSimulatedAnnealing(bool maximize, IntVar *const v, int64_t step, int64_t initial_temperature)
Creates a Simulated Annealing monitor.
LocalSearchFilter * MakeRejectFilter()
DecisionBuilder * MakePhase(IntVar *const v0, IntVar *const v1, IntVar *const v2, IntVarStrategy var_str, IntValueStrategy val_str)
IntervalStrategy
This enum describes the straregy used to select the next interval variable and its value to be fixed.
Definition: constraint_solver.h:415
@ 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:422
@ 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:425
Constraint * MakeFalseConstraint()
This constraint always fails.
DisjunctiveConstraint * MakeDisjunctiveConstraint(const std::vector< IntervalVar * > &intervals, const std::string &name)
This constraint forces all interval vars into an non-overlapping sequence.
LocalSearchOperator * RandomConcatenateOperators(const std::vector< LocalSearchOperator * > &ops)
Randomized version of local search concatenator; calls a random operator at each call to MakeNextNeig...
std::function< int64_t(int64_t, int64_t, int64_t)> IndexEvaluator3
Definition: constraint_solver.h:772
IntervalVar * MakeIntervalRelaxedMin(IntervalVar *const interval_var)
Creates and returns an interval variable that wraps around the given one, relaxing the min start and ...
Constraint * MakeBetweenCt(IntExpr *const expr, int64_t l, int64_t u)
(l <= expr <= u)
IntVar * MakeIntVar(const std::vector< int64_t > &values)
MakeIntVar will create a variable with the given sparse domain.
LocalSearchOperator * MakeNeighborhoodLimit(LocalSearchOperator *const op, int64_t limit)
Creates a local search operator that wraps another local search operator and limits the number of nei...
bool IsProfilingEnabled() const
Returns whether we are profiling the solver.
IntExpr * MakeElement(IndexEvaluator1 values, IntVar *const index)
Function-based element.
SearchMonitor * MakeGenericTabuSearch(bool maximize, IntVar *const v, int64_t step, const std::vector< IntVar * > &tabu_vars, int64_t forbid_tenure)
Creates a Tabu Search based on the vars |vars|.
LocalSearchPhaseParameters * MakeLocalSearchPhaseParameters(IntVar *objective, LocalSearchOperator *const ls_operator, DecisionBuilder *const sub_decision_builder, RegularLimit *const limit)
SearchMonitor * MakeAtSolutionCallback(std::function< void()> callback)
SearchMonitor * MakeEnterSearchCallback(std::function< void()> callback)
--— Callback-based search monitors --—
int64_t demon_runs(DemonPriority p) const
The number of demons executed during search for a given priority.
Definition: constraint_solver.h:1030
void AddPropagationMonitor(PropagationMonitor *const monitor)
Adds the propagation monitor to the solver.
Constraint * MakeNonEquality(IntExpr *const expr, int64_t value)
expr != value
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,...
Constraint * MakeNonOverlappingBoxesConstraint(const std::vector< IntVar * > &x_vars, const std::vector< IntVar * > &y_vars, const std::vector< int > &x_size, const std::vector< int > &y_size)
IntExpr * MakeDiv(IntExpr *const expr, int64_t value)
expr / value (integer division)
IntExpr * MakeSum(const std::vector< IntVar * > &vars)
sum of all vars.
IntValueStrategy
This enum describes the strategy used to select the next variable value to set.
Definition: constraint_solver.h:351
@ 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:370
@ SPLIT_UPPER_HALF
Split the domain in two around the center, and choose the lower part first.
Definition: constraint_solver.h:378
@ ASSIGN_MIN_VALUE
Selects the min value of the selected variable.
Definition: constraint_solver.h:359
@ ASSIGN_RANDOM_VALUE
Selects randomly one of the possible values of the selected variable.
Definition: constraint_solver.h:365
@ ASSIGN_MAX_VALUE
Selects the max value of the selected variable.
Definition: constraint_solver.h:362
@ SPLIT_LOWER_HALF
Split the domain in two around the center, and choose the lower part first.
Definition: constraint_solver.h:374
Constraint * MakeScalProdGreaterOrEqual(const std::vector< IntVar * > &vars, const std::vector< int > &coeffs, int64_t cst)
SearchMonitor * MakeTabuSearch(bool maximize, IntVar *const v, int64_t step, const std::vector< IntVar * > &vars, int64_t keep_tenure, int64_t forbid_tenure, double tabu_factor)
MetaHeuristics which try to get the search out of local optima.
UnaryIntervalRelation
This enum is used in Solver::MakeIntervalVarRelation to specify the temporal relation between an inte...
Definition: constraint_solver.h:656
bool CheckConstraint(Constraint *const ct)
Checks whether adding this constraint will lead to an immediate failure.
SolutionCollector * MakeLastSolutionCollector(const Assignment *const assignment)
Collect the last solution of the search.
Pack * MakePack(const std::vector< IntVar * > &vars, int number_of_bins)
This constraint packs all variables onto 'number_of_bins' variables.
void SetSearchContext(Search *search, const std::string &search_context)
bool SolveAndCommit(DecisionBuilder *const db, SearchMonitor *const m1, SearchMonitor *const m2)
IntExpr * MakeDifference(int64_t value, IntExpr *const expr)
value - expr
Constraint * MakeTrueConstraint()
This constraint always succeeds.
IntExpr * MakeModulo(IntExpr *const x, IntExpr *const mod)
Modulo expression x % mod (with the python convention for modulo).
Constraint * MakeTemporalDisjunction(IntervalVar *const t1, IntervalVar *const t2, IntVar *const alt)
This constraint implements a temporal disjunction between two interval vars t1 and t2.
ABSL_MUST_USE_RESULT RegularLimit * MakeTimeLimit(int64_t time_in_ms)
Definition: constraint_solver.h:2286
bool Solve(DecisionBuilder *const db, SearchMonitor *const m1, SearchMonitor *const m2)
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.
std::function< int64_t(Solver *solver, const std::vector< IntVar * > &vars, int64_t first_unbound, int64_t last_unbound)> VariableIndexSelector
Definition: constraint_solver.h:781
void MakeIntVarArray(int var_count, int64_t vmin, int64_t 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...
ABSL_MUST_USE_RESULT SearchLimit * MakeLimit(SearchLimit *const limit_1, SearchLimit *const limit_2)
Creates a search limit that is reached when either of the underlying limit is reached.
void TopPeriodicCheck()
Performs PeriodicCheck on the top-level search; for instance, can be called from a nested solve to ch...
DecisionBuilder * MakePhase(const std::vector< IntVar * > &vars, IndexEvaluator1 var_evaluator, IndexEvaluator2 value_evaluator)
void MakeFixedDurationIntervalVarArray(const std::vector< IntVar * > &start_variables, const std::vector< int > &durations, const std::vector< IntVar * > &performed_variables, const std::string &name, std::vector< IntervalVar * > *const array)
This method fills the vector with interval variables built with the corresponding start and performed...
IntervalVar * RegisterIntervalVar(IntervalVar *const var)
Registers a new IntervalVar and wraps it inside a TraceIntervalVar if necessary.
IntVar ** MakeBoolVarArray(int var_count, const std::string &name)
Same but allocates an array and returns it.
int64_t Rand64(int64_t size)
Returns a random value between 0 and 'size' - 1;.
Definition: constraint_solver.h:2918
Constraint * MakePathCumul(const std::vector< IntVar * > &nexts, const std::vector< IntVar * > &active, const std::vector< IntVar * > &cumuls, const std::vector< IntVar * > &slacks, IndexEvaluator2 transit_evaluator)
Creates a constraint which accumulates values along a path such that: cumuls[next[i]] = cumuls[i] + t...
SearchMonitor * MakeExitSearchCallback(std::function< void()> callback)
IntVar * MakeIntVar(const std::vector< int > &values, const std::string &name)
MakeIntVar will create a variable with the given sparse domain.
DecisionBuilder * MakeNestedOptimize(DecisionBuilder *const db, Assignment *const solution, bool maximize, int64_t step, SearchMonitor *const monitor1, SearchMonitor *const monitor2, SearchMonitor *const monitor3)
Constraint * MakeNotMemberCt(IntExpr *expr, SortedDisjointIntervalList intervals)
expr should not be in the list of forbidden intervals.
SearchMonitor * MakeSearchTrace(const std::string &prefix)
Creates a search monitor that will trace precisely the behavior of the search.
std::function< int64_t(int64_t, int64_t)> IndexEvaluator2
Definition: constraint_solver.h:771
LocalSearchOperator * MakeOperator(const std::vector< IntVar * > &vars, const std::vector< IntVar * > &secondary_vars, IndexEvaluator3 evaluator, EvaluatorLocalSearchOperators op)
Constraint * MakeGreater(IntExpr *const expr, int value)
expr > value
void SetUseFastLocalSearch(bool use_fast_local_search)
enabled for metaheuristics.
Definition: constraint_solver.h:2974
Constraint * MakeNotMemberCt(IntExpr *const expr, std::vector< int64_t > starts, std::vector< int64_t > ends)
expr should not be in the list of forbidden intervals [start[i]..end[i]].
ABSL_MUST_USE_RESULT RegularLimit * MakeLimit(int64_t time, int64_t branches, int64_t failures, int64_t solutions, bool smart_time_check=false, bool cumulative=false)
DecisionBuilder * MakePhase(const std::vector< IntVar * > &vars, IntVarStrategy var_str, VariableValueComparator var_val1_val2_comparator)
var_val1_val2_comparator(var, val1, val2) is true iff assigning value "val1" to variable "var" is bet...
Constraint * MakeGreaterOrEqual(IntExpr *const left, IntExpr *const right)
left >= right
DecisionBuilder * MakeSolveOnce(DecisionBuilder *const db, SearchMonitor *const monitor1, SearchMonitor *const monitor2, SearchMonitor *const monitor3, SearchMonitor *const monitor4)
void AddConstraint(Constraint *const c)
Adds the constraint 'c' to the model.
ModelVisitor * MakeStatisticsModelVisitor()
Displays some nice statistics on the model.
void NewSearch(DecisionBuilder *const db, SearchMonitor *const m1)
Constraint * MakeIsLessCt(IntExpr *const left, IntExpr *const right, IntVar *const b)
b == (left < right)
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...
Constraint * MakeCumulative(const std::vector< IntervalVar * > &intervals, const std::vector< int > &demands, IntVar *const capacity, const std::string &name)
This constraint enforces that, for any integer t, the sum of the demands corresponding to an interval...
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...
bool Solve(DecisionBuilder *const db)
LocalSearchOperator * MakeMoveTowardTargetOperator(const std::vector< IntVar * > &variables, const std::vector< int64_t > &target_values)
Creates a local search operator that tries to move the assignment of some variables toward a target.
bool Solve(DecisionBuilder *const db, SearchMonitor *const m1)
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...
OptimizeVar * MakeOptimize(bool maximize, IntVar *const v, int64_t step)
Creates a objective with a given sense (true = maximization).
std::function< bool(int64_t)> IndexFilter1
Definition: constraint_solver.h:774
friend class LocalSearchProfiler
Definition: constraint_solver.h:3042
Decision * MakeRankFirstInterval(SequenceVar *const sequence, int index)
Returns a decision that tries to rank first the ith interval var in the sequence variable.
SolutionCollector * MakeNBestValueSolutionCollector(int solution_count, bool maximize)
OptimizeVar * MakeWeightedMaximize(const std::vector< IntVar * > &sub_objectives, const std::vector< int64_t > &weights, int64_t step)
Creates a maximization weigthed objective.
DecisionBuilder * MakePhase(const std::vector< IntVar * > &vars, IndexEvaluator2 eval, IndexEvaluator1 tie_breaker, EvaluatorStrategy str)
Returns a decision builder which assigns values to variables which minimize the values returned by th...
Constraint * MakeElementEquality(const std::vector< int64_t > &vals, IntVar *const index, IntVar *const target)
void ShouldFail()
These methods are only useful for the SWIG wrappers, which need a way to externally cause the Solver ...
Definition: constraint_solver.h:3076
int SearchDepth() const
Gets the search depth of the current active search.
Constraint * MakeIndexOfConstraint(const std::vector< IntVar * > &vars, IntVar *const index, int64_t target)
This constraint is a special case of the element constraint with an array of integer variables,...
IntVar * MakeIsEqualCstVar(IntExpr *const var, int64_t value)
status var of (var == value)
IntExpr * MakePiecewiseLinearExpr(IntExpr *expr, const PiecewiseLinearFunction &f)
General piecewise-linear function expression, built from f(x) where f is piecewise-linear.
int64_t unchecked_solutions() const
The number of unchecked solutions found by local search.
Demon * MakeActionDemon(Action action)
Creates a demon from a callback.
DecisionBuilder * Compose(DecisionBuilder *const db1, DecisionBuilder *const db2)
Creates a decision builder which sequentially composes decision builders.
friend class FindOneNeighbor
Definition: constraint_solver.h:3035
ABSL_MUST_USE_RESULT ImprovementSearchLimit * MakeImprovementLimit(IntVar *objective_var, bool maximize, double objective_scaling_factor, double objective_offset, double improvement_rate_coefficient, int improvement_rate_solutions_distance)
Limits the search based on the improvements of 'objective_var'.
ABSL_MUST_USE_RESULT RegularLimit * MakeLimit(const RegularLimitParameters &proto)
Creates a search limit from its protobuf description.
Constraint * MakeCircuit(const std::vector< IntVar * > &nexts)
Force the "nexts" variable to create a complete Hamiltonian path.
Constraint * MakeNonEquality(IntExpr *const left, IntExpr *const right)
left != right
Constraint * MakeIsBetweenCt(IntExpr *const expr, int64_t l, int64_t u, IntVar *const b)
b == (l <= expr <= u)
Constraint * MakeIsMemberCt(IntExpr *const expr, const std::vector< int > &values, IntVar *const boolvar)
OptimizeVar * MakeMinimize(IntVar *const v, int64_t step)
Creates a minimization objective.
void AddLocalSearchMonitor(LocalSearchMonitor *monitor)
Adds the local search monitor to the solver.
Constraint * MakeIfThenElseCt(IntVar *const condition, IntExpr *const then_expr, IntExpr *const else_expr, IntVar *const target_var)
Special cases with arrays of size two.
OptimizeVar * MakeWeightedMinimize(const std::vector< IntVar * > &sub_objectives, const std::vector< int64_t > &weights, int64_t step)
Creates a minimization weighted objective.
Constraint * MakeScalProdLessOrEqual(const std::vector< IntVar * > &vars, const std::vector< int64_t > &coefficients, int64_t cst)
DecisionBuilder * Try(const std::vector< DecisionBuilder * > &dbs)
BinaryIntervalRelation
This enum is used in Solver::MakeIntervalVarRelation to specify the temporal relation between the two...
Definition: constraint_solver.h:623
@ ENDS_AFTER_END
t1 ends after t2 end, i.e. End(t1) >= End(t2) + delay.
Definition: constraint_solver.h:625
@ ENDS_AFTER_START
t1 ends after t2 start, i.e. End(t1) >= Start(t2) + delay.
Definition: constraint_solver.h:628
@ STARTS_AT_END
t1 starts at t2 end, i.e. Start(t1) == End(t2) + delay.
Definition: constraint_solver.h:643
@ ENDS_AT_START
t1 ends at t2 start, i.e. End(t1) == Start(t2) + delay.
Definition: constraint_solver.h:634
@ STARTS_AFTER_END
t1 starts after t2 end, i.e. Start(t1) >= End(t2) + delay.
Definition: constraint_solver.h:637
@ STARTS_AFTER_START
t1 starts after t2 start, i.e. Start(t1) >= Start(t2) + delay.
Definition: constraint_solver.h:640
@ STARTS_AT_START
t1 starts at t2 start, i.e. Start(t1) == Start(t2) + delay.
Definition: constraint_solver.h:646
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.
LocalSearchOperators
This enum is used in Solver::MakeOperator to specify the neighborhood to create.
Definition: constraint_solver.h:430
@ RELOCATE
Relocate neighborhood with length of 1 (see OROPT comment).
Definition: constraint_solver.h:459
@ SWAPACTIVE
Operator which replaces an active node by an inactive one.
Definition: constraint_solver.h:509
@ MAKECHAININACTIVE
Operator which makes a "chain" of path nodes inactive.
Definition: constraint_solver.h:502
@ FULLPATHLNS
Operator which relaxes one entire path and all inactive nodes, thus defining num_paths neighbors.
Definition: constraint_solver.h:534
@ EXTENDEDSWAPACTIVE
Operator which makes an inactive node active and an active one inactive.
Definition: constraint_solver.h:521
@ PATHLNS
Operator which relaxes two sub-chains of three consecutive arcs each.
Definition: constraint_solver.h:530
@ UNACTIVELNS
Operator which relaxes all inactive nodes and one sub-chain of six consecutive arcs.
Definition: constraint_solver.h:539
@ DECREMENT
Operator which defines a neighborhood to decrement values.
Definition: constraint_solver.h:554
@ CROSS
Operator which cross exchanges the starting chains of 2 paths, including exchanging the whole paths.
Definition: constraint_solver.h:479
IntervalVar * MakeFixedInterval(int64_t start, int64_t duration, const std::string &name)
Creates a fixed and performed interval.
DecisionBuilder * MakeSolveOnce(DecisionBuilder *const db, SearchMonitor *const monitor1)
SearchMonitor * MakeSymmetryManager(SymmetryBreaker *const v1, SymmetryBreaker *const v2, SymmetryBreaker *const v3)
Constraint * MakeSumEquality(const std::vector< IntVar * > &vars, int64_t cst)
void PushState()
The PushState and PopState methods manipulates the states of the reversible objects.
bool IsLocalSearchProfilingEnabled() const
Returns whether we are profiling local search.
DecisionBuilder * MakeSolveOnce(DecisionBuilder *const db, SearchMonitor *const monitor1, SearchMonitor *const monitor2)
Demon * MakeDelayedConstraintInitialPropagateCallback(Constraint *const ct)
This method is a specialized case of the MakeConstraintDemon method to call the InitiatePropagate of ...
SolutionCollector * MakeLastSolutionCollector()
Collect the last solution of the search.
IntExpr * MakeMax(IntExpr *const expr, int64_t value)
std::max(expr, value)
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...
Constraint * MakeNonOverlappingBoxesConstraint(const std::vector< IntVar * > &x_vars, const std::vector< IntVar * > &y_vars, const std::vector< int64_t > &x_size, const std::vector< int64_t > &y_size)
IntVar * MakeIsLessCstVar(IntExpr *const var, int64_t value)
status var of (var < value)
LocalSearchOperator * MakeOperator(const std::vector< IntVar * > &vars, IndexEvaluator3 evaluator, EvaluatorLocalSearchOperators op)
Constraint * MakeSumEquality(const std::vector< IntVar * > &vars, IntVar *const var)
Constraint * MakeNoCycle(const std::vector< IntVar * > &nexts, const std::vector< IntVar * > &active, IndexFilter1 sink_handler=nullptr)
Prevent cycles.
bool Solve(DecisionBuilder *const db, SearchMonitor *const m1, SearchMonitor *const m2, SearchMonitor *const m3, SearchMonitor *const m4)
IntExpr * MakeMin(IntExpr *const expr, int64_t value)
std::min(expr, value)
Decision * MakeVariableGreaterOrEqualValue(IntVar *const var, int64_t value)
int64_t failures() const
The number of failures encountered since the creation of the solver.
Definition: constraint_solver.h:1033
SearchMonitor * MakeSymmetryManager(SymmetryBreaker *const v1, SymmetryBreaker *const v2)
DecisionBuilder * MakePhase(const std::vector< SequenceVar * > &sequences, SequenceStrategy str)
IntExpr * MakeSum(IntExpr *const left, IntExpr *const right)
left + right.
IntExpr * MakeConditionalExpression(IntVar *const condition, IntExpr *const expr, int64_t unperformed_value)
Conditional Expr condition ? expr : unperformed_value.
DecisionBuilder * MakeRestoreAssignment(Assignment *assignment)
Returns a DecisionBuilder which restores an Assignment (calls void Assignment::Restore())
DecisionBuilder * MakeSolveOnce(DecisionBuilder *const db, const std::vector< SearchMonitor * > &monitors)
void PopState()
static ConstraintSolverParameters DefaultSolverParameters()
Create a ConstraintSolverParameters proto with all the default values.
Decision * MakeVariableLessOrEqualValue(IntVar *const var, int64_t value)
DecisionBuilder * MakePhase(const std::vector< IntervalVar * > &intervals, IntervalStrategy str)
Scheduling phases.
Constraint * MakeIsEqualCt(IntExpr *const v1, IntExpr *v2, IntVar *const b)
b == (v1 == v2)
Constraint * MakeEquality(IntExpr *const expr, int64_t value)
expr == value
int constraints() const
Counts the number of constraints that have been added to the solver before the search.
Definition: constraint_solver.h:2955
DecisionBuilder * Compose(DecisionBuilder *const db1, DecisionBuilder *const db2, DecisionBuilder *const db3)
SolutionCollector * MakeBestValueSolutionCollector(const Assignment *const assignment, bool maximize)
Collect the solution corresponding to the optimal value of the objective of 'assignment'; if 'assignm...
std::string SearchContext(const Search *search) const
Constraint * MakeIsLessOrEqualCt(IntExpr *const left, IntExpr *const right, IntVar *const b)
b == (left <= right)
Constraint * MakePathPrecedenceConstraint(std::vector< IntVar * > nexts, const std::vector< std::pair< int, int >> &precedences, const std::vector< int > &lifo_path_starts, const std::vector< int > &fifo_path_starts)
Same as MakePathPrecedenceConstraint but ensures precedence pairs on some paths follow a LIFO or FIFO...
void MakeBoolVarArray(int var_count, std::vector< IntVar * > *vars)
This method will append the vector vars with 'var_count' boolean variables having no names.
DecisionBuilder * MakeLocalSearchPhase(const std::vector< IntVar * > &vars, DecisionBuilder *const first_solution, LocalSearchPhaseParameters *const parameters)
IntExpr * MakeElement(Int64ToIntVar vars, int64_t range_start, int64_t range_end, IntVar *argument)
vars(argument)
DecisionBuilder * MakeStoreAssignment(Assignment *assignment)
Returns a DecisionBuilder which stores an Assignment (calls void Assignment::Store())
Constraint * MakeSumLessOrEqual(const std::vector< IntVar * > &vars, int64_t cst)
Variation on arrays.
LocalSearchPhaseParameters * MakeLocalSearchPhaseParameters(IntVar *objective, SolutionPool *const pool, LocalSearchOperator *const ls_operator, DecisionBuilder *const sub_decision_builder)
SearchMonitor * MakeSearchLog(int branch_period, std::function< std::string()> display_callback)
At each solution, this monitor will also display result of display_callback.
Constraint * MakeNotMemberCt(IntExpr *const expr, std::vector< int > starts, std::vector< int > ends)
expr should not be in the list of forbidden intervals [start[i]..end[i]].
OptimizeVar * MakeWeightedMinimize(const std::vector< IntVar * > &sub_objectives, const std::vector< int > &weights, int64_t step)
Creates a minimization weighted objective.
Constraint * MakeLessOrEqual(IntExpr *const expr, int value)
expr <= value
EvaluatorStrategy
This enum is used by Solver::MakePhase to specify how to select variables and values during the searc...
Definition: constraint_solver.h:391
@ CHOOSE_STATIC_GLOBAL_BEST
Pairs are compared at the first call of the selector, and results are cached.
Definition: constraint_solver.h:396
@ CHOOSE_DYNAMIC_GLOBAL_BEST
Pairs are compared each time a variable is selected.
Definition: constraint_solver.h:402
void set_optimization_direction(OptimizationDirection direction)
Definition: constraint_solver.h:1061
LocalSearchOperator * ConcatenateOperators(const std::vector< LocalSearchOperator * > &ops, bool restart)
Decision * MakeAssignVariablesValuesOrFail(const std::vector< IntVar * > &vars, const std::vector< int64_t > &values)
SearchMonitor * MakeSearchLog(int branch_period)
The SearchMonitors below will display a periodic search log on LOG(INFO) every branch_period branches...
IntExpr * MakeMin(IntExpr *const left, IntExpr *const right)
std::min (left, right)
Constraint * MakeIsDifferentCstCt(IntExpr *const var, int64_t value, IntVar *const boolvar)
boolvar == (var != value)
DecisionBuilder * Try(DecisionBuilder *const db1, DecisionBuilder *const db2, DecisionBuilder *const db3, DecisionBuilder *const db4)
IntExpr * MakeMin(const std::vector< IntVar * > &vars)
std::min(vars)
IntVar * MakeIntVar(int64_t min, int64_t max)
MakeIntVar will create the best range based int var for the bounds given.
Constraint * MakeDistribute(const std::vector< IntVar * > &vars, int64_t card_min, int64_t card_max, int64_t card_size)
Aggregated version of count with bounded cardinalities: forall j in 0 .
SearchMonitor * MakeGuidedLocalSearch(bool maximize, IntVar *objective, IndexEvaluator2 objective_function, int64_t step, const std::vector< IntVar * > &vars, double penalty_factor, bool reset_penalties_on_new_best_solution=false)
Creates a Guided Local Search monitor.
void MakeFixedDurationIntervalVarArray(int count, int64_t start_min, int64_t start_max, int64_t 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.
DecisionBuilder * MakePhase(const std::vector< IntVar * > &vars, IndexEvaluator1 var_evaluator, IntValueStrategy val_str)
OptimizeVar * MakeWeightedOptimize(bool maximize, const std::vector< IntVar * > &sub_objectives, const std::vector< int64_t > &weights, int64_t step)
Creates a weighted objective with a given sense (true = maximization).
bool Solve(DecisionBuilder *const db, const std::vector< SearchMonitor * > &monitors)
Constraint * MakeAllDifferent(const std::vector< IntVar * > &vars)
All variables are pairwise different.
IntExpr * MakeIndexExpression(const std::vector< IntVar * > &vars, int64_t value)
Returns the expression expr such that vars[expr] == value.
void clear_fail_intercept()
Definition: constraint_solver.h:2968
Constraint * MakeNotBetweenCt(IntExpr *const expr, int64_t l, int64_t u)
(expr < l || expr > u) This constraint is lazy as it will not make holes in the domain of variables.
IntExpr * MakeMax(IntExpr *const expr, int value)
std::max(expr, value)
SearchMonitor * MakeGuidedLocalSearch(bool maximize, IntVar *objective, IndexEvaluator3 objective_function, int64_t step, const std::vector< IntVar * > &vars, const std::vector< IntVar * > &secondary_vars, double penalty_factor, bool reset_penalties_on_new_best_solution=false)
Demon * MakeClosureDemon(Closure closure)
!defined(SWIG)
void MakeFixedDurationIntervalVarArray(const std::vector< IntVar * > &start_variables, const std::vector< int64_t > &durations, const std::vector< IntVar * > &performed_variables, const std::string &name, std::vector< IntervalVar * > *const array)
This method fills the vector with interval variables built with the corresponding start and performed...
void NewSearch(DecisionBuilder *const db, SearchMonitor *const m1, SearchMonitor *const m2, SearchMonitor *const m3, SearchMonitor *const m4)
DecisionBuilder * MakeLocalSearchPhase(Assignment *const assignment, LocalSearchPhaseParameters *const parameters)
Local Search decision builders factories.
OptimizeVar * MakeWeightedOptimize(bool maximize, const std::vector< IntVar * > &sub_objectives, const std::vector< int > &weights, int64_t step)
Creates a weighted objective with a given sense (true = maximization).
DecisionBuilder * MakeDefaultPhase(const std::vector< IntVar * > &vars, const DefaultPhaseParameters ¶meters)
RegularLimitParameters MakeDefaultRegularLimitParameters() const
Creates a regular limit proto containing default values.
IntVar * MakeIntVar(int64_t min, int64_t max, const std::string &name)
MakeIntVar will create the best range based int var for the bounds given.
IntVar * MakeIsDifferentVar(IntExpr *const v1, IntExpr *const v2)
status var of (v1 != v2)
IntExpr * MakeElement(const std::vector< IntVar * > &vars, IntVar *const index)
vars[expr]
void MakeFixedDurationIntervalVarArray(const std::vector< IntVar * > &start_variables, int64_t duration, const std::string &name, std::vector< IntervalVar * > *const array)
This method fills the vector with 'count' interval var built with the corresponding start variables.
void MakeIntVarArray(int var_count, int64_t vmin, int64_t vmax, std::vector< IntVar * > *vars)
This method will append the vector vars with 'var_count' variables having bounds vmin and vmax and ha...
IntervalVar * MakeIntervalVar(int64_t start_min, int64_t start_max, int64_t duration_min, int64_t duration_max, int64_t end_min, int64_t end_max, bool optional, const std::string &name)
Creates an interval var by specifying the bounds on start, duration, and end.
Constraint * MakeNotMemberCt(IntExpr *const expr, const std::vector< int > &values)
IntVar * MakeIsMemberVar(IntExpr *const expr, const std::vector< int64_t > &values)
bool UseFastLocalSearch() const
Returns true if fast local search is enabled.
Definition: constraint_solver.h:2978
IntExpr * MakeScalProd(const std::vector< IntVar * > &vars, const std::vector< int > &coefs)
scalar product
Constraint * MakeDistribute(const std::vector< IntVar * > &vars, const std::vector< int > &values, const std::vector< IntVar * > &cards)
Aggregated version of count: |{i | v[i] == values[j]}| == cards[j].
bool InstrumentsVariables() const
Returns whether we are tracing variables.
IntExpr * MakeProd(IntExpr *const left, IntExpr *const right)
left * right
@ kEndNextDecision
@ kRefuteDecision
@ kLocalOptimum
@ kIsUncheckedSolutionLimitReached
@ kAcceptSolution
@ kPeriodicCheck
@ kAcceptUncheckedNeighbor
@ kNoMoreSolutions
@ kAcceptDelta
@ kEnterSearch
@ kBeginNextDecision
@ kRestartSearch
@ kEndInitialPropagation
@ kAcceptNeighbor
@ kAfterDecision
@ kProgressPercent
@ kBeginInitialPropagation
@ kApplyDecision
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...
DecisionBuilder * MakeNestedOptimize(DecisionBuilder *const db, Assignment *const solution, bool maximize, int64_t step, SearchMonitor *const monitor1, SearchMonitor *const monitor2)
Decision * MakeFailDecision()
IntVar * MakeIsMemberVar(IntExpr *const expr, const std::vector< int > &values)
LocalSearchFilter * MakeAcceptFilter()
Local Search Filters.
Constraint * MakeMaxEquality(const std::vector< IntVar * > &vars, IntVar *const max_var)
ModelVisitor * MakeVariableDegreeVisitor(absl::flat_hash_map< const IntVar *, int > *const map)
Compute the number of constraints a variable is attached to.
LocalSearchOperator * MakeOperator(const std::vector< IntVar * > &vars, const std::vector< IntVar * > &secondary_vars, LocalSearchOperators op)
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...
int64_t accepted_neighbors() const
The number of accepted neighbors.
Definition: constraint_solver.h:1042
IntervalVar * MakeFixedDurationStartSyncedOnEndIntervalVar(IntervalVar *const interval_var, int64_t duration, int64_t offset)
Creates an interval var with a fixed duration whose start is synchronized with the end of another int...
Decision * MakeAssignVariablesValuesOrDoNothing(const std::vector< IntVar * > &vars, const std::vector< int64_t > &values)
DecisionBuilder * MakePhase(const std::vector< IntVar * > &vars, IntVarStrategy var_str, IndexEvaluator2 value_evaluator, IndexEvaluator1 tie_breaker)
Constraint * MakeSumGreaterOrEqual(const std::vector< IntVar * > &vars, int64_t cst)
SearchMonitor * MakeSearchLog(int branch_period, IntVar *var, std::function< std::string()> display_callback)
At each solution, this monitor will display the 'var' value and the result of display_callback.
Constraint * MakeNonOverlappingNonStrictBoxesConstraint(const std::vector< IntVar * > &x_vars, const std::vector< IntVar * > &y_vars, const std::vector< int64_t > &x_size, const std::vector< int64_t > &y_size)
IntVar * MakeIntConst(int64_t val)
IntConst will create a constant expression.
LocalSearchOperator * MakeMoveTowardTargetOperator(const Assignment &target)
Creates a local search operator that tries to move the assignment of some variables toward a target.
Constraint * MakeDistribute(const std::vector< IntVar * > &vars, const std::vector< int > &values, const std::vector< int > &card_min, const std::vector< int > &card_max)
Aggregated version of count with bounded cardinalities: forall j in 0 .
std::string LocalSearchProfile() const
Returns local search profiling information in a human readable format.
void Accept(ModelVisitor *const visitor) const
Accepts the given model visitor.
SolutionPool * MakeDefaultSolutionPool()
Solution Pool.
IntExpr * MakeModulo(IntExpr *const x, int64_t mod)
Modulo expression x % mod (with the python convention for modulo).
Constraint * MakeIsGreaterOrEqualCstCt(IntExpr *const var, int64_t value, IntVar *const boolvar)
boolvar == (var >= value)
int SearchLeftDepth() const
Gets the search left depth of the current active search.
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....
IntExpr * CastExpression(const IntVar *const var) const
!defined(SWIG)
IntExpr * MakeMonotonicElement(IndexEvaluator1 values, bool increasing, IntVar *const index)
Function based element.
Constraint * MakeDeviation(const std::vector< IntVar * > &vars, IntVar *const deviation_var, int64_t total_sum)
Deviation constraint: sum_i |n * vars[i] - total_sum| <= deviation_var and sum_i vars[i] == total_sum...
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...
Constraint * MakeAllDifferent(const std::vector< IntVar * > &vars, bool stronger_propagation)
All variables are pairwise different.
int TopProgressPercent()
Returns a percentage representing the propress of the search before reaching the limits of the top-le...
Constraint * MakeDistribute(const std::vector< IntVar * > &vars, const std::vector< int64_t > &values, const std::vector< int64_t > &card_min, const std::vector< int64_t > &card_max)
Aggregated version of count with bounded cardinalities: forall j in 0 .
Constraint * MakeElementEquality(const std::vector< IntVar * > &vars, IntVar *const index, IntVar *const target)
const std::string & context() const
Gets the current context of the search.
Definition: constraint_solver.h:1055
bool CurrentlyInSolve() const
Returns true whether the current search has been created using a Solve() call instead of a NewSearch ...
Constraint * MakeNoCycle(const std::vector< IntVar * > &nexts, const std::vector< IntVar * > &active, IndexFilter1 sink_handler, bool assume_paths)
Constraint * MakeLess(IntExpr *const expr, int value)
expr < value
DecisionBuilder * MakeDefaultPhase(const std::vector< IntVar * > &vars)
Constraint * MakeCumulative(const std::vector< IntervalVar * > &intervals, const std::vector< IntVar * > &demands, int64_t capacity, const std::string &name)
This constraint enforces that, for any integer t, the sum of demands corresponding to an interval con...
IntExpr * MakeSum(IntExpr *const expr, int64_t value)
expr + value.
T * RevAlloc(T *object)
Registers the given object as being reversible.
Definition: constraint_solver.h:830
IntVarStrategy
This enum describes the strategy used to select the next branching variable at each node during the s...
Definition: constraint_solver.h:270
@ CHOOSE_RANDOM
Randomly select one of the remaining unbound variables.
Definition: constraint_solver.h:283
@ CHOOSE_MIN_SIZE
Among unbound variables, select the variable with the smallest size.
Definition: constraint_solver.h:332
@ CHOOSE_PATH
Selects the next unbound variable on a path, the path being defined by the variables: var[i] correspo...
Definition: constraint_solver.h:345
@ CHOOSE_HIGHEST_MAX
Among unbound variables, select the variable with the highest maximal value.
Definition: constraint_solver.h:327
@ 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:291
@ 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:315
@ 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:341
@ 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:299
@ CHOOSE_MAX_SIZE
Among unbound variables, select the variable with the highest size.
Definition: constraint_solver.h:337
@ 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:307
@ CHOOSE_LOWEST_MIN
Among unbound variables, select the variable with the smallest minimal value.
Definition: constraint_solver.h:321
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...
IntExpr * MakeProd(IntExpr *const expr, int64_t value)
expr * value
IntExpr * MakeMax(IntExpr *const left, IntExpr *const right)
std::max(left, right)
Constraint * MakeGreaterOrEqual(IntExpr *const expr, int64_t value)
expr >= value
bool NextSolution()
Constraint * MakeIsEqualCstCt(IntExpr *const var, int64_t value, IntVar *const boolvar)
boolvar == (var == value)
@ CHOOSE_MIN_SLACK_RANK_FORWARD
Definition: constraint_solver.h:409
@ CHOOSE_RANDOM_RANK_FORWARD
Definition: constraint_solver.h:410
DecisionBuilder * MakePhase(IntVar *const v0, IntVar *const v1, IntVar *const v2, IntVar *const v3, IntVarStrategy var_str, IntValueStrategy val_str)
void MakeIntervalVarArray(int count, int64_t start_min, int64_t start_max, int64_t duration_min, int64_t duration_max, int64_t end_min, int64_t 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.
Constraint * MakePathPrecedenceConstraint(std::vector< IntVar * > nexts, const std::vector< std::pair< int, int >> &precedences)
Constraint enforcing, for each pair (i,j) in precedences, i to be before j in paths defined by next v...
Constraint * MakeTemporalDisjunction(IntervalVar *const t1, IntervalVar *const t2)
This constraint implements a temporal disjunction between two interval vars.
void NewSearch(DecisionBuilder *const db, SearchMonitor *const m1, SearchMonitor *const m2, SearchMonitor *const m3)
uint64_t stamp() const
The stamp indicates how many moves in the search tree we have performed.
bool Solve(DecisionBuilder *const db, SearchMonitor *const m1, SearchMonitor *const m2, SearchMonitor *const m3)
SolutionCollector * MakeAllSolutionCollector(const Assignment *const assignment)
Collect all solutions of the search.
Constraint * MakeDistribute(const std::vector< IntVar * > &vars, const std::vector< IntVar * > &cards)
Aggregated version of count: |{i | v[i] == j}| == cards[j].
DecisionBuilder * MakeNestedOptimize(DecisionBuilder *const db, Assignment *const solution, bool maximize, int64_t step)
NestedOptimize will collapse a search tree described by a decision builder 'db' and a set of monitors...
Constraint * MakeCount(const std::vector< IntVar * > &vars, int64_t value, int64_t max_count)
|{i | vars[i] == value}| == max_count
Constraint * MakeEquality(IntExpr *const expr, int value)
expr == value
Decision * MakeSplitVariableDomain(IntVar *const var, int64_t val, bool start_with_lower_half)
LocalSearchOperator * MakeOperator(const std::vector< IntVar * > &vars, LocalSearchOperators op)
Local Search Operators.
Constraint * MakeLessOrEqual(IntExpr *const left, IntExpr *const right)
left <= right
LocalSearchOperator * MultiArmedBanditConcatenateOperators(const std::vector< LocalSearchOperator * > &ops, double memory_coefficient, double exploration_coefficient, bool maximize)
Creates a local search operator which concatenates a vector of operators.
Constraint * MakeIsLessCstCt(IntExpr *const v, int64_t c, IntVar *const b)
b == (v < c)
DecisionBuilder * MakeSolveOnce(DecisionBuilder *const db, SearchMonitor *const monitor1, SearchMonitor *const monitor2, SearchMonitor *const monitor3)
ABSL_MUST_USE_RESULT RegularLimit * MakeTimeLimit(absl::Duration time)
Creates a search limit that constrains the running time.
ABSL_MUST_USE_RESULT RegularLimit * MakeFailuresLimit(int64_t failures)
Creates a search limit that constrains the number of failures that can happen when exploring the sear...
std::function< int64_t(const IntVar *v, int64_t id)> VariableValueSelector
Definition: constraint_solver.h:784
IntExpr * MakeDiv(IntExpr *const numerator, IntExpr *const denominator)
numerator / denominator (integer division). Terms need to be positive.
Decision * MakeRankLastInterval(SequenceVar *const sequence, int index)
Returns a decision that tries to rank last the ith interval var in the sequence variable.
SearchMonitor * MakeLubyRestart(int scale_factor)
This search monitor will restart the search periodically.
IntervalVar * MakeFixedDurationIntervalVar(IntVar *const start_variable, int64_t duration, IntVar *const performed_variable, const std::string &name)
Creates an interval var with a fixed duration, and performed_variable.
LocalSearchOperator * ConcatenateOperators(const std::vector< LocalSearchOperator * > &ops, std::function< int64_t(int, int)> evaluator)
Constraint * MakeTransitionConstraint(const std::vector< IntVar * > &vars, const IntTupleSet &transition_table, int64_t initial_state, const std::vector< int > &final_states)
This constraint create a finite automaton that will check the sequence of variables vars.
IntExpr * MakeElement(const std::vector< int > &values, IntVar *const index)
values[index]
bool NameAllVariables() const
Returns whether all variables should be named.
OptimizeVar * MakeWeightedMaximize(const std::vector< IntVar * > &sub_objectives, const std::vector< int > &weights, int64_t step)
Creates a maximization weigthed objective.
Constraint * MakeGreater(IntExpr *const left, IntExpr *const right)
left > right
Constraint * MakeTransitionConstraint(const std::vector< IntVar * > &vars, const IntTupleSet &transition_table, int64_t initial_state, const std::vector< int64_t > &final_states)
This constraint create a finite automaton that will check the sequence of variables vars.
IntExpr * MakeConvexPiecewiseExpr(IntExpr *expr, int64_t early_cost, int64_t early_date, int64_t late_date, int64_t late_cost)
Convex piecewise function.
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:841
Constraint * MakeEquality(IntExpr *const left, IntExpr *const right)
left == right
Constraint * MakeIsGreaterCstCt(IntExpr *const v, int64_t c, IntVar *const b)
b == (v > c)
uint64_t fail_stamp() const
The fail_stamp() is incremented after each backtrack.
void SetBranchSelector(BranchSelector bs)
Sets the given branch selector on the current active search.
SolutionCollector * MakeFirstSolutionCollector()
Collect the first solution of the search.
friend class PropagationBaseObject
Definition: constraint_solver.h:3037
IntVar * MakeIsGreaterCstVar(IntExpr *const var, int64_t value)
status var of (var > value)
Constraint * MakeIsGreaterOrEqualCt(IntExpr *const left, IntExpr *const right, IntVar *const b)
b == (left >= right)
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 ...
IntVarLocalSearchFilter * MakeSumObjectiveFilter(const std::vector< IntVar * > &vars, const std::vector< IntVar * > &secondary_vars, IndexEvaluator3 values, Solver::LocalSearchFilterBound filter_enum)
IntExpr * MakeElement(const std::vector< int64_t > &values, IntVar *const index)
values[index]
Constraint * MakeIntervalVarRelation(IntervalVar *const t, UnaryIntervalRelation r, int64_t d)
This method creates a relation between an interval var and a date.
IntExpr * RegisterIntExpr(IntExpr *const expr)
Registers a new IntExpr and wraps it inside a TraceIntExpr if necessary.
DecisionBuilder * MakePhase(IntVar *const v0, IntVarStrategy var_str, IntValueStrategy val_str)
Shortcuts for small arrays.
DecisionBuilder * Compose(const std::vector< DecisionBuilder * > &dbs)
Constraint * MakeIsLessOrEqualCstCt(IntExpr *const var, int64_t value, IntVar *const boolvar)
boolvar == (var <= value)
IntervalVar * MakeFixedDurationIntervalVar(IntVar *const start_variable, int64_t duration, const std::string &name)
Creates a performed interval var with a fixed duration.
Constraint * MakeScalProdEquality(const std::vector< IntVar * > &vars, const std::vector< int > &coefficients, IntVar *const target)
Constraint * MakeCumulative(const std::vector< IntervalVar * > &intervals, const std::vector< int64_t > &demands, int64_t capacity, const std::string &name)
This constraint forces that, for any integer t, the sum of the demands corresponding to an interval c...
std::function< void()> Closure
Definition: constraint_solver.h:790
IntExpr * MakeMax(const std::vector< IntVar * > &vars)
std::max(vars)
Constraint * MakeCumulative(const std::vector< IntervalVar * > &intervals, const std::vector< int64_t > &demands, IntVar *const capacity, const std::string &name)
This constraint forces that, for any integer t, the sum of the demands corresponding to an interval c...
std::function< void(Solver *)> Action
Definition: constraint_solver.h:789
ABSL_MUST_USE_RESULT RegularLimit * MakeLimit(absl::Duration time, int64_t branches, int64_t failures, int64_t solutions, bool smart_time_check=false, bool cumulative=false)
Limits the search with the 'time', 'branches', 'failures' and 'solutions' limits.
DecisionBuilder * Try(DecisionBuilder *const db1, DecisionBuilder *const db2, DecisionBuilder *const db3)
Constraint * MakeMinEquality(const std::vector< IntVar * > &vars, IntVar *const min_var)
DecisionBuilder * MakeNestedOptimize(DecisionBuilder *const db, Assignment *const solution, bool maximize, int64_t step, SearchMonitor *const monitor1)
LocalSearchPhaseParameters * MakeLocalSearchPhaseParameters(IntVar *objective, LocalSearchOperator *const ls_operator, DecisionBuilder *const sub_decision_builder, RegularLimit *const limit, LocalSearchFilterManager *filter_manager)
DecisionBuilder * MakePhase(IntVar *const v0, IntVar *const v1, IntVarStrategy var_str, IntValueStrategy val_str)
void set_context(const std::string &context)
Sets the current context of the search.
Definition: constraint_solver.h:1052
Constraint * MakeIsDifferentCt(IntExpr *const v1, IntExpr *const v2, IntVar *const b)
b == (v1 != v2)
Constraint * MakeMemberCt(IntExpr *const expr, const std::vector< int > &values)
Constraint * MakeLightElement(F values, IntVar *const var, IntVar *const index1, IntVar *const index2, std::function< bool()> deep_serialize=nullptr)
Light two-dimension function-based element constraint ensuring var == values(index1,...
Definition: constraint_solver.h:1223
IntVar * MakeIsEqualVar(IntExpr *const v1, IntExpr *v2)
status var of (v1 == v2)
Assignment * MakeAssignment(const Assignment *const a)
This method creates an assignment which is a copy of 'a'.
Demon * RegisterDemon(Demon *const demon)
Adds a new demon and wraps it inside a DemonProfiler if necessary.
void ExportProfilingOverview(const std::string &filename)
Exports the profiling information in a human readable overview.
DecisionBuilder * MakePhase(const std::vector< IntVar * > &vars, IndexEvaluator1 var_evaluator, IndexEvaluator2 value_evaluator, IndexEvaluator1 tie_breaker)
SearchMonitor * MakeSearchLog(int branch_period, IntVar *const var)
At each solution, this monitor also display the var value.
Decision * MakeDecision(Action apply, Action refute)
Solver(const std::string &name, const ConstraintSolverParameters ¶meters)
MarkerType
This enum is used internally in private methods Solver::PushState and Solver::PopState to tag states ...
Definition: constraint_solver.h:717
@ REVERSIBLE_ACTION
Definition: constraint_solver.h:717
void MakeFixedDurationIntervalVarArray(const std::vector< IntVar * > &start_variables, const std::vector< int > &durations, const std::string &name, std::vector< IntervalVar * > *const array)
This method fills the vector with interval variables built with the corresponding start variables.
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.
DecisionBuilder * MakePhase(const std::vector< IntVar * > &vars, IntVarStrategy var_str, IntValueStrategy val_str)
Phases on IntVar arrays.
Constraint * MakeElementEquality(const std::vector< int > &vals, IntVar *const index, IntVar *const target)
PropagationMonitor * GetPropagationMonitor() const
Returns the propagation monitor.
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...
std::function< int64_t(int64_t)> IndexEvaluator1
Callback typedefs.
Definition: constraint_solver.h:770
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...
int32_t Rand32(int32_t size)
Returns a random value between 0 and 'size' - 1;.
Definition: constraint_solver.h:2924
IntVar * MakeIntConst(int64_t val, const std::string &name)
IntConst will create a constant expression.
std::function< DecisionModification()> BranchSelector
Definition: constraint_solver.h:787
bool InstrumentsDemons() const
Returns whether we are instrumenting demons.
OptimizeVar * MakeMaximize(IntVar *const v, int64_t step)
Creates a maximization objective.
bool SolveAndCommit(DecisionBuilder *const db, SearchMonitor *const m1)
Constraint * MakeAbsEquality(IntVar *const var, IntVar *const abs_var)
Creates the constraint abs(var) == abs_var.
Constraint * MakeScalProdEquality(const std::vector< IntVar * > &vars, const std::vector< int64_t > &coefficients, int64_t cst)
void set_fail_intercept(std::function< void()> fail_intercept)
Internal.
Definition: constraint_solver.h:2964
ABSL_MUST_USE_RESULT RegularLimit * MakeBranchesLimit(int64_t branches)
Creates a search limit that constrains the number of branches explored in the search tree.
Constraint * MakeLessOrEqual(IntExpr *const expr, int64_t value)
expr <= value
void Fail()
Abandon the current branch in the search tree. A backtrack will follow.
Constraint * MakePathCumul(const std::vector< IntVar * > &nexts, const std::vector< IntVar * > &active, const std::vector< IntVar * > &cumuls, IndexEvaluator2 transit_evaluator)
Creates a constraint which accumulates values along a path such that: cumuls[next[i]] = cumuls[i] + t...
SearchMonitor * MakeSearchLog(int branch_period, OptimizeVar *const opt_var)
OptimizeVar Search Logs At each solution, this monitor will also display the 'opt_var' value.
LocalSearchMonitor * GetLocalSearchMonitor() const
Returns the local search monitor.
IntervalVar * MakeIntervalRelaxedMax(IntervalVar *const interval_var)
Creates and returns an interval variable that wraps around the given one, relaxing the max start and ...
Assignment * GetOrCreateLocalSearchState()
Returns (or creates) an assignment representing the state of local search.
IntVar * MakeIsLessOrEqualVar(IntExpr *const left, IntExpr *const right)
status var of (left <= right)
IntExpr * MakeElement(IndexEvaluator2 values, IntVar *const index1, IntVar *const index2)
2D version of function-based element expression, values(expr1, expr2).
void NewSearch(DecisionBuilder *const db, SearchMonitor *const m1, SearchMonitor *const m2)
int64_t solutions() const
The number of solutions found since the start of the search.
IntVar * MakeIsDifferentCstVar(IntExpr *const var, int64_t value)
status var of (var != value)
IntervalVar * MakeFixedDurationIntervalVar(int64_t start_min, int64_t start_max, int64_t duration, bool optional, const std::string &name)
Creates an interval var with a fixed duration.
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...
~Solver()
SolutionCollector * MakeAllSolutionCollector()
Collect all solutions of the search.
ABSL_MUST_USE_RESULT RegularLimit * MakeSolutionsLimit(int64_t solutions)
Creates a search limit that constrains the number of solutions found during the search.
Constraint * MakeElementEquality(const std::vector< IntVar * > &vars, IntVar *const index, int64_t target)
Constraint * MakeNonEquality(IntExpr *const expr, int value)
expr != value
std::function< IntVar *(int64_t)> Int64ToIntVar
Definition: constraint_solver.h:776
SolutionCollector * MakeNBestValueSolutionCollector(const Assignment *const assignment, int solution_count, bool maximize)
Same as MakeBestValueSolutionCollector but collects the best solution_count solutions.
std::function< bool(int64_t, int64_t, int64_t)> VariableValueComparator
Definition: constraint_solver.h:786
void FinishCurrentSearch()
Tells the solver to kill or restart the current search.
void NewSearch(DecisionBuilder *const db, const std::vector< SearchMonitor * > &monitors)
Constraint * MakeNonOverlappingNonStrictBoxesConstraint(const std::vector< IntVar * > &x_vars, const std::vector< IntVar * > &y_vars, const std::vector< int > &x_size, const std::vector< int > &y_size)
Constraint * MakeAllDifferentExcept(const std::vector< IntVar * > &vars, int64_t escape_value)
All variables are pairwise different, unless they are assigned to the escape value.
Constraint * MakeScalProdEquality(const std::vector< IntVar * > &vars, const std::vector< int > &coefficients, int64_t cst)
Constraint * MakeIntervalVarRelation(IntervalVar *const t1, BinaryIntervalRelation r, IntervalVar *const t2)
This method creates a relation between two interval vars.
Constraint * MakeLexicalLess(const std::vector< IntVar * > &left, const std::vector< IntVar * > &right)
Creates a constraint that enforces that left is lexicographically less than right.
Decision * balancing_decision() const
Definition: constraint_solver.h:2960
LocalSearchOperator * ConcatenateOperators(const std::vector< LocalSearchOperator * > &ops)
Creates a local search operator which concatenates a vector of operators.
IntVar * MakeIsBetweenVar(IntExpr *const v, int64_t l, int64_t u)
IntVar * RegisterIntVar(IntVar *const var)
Registers a new IntVar and wraps it inside a TraceIntVar if necessary.
IntExpr * MakePower(IntExpr *const expr, int64_t n)
expr ^ n (n > 0)
IntExpr * MakeScalProd(const std::vector< IntVar * > &vars, const std::vector< int64_t > &coefs)
scalar product
EvaluatorLocalSearchOperators
This enum is used in Solver::MakeOperator associated with an evaluator to specify the neighborhood to...
Definition: constraint_solver.h:568
LocalSearchFilterBound
This enum is used in Solver::MakeLocalSearchObjectiveFilter.
Definition: constraint_solver.h:596
@ GE
Move is accepted when the current objective value >= objective.Min.
Definition: constraint_solver.h:598
@ LE
Move is accepted when the current objective value <= objective.Max.
Definition: constraint_solver.h:600
@ EQ
Move is accepted when the current objective value is in the interval objective.Min .
Definition: constraint_solver.h:603
SearchMonitor * MakeConstantRestart(int frequency)
This search monitor will restart the search periodically after 'frequency' failures.
Decision * MakeAssignVariableValueOrDoNothing(IntVar *const var, int64_t value)
Constraint * MakeLess(IntExpr *const left, IntExpr *const right)
left < right
DecisionBuilder * MakeLocalSearchPhase(const std::vector< SequenceVar * > &vars, DecisionBuilder *const first_solution, LocalSearchPhaseParameters *const parameters)
OptimizationDirection optimization_direction() const
The direction of optimization, getter and setter.
Definition: constraint_solver.h:1058
DecisionBuilder * MakeSolveOnce(DecisionBuilder *const db)
SolveOnce will collapse a search tree described by a decision builder 'db' and a set of monitors and ...
A symmetry breaker is an object that will visit a decision and create the 'symmetrical' decision in r...
Definition: constraint_solveri.h:2005
ABSL_DECLARE_FLAG(int64_t, cp_random_seed)
Declaration of the core objects for the constraint solver.
Collection of objects used to extend the Constraint Solver library.
Definition: constraint_solver.h:109
std::ostream & operator<<(std::ostream &out, const Solver *const s)
void SetAssignmentFromAssignment(Assignment *target_assignment, const std::vector< IntVar * > &target_vars, const Assignment *source_assignment, const std::vector< IntVar * > &source_vars)
NOLINT.
This struct holds all parameters for the default search.
Definition: constraint_solver.h:173
DefaultPhaseParameters()
int heuristic_num_failures_limit
The failure limit for each heuristic that we run.
Definition: constraint_solver.h:210
int initialization_splits
Maximum number of intervals that the initialization of impacts will scan per variable.
Definition: constraint_solver.h:197
DisplayLevel
Definition: constraint_solver.h:186
DecisionBuilder * decision_builder
When defined, this overrides the default impact based decision builder.
Definition: constraint_solver.h:227
DisplayLevel display_level
This represents the amount of information displayed by the default search.
Definition: constraint_solver.h:221
ValueSelection value_selection_schema
This parameter describes which value to select for a given var.
Definition: constraint_solver.h:193
VariableSelection
Definition: constraint_solver.h:175
@ CHOOSE_MAX_VALUE_IMPACT
Definition: constraint_solver.h:178
@ CHOOSE_MAX_SUM_IMPACT
Definition: constraint_solver.h:176
@ CHOOSE_MAX_AVERAGE_IMPACT
Definition: constraint_solver.h:177
VariableSelection var_selection_schema
This parameter describes how the next variable to instantiate will be chosen.
Definition: constraint_solver.h:190
ValueSelection
Definition: constraint_solver.h:181
@ SELECT_MAX_IMPACT
Definition: constraint_solver.h:183
@ SELECT_MIN_IMPACT
Definition: constraint_solver.h:182
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:214
bool use_last_conflict
Should we use last conflict method. The default is false.
Definition: constraint_solver.h:224
int heuristic_period
The distance in nodes between each run of the heuristics.
Definition: constraint_solver.h:207
int random_seed
Seed used to initialize the random part in some heuristics.
Definition: constraint_solver.h:217
bool run_all_heuristics
The default phase will run heuristics periodically.
Definition: constraint_solver.h:202
static Iterator Begin(IntVarIterator *it)
These are the only way to construct an Iterator.
Definition: constraint_solver.h:4085
bool operator!=(const Iterator &other) const
Definition: constraint_solver.h:4101
int64_t operator*() const
Definition: constraint_solver.h:4092
static Iterator End(IntVarIterator *it)
Definition: constraint_solver.h:4088
Iterator & operator++()
Definition: constraint_solver.h:4096
int64_t branches
Definition: constraint_solver.h:4297
bool operator<(const SolutionData &other) const
Definition: constraint_solver.h:4300
int64_t objective_value
Definition: constraint_solver.h:4299
Assignment * solution
Definition: constraint_solver.h:4295
int64_t failures
Definition: constraint_solver.h:4298
int64_t time
Definition: constraint_solver.h:4296
Holds semantic information stating that the 'expression' has been cast into 'variable' using the Var(...
Definition: constraint_solver.h:255
IntegerCastInfo(IntVar *const v, IntExpr *const e, Constraint *const c)
Definition: constraint_solver.h:258
IntExpr * expression
Definition: constraint_solver.h:261
IntegerCastInfo()
Definition: constraint_solver.h:256
IntVar * variable
Definition: constraint_solver.h:260
Constraint * maintainer
Definition: constraint_solver.h:262
Creates a search monitor from logging parameters.
Definition: constraint_solver.h:2379
int branch_period
SearchMonitors will display a periodic search log every branch_period branches explored.
Definition: constraint_solver.h:2382
double offset
Definition: constraint_solver.h:2391
OptimizeVar * objective
SearchMonitors will display values of objective or variable (both cannot be used together).
Definition: constraint_solver.h:2385
std::function< std::string()> display_callback
SearchMonitors will display the result of display_callback at each new solution found and when the se...
Definition: constraint_solver.h:2395
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:2390
bool display_on_new_solutions_only
To be used to protect from cases where display_callback assumes variables are instantiated,...
Definition: constraint_solver.h:2398
IntVar * variable
Definition: constraint_solver.h:2386