C++ Reference
C++ Reference: Routing
constraint_solveri.h
Go to the documentation of this file.
125};
1543 int64_t GetActiveInAlternativeSet(int alternative_index) const {
2091 VOID_FALSE_CONSTRAINT = 0,
2097 VAR_CONSTANT_EQUALITY = 0,
2105 VAR_CONSTANT_CONSTANT_BETWEEN = 0,
2110 EXPR_EXPR_EQUALITY = 0,
2120 EXPR_OPPOSITE = 0,
2127 EXPR_EXPR_DIFFERENCE = 0,
2141 EXPR_EXPR_CONSTANT_CONDITIONAL = 0,
2146 EXPR_CONSTANT_DIFFERENCE = 0,
2159 VAR_CONSTANT_CONSTANT_SEMI_CONTINUOUS = 0,
2164 VAR_CONSTANT_ARRAY_ELEMENT = 0,
2169 VAR_ARRAY_CONSTANT_ARRAY_SCAL_PROD = 0,
2174 VAR_ARRAY_MAX = 0,
2181 VAR_ARRAY_CONSTANT_INDEX = 0,
Argument Holder: useful when visiting a model.
Definition: constraint_solveri.h:2326
const std::vector< IntVar * > & FindIntegerVariableArrayArgumentOrDie(const std::string &arg_name) const
const IntTupleSet & FindIntegerMatrixArgumentOrDie(const std::string &arg_name) const
bool HasIntegerVariableArrayArgument(const std::string &arg_name) const
void SetSequenceArgument(const std::string &arg_name, SequenceVar *const var)
void SetIntegerExpressionArgument(const std::string &arg_name, IntExpr *const expr)
void SetTypeName(const std::string &type_name)
const std::string & TypeName() const
Type of the argument.
void SetIntegerVariableArrayArgument(const std::string &arg_name, const std::vector< IntVar * > &vars)
const std::vector< int64_t > & FindIntegerArrayArgumentOrDie(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.
IntExpr * FindIntegerExpressionArgumentOrDie(const std::string &arg_name) const
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:2458
~ArrayWithOffset() override
Definition: constraint_solveri.h:2456
ArrayWithOffset(int64_t index_min, int64_t index_max)
Definition: constraint_solveri.h:2449
void SetValue(int64_t index, T value)
Definition: constraint_solveri.h:2464
std::string DebugString() const override
Definition: constraint_solveri.h:2470
bool Contains(const V *const var) const
Definition: constraint_solver.h:4967
const E & Element(const V *const var) const
Definition: constraint_solver.h:4984
E * MutableElement(const V *const var)
Definition: constraint_solver.h:4971
void Deactivate()
Definition: constraint_solver.h:4687
bool Activated() const
Definition: constraint_solver.h:4688
An Assignment is a variable -> domains mapping, used to report solutions to the user.
Definition: constraint_solver.h:5081
SequenceContainer * MutableSequenceVarContainer()
Definition: constraint_solver.h:5243
const SequenceContainer & SequenceVarContainer() const
Definition: constraint_solver.h:5240
void Clear()
IntContainer * MutableIntVarContainer()
Definition: constraint_solver.h:5233
const IntContainer & IntVarContainer() const
Definition: constraint_solver.h:5232
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:1260
virtual bool NextFragment()=0
~BaseLns() override
bool HasFragments() const override
Definition: constraint_solveri.h:1268
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:3169
int VarType() const override
Definition: constraint_solveri.h:1985
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:1970
void WhenBound(Demon *d) override
This method attaches a demon that will be awakened when the variable is bound.
IntVarIterator * MakeDomainIterator(bool reversible) const override
Creates a domain iterator.
IntVar * IsLessOrEqual(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:1978
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:2000
int64_t Min() const override
Definition: constraint_solveri.h:1965
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:1979
bool Contains(int64_t v) const override
This method returns whether the value 'v' is in the domain of the variable.
IntVarIterator * MakeHoleIterator(bool reversible) const override
Creates a hole iterator.
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:1958
int64_t Value() const override
This method returns the value of the variable.
Definition: constraint_solveri.h:1971
IntVar * IsGreaterOrEqual(int64_t constant) override
int64_t Max() const override
Definition: constraint_solveri.h:1967
void SetMax(int64_t m) override
SimpleRevFIFO< Demon * > bound_demons_
Definition: constraint_solveri.h:1999
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:1993
void SetMin(int64_t m) override
IntVar * IsDifferent(int64_t constant) override
std::string DebugString() const override
BooleanVar(Solver *const s, const std::string &name="")
Definition: constraint_solveri.h:1960
~BooleanVar() override
Definition: constraint_solveri.h:1963
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:1284
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:3626
A Decision represents a choice point in the search tree.
Definition: constraint_solver.h:3245
A DecisionVisitor is used to inspect a decision.
Definition: constraint_solver.h:3266
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:3342
The class IntExpr is the base of all integer expressions in constraint programming.
Definition: constraint_solver.h:3878
void SetValue(int64_t v)
Definition: constraint_solver.h:4728
The class IntVar is a subset of IntExpr.
Definition: constraint_solver.h:4040
The class Iterator has two direct subclasses.
Definition: constraint_solver.h:3956
void SynchronizeOnAssignment(const Assignment *assignment)
virtual void OnSynchronize(const Assignment *delta)
Definition: constraint_solveri.h:1851
int Size() const
Definition: constraint_solveri.h:1842
~IntVarLocalSearchFilter() override
void Synchronize(const Assignment *assignment, const Assignment *delta) override
This method should not be overridden.
IntVar * Var(int index) const
Definition: constraint_solveri.h:1843
bool FindIndex(IntVar *const var, int64_t *index) const
Definition: constraint_solveri.h:1831
IntVarLocalSearchFilter(const std::vector< IntVar * > &vars)
int64_t Value(int index) const
Definition: constraint_solveri.h:1844
void AddVars(const std::vector< IntVar * > &vars)
Add variables to "track" to the filter.
bool IsVarSynced(int index) const
Definition: constraint_solveri.h:1848
bool ValueFromAssignment(const Assignment &assignment, IntVar *var, int64_t index, int64_t *value)
Definition: constraint_solveri.h:1086
void OnAddVars()
Definition: constraint_solveri.h:972
IntVarLocalSearchHandler()
Definition: constraint_solveri.h:942
IntVarLocalSearchHandler(const IntVarLocalSearchHandler &other)
Definition: constraint_solveri.h:943
IntVarLocalSearchHandler(IntVarLocalSearchOperator *op)
Definition: constraint_solveri.h:945
void OnRevertChanges(int64_t index, int64_t value)
Definition: constraint_solveri.h:1103
void AddToAssignment(IntVar *var, int64_t value, bool active, std::vector< int > *assignment_indices, int64_t index, Assignment *assignment) const
Definition: constraint_solveri.h:946
Specialization of LocalSearchOperator built from an array of IntVars which specifies the scope of the...
Definition: constraint_solveri.h:1022
int64_t OldInverseValue(int64_t index) const
Definition: constraint_solveri.h:1068
bool MakeNextNeighbor(Assignment *delta, Assignment *deltadelta) override
Redefines MakeNextNeighbor to export a simpler interface.
int64_t InverseValue(int64_t index) const
Definition: constraint_solveri.h:1066
friend class IntVarLocalSearchHandler
Definition: constraint_solveri.h:1053
virtual bool MakeOneNeighbor()
Creates a new neighbor.
void SetOldInverseValue(int64_t index, int64_t value)
Definition: constraint_solveri.h:1076
~IntVarLocalSearchOperator() override
Definition: constraint_solveri.h:1043
void SetInverseValue(int64_t index, int64_t value)
Definition: constraint_solveri.h:1072
IntVarLocalSearchOperator()
Definition: constraint_solveri.h:1024
IntVarLocalSearchOperator(const std::vector< IntVar * > &vars, bool keep_inverse_values=false)
Definition: constraint_solveri.h:1028
bool IsInverseValue(int64_t index) const
Definition: constraint_solveri.h:1061
Interval variables are often used in scheduling.
Definition: constraint_solver.h:4437
Local Search Filters are used for fast neighbor pruning.
Definition: constraint_solveri.h:1730
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:1768
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:1734
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:1749
virtual int64_t GetSynchronizedObjectiveValue() const
Objective value from last time Synchronize() was called.
Definition: constraint_solveri.h:1765
virtual void Revert()
Cancels the changes made by the last Relax()/Accept() calls.
Definition: constraint_solveri.h:1759
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:1736
Filter manager: when a move is made, filters are executed to decide whether the solution is feasible ...
Definition: constraint_solveri.h:1774
int64_t GetAcceptedObjectiveValue() const
Definition: constraint_solveri.h:1806
int64_t GetSynchronizedObjectiveValue() const
Definition: constraint_solveri.h:1805
LocalSearchFilterManager(std::vector< FilterEvent > filter_events)
FilterEventType
Definition: constraint_solveri.h:1778
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:1784
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:1934
~LocalSearchMonitor() override
The base class for all local search operators.
Definition: constraint_solveri.h:792
virtual bool HasFragments() const
Definition: constraint_solveri.h:802
virtual bool HoldsDelta() const
Definition: constraint_solveri.h:803
virtual void Reset()
Definition: constraint_solveri.h:798
virtual const LocalSearchOperator * Self() const
Definition: constraint_solveri.h:800
virtual bool MakeNextNeighbor(Assignment *delta, Assignment *deltadelta)=0
LocalSearchOperator()
Definition: constraint_solveri.h:794
virtual void Start(const Assignment *assignment)=0
~LocalSearchOperator() override
Definition: constraint_solveri.h:795
bool StateIsValid() const
Definition: constraint_solveri.h:1662
void Commit()
void Revert()
LocalSearchVariable AddVariable(int64_t initial_min, int64_t initial_max)
bool SetMax(int64_t new_max)
Definition: constraint_solveri.h:1697
bool SetMin(int64_t new_min)
Definition: constraint_solveri.h:1694
int64_t Min() const
Definition: constraint_solveri.h:1692
int64_t Max() const
Definition: constraint_solveri.h:1693
Implements a complete cache for model elements: expressions and constraints.
Definition: constraint_solveri.h:2088
virtual IntExpr * FindVarArrayExpression(const std::vector< IntVar * > &vars, VarArrayExpressionType type) const =0
Var Array Expressions.
virtual IntExpr * FindVarArrayConstantArrayExpression(const std::vector< IntVar * > &vars, const std::vector< int64_t > &values, VarArrayConstantArrayExpressionType type) const =0
Var Array Constant Array Expressions.
VoidConstraintType
Definition: constraint_solveri.h:2090
@ VOID_CONSTRAINT_MAX
Definition: constraint_solveri.h:2093
@ VOID_TRUE_CONSTRAINT
Definition: constraint_solveri.h:2092
Solver * solver() const
ExprExpressionType
Definition: constraint_solveri.h:2119
@ EXPR_EXPRESSION_MAX
Definition: constraint_solveri.h:2123
virtual IntExpr * FindExprConstantExpression(IntExpr *const expr, int64_t value, ExprConstantExpressionType type) const =0
Expr Constant Expressions.
ExprConstantExpressionType
Definition: constraint_solveri.h:2145
@ EXPR_CONSTANT_PROD
Definition: constraint_solveri.h:2148
@ EXPR_CONSTANT_EXPRESSION_MAX
Definition: constraint_solveri.h:2156
@ EXPR_CONSTANT_IS_EQUAL
Definition: constraint_solveri.h:2152
@ EXPR_CONSTANT_IS_GREATER_OR_EQUAL
Definition: constraint_solveri.h:2154
@ EXPR_CONSTANT_MAX
Definition: constraint_solveri.h:2149
@ EXPR_CONSTANT_IS_NOT_EQUAL
Definition: constraint_solveri.h:2153
@ EXPR_CONSTANT_IS_LESS_OR_EQUAL
Definition: constraint_solveri.h:2155
@ EXPR_CONSTANT_MIN
Definition: constraint_solveri.h:2150
@ EXPR_CONSTANT_SUM
Definition: constraint_solveri.h:2151
@ EXPR_CONSTANT_DIVIDE
Definition: constraint_solveri.h:2147
virtual void InsertExprExprConstantExpression(IntExpr *const expression, IntExpr *const var1, IntExpr *const var2, int64_t constant, ExprExprConstantExpressionType type)=0
VarConstantConstraintType
Definition: constraint_solveri.h:2096
@ VAR_CONSTANT_GREATER_OR_EQUAL
Definition: constraint_solveri.h:2098
@ VAR_CONSTANT_NON_EQUALITY
Definition: constraint_solveri.h:2100
@ VAR_CONSTANT_CONSTRAINT_MAX
Definition: constraint_solveri.h:2101
@ VAR_CONSTANT_LESS_OR_EQUAL
Definition: constraint_solveri.h:2099
virtual IntExpr * FindExprExpression(IntExpr *const expr, ExprExpressionType type) const =0
Expr Expressions.
virtual IntExpr * FindVarConstantConstantExpression(IntVar *const var, int64_t value1, int64_t value2, VarConstantConstantExpressionType type) const =0
Var Constant Constant 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:2168
@ VAR_ARRAY_CONSTANT_ARRAY_EXPRESSION_MAX
Definition: constraint_solveri.h:2170
virtual IntExpr * FindExprExprConstantExpression(IntExpr *const var1, IntExpr *const var2, int64_t constant, ExprExprConstantExpressionType type) const =0
Expr Expr Constant Expressions.
VarConstantConstantExpressionType
Definition: constraint_solveri.h:2158
@ VAR_CONSTANT_CONSTANT_EXPRESSION_MAX
Definition: constraint_solveri.h:2160
VarConstantConstantConstraintType
Definition: constraint_solveri.h:2104
@ VAR_CONSTANT_CONSTANT_CONSTRAINT_MAX
Definition: constraint_solveri.h:2106
virtual void InsertVoidConstraint(Constraint *const ct, VoidConstraintType type)=0
virtual Constraint * FindVarConstantConstraint(IntVar *const var, int64_t value, VarConstantConstraintType type) const =0
Var Constant Constraints.
ExprExprExpressionType
Definition: constraint_solveri.h:2126
@ EXPR_EXPR_IS_EQUAL
Definition: constraint_solveri.h:2135
@ EXPR_EXPR_PROD
Definition: constraint_solveri.h:2128
@ EXPR_EXPR_EXPRESSION_MAX
Definition: constraint_solveri.h:2137
@ EXPR_EXPR_IS_LESS
Definition: constraint_solveri.h:2133
@ EXPR_EXPR_IS_LESS_OR_EQUAL
Definition: constraint_solveri.h:2134
@ EXPR_EXPR_IS_NOT_EQUAL
Definition: constraint_solveri.h:2136
ExprExprConstraintType
Definition: constraint_solveri.h:2109
@ EXPR_EXPR_GREATER
Definition: constraint_solveri.h:2111
@ EXPR_EXPR_LESS
Definition: constraint_solveri.h:2113
@ EXPR_EXPR_NON_EQUALITY
Definition: constraint_solveri.h:2115
@ EXPR_EXPR_GREATER_OR_EQUAL
Definition: constraint_solveri.h:2112
@ EXPR_EXPR_CONSTRAINT_MAX
Definition: constraint_solveri.h:2116
@ EXPR_EXPR_LESS_OR_EQUAL
Definition: constraint_solveri.h:2114
virtual void InsertVarArrayExpression(IntExpr *const expression, const std::vector< IntVar * > &vars, VarArrayExpressionType type)=0
virtual Constraint * FindVoidConstraint(VoidConstraintType type) const =0
Void constraints.
virtual IntExpr * FindVarConstantArrayExpression(IntVar *const var, const std::vector< int64_t > &values, VarConstantArrayExpressionType type) const =0
Var Constant Array Expressions.
virtual void Clear()=0
virtual void InsertVarArrayConstantExpression(IntExpr *const expression, const std::vector< IntVar * > &var, int64_t value, VarArrayConstantExpressionType type)=0
ExprExprConstantExpressionType
Definition: constraint_solveri.h:2140
@ EXPR_EXPR_CONSTANT_EXPRESSION_MAX
Definition: constraint_solveri.h:2142
virtual void InsertVarConstantConstraint(Constraint *const ct, IntVar *const var, int64_t value, VarConstantConstraintType type)=0
virtual IntExpr * FindVarArrayConstantExpression(const std::vector< IntVar * > &vars, int64_t value, VarArrayConstantExpressionType type) const =0
Var Array Constant Expressions.
virtual Constraint * FindVarConstantConstantConstraint(IntVar *const var, int64_t value1, int64_t value2, VarConstantConstantConstraintType type) const =0
Var Constant Constant Constraints.
VarArrayConstantExpressionType
Definition: constraint_solveri.h:2180
@ VAR_ARRAY_CONSTANT_EXPRESSION_MAX
Definition: constraint_solveri.h:2182
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:2173
@ VAR_ARRAY_EXPRESSION_MAX
Definition: constraint_solveri.h:2177
virtual IntExpr * FindExprExprExpression(IntExpr *const var1, IntExpr *const var2, ExprExprExpressionType type) const =0
Expr Expr Expressions.
virtual void InsertVarConstantConstantExpression(IntExpr *const expression, IntVar *const var, int64_t value1, int64_t value2, VarConstantConstantExpressionType type)=0
VarConstantArrayExpressionType
Definition: constraint_solveri.h:2163
@ VAR_CONSTANT_ARRAY_EXPRESSION_MAX
Definition: constraint_solveri.h:2165
virtual void InsertVarConstantConstantConstraint(Constraint *const ct, IntVar *const var, int64_t value1, int64_t value2, VarConstantConstantConstraintType type)=0
virtual Constraint * FindExprExprConstraint(IntExpr *const expr1, IntExpr *const expr2, ExprExprConstraintType type) const =0
Expr Expr Constraints.
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
ArgumentHolder * Top() const
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
void Decr(Solver *const s)
Definition: constraint_solver.h:3810
void Incr(Solver *const s)
Definition: constraint_solver.h:3808
This class encapsulates an objective.
Definition: constraint_solver.h:4247
Base class of the local search operators dedicated to path modifications (a path is a set of nodes li...
Definition: constraint_solveri.h:1313
int64_t StartNode(int i) const
Returns the start node of the ith base node.
Definition: constraint_solveri.h:1412
bool IsInactive(int64_t node) const
Returns true if node is inactive.
Definition: constraint_solveri.h:1504
int64_t OldPrev(int64_t node) const
Definition: constraint_solveri.h:1459
virtual bool ConsiderAlternatives(int64_t base_index) const
Indicates if alternatives should be considered when iterating over base nodes.
Definition: constraint_solveri.h:1452
virtual bool MakeNeighbor()=0
int PathClass(int i) const
Returns the class of the path of the ith base node.
Definition: constraint_solveri.h:1416
virtual void OnNodeInitialization()
Called by OnStart() after initializing node information.
Definition: constraint_solveri.h:1383
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:1436
int64_t OldPath(int64_t node) const
Definition: constraint_solveri.h:1464
bool IsPathStart(int64_t node) const
Returns true if node is the first node on the path.
Definition: constraint_solveri.h:1501
int64_t GetActiveAlternativeNode(int node) const
Returns the active node in the alternative set of the given node.
Definition: constraint_solveri.h:1549
int AddAlternativeSet(const std::vector< int64_t > &alternative_set)
Handling node alternatives.
Definition: constraint_solveri.h:1519
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 ...
const std::vector< int64_t > & path_starts() const
Returns the vector of path start nodes.
Definition: constraint_solveri.h:1414
virtual bool RestartAtPathStartOnSynchronize()
When the operator is being synchronized with a new solution (when Start() is called),...
Definition: constraint_solveri.h:1429
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:1498
int BaseSiblingAlternative(int i) const
Returns the alternative for the sibling of the ith base node.
Definition: constraint_solveri.h:1398
int64_t Next(int64_t node) const
Returns the node after node in the current delta.
Definition: constraint_solveri.h:1356
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:1348
int BaseAlternative(int i) const
Returns the alternative for the ith base node.
Definition: constraint_solveri.h:1388
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:1576
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:1486
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:1532
int64_t BaseSiblingAlternativeNode(int i) const
Returns the alternative node for the sibling of the ith base node.
Definition: constraint_solveri.h:1402
int64_t Prev(int64_t node) const
Returns the node before node in the current delta.
Definition: constraint_solveri.h:1362
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:1560
int64_t OldNext(int64_t node) const
Definition: constraint_solveri.h:1454
bool SkipUnchanged(int index) const override
const int number_of_nexts_
Definition: constraint_solveri.h:1572
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:1514
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:1442
int64_t BaseNode(int i) const
Returns the ith base node of the operator.
Definition: constraint_solveri.h:1386
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:1340
int next_base_to_increment_
Definition: constraint_solveri.h:1574
int64_t BaseAlternativeNode(int i) const
Returns the alternative node for the ith base node.
Definition: constraint_solveri.h:1390
int GetSiblingAlternativeIndex(int node) const
Returns the index of the alternative set of the sibling of node.
Definition: constraint_solveri.h:1553
bool MakeOneNeighbor() override
This method should not be overridden. Override MakeNeighbor() instead.
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:1370
virtual bool InitPosition() const
Returns true if the operator needs to restart its initial position at each call to Start()
Definition: constraint_solveri.h:1510
const bool ignore_path_vars_
Definition: constraint_solveri.h:1573
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:1447
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:3238
int operator*() const
Definition: constraint_solveri.h:3237
Iterator & operator++()
Definition: constraint_solveri.h:3233
Iterator begin() const
Definition: constraint_solveri.h:3257
Chain(const CommittedNode *begin_node, const CommittedNode *end_node)
Definition: constraint_solveri.h:3251
int NumNodes() const
Definition: constraint_solveri.h:3254
bool operator!=(Iterator other) const
Definition: constraint_solveri.h:3278
Chain operator*() const
Definition: constraint_solveri.h:3274
Iterator & operator++()
Definition: constraint_solveri.h:3270
Iterator begin() const
Definition: constraint_solveri.h:3298
Iterator end() const
Definition: constraint_solveri.h:3299
ChainRange(const ChainBounds *const begin_chain, const ChainBounds *const end_chain, const CommittedNode *const first_node)
Definition: constraint_solveri.h:3293
bool operator!=(Iterator other) const
Definition: constraint_solveri.h:3326
int operator*() const
Definition: constraint_solveri.h:3325
Iterator & operator++()
Definition: constraint_solveri.h:3313
Iterator begin() const
Definition: constraint_solveri.h:3352
Iterator end() const
Definition: constraint_solveri.h:3355
NodeRange(const ChainBounds *begin_chain, const ChainBounds *end_chain, const CommittedNode *first_node)
Definition: constraint_solveri.h:3347
const std::vector< int > & ChangedPaths() const
Definition: constraint_solveri.h:3109
const std::vector< int > & ChangedLoops() const
Definition: constraint_solveri.h:3111
bool IsInvalid() const
Definition: constraint_solveri.h:3148
ChainRange Chains(int path) const
int CommittedIndex(int node) const
Definition: constraint_solveri.h:3082
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:3083
void ChangePath(int path, const std::initializer_list< ChainBounds > &chains)
Definition: constraint_solveri.h:3127
void Commit()
NodeRange Nodes(int path) const
void Revert()
PathState(int num_nodes, std::vector< int > path_start, std::vector< int > path_end)
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:1866
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:2484
void RevInsert(Solver *const solver, int64_t index, T value)
Definition: constraint_solveri.h:2507
T At(int64_t index) const
Definition: constraint_solveri.h:2497
~RevGrowingArray()
Definition: constraint_solveri.h:2491
RevGrowingArray(int64_t block_size)
Definition: constraint_solveri.h:2486
void SetValue(Solver *const s, const T &val)
Definition: constraint_solver.h:3783
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
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
~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
This is a special class to represent a 'residual' set of T.
Definition: constraint_solveri.h:2567
void Insert(Solver *const solver, const T &elt)
Definition: constraint_solveri.h:2617
RevIntSet(int capacity)
Capacity is the fixed size of the set (it cannot grow).
Definition: constraint_solveri.h:2572
const_iterator begin() const
Definition: constraint_solveri.h:2640
T RemovedElement(int i) const
Definition: constraint_solveri.h:2611
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:2584
void Restore(Solver *const solver, const T &value_index)
Definition: constraint_solveri.h:2631
void Remove(Solver *const solver, const T &value_index)
Definition: constraint_solveri.h:2626
void Clear(Solver *const solver)
Definition: constraint_solveri.h:2636
--— RevPartialSequence --—
Definition: constraint_solveri.h:2679
int NumLastRanked() const
Definition: constraint_solveri.h:2709
RevPartialSequence(int size)
Definition: constraint_solveri.h:2693
int NumFirstRanked() const
Definition: constraint_solveri.h:2707
bool IsRanked(int elt) const
Definition: constraint_solveri.h:2733
std::string DebugString() const
Definition: constraint_solveri.h:2739
void RankLast(Solver *const solver, int elt)
Definition: constraint_solveri.h:2727
~RevPartialSequence()
Definition: constraint_solveri.h:2705
const int & operator[](int index) const
Definition: constraint_solveri.h:2714
void RankFirst(Solver *const solver, int elt)
Definition: constraint_solveri.h:2721
RevPartialSequence(const std::vector< int > &items)
Definition: constraint_solveri.h:2681
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:2038
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:3677
The SequenceVarElement stores a partial representation of ranked interval variables in the underlying...
Definition: constraint_solver.h:4858
void SetBackwardSequence(const std::vector< int > &backward_sequence)
const std::vector< int > & ForwardSequence() const
void SetForwardSequence(const std::vector< int > &forward_sequence)
SequenceVar * Var() const
Definition: constraint_solver.h:4865
A sequence variable is a variable whose domain is a set of possible orderings of the interval variabl...
Definition: constraint_solver.h:4591
int64_t size() const
Returns the number of interval vars in the sequence.
Definition: constraint_solver.h:4667
void OnRevertChanges(int64_t index, const std::vector< int > &value)
Definition: constraint_solveri.h:1224
bool ValueFromAssignment(const Assignment &assignment, SequenceVar *var, int64_t index, std::vector< int > *value)
Definition: constraint_solveri.h:1206
SequenceVarLocalSearchHandler(const SequenceVarLocalSearchHandler &other)
Definition: constraint_solveri.h:1116
SequenceVarLocalSearchHandler()
Definition: constraint_solveri.h:1115
SequenceVarLocalSearchHandler(SequenceVarLocalSearchOperator *op)
Definition: constraint_solveri.h:1118
void AddToAssignment(SequenceVar *var, const std::vector< int > &value, bool active, std::vector< int > *assignment_indices, int64_t index, Assignment *assignment) const
Definition: constraint_solveri.h:1180
void OnAddVars()
Definition: constraint_solveri.h:1229
void SetBackwardSequence(int64_t index, const std::vector< int > &value)
Definition: constraint_solveri.h:1169
void SetForwardSequence(int64_t index, const std::vector< int > &value)
Definition: constraint_solveri.h:1166
~SequenceVarLocalSearchOperator() override
Definition: constraint_solveri.h:1159
const std::vector< int > & Sequence(int64_t index) const
Returns the value in the current assignment of the variable of given index.
Definition: constraint_solveri.h:1162
std::vector< std::vector< int > > backward_values_
Definition: constraint_solveri.h:1177
SequenceVarLocalSearchOperator(const std::vector< SequenceVar * > &vars)
Definition: constraint_solveri.h:1154
const std::vector< int > & OldSequence(int64_t index) const
Definition: constraint_solveri.h:1163
SequenceVarLocalSearchOperator()
Definition: constraint_solveri.h:1153
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:605
@ DELAYED_PRIORITY
DELAYED_PRIORITY is the lowest priority: Demons will be processed after VAR_PRIORITY and NORMAL_PRIOR...
Definition: constraint_solver.h:608
T * RevAlloc(T *object)
Registers the given object as being reversible.
Definition: constraint_solver.h:791
A symmetry breaker is an object that will visit a decision and create the 'symmetrical' decision in r...
Definition: constraint_solveri.h:2008
void AddIntegerVariableLessOrEqualValueClause(IntVar *const var, int64_t value)
SymmetryBreaker()
Definition: constraint_solveri.h:2010
void AddIntegerVariableEqualValueClause(IntVar *const var, int64_t value)
void AddIntegerVariableGreaterOrEqualValueClause(IntVar *const var, int64_t value)
~SymmetryBreaker() override
Definition: constraint_solveri.h:2012
bool Check() const
UnaryDimensionChecker(const PathState *path_state, std::vector< Interval > path_capacity, std::vector< int > path_class, std::vector< std::function< Interval(int64_t)> > min_max_demand_per_path_class, std::vector< Interval > node_capacity)
void Commit()
This class represents a reversible bitset.
Definition: constraint_solveri.h:2793
int64_t word_size() const
Returns the number of 64 bit words used to store the bitset.
Definition: constraint_solveri.h:2831
int64_t bit_size() const
Returns the number of bits given in the constructor of the bitset.
Definition: constraint_solveri.h:2829
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:2798
bool RevAnd(Solver *const solver, const std::vector< uint64_t > &mask)
This method ANDs the mask with the active bitset.
const RevIntSet< int > & active_words() const
Returns the set of active word indices.
Definition: constraint_solveri.h:2833
bool Empty() const
This method returns true if the active bitset is null.
Definition: constraint_solveri.h:2817
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:2814
Base operator class for operators manipulating variables.
Definition: constraint_solveri.h:808
void Activate(int64_t index)
Definition: constraint_solveri.h:850
void RevertChanges(bool incremental)
Definition: constraint_solveri.h:882
void Deactivate(int64_t index)
Definition: constraint_solveri.h:854
std::vector< Val > old_values_
Definition: constraint_solveri.h:926
virtual bool SkipUnchanged(int index) const
Definition: constraint_solveri.h:843
void SetValue(int64_t index, const Val &value)
Definition: constraint_solveri.h:845
int Size() const
Definition: constraint_solveri.h:834
bool HoldsDelta() const override
Definition: constraint_solveri.h:817
std::vector< Val > values_
Definition: constraint_solveri.h:925
const Val & Value(int64_t index) const
Returns the value in the current assignment of the variable of given index.
Definition: constraint_solveri.h:837
SparseBitset delta_changes_
Definition: constraint_solveri.h:932
std::vector< Val > prev_values_
Definition: constraint_solveri.h:927
Bitset64 activated_
Definition: constraint_solveri.h:929
const Val & OldValue(int64_t index) const
Definition: constraint_solveri.h:844
std::vector< int > assignment_indices_
Definition: constraint_solveri.h:928
bool Activated(int64_t index) const
Definition: constraint_solveri.h:849
V * Var(int64_t index) const
Returns the variable of given index.
Definition: constraint_solveri.h:842
SparseBitset changes_
Definition: constraint_solveri.h:931
bool cleared_
Definition: constraint_solveri.h:933
virtual bool IsIncremental() const
Definition: constraint_solveri.h:833
Handler var_handler_
Definition: constraint_solveri.h:934
bool ApplyChanges(Assignment *delta, Assignment *deltadelta) const
Definition: constraint_solveri.h:858
VarLocalSearchOperator(Handler var_handler)
Definition: constraint_solveri.h:811
virtual void OnStart()
Called by Start() after synchronizing the operator with the current assignment.
Definition: constraint_solveri.h:914
void MarkChange(int64_t index)
OnStart() should really be protected, but then SWIG doesn't see it.
Definition: constraint_solveri.h:919
std::vector< V * > vars_
Definition: constraint_solveri.h:924
VarLocalSearchOperator()
Definition: constraint_solveri.h:810
~VarLocalSearchOperator() override
Definition: constraint_solveri.h:816
Bitset64 was_activated_
Definition: constraint_solveri.h:930
void AddVars(const std::vector< V * > &vars)
Definition: constraint_solveri.h:895
void Start(const Assignment *assignment) override
This method should not be overridden.
Definition: constraint_solveri.h:820
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
bool IsArrayConstant(const std::vector< T > &values, const T &value)
Definition: constraint_solveri.h:2846
bool AreAllLessOrEqual(const std::vector< T > &values, const T &value)
Definition: constraint_solveri.h:2886
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
bool AreAllNegative(const std::vector< T > &values)
Definition: constraint_solveri.h:2901
bool AreAllGreaterOrEqual(const std::vector< T > &values, const T &value)
Definition: constraint_solveri.h:2876
bool IsIncreasing(const std::vector< T > &values)
Definition: constraint_solveri.h:2926
bool AreAllStrictlyPositive(const std::vector< T > &values)
Definition: constraint_solveri.h:2906
bool IsArrayBoolean(const std::vector< T > &values)
Definition: constraint_solveri.h:2856
VarTypes
This enum is used internally to do dynamic typing on subclasses of integer variables.
Definition: constraint_solveri.h:115
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:2962
int64_t MaxVarArray(const std::vector< IntVar * > &vars)
Definition: constraint_solveri.h:2982
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.
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 * MakeDelayedConstraintDemon0(Solver *const s, T *const ct, void(T::*method)(), const std::string &name)
Definition: constraint_solveri.h:682
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
LocalSearchFilter * MakePathStateFilter(Solver *solver, std::unique_ptr< PathState > path_state, const std::vector< IntVar * > &nexts)
bool AreAllBoundTo(const std::vector< IntVar * > &vars, int64_t value)
Returns true if all variables are assigned to 'value'.
Definition: constraint_solveri.h:2973
void FillValues(const std::vector< IntVar * > &vars, std::vector< int64_t > *const values)
Definition: constraint_solveri.h:3002
bool AreAllBooleans(const std::vector< IntVar * > &vars)
Definition: constraint_solveri.h:2955
bool AreAllStrictlyNegative(const std::vector< T > &values)
Definition: constraint_solveri.h:2911
int64_t MinVarArray(const std::vector< IntVar * > &vars)
Definition: constraint_solveri.h:2992
Demon * MakeConstraintDemon0(Solver *const s, T *const ct, void(T::*method)(), const std::string &name)
Definition: constraint_solveri.h:519
std::vector< int64_t > ToInt64Vector(const std::vector< int > &input)
bool IsIncreasingContiguous(const std::vector< T > &values)
Definition: constraint_solveri.h:2916
bool AreAllNull(const std::vector< T > &values)
Definition: constraint_solveri.h:2871
bool AreAllPositive(const std::vector< T > &values)
Definition: constraint_solveri.h:2896
Demon * MakeDelayedConstraintDemon1(Solver *const s, T *const ct, void(T::*method)(P), const std::string &name, P param1)
Definition: constraint_solveri.h:718
LocalSearchFilter * MakeUnaryDimensionFilter(Solver *solver, std::unique_ptr< UnaryDimensionChecker > checker, const std::string &dimension_name)
VarLocalSearchOperator< SequenceVar, std::vector< int >, SequenceVarLocalSearchHandler > SequenceVarLocalSearchOperatorTemplate
Definition: constraint_solveri.h:1148
int64_t PosIntDivDown(int64_t e, int64_t v)
Definition: constraint_solveri.h:3016
bool IsArrayInRange(const std::vector< IntVar * > &vars, T range_min, T range_max)
Definition: constraint_solveri.h:2936
Demon * MakeConstraintDemon1(Solver *const s, T *const ct, void(T::*method)(P), const std::string &name, P param1)
Definition: constraint_solveri.h:560
bool AreAllOnes(const std::vector< T > &values)
Definition: constraint_solveri.h:2866
bool AreAllBound(const std::vector< IntVar * > &vars)
Definition: constraint_solveri.h:2946
int64_t PosIntDivUp(int64_t e, int64_t v)
Definition: constraint_solveri.h:3011
LocalSearchFilter * filter
Definition: constraint_solveri.h:1780
FilterEventType event_type
Definition: constraint_solveri.h:1781
Set of parameters used to configure how the neighnorhood is traversed.
Definition: constraint_solveri.h:1316
bool accept_path_end_base
True if path ends should be considered when iterating over neighbors.
Definition: constraint_solveri.h:1323
int number_of_base_nodes
Number of nodes needed to define a neighbor.
Definition: constraint_solveri.h:1318
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:1334
bool skip_locally_optimal_paths
Skip paths which have been proven locally optimal.
Definition: constraint_solveri.h:1321
ChainBounds(int begin_index, int end_index)
Definition: constraint_solveri.h:3077
int end_index
Definition: constraint_solveri.h:3080
ChainBounds()=default
int begin_index
Definition: constraint_solveri.h:3079
int64_t max
Definition: constraint_solveri.h:3381
int64_t min
Definition: constraint_solveri.h:3380