C++ Reference
C++ Reference: Routing
constraint_solveri.h
Go to the documentation of this file.
125 };
1536 int64_t GetActiveInAlternativeSet(int alternative_index) const {
2088 VOID_FALSE_CONSTRAINT = 0,
2094 VAR_CONSTANT_EQUALITY = 0,
2102 VAR_CONSTANT_CONSTANT_BETWEEN = 0,
2107 EXPR_EXPR_EQUALITY = 0,
2117 EXPR_OPPOSITE = 0,
2124 EXPR_EXPR_DIFFERENCE = 0,
2138 EXPR_EXPR_CONSTANT_CONDITIONAL = 0,
2143 EXPR_CONSTANT_DIFFERENCE = 0,
2156 VAR_CONSTANT_CONSTANT_SEMI_CONTINUOUS = 0,
2161 VAR_CONSTANT_ARRAY_ELEMENT = 0,
2166 VAR_ARRAY_CONSTANT_ARRAY_SCAL_PROD = 0,
2171 VAR_ARRAY_MAX = 0,
2178 VAR_ARRAY_CONSTANT_INDEX = 0,
Argument Holder: useful when visiting a model.
Definition: constraint_solveri.h:2323
const std::vector< IntVar * > & FindIntegerVariableArrayArgumentOrDie(const std::string &arg_name) const
bool HasIntegerVariableArrayArgument(const std::string &arg_name) const
void SetSequenceArgument(const std::string &arg_name, SequenceVar *const var)
const IntTupleSet & FindIntegerMatrixArgumentOrDie(const std::string &arg_name) const
void SetIntegerExpressionArgument(const std::string &arg_name, IntExpr *const expr)
void SetTypeName(const std::string &type_name)
void SetIntegerVariableArrayArgument(const std::string &arg_name, const std::vector< IntVar * > &vars)
IntExpr * FindIntegerExpressionArgumentOrDie(const std::string &arg_name) const
void SetSequenceArrayArgument(const std::string &arg_name, const std::vector< SequenceVar * > &vars)
void SetIntervalArgument(const std::string &arg_name, IntervalVar *const var)
int64_t FindIntegerArgumentOrDie(const std::string &arg_name) const
void SetIntegerArgument(const std::string &arg_name, int64_t value)
Setters.
const std::vector< int64_t > & FindIntegerArrayArgumentOrDie(const std::string &arg_name) const
const std::string & TypeName() const
Type of the argument.
void SetIntegerMatrixArgument(const std::string &arg_name, const IntTupleSet &values)
int64_t FindIntegerArgumentWithDefault(const std::string &arg_name, int64_t def) const
Getters.
bool HasIntegerExpressionArgument(const std::string &arg_name) const
Checks if arguments exist.
void SetIntegerArrayArgument(const std::string &arg_name, const std::vector< int64_t > &values)
void SetIntervalArrayArgument(const std::string &arg_name, const std::vector< IntervalVar * > &vars)
virtual T Evaluate(int64_t index) const
Definition: constraint_solveri.h:2455
~ArrayWithOffset() override
Definition: constraint_solveri.h:2453
ArrayWithOffset(int64_t index_min, int64_t index_max)
Definition: constraint_solveri.h:2446
void SetValue(int64_t index, T value)
Definition: constraint_solveri.h:2461
std::string DebugString() const override
Definition: constraint_solveri.h:2467
E * MutableElement(const V *const var)
Definition: constraint_solver.h:5061
bool Contains(const V *const var) const
Definition: constraint_solver.h:5057
const E & Element(const V *const var) const
Definition: constraint_solver.h:5074
void Deactivate()
Definition: constraint_solver.h:4777
bool Activated() const
Definition: constraint_solver.h:4778
An Assignment is a variable -> domains mapping, used to report solutions to the user.
Definition: constraint_solver.h:5171
IntContainer * MutableIntVarContainer()
Definition: constraint_solver.h:5327
const IntContainer & IntVarContainer() const
Definition: constraint_solver.h:5326
void Clear()
IntVarElement * FastAdd(IntVar *const var)
Adds without checking if variable has been previously added.
BaseIntExpr(Solver *const s)
Definition: constraint_solveri.h:103
virtual IntVar * CastToVar()
~BaseIntExpr() override
Definition: constraint_solveri.h:104
This is the base class for building an Lns operator.
Definition: constraint_solveri.h:1247
virtual bool NextFragment()=0
~BaseLns() override
bool HasFragments() const override
Definition: constraint_solveri.h:1255
virtual void InitFragments()
void AppendToFragment(int index)
BaseLns(const std::vector< IntVar * > &vars)
int FragmentSize() const
bool MakeOneNeighbor() override
This method should not be overridden. Override NextFragment() instead.
A BaseObject is the root of all reversibly allocated objects.
Definition: constraint_solver.h:3247
int VarType() const override
Definition: constraint_solveri.h:1982
IntVarIterator * MakeHoleIterator(bool reversible) const override
Creates a hole iterator.
virtual void RestoreValue()=0
bool Bound() const override
Returns true if the min and the max of the expression are equal.
Definition: constraint_solveri.h:1967
void WhenBound(Demon *d) override
This method attaches a demon that will be awakened when the variable is bound.
IntVar * IsDifferent(int64_t constant) override
void WhenRange(Demon *d) override
Attach a demon that will watch the min or the max of the expression.
Definition: constraint_solveri.h:1975
uint64_t Size() const override
This method returns the number of values in the domain of the variable.
void SetRange(int64_t mi, int64_t ma) override
This method sets both the min and the max of the expression.
SimpleRevFIFO< Demon * > delayed_bound_demons_
Definition: constraint_solveri.h:1997
int64_t Min() const override
Definition: constraint_solveri.h:1962
void WhenDomain(Demon *d) override
This method attaches a demon that will watch any domain modification of the domain of the variable.
Definition: constraint_solveri.h:1976
bool Contains(int64_t v) const override
This method returns whether the value 'v' is in the domain of the variable.
void RemoveValue(int64_t v) override
This method removes the value 'v' from the domain of the variable.
static const int kUnboundBooleanVarValue
Definition: constraint_solveri.h:1955
int64_t Value() const override
This method returns the value of the variable.
Definition: constraint_solveri.h:1968
int64_t Max() const override
Definition: constraint_solveri.h:1964
void SetMax(int64_t m) override
SimpleRevFIFO< Demon * > bound_demons_
Definition: constraint_solveri.h:1996
IntVar * IsGreaterOrEqual(int64_t constant) override
void RemoveInterval(int64_t l, int64_t u) override
This method removes the interval 'l' .
std::string BaseName() const override
Returns a base name for automatic naming.
Definition: constraint_solveri.h:1990
IntVar * IsLessOrEqual(int64_t constant) override
void SetMin(int64_t m) override
std::string DebugString() const override
BooleanVar(Solver *const s, const std::string &name="")
Definition: constraint_solveri.h:1957
IntVarIterator * MakeDomainIterator(bool reversible) const override
Creates a domain iterator.
~BooleanVar() override
Definition: constraint_solveri.h:1960
Demon proxy to a method on the constraint with no arguments.
Definition: constraint_solveri.h:499
~CallMethod0() override
Definition: constraint_solveri.h:504
CallMethod0(T *const ct, void(T::*method)(), const std::string &name)
Definition: constraint_solveri.h:501
void Run(Solver *const s) override
This is the main callback of the demon.
Definition: constraint_solveri.h:506
std::string DebugString() const override
Definition: constraint_solveri.h:508
Demon proxy to a method on the constraint with one argument.
Definition: constraint_solveri.h:537
~CallMethod1() override
Definition: constraint_solveri.h:543
void Run(Solver *const s) override
This is the main callback of the demon.
Definition: constraint_solveri.h:545
std::string DebugString() const override
Definition: constraint_solveri.h:547
CallMethod1(T *const ct, void(T::*method)(P), const std::string &name, P param1)
Definition: constraint_solveri.h:539
Demon proxy to a method on the constraint with two arguments.
Definition: constraint_solveri.h:567
CallMethod2(T *const ct, void(T::*method)(P, Q), const std::string &name, P param1, Q param2)
Definition: constraint_solveri.h:569
~CallMethod2() override
Definition: constraint_solveri.h:577
void Run(Solver *const s) override
This is the main callback of the demon.
Definition: constraint_solveri.h:579
std::string DebugString() const override
Definition: constraint_solveri.h:583
Demon proxy to a method on the constraint with three arguments.
Definition: constraint_solveri.h:607
~CallMethod3() override
Definition: constraint_solveri.h:618
CallMethod3(T *const ct, void(T::*method)(P, Q, R), const std::string &name, P param1, Q param2, R param3)
Definition: constraint_solveri.h:609
void Run(Solver *const s) override
This is the main callback of the demon.
Definition: constraint_solveri.h:620
std::string DebugString() const override
Definition: constraint_solveri.h:624
Defines operators which change the value of variables; each neighbor corresponds to one modified vari...
Definition: constraint_solveri.h:1271
ChangeValue(const std::vector< IntVar * > &vars)
virtual int64_t ModifyValue(int64_t index, int64_t value)=0
~ChangeValue() override
bool MakeOneNeighbor() override
This method should not be overridden. Override ModifyValue() instead.
A constraint is the main modeling object.
Definition: constraint_solver.h:3705
A Decision represents a choice point in the search tree.
Definition: constraint_solver.h:3323
A DecisionVisitor is used to inspect a decision.
Definition: constraint_solver.h:3344
Low-priority demon proxy to a method on the constraint with no arguments.
Definition: constraint_solveri.h:657
Solver::DemonPriority priority() const override
This method returns the priority of the demon.
Definition: constraint_solveri.h:666
~DelayedCallMethod0() override
Definition: constraint_solveri.h:662
void Run(Solver *const s) override
This is the main callback of the demon.
Definition: constraint_solveri.h:664
DelayedCallMethod0(T *const ct, void(T::*method)(), const std::string &name)
Definition: constraint_solveri.h:659
std::string DebugString() const override
Definition: constraint_solveri.h:670
Low-priority demon proxy to a method on the constraint with one argument.
Definition: constraint_solveri.h:690
Solver::DemonPriority priority() const override
This method returns the priority of the demon.
Definition: constraint_solveri.h:700
DelayedCallMethod1(T *const ct, void(T::*method)(P), const std::string &name, P param1)
Definition: constraint_solveri.h:692
void Run(Solver *const s) override
This is the main callback of the demon.
Definition: constraint_solveri.h:698
std::string DebugString() const override
Definition: constraint_solveri.h:704
~DelayedCallMethod1() override
Definition: constraint_solveri.h:696
Low-priority demon proxy to a method on the constraint with two arguments.
Definition: constraint_solveri.h:726
Solver::DemonPriority priority() const override
This method returns the priority of the demon.
Definition: constraint_solveri.h:742
~DelayedCallMethod2() override
Definition: constraint_solveri.h:736
DelayedCallMethod2(T *const ct, void(T::*method)(P, Q), const std::string &name, P param1, Q param2)
Definition: constraint_solveri.h:728
void Run(Solver *const s) override
This is the main callback of the demon.
Definition: constraint_solveri.h:738
std::string DebugString() const override
Definition: constraint_solveri.h:746
A Demon is the base element of a propagation queue.
Definition: constraint_solver.h:3420
bool Check() const
DimensionChecker(const PathState *path_state, std::vector< Interval > path_capacity, std::vector< int > path_class, std::vector< std::function< Interval(int64_t, int64_t)>> demand_per_path_class, std::vector< Interval > node_capacity, int min_range_size_for_riq=kOptimalMinRangeSizeForRIQ)
void Commit()
The class IntExpr is the base of all integer expressions in constraint programming.
Definition: constraint_solver.h:3961
virtual bool Bound() const
Returns true if the min and the max of the expression are equal.
Definition: constraint_solver.h:3987
virtual void SetValue(int64_t v)
This method sets the value of the expression.
Definition: constraint_solver.h:3984
virtual int64_t Min() const =0
virtual int64_t Max() const =0
void SetValue(int64_t v)
Definition: constraint_solver.h:4818
The class IntVar is a subset of IntExpr.
Definition: constraint_solver.h:4123
virtual void WhenBound(Demon *d)=0
This method attaches a demon that will be awakened when the variable is bound.
The class Iterator has two direct subclasses.
Definition: constraint_solver.h:4039
void SynchronizeOnAssignment(const Assignment *assignment)
virtual void OnSynchronize(const Assignment *delta)
Definition: constraint_solveri.h:1848
int Size() const
Definition: constraint_solveri.h:1839
~IntVarLocalSearchFilter() override
void Synchronize(const Assignment *assignment, const Assignment *delta) override
This method should not be overridden.
bool FindIndex(IntVar *const var, int64_t *index) const
Definition: constraint_solveri.h:1828
IntVarLocalSearchFilter(const std::vector< IntVar * > &vars)
int64_t Value(int index) const
Definition: constraint_solveri.h:1841
IntVar * Var(int index) const
Definition: constraint_solveri.h:1840
void AddVars(const std::vector< IntVar * > &vars)
Add variables to "track" to the filter.
bool IsVarSynced(int index) const
Definition: constraint_solveri.h:1845
Specialization of LocalSearchOperator built from an array of IntVars which specifies the scope of the...
Definition: constraint_solveri.h:1048
void Activate(int64_t index)
Definition: constraint_solveri.h:1111
void SetValue(int64_t index, int64_t value)
Definition: constraint_solveri.h:1105
void Deactivate(int64_t index)
Definition: constraint_solveri.h:1112
int64_t OldInverseValue(int64_t index) const
Definition: constraint_solveri.h:1184
virtual bool SkipUnchanged(int index) const
Definition: constraint_solveri.h:1100
int Size() const
Definition: constraint_solveri.h:1091
bool MakeNextNeighbor(Assignment *delta, Assignment *deltadelta) override
OnStart() should really be protected, but then SWIG doesn't see it.
int64_t InverseValue(int64_t index) const
Definition: constraint_solveri.h:1181
bool HoldsDelta() const override
Definition: constraint_solveri.h:1066
virtual bool MakeOneNeighbor()
Creates a new neighbor.
void RevertChanges(bool change_was_incremental)
Definition: constraint_solveri.h:1138
~IntVarLocalSearchOperator() override
Definition: constraint_solveri.h:1064
bool Activated(int64_t index) const
Definition: constraint_solveri.h:1108
virtual bool IsIncremental() const
Definition: constraint_solveri.h:1089
bool ApplyChanges(Assignment *delta, Assignment *deltadelta) const
Definition: constraint_solveri.h:1114
virtual void OnStart()
Called by Start() after synchronizing the operator with the current assignment.
Definition: constraint_solveri.h:1161
int64_t PrevValue(int64_t index) const
Definition: constraint_solveri.h:1102
int64_t OldValue(int64_t index) const
Definition: constraint_solveri.h:1101
int64_t Value(int64_t index) const
Returns the value in the current assignment of the variable of given index.
Definition: constraint_solveri.h:1094
IntVarLocalSearchOperator(const std::vector< IntVar * > &vars, bool keep_inverse_values=false)
Definition: constraint_solveri.h:1053
IntVar * Var(int64_t index) const
Returns the variable of given index.
Definition: constraint_solveri.h:1099
void AddVars(const std::vector< IntVar * > &vars)
Definition: constraint_solveri.h:1149
void AddToAssignment(IntVar *var, int64_t value, bool active, std::vector< int > *assignment_indices, int64_t index, Assignment *assignment) const
Definition: constraint_solveri.h:1188
void Start(const Assignment *assignment) override
This method should not be overridden.
Definition: constraint_solveri.h:1069
Interval variables are often used in scheduling.
Definition: constraint_solver.h:4527
LightIntFunctionElementCt(Solver *const solver, IntVar *const var, IntVar *const index, F values, std::function< bool()> deep_serialize)
Definition: constraint_solveri.h:778
void Post() override
This method is called when the constraint is processed by the solver.
Definition: constraint_solveri.h:788
void InitialPropagate() override
This method performs the initial propagation of the constraint.
Definition: constraint_solveri.h:794
~LightIntFunctionElementCt() override
Definition: constraint_solveri.h:786
void Accept(ModelVisitor *const visitor) const override
Accepts the given visitor.
Definition: constraint_solveri.h:805
std::string DebugString() const override
Definition: constraint_solveri.h:800
void Post() override
This method is called when the constraint is processed by the solver.
Definition: constraint_solveri.h:843
void InitialPropagate() override
This method performs the initial propagation of the constraint.
Definition: constraint_solveri.h:850
LightIntIntFunctionElementCt(Solver *const solver, IntVar *const var, IntVar *const index1, IntVar *const index2, F values, std::function< bool()> deep_serialize)
Definition: constraint_solveri.h:833
void Accept(ModelVisitor *const visitor) const override
Accepts the given visitor.
Definition: constraint_solveri.h:856
~LightIntIntFunctionElementCt() override
Definition: constraint_solveri.h:842
std::string DebugString() const override
Definition: constraint_solveri.h:852
Local Search Filters are used for fast neighbor pruning.
Definition: constraint_solveri.h:1724
virtual void Synchronize(const Assignment *assignment, const Assignment *delta)=0
Synchronizes the filter with the current solution, delta being the difference with the solution passe...
virtual int64_t GetAcceptedObjectiveValue() const
Objective value from the last time Accept() was called and returned true.
Definition: constraint_solveri.h:1762
virtual void Relax(const Assignment *delta, const Assignment *deltadelta)
Lets the filter know what delta and deltadelta will be passed in the next Accept().
Definition: constraint_solveri.h:1728
virtual bool Accept(const Assignment *delta, const Assignment *deltadelta, int64_t objective_min, int64_t objective_max)=0
Accepts a "delta" given the assignment with which the filter has been synchronized; the delta holds t...
virtual bool IsIncremental() const
Definition: constraint_solveri.h:1743
virtual int64_t GetSynchronizedObjectiveValue() const
Objective value from last time Synchronize() was called.
Definition: constraint_solveri.h:1759
virtual void Revert()
Cancels the changes made by the last Relax()/Accept() calls.
Definition: constraint_solveri.h:1753
virtual void Commit(const Assignment *delta, const Assignment *deltadelta)
Dual of Relax(), lets the filter know that the delta was accepted.
Definition: constraint_solveri.h:1730
Filter manager: when a move is made, filters are executed to decide whether the solution is feasible ...
Definition: constraint_solveri.h:1768
int64_t GetAcceptedObjectiveValue() const
Definition: constraint_solveri.h:1801
int64_t GetSynchronizedObjectiveValue() const
Definition: constraint_solveri.h:1800
LocalSearchFilterManager(std::vector< FilterEvent > filter_events)
FilterEventType
Definition: constraint_solveri.h:1772
LocalSearchFilterManager(std::vector< LocalSearchFilter * > filters)
bool Accept(LocalSearchMonitor *const monitor, const Assignment *delta, const Assignment *deltadelta, int64_t objective_min, int64_t objective_max)
Returns true iff all filters return true, and the sum of their accepted objectives is between objecti...
void Synchronize(const Assignment *assignment, const Assignment *delta)
Synchronizes all filters to assignment.
std::string DebugString() const override
Definition: constraint_solveri.h:1779
virtual void EndMakeNextNeighbor(const LocalSearchOperator *op, bool neighbor_found, const Assignment *delta, const Assignment *deltadelta)=0
void Install() override
Install itself on the solver.
virtual void EndAcceptNeighbor(const LocalSearchOperator *op, bool neighbor_found)=0
virtual void EndOperatorStart()=0
virtual void BeginMakeNextNeighbor(const LocalSearchOperator *op)=0
virtual void BeginOperatorStart()=0
Local search operator events.
virtual void EndFiltering(const LocalSearchFilter *filter, bool reject)=0
virtual void BeginFilterNeighbor(const LocalSearchOperator *op)=0
virtual void BeginAcceptNeighbor(const LocalSearchOperator *op)=0
virtual void BeginFiltering(const LocalSearchFilter *filter)=0
LocalSearchMonitor(Solver *const solver)
virtual void EndFilterNeighbor(const LocalSearchOperator *op, bool neighbor_found)=0
std::string DebugString() const override
Definition: constraint_solveri.h:1931
~LocalSearchMonitor() override
The base class for all local search operators.
Definition: constraint_solveri.h:912
virtual bool HasFragments() const
Definition: constraint_solveri.h:922
virtual bool HoldsDelta() const
Definition: constraint_solveri.h:923
virtual const LocalSearchOperator * Self() const
Definition: constraint_solveri.h:920
virtual void Reset()
Definition: constraint_solveri.h:918
virtual bool MakeNextNeighbor(Assignment *delta, Assignment *deltadelta)=0
LocalSearchOperator()
Definition: constraint_solveri.h:914
virtual void Start(const Assignment *assignment)=0
~LocalSearchOperator() override
Definition: constraint_solveri.h:915
int64_t CandidateInverseValue(int64_t value) const
Definition: constraint_solveri.h:1015
bool CandidateIsActive(int64_t index) const
Definition: constraint_solveri.h:956
void SetCandidateValue(int64_t index, int64_t value)
Definition: constraint_solveri.h:948
int64_t CheckPointValue(int64_t index) const
Definition: constraint_solveri.h:945
LocalSearchOperatorState()
Definition: constraint_solveri.h:928
void Resize(int size)
Definition: constraint_solveri.h:1005
int64_t CandidateValue(int64_t index) const
Returns the value in the current assignment of the variable of given index.
Definition: constraint_solveri.h:938
void Revert(bool only_incremental)
Definition: constraint_solveri.h:983
void SetCurrentDomainInjectiveAndKeepInverseValues(int max_value)
Definition: constraint_solveri.h:930
void SetCandidateActive(int64_t index, bool active)
Definition: constraint_solveri.h:959
int64_t CommittedInverseValue(int64_t value) const
Definition: constraint_solveri.h:1018
void Commit()
Definition: constraint_solveri.h:968
const std::vector< int64_t > & IncrementalIndicesChanged() const
Definition: constraint_solveri.h:1001
int64_t CommittedValue(int64_t index) const
Definition: constraint_solveri.h:942
const std::vector< int64_t > & CandidateIndicesChanged() const
Definition: constraint_solveri.h:998
void CheckPoint()
Definition: constraint_solveri.h:981
bool StateIsValid() const
Definition: constraint_solveri.h:1656
void Commit()
void Revert()
LocalSearchVariable AddVariable(int64_t initial_min, int64_t initial_max)
bool SetMax(int64_t new_max)
Definition: constraint_solveri.h:1691
bool SetMin(int64_t new_min)
Definition: constraint_solveri.h:1688
int64_t Min() const
Definition: constraint_solveri.h:1686
int64_t Max() const
Definition: constraint_solveri.h:1687
Implements a complete cache for model elements: expressions and constraints.
Definition: constraint_solveri.h:2085
VoidConstraintType
Definition: constraint_solveri.h:2087
@ VOID_CONSTRAINT_MAX
Definition: constraint_solveri.h:2090
@ VOID_TRUE_CONSTRAINT
Definition: constraint_solveri.h:2089
ExprExpressionType
Definition: constraint_solveri.h:2116
@ EXPR_EXPRESSION_MAX
Definition: constraint_solveri.h:2120
ExprConstantExpressionType
Definition: constraint_solveri.h:2142
@ EXPR_CONSTANT_PROD
Definition: constraint_solveri.h:2145
@ EXPR_CONSTANT_EXPRESSION_MAX
Definition: constraint_solveri.h:2153
@ EXPR_CONSTANT_IS_EQUAL
Definition: constraint_solveri.h:2149
@ EXPR_CONSTANT_IS_GREATER_OR_EQUAL
Definition: constraint_solveri.h:2151
@ EXPR_CONSTANT_MAX
Definition: constraint_solveri.h:2146
@ EXPR_CONSTANT_IS_NOT_EQUAL
Definition: constraint_solveri.h:2150
@ EXPR_CONSTANT_IS_LESS_OR_EQUAL
Definition: constraint_solveri.h:2152
@ EXPR_CONSTANT_MIN
Definition: constraint_solveri.h:2147
@ EXPR_CONSTANT_SUM
Definition: constraint_solveri.h:2148
@ EXPR_CONSTANT_DIVIDE
Definition: constraint_solveri.h:2144
virtual void InsertExprExprConstantExpression(IntExpr *const expression, IntExpr *const var1, IntExpr *const var2, int64_t constant, ExprExprConstantExpressionType type)=0
VarConstantConstraintType
Definition: constraint_solveri.h:2093
@ VAR_CONSTANT_GREATER_OR_EQUAL
Definition: constraint_solveri.h:2095
@ VAR_CONSTANT_NON_EQUALITY
Definition: constraint_solveri.h:2097
@ VAR_CONSTANT_CONSTRAINT_MAX
Definition: constraint_solveri.h:2098
@ VAR_CONSTANT_LESS_OR_EQUAL
Definition: constraint_solveri.h:2096
virtual IntExpr * FindExprExprConstantExpression(IntExpr *const var1, IntExpr *const var2, int64_t constant, ExprExprConstantExpressionType type) const =0
Expr Expr Constant Expressions.
virtual IntExpr * FindVarConstantArrayExpression(IntVar *const var, const std::vector< int64_t > &values, VarConstantArrayExpressionType type) const =0
Var Constant Array Expressions.
virtual void InsertExprExprExpression(IntExpr *const expression, IntExpr *const var1, IntExpr *const var2, ExprExprExpressionType type)=0
virtual void InsertVarConstantArrayExpression(IntExpr *const expression, IntVar *const var, const std::vector< int64_t > &values, VarConstantArrayExpressionType type)=0
VarArrayConstantArrayExpressionType
Definition: constraint_solveri.h:2165
@ VAR_ARRAY_CONSTANT_ARRAY_EXPRESSION_MAX
Definition: constraint_solveri.h:2167
virtual IntExpr * FindVarArrayConstantExpression(const std::vector< IntVar * > &vars, int64_t value, VarArrayConstantExpressionType type) const =0
Var Array Constant Expressions.
VarConstantConstantExpressionType
Definition: constraint_solveri.h:2155
@ VAR_CONSTANT_CONSTANT_EXPRESSION_MAX
Definition: constraint_solveri.h:2157
Solver * solver() const
VarConstantConstantConstraintType
Definition: constraint_solveri.h:2101
@ VAR_CONSTANT_CONSTANT_CONSTRAINT_MAX
Definition: constraint_solveri.h:2103
virtual void InsertVoidConstraint(Constraint *const ct, VoidConstraintType type)=0
ExprExprExpressionType
Definition: constraint_solveri.h:2123
@ EXPR_EXPR_IS_EQUAL
Definition: constraint_solveri.h:2132
@ EXPR_EXPR_PROD
Definition: constraint_solveri.h:2125
@ EXPR_EXPR_EXPRESSION_MAX
Definition: constraint_solveri.h:2134
@ EXPR_EXPR_IS_LESS
Definition: constraint_solveri.h:2130
@ EXPR_EXPR_IS_LESS_OR_EQUAL
Definition: constraint_solveri.h:2131
@ EXPR_EXPR_IS_NOT_EQUAL
Definition: constraint_solveri.h:2133
ExprExprConstraintType
Definition: constraint_solveri.h:2106
@ EXPR_EXPR_GREATER
Definition: constraint_solveri.h:2108
@ EXPR_EXPR_LESS
Definition: constraint_solveri.h:2110
@ EXPR_EXPR_NON_EQUALITY
Definition: constraint_solveri.h:2112
@ EXPR_EXPR_GREATER_OR_EQUAL
Definition: constraint_solveri.h:2109
@ EXPR_EXPR_CONSTRAINT_MAX
Definition: constraint_solveri.h:2113
@ EXPR_EXPR_LESS_OR_EQUAL
Definition: constraint_solveri.h:2111
virtual void InsertVarArrayExpression(IntExpr *const expression, const std::vector< IntVar * > &vars, VarArrayExpressionType type)=0
virtual Constraint * FindExprExprConstraint(IntExpr *const expr1, IntExpr *const expr2, ExprExprConstraintType type) const =0
Expr Expr Constraints.
virtual IntExpr * FindExprExpression(IntExpr *const expr, ExprExpressionType type) const =0
Expr Expressions.
virtual void Clear()=0
virtual Constraint * FindVoidConstraint(VoidConstraintType type) const =0
Void constraints.
virtual void InsertVarArrayConstantExpression(IntExpr *const expression, const std::vector< IntVar * > &var, int64_t value, VarArrayConstantExpressionType type)=0
ExprExprConstantExpressionType
Definition: constraint_solveri.h:2137
@ EXPR_EXPR_CONSTANT_EXPRESSION_MAX
Definition: constraint_solveri.h:2139
virtual void InsertVarConstantConstraint(Constraint *const ct, IntVar *const var, int64_t value, VarConstantConstraintType type)=0
virtual Constraint * FindVarConstantConstraint(IntVar *const var, int64_t value, VarConstantConstraintType type) const =0
Var Constant Constraints.
virtual IntExpr * FindExprConstantExpression(IntExpr *const expr, int64_t value, ExprConstantExpressionType type) const =0
Expr Constant Expressions.
VarArrayConstantExpressionType
Definition: constraint_solveri.h:2177
@ VAR_ARRAY_CONSTANT_EXPRESSION_MAX
Definition: constraint_solveri.h:2179
virtual void InsertVarArrayConstantArrayExpression(IntExpr *const expression, const std::vector< IntVar * > &var, const std::vector< int64_t > &values, VarArrayConstantArrayExpressionType type)=0
ModelCache(Solver *const solver)
virtual void InsertExprConstantExpression(IntExpr *const expression, IntExpr *const var, int64_t value, ExprConstantExpressionType type)=0
virtual ~ModelCache()
VarArrayExpressionType
Definition: constraint_solveri.h:2170
@ VAR_ARRAY_EXPRESSION_MAX
Definition: constraint_solveri.h:2174
virtual void InsertVarConstantConstantExpression(IntExpr *const expression, IntVar *const var, int64_t value1, int64_t value2, VarConstantConstantExpressionType type)=0
virtual IntExpr * FindExprExprExpression(IntExpr *const var1, IntExpr *const var2, ExprExprExpressionType type) const =0
Expr Expr Expressions.
VarConstantArrayExpressionType
Definition: constraint_solveri.h:2160
@ VAR_CONSTANT_ARRAY_EXPRESSION_MAX
Definition: constraint_solveri.h:2162
virtual IntExpr * FindVarConstantConstantExpression(IntVar *const var, int64_t value1, int64_t value2, VarConstantConstantExpressionType type) const =0
Var Constant Constant Expressions.
virtual IntExpr * FindVarArrayExpression(const std::vector< IntVar * > &vars, VarArrayExpressionType type) const =0
Var Array Expressions.
virtual void InsertVarConstantConstantConstraint(Constraint *const ct, IntVar *const var, int64_t value1, int64_t value2, VarConstantConstantConstraintType type)=0
virtual Constraint * FindVarConstantConstantConstraint(IntVar *const var, int64_t value1, int64_t value2, VarConstantConstantConstraintType type) const =0
Var Constant Constant Constraints.
virtual IntExpr * FindVarArrayConstantArrayExpression(const std::vector< IntVar * > &vars, const std::vector< int64_t > &values, VarArrayConstantArrayExpressionType type) const =0
Var Array Constant Array Expressions.
virtual void InsertExprExpression(IntExpr *const expression, IntExpr *const expr, ExprExpressionType type)=0
virtual void InsertExprExprConstraint(Constraint *const ct, IntExpr *const expr1, IntExpr *const expr2, ExprExprConstraintType type)=0
void VisitIntegerArrayArgument(const std::string &arg_name, const std::vector< int64_t > &values) override
void PushArgumentHolder()
void BeginVisitIntegerExpression(const std::string &type_name, const IntExpr *const expr) override
void BeginVisitConstraint(const std::string &type_name, const Constraint *const constraint) override
void VisitIntegerExpressionArgument(const std::string &arg_name, IntExpr *const argument) override
Variables.
void VisitSequenceVariable(const SequenceVar *const variable) override
void VisitIntegerArgument(const std::string &arg_name, int64_t value) override
Integer arguments.
void VisitIntegerVariable(const IntVar *const variable, const std::string &operation, int64_t value, IntVar *const delegate) override
void VisitIntervalArgument(const std::string &arg_name, IntervalVar *const argument) override
Visit interval argument.
void VisitSequenceArrayArgument(const std::string &arg_name, const std::vector< SequenceVar * > &arguments) override
ModelParser()
void EndVisitConstraint(const std::string &type_name, const Constraint *const constraint) override
void EndVisitModel(const std::string &solver_name) override
void VisitSequenceArgument(const std::string &arg_name, SequenceVar *const argument) override
Visit sequence argument.
~ModelParser() override
void VisitIntegerVariableArrayArgument(const std::string &arg_name, const std::vector< IntVar * > &arguments) override
void VisitIntegerVariable(const IntVar *const variable, IntExpr *const delegate) override
void VisitIntegerMatrixArgument(const std::string &arg_name, const IntTupleSet &values) override
void VisitIntervalVariable(const IntervalVar *const variable, const std::string &operation, int64_t value, IntervalVar *const delegate) override
void BeginVisitModel(const std::string &solver_name) override
Header/footers.
void PopArgumentHolder()
void EndVisitIntegerExpression(const std::string &type_name, const IntExpr *const expr) override
void VisitIntervalArrayArgument(const std::string &arg_name, const std::vector< IntervalVar * > &arguments) override
ArgumentHolder * Top() const
static const char kTargetArgument[]
Definition: constraint_solver.h:3607
void VisitInt64ToInt64Extension(const Solver::IndexEvaluator1 &eval, int64_t index_min, int64_t index_max)
static const char kIndexArgument[]
Definition: constraint_solver.h:3577
virtual void BeginVisitConstraint(const std::string &type_name, const Constraint *const constraint)
virtual void EndVisitConstraint(const std::string &type_name, const Constraint *const constraint)
static const char kMaxArgument[]
Definition: constraint_solver.h:3584
static const char kLightElementEqual[]
Definition: constraint_solver.h:3476
static const char kIndex2Argument[]
Definition: constraint_solver.h:3576
static const char kMinArgument[]
Definition: constraint_solver.h:3586
virtual void VisitIntegerExpressionArgument(const std::string &arg_name, IntExpr *const argument)
Visit integer expression argument.
virtual void VisitIntegerArgument(const std::string &arg_name, int64_t value)
Visit integer arguments.
void Decr(Solver *const s)
Definition: constraint_solver.h:3893
void Incr(Solver *const s)
Definition: constraint_solver.h:3891
This class encapsulates an objective.
Definition: constraint_solver.h:4331
Base class of the local search operators dedicated to path modifications (a path is a set of nodes li...
Definition: constraint_solveri.h:1300
int64_t StartNode(int i) const
Returns the start node of the ith base node.
Definition: constraint_solveri.h:1399
bool IsInactive(int64_t node) const
Returns true if node is inactive.
Definition: constraint_solveri.h:1497
int64_t OldPrev(int64_t node) const
Definition: constraint_solveri.h:1453
virtual bool ConsiderAlternatives(int64_t base_index) const
Indicates if alternatives should be considered when iterating over base nodes.
Definition: constraint_solveri.h:1441
virtual bool MakeNeighbor()=0
int PathClass(int i) const
Returns the class of the path of the ith base node.
Definition: constraint_solveri.h:1405
virtual void OnNodeInitialization()
Called by OnStart() after initializing node information.
Definition: constraint_solveri.h:1370
virtual bool OnSamePathAsPreviousBase(int64_t base_index)
Returns true if a base node has to be on the same path as the "previous" base node (base node of inde...
Definition: constraint_solveri.h:1425
int64_t OldPath(int64_t node) const
Definition: constraint_solveri.h:1458
bool IsPathStart(int64_t node) const
Returns true if node is the first node on the path.
Definition: constraint_solveri.h:1494
int64_t GetActiveAlternativeNode(int node) const
Returns the active node in the alternative set of the given node.
Definition: constraint_solveri.h:1542
int AddAlternativeSet(const std::vector< int64_t > &alternative_set)
Handling node alternatives.
Definition: constraint_solveri.h:1512
bool CheckChainValidity(int64_t before_chain, int64_t chain_end, int64_t exclude) const
Returns true if the chain is a valid path without cycles from before_chain to chain_end and does not ...
virtual bool RestartAtPathStartOnSynchronize()
When the operator is being synchronized with a new solution (when Start() is called),...
Definition: constraint_solveri.h:1418
bool IsPathEnd(int64_t node) const
Returns true if node is the last node on the path; defined by the fact that node is outside the range...
Definition: constraint_solveri.h:1491
int BaseSiblingAlternative(int i) const
Returns the alternative for the sibling of the ith base node.
Definition: constraint_solveri.h:1385
int64_t Next(int64_t node) const
Returns the node after node in the current delta.
Definition: constraint_solveri.h:1343
bool MoveChain(int64_t before_chain, int64_t chain_end, int64_t destination)
Moves the chain starting after the node before_chain and ending at the node chain_end after the node ...
bool MakeActive(int64_t node, int64_t destination)
Insert the inactive node after destination.
~PathOperator() override
Definition: constraint_solveri.h:1335
int BaseAlternative(int i) const
Returns the alternative for the ith base node.
Definition: constraint_solveri.h:1375
bool ReverseChain(int64_t before_chain, int64_t after_chain, int64_t *chain_last)
Reverses the chain starting after before_chain and ending before after_chain.
std::vector< int64_t > start_to_path_
Definition: constraint_solveri.h:1569
const std::vector< int64_t > & path_starts() const
Returns the vector of path start nodes.
Definition: constraint_solveri.h:1403
void SetNext(int64_t from, int64_t to, int64_t path)
Sets 'to' to be the node after 'from' on the given path.
Definition: constraint_solveri.h:1480
int64_t BaseSiblingAlternativeNode(int i) const
Returns the alternative node for the sibling of the ith base node.
Definition: constraint_solveri.h:1389
int64_t Prev(int64_t node) const
Returns the node before node in the current delta.
Definition: constraint_solveri.h:1349
int64_t GetActiveAlternativeSibling(int node) const
Returns the active node in the alternative set of the sibling of the given node.
Definition: constraint_solveri.h:1553
int64_t OldNext(int64_t node) const
Definition: constraint_solveri.h:1443
bool SkipUnchanged(int index) const override
const int number_of_nexts_
Definition: constraint_solveri.h:1565
bool SwapActiveAndInactive(int64_t active, int64_t inactive)
Replaces active by inactive in the current path, making active inactive.
void ResetPosition()
Reset the position of the operator to its position when Start() was last called; this can be used to ...
Definition: constraint_solveri.h:1507
virtual int64_t GetBaseNodeRestartPosition(int base_index)
Returns the index of the node to which the base node of index base_index must be set to when it reach...
Definition: constraint_solveri.h:1431
int64_t BaseNode(int i) const
Returns the ith base node of the operator.
Definition: constraint_solveri.h:1373
PathOperator(const std::vector< IntVar * > &next_vars, const std::vector< IntVar * > &path_vars, int number_of_base_nodes, bool skip_locally_optimal_paths, bool accept_path_end_base, std::function< int(int64_t)> start_empty_path_class)
Definition: constraint_solveri.h:1327
int next_base_to_increment_
Definition: constraint_solveri.h:1567
int64_t BaseAlternativeNode(int i) const
Returns the alternative node for the ith base node.
Definition: constraint_solveri.h:1377
int GetSiblingAlternativeIndex(int node) const
Returns the index of the alternative set of the sibling of node.
Definition: constraint_solveri.h:1546
bool MakeOneNeighbor() override
This method should not be overridden. Override MakeNeighbor() instead.
void AddPairAlternativeSets(const std::vector< std::pair< std::vector< int64_t >, std::vector< int64_t >>> &pair_alternative_sets)
Adds all sets of node alternatives of a vector of alternative pairs.
Definition: constraint_solveri.h:1525
int64_t Path(int64_t node) const
Returns the index of the path to which node belongs in the current delta.
Definition: constraint_solveri.h:1357
virtual bool InitPosition() const
Returns true if the operator needs to restart its initial position at each call to Start()
Definition: constraint_solveri.h:1503
const bool ignore_path_vars_
Definition: constraint_solveri.h:1566
PathOperator(const std::vector< IntVar * > &next_vars, const std::vector< IntVar * > &path_vars, IterationParameters iteration_parameters)
Builds an instance of PathOperator from next and path variables.
virtual void SetNextBaseToIncrement(int64_t base_index)
Set the next base to increment on next iteration.
Definition: constraint_solveri.h:1436
int64_t EndNode(int i) const
Returns the end node of the ith base node.
Definition: constraint_solveri.h:1401
int64_t PrevNext(int64_t node) const
Definition: constraint_solveri.h:1448
void Reset() override
bool MakeChainInactive(int64_t before_chain, int64_t chain_end)
Makes the nodes on the chain starting after before_chain and ending at chain_end inactive.
bool operator!=(Iterator other) const
Definition: constraint_solveri.h:3235
int operator*() const
Definition: constraint_solveri.h:3234
Iterator & operator++()
Definition: constraint_solveri.h:3230
Iterator begin() const
Definition: constraint_solveri.h:3254
Chain WithoutFirstNode() const
Definition: constraint_solveri.h:3257
Chain(const CommittedNode *begin_node, const CommittedNode *end_node)
Definition: constraint_solveri.h:3248
int NumNodes() const
Definition: constraint_solveri.h:3251
bool operator!=(Iterator other) const
Definition: constraint_solveri.h:3277
Chain operator*() const
Definition: constraint_solveri.h:3273
Iterator & operator++()
Definition: constraint_solveri.h:3269
Iterator begin() const
Definition: constraint_solveri.h:3297
Iterator end() const
Definition: constraint_solveri.h:3298
ChainRange(const ChainBounds *const begin_chain, const ChainBounds *const end_chain, const CommittedNode *const first_node)
Definition: constraint_solveri.h:3292
bool operator!=(Iterator other) const
Definition: constraint_solveri.h:3325
int operator*() const
Definition: constraint_solveri.h:3324
Iterator & operator++()
Definition: constraint_solveri.h:3312
Iterator begin() const
Definition: constraint_solveri.h:3351
Iterator end() const
Definition: constraint_solveri.h:3354
NodeRange(const ChainBounds *begin_chain, const ChainBounds *end_chain, const CommittedNode *first_node)
Definition: constraint_solveri.h:3346
const std::vector< int > & ChangedPaths() const
Definition: constraint_solveri.h:3106
bool IsInvalid() const
Definition: constraint_solveri.h:3145
ChainRange Chains(int path) const
int CommittedIndex(int node) const
Definition: constraint_solveri.h:3079
void ChangePath(int path, const std::vector< ChainBounds > &chains)
void ChangeLoops(const std::vector< int > &new_loops)
ChainBounds CommittedPathRange(int path) const
Definition: constraint_solveri.h:3080
void ChangePath(int path, const std::initializer_list< ChainBounds > &chains)
Definition: constraint_solveri.h:3124
void Commit()
NodeRange Nodes(int path) const
void Revert()
const std::vector< int > & ChangedLoops() const
Definition: constraint_solveri.h:3108
PathState(int num_nodes, std::vector< int > path_start, std::vector< int > path_end)
Solver * solver() const
Definition: constraint_solver.h:3274
std::string DebugString() const override
Definition: constraint_solver.h:3267
virtual void SetValues(IntVar *const var, const std::vector< int64_t > &values)=0
virtual void SetDurationMax(IntervalVar *const var, int64_t new_max)=0
virtual void SetDurationRange(IntervalVar *const var, int64_t new_min, int64_t new_max)=0
virtual void SetMax(IntExpr *const expr, int64_t new_max)=0
void Install() override
Install itself on the solver.
virtual void RankLast(SequenceVar *const var, int index)=0
~PropagationMonitor() override
virtual void EndConstraintInitialPropagation(Constraint *const constraint)=0
virtual void SetMin(IntVar *const var, int64_t new_min)=0
IntVar modifiers.
virtual void RemoveValue(IntVar *const var, int64_t value)=0
virtual void SetValue(IntVar *const var, int64_t value)=0
virtual void SetDurationMin(IntervalVar *const var, int64_t new_min)=0
virtual void SetStartMin(IntervalVar *const var, int64_t new_min)=0
IntervalVar modifiers.
virtual void RankNotLast(SequenceVar *const var, int index)=0
virtual void RankNotFirst(SequenceVar *const var, int index)=0
virtual void BeginDemonRun(Demon *const demon)=0
virtual void SetRange(IntExpr *const expr, int64_t new_min, int64_t new_max)=0
virtual void RankSequence(SequenceVar *const var, const std::vector< int > &rank_first, const std::vector< int > &rank_last, const std::vector< int > &unperformed)=0
virtual void SetEndRange(IntervalVar *const var, int64_t new_min, int64_t new_max)=0
virtual void SetEndMax(IntervalVar *const var, int64_t new_max)=0
virtual void PushContext(const std::string &context)=0
virtual void RemoveInterval(IntVar *const var, int64_t imin, int64_t imax)=0
virtual void SetEndMin(IntervalVar *const var, int64_t new_min)=0
virtual void BeginNestedConstraintInitialPropagation(Constraint *const parent, Constraint *const nested)=0
virtual void EndNestedConstraintInitialPropagation(Constraint *const parent, Constraint *const nested)=0
virtual void SetMax(IntVar *const var, int64_t new_max)=0
virtual void SetPerformed(IntervalVar *const var, bool value)=0
virtual void StartProcessingIntegerVariable(IntVar *const var)=0
virtual void BeginConstraintInitialPropagation(Constraint *const constraint)=0
Propagation events.
virtual void SetRange(IntVar *const var, int64_t new_min, int64_t new_max)=0
virtual void SetMin(IntExpr *const expr, int64_t new_min)=0
IntExpr modifiers.
virtual void SetStartMax(IntervalVar *const var, int64_t new_max)=0
virtual void EndDemonRun(Demon *const demon)=0
virtual void RegisterDemon(Demon *const demon)=0
PropagationMonitor(Solver *const solver)
virtual void EndProcessingIntegerVariable(IntVar *const var)=0
virtual void PopContext()=0
virtual void RemoveValues(IntVar *const var, const std::vector< int64_t > &values)=0
std::string DebugString() const override
Definition: constraint_solveri.h:1863
virtual void SetStartRange(IntervalVar *const var, int64_t new_min, int64_t new_max)=0
virtual void RankFirst(SequenceVar *const var, int index)=0
SequenceVar modifiers.
Matrix version of the RevBitSet class.
Definition: constraint_solveri.h:457
void SetToZero(Solver *const solver, int64_t row, int64_t column)
Erases the 'column' bit in the 'row' row.
~RevBitMatrix()
bool IsSet(int64_t row, int64_t column) const
Returns whether the 'column' bit in the 'row' row is set.
Definition: constraint_solveri.h:467
void SetToOne(Solver *const solver, int64_t row, int64_t column)
Sets the 'column' bit in the 'row' row.
int64_t Cardinality(int row) const
Returns the number of bits set to one in the 'row' row.
bool IsCardinalityOne(int row) const
Does the 'row' bitset contains only one bit set?
int64_t GetFirstBit(int row, int start) const
Returns the first bit in the row 'row' which position is >= 'start'.
RevBitMatrix(int64_t rows, int64_t columns)
bool IsCardinalityZero(int row) const
Is bitset of row 'row' null?
This class represents a reversible bitset.
Definition: constraint_solveri.h:422
void SetToOne(Solver *const solver, int64_t index)
Sets the 'index' bit.
RevBitSet(int64_t size)
bool IsCardinalityOne() const
Does it contains only one bit set?
void SetToZero(Solver *const solver, int64_t index)
Erases the 'index' bit.
int64_t Cardinality() const
Returns the number of bits set to one.
int64_t GetFirstBit(int start) const
Gets the index of the first bit set starting from start.
bool IsSet(int64_t index) const
Returns whether the 'index' bit is set.
~RevBitSet()
This class is a reversible growing array.
Definition: constraint_solveri.h:2481
void RevInsert(Solver *const solver, int64_t index, T value)
Definition: constraint_solveri.h:2504
T At(int64_t index) const
Definition: constraint_solveri.h:2494
~RevGrowingArray()
Definition: constraint_solveri.h:2488
RevGrowingArray(int64_t block_size)
Definition: constraint_solveri.h:2483
void SetValue(Solver *const s, const T &val)
Definition: constraint_solver.h:3866
Reversible Immutable MultiMap class.
Definition: constraint_solveri.h:275
void Insert(const K &key, const V &value)
Inserts (key, value) in the multi-map.
Definition: constraint_solveri.h:318
RevImmutableMultiMap(Solver *const solver, int initial_size)
Definition: constraint_solveri.h:277
~RevImmutableMultiMap()
Definition: constraint_solveri.h:285
bool ContainsKey(const K &key) const
Returns true if the multi-map contains at least one instance of 'key'.
Definition: constraint_solveri.h:290
int num_items() const
Definition: constraint_solveri.h:287
const V & FindWithDefault(const K &key, const V &default_value) const
Returns one value attached to 'key', or 'default_value' if 'key' is not in the multi-map.
Definition: constraint_solveri.h:305
This is a special class to represent a 'residual' set of T.
Definition: constraint_solveri.h:2564
void Insert(Solver *const solver, const T &elt)
Definition: constraint_solveri.h:2614
RevIntSet(int capacity)
Capacity is the fixed size of the set (it cannot grow).
Definition: constraint_solveri.h:2569
const_iterator begin() const
Definition: constraint_solveri.h:2637
T RemovedElement(int i) const
Definition: constraint_solveri.h:2608
RevIntSet(int capacity, int *shared_positions, int shared_positions_size)
Capacity is the fixed size of the set (it cannot grow).
Definition: constraint_solveri.h:2581
void Restore(Solver *const solver, const T &value_index)
Definition: constraint_solveri.h:2628
void Remove(Solver *const solver, const T &value_index)
Definition: constraint_solveri.h:2623
void Clear(Solver *const solver)
Definition: constraint_solveri.h:2633
--— RevPartialSequence --—
Definition: constraint_solveri.h:2676
int NumLastRanked() const
Definition: constraint_solveri.h:2706
RevPartialSequence(int size)
Definition: constraint_solveri.h:2690
int NumFirstRanked() const
Definition: constraint_solveri.h:2704
bool IsRanked(int elt) const
Definition: constraint_solveri.h:2730
std::string DebugString() const
Definition: constraint_solveri.h:2736
void RankLast(Solver *const solver, int elt)
Definition: constraint_solveri.h:2724
~RevPartialSequence()
Definition: constraint_solveri.h:2702
void RankFirst(Solver *const solver, int elt)
Definition: constraint_solveri.h:2718
const int & operator[](int index) const
Definition: constraint_solveri.h:2711
RevPartialSequence(const std::vector< int > &items)
Definition: constraint_solveri.h:2678
A reversible switch that can switch once from false to true.
Definition: constraint_solveri.h:383
void Switch(Solver *const solver)
Definition: constraint_solveri.h:389
The base class of all search logs that periodically outputs information when the search is running.
Definition: constraint_solveri.h:2035
void RefuteDecision(Decision *const decision) override
Before refuting the decision.
virtual void OutputLine(const std::string &line)
SearchLog(Solver *const s, OptimizeVar *const obj, IntVar *const var, double scaling_factor, double offset, std::function< std::string()> display_callback, bool display_on_new_solutions_only, int period)
~SearchLog() override
void BeginInitialPropagation() override
Before the initial propagation.
void NoMoreSolutions() override
When the search tree is finished.
void ApplyDecision(Decision *const decision) override
Before applying the decision.
void Maintain()
bool AtSolution() override
This method is called when a valid solution is found.
void OutputDecision()
std::string DebugString() const override
void AcceptUncheckedNeighbor() override
After accepting an unchecked neighbor during local search.
void EndInitialPropagation() override
After the initial propagation.
A search monitor is a simple set of callbacks to monitor all search events.
Definition: constraint_solver.h:3756
A sequence variable is a variable whose domain is a set of possible orderings of the interval variabl...
Definition: constraint_solver.h:4681
This iterator is not stable with respect to deletion.
Definition: constraint_solveri.h:148
void operator++()
Definition: constraint_solveri.h:154
T operator*() const
Definition: constraint_solveri.h:153
Iterator(const SimpleRevFIFO< T > *l)
Definition: constraint_solveri.h:150
This class represent a reversible FIFO structure.
Definition: constraint_solveri.h:137
T * MutableLast()
Definition: constraint_solveri.h:193
void PushIfNotTop(Solver *const s, T val)
Pushes the var on top if is not a duplicate of the current top object.
Definition: constraint_solveri.h:182
void Push(Solver *const s, T val)
Definition: constraint_solveri.h:169
SimpleRevFIFO()
Definition: constraint_solveri.h:167
This class represents a small reversible bitset (size <= 64).
Definition: constraint_solveri.h:397
int64_t Cardinality() const
Returns the number of bits set to one.
SmallRevBitSet(int64_t size)
void SetToZero(Solver *const solver, int64_t pos)
Erases the 'pos' bit.
int64_t GetFirstOne() const
Gets the index of the first bit set starting from 0.
void SetToOne(Solver *const solver, int64_t pos)
Sets the 'pos' bit.
DemonPriority
This enum represents the three possible priorities for a demon in the Solver queue.
Definition: constraint_solver.h:609
@ DELAYED_PRIORITY
DELAYED_PRIORITY is the lowest priority: Demons will be processed after VAR_PRIORITY and NORMAL_PRIOR...
Definition: constraint_solver.h:612
std::function< int64_t(int64_t, int64_t)> IndexEvaluator2
Definition: constraint_solver.h:771
T * RevAlloc(T *object)
Registers the given object as being reversible.
Definition: constraint_solver.h:830
A symmetry breaker is an object that will visit a decision and create the 'symmetrical' decision in r...
Definition: constraint_solveri.h:2005
void AddIntegerVariableLessOrEqualValueClause(IntVar *const var, int64_t value)
SymmetryBreaker()
Definition: constraint_solveri.h:2007
void AddIntegerVariableEqualValueClause(IntVar *const var, int64_t value)
void AddIntegerVariableGreaterOrEqualValueClause(IntVar *const var, int64_t value)
~SymmetryBreaker() override
Definition: constraint_solveri.h:2009
This class represents a reversible bitset.
Definition: constraint_solveri.h:2790
int64_t word_size() const
Returns the number of 64 bit words used to store the bitset.
Definition: constraint_solveri.h:2828
int64_t bit_size() const
Returns the number of bits given in the constructor of the bitset.
Definition: constraint_solveri.h:2826
bool RevSubtract(Solver *const solver, const std::vector< uint64_t > &mask)
This method subtracts the mask from the active bitset.
void Init(Solver *const solver, const std::vector< uint64_t > &mask)
This methods overwrites the active bitset with the mask.
~UnsortedNullableRevBitset()
Definition: constraint_solveri.h:2795
bool RevAnd(Solver *const solver, const std::vector< uint64_t > &mask)
This method ANDs the mask with the active bitset.
bool Empty() const
This method returns true if the active bitset is null.
Definition: constraint_solveri.h:2814
const RevIntSet< int > & active_words() const
Returns the set of active word indices.
Definition: constraint_solveri.h:2830
bool Intersects(const std::vector< uint64_t > &mask, int *support_index)
This method returns true iff the mask and the active bitset have a non null intersection.
UnsortedNullableRevBitset(int bit_size)
Size is the number of bits to store in the bitset.
int ActiveWordSize() const
This method returns the number of non null 64 bit words in the bitset representation.
Definition: constraint_solveri.h:2811
Collection of objects used to extend the Constraint Solver library.
Definition: constraint_solver.h:109
std::string ParameterDebugString(P param)
Definition: constraint_solveri.h:525
Demon * MakeDelayedConstraintDemon1(Solver *const s, T *const ct, void(T::*method)(P), const std::string &name, P param1)
Definition: constraint_solveri.h:718
bool IsArrayConstant(const std::vector< T > &values, const T &value)
Definition: constraint_solveri.h:2843
bool AreAllLessOrEqual(const std::vector< T > &values, const T &value)
Definition: constraint_solveri.h:2883
Demon * MakeDelayedConstraintDemon2(Solver *const s, T *const ct, void(T::*method)(P, Q), const std::string &name, P param1, Q param2)
Definition: constraint_solveri.h:762
bool AreAllNegative(const std::vector< T > &values)
Definition: constraint_solveri.h:2898
bool AreAllGreaterOrEqual(const std::vector< T > &values, const T &value)
Definition: constraint_solveri.h:2873
bool IsIncreasing(const std::vector< T > &values)
Definition: constraint_solveri.h:2923
bool AreAllStrictlyPositive(const std::vector< T > &values)
Definition: constraint_solveri.h:2903
Demon * MakeConstraintDemon0(Solver *const s, T *const ct, void(T::*method)(), const std::string &name)
Definition: constraint_solveri.h:519
bool IsArrayBoolean(const std::vector< T > &values)
Definition: constraint_solveri.h:2853
VarTypes
This enum is used internally to do dynamic typing on subclasses of integer variables.
Definition: constraint_solveri.h:115
Demon * MakeConstraintDemon2(Solver *const s, T *const ct, void(T::*method)(P, Q), const std::string &name, P param1, Q param2)
Definition: constraint_solveri.h:599
Demon * MakeConstraintDemon1(Solver *const s, T *const ct, void(T::*method)(P), const std::string &name, P param1)
Definition: constraint_solveri.h:560
std::vector< int64_t > ToInt64Vector(const std::vector< int > &input)
bool AreAllBoundOrNull(const std::vector< IntVar * > &vars, const std::vector< T > &values)
Returns true if all the variables are assigned to a single value, or if their corresponding value is ...
Definition: constraint_solveri.h:2959
int64_t MaxVarArray(const std::vector< IntVar * > &vars)
Definition: constraint_solveri.h:2979
bool AreAllBoundTo(const std::vector< IntVar * > &vars, int64_t value)
Returns true if all variables are assigned to 'value'.
Definition: constraint_solveri.h:2970
void FillValues(const std::vector< IntVar * > &vars, std::vector< int64_t > *const values)
Definition: constraint_solveri.h:2999
bool AreAllBooleans(const std::vector< IntVar * > &vars)
Definition: constraint_solveri.h:2952
Demon * MakeDelayedConstraintDemon0(Solver *const s, T *const ct, void(T::*method)(), const std::string &name)
Definition: constraint_solveri.h:682
bool AreAllStrictlyNegative(const std::vector< T > &values)
Definition: constraint_solveri.h:2908
LocalSearchOperator * MakeLocalSearchOperator(Solver *solver, const std::vector< IntVar * > &vars, const std::vector< IntVar * > &secondary_vars, std::function< int(int64_t)> start_empty_path_class)
Operator Factories.
int64_t MinVarArray(const std::vector< IntVar * > &vars)
Definition: constraint_solveri.h:2989
bool IsIncreasingContiguous(const std::vector< T > &values)
Definition: constraint_solveri.h:2913
bool AreAllNull(const std::vector< T > &values)
Definition: constraint_solveri.h:2868
bool AreAllPositive(const std::vector< T > &values)
Definition: constraint_solveri.h:2893
Demon * MakeConstraintDemon3(Solver *const s, T *const ct, void(T::*method)(P, Q, R), const std::string &name, P param1, Q param2, R param3)
Definition: constraint_solveri.h:642
int64_t PosIntDivDown(int64_t e, int64_t v)
Definition: constraint_solveri.h:3013
bool IsArrayInRange(const std::vector< IntVar * > &vars, T range_min, T range_max)
Definition: constraint_solveri.h:2933
LocalSearchFilter * MakeDimensionFilter(Solver *solver, std::unique_ptr< DimensionChecker > checker, const std::string &dimension_name)
bool AreAllOnes(const std::vector< T > &values)
Definition: constraint_solveri.h:2863
bool AreAllBound(const std::vector< IntVar * > &vars)
Definition: constraint_solveri.h:2943
LocalSearchFilter * MakePathStateFilter(Solver *solver, std::unique_ptr< PathState > path_state, const std::vector< IntVar * > &nexts)
int64_t PosIntDivUp(int64_t e, int64_t v)
Definition: constraint_solveri.h:3008
int64_t max
Definition: constraint_solveri.h:3384
int64_t num_positive_infinity
Definition: constraint_solveri.h:3385
int64_t num_negative_infinity
Definition: constraint_solveri.h:3383
int64_t min
Definition: constraint_solveri.h:3382
int64_t max
Definition: constraint_solveri.h:3374
int64_t min
Definition: constraint_solveri.h:3373
LocalSearchFilter * filter
Definition: constraint_solveri.h:1774
int priority
Definition: constraint_solveri.h:1776
FilterEventType event_type
Definition: constraint_solveri.h:1775
Set of parameters used to configure how the neighnorhood is traversed.
Definition: constraint_solveri.h:1303
bool accept_path_end_base
True if path ends should be considered when iterating over neighbors.
Definition: constraint_solveri.h:1310
int number_of_base_nodes
Number of nodes needed to define a neighbor.
Definition: constraint_solveri.h:1305
std::function< int(int64_t)> start_empty_path_class
Callback returning an index such that if c1 = start_empty_path_class(StartNode(p1)),...
Definition: constraint_solveri.h:1321
bool skip_locally_optimal_paths
Skip paths which have been proven locally optimal.
Definition: constraint_solveri.h:1308
ChainBounds(int begin_index, int end_index)
Definition: constraint_solveri.h:3074
int end_index
Definition: constraint_solveri.h:3077
ChainBounds()=default
int begin_index
Definition: constraint_solveri.h:3076