C++ Reference
C++ Reference: Routing
constraint_solveri.h
Go to the documentation of this file.
124 };
1526 int64_t GetActiveInAlternativeSet(int alternative_index) const {
2076 VOID_FALSE_CONSTRAINT = 0,
2082 VAR_CONSTANT_EQUALITY = 0,
2090 VAR_CONSTANT_CONSTANT_BETWEEN = 0,
2095 EXPR_EXPR_EQUALITY = 0,
2105 EXPR_OPPOSITE = 0,
2112 EXPR_EXPR_DIFFERENCE = 0,
2126 EXPR_EXPR_CONSTANT_CONDITIONAL = 0,
2131 EXPR_CONSTANT_DIFFERENCE = 0,
2144 VAR_CONSTANT_CONSTANT_SEMI_CONTINUOUS = 0,
2149 VAR_CONSTANT_ARRAY_ELEMENT = 0,
2154 VAR_ARRAY_CONSTANT_ARRAY_SCAL_PROD = 0,
2159 VAR_ARRAY_MAX = 0,
2166 VAR_ARRAY_CONSTANT_INDEX = 0,
Argument Holder: useful when visiting a model.
Definition: constraint_solveri.h:2311
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:2443
~ArrayWithOffset() override
Definition: constraint_solveri.h:2441
ArrayWithOffset(int64_t index_min, int64_t index_max)
Definition: constraint_solveri.h:2434
void SetValue(int64_t index, T value)
Definition: constraint_solveri.h:2449
std::string DebugString() const override
Definition: constraint_solveri.h:2455
E * MutableElement(const V *const var)
Definition: constraint_solver.h:4932
bool Contains(const V *const var) const
Definition: constraint_solver.h:4928
const E & Element(const V *const var) const
Definition: constraint_solver.h:4945
void Deactivate()
Definition: constraint_solver.h:4648
bool Activated() const
Definition: constraint_solver.h:4649
An Assignment is a variable -> domains mapping, used to report solutions to the user.
Definition: constraint_solver.h:5042
IntContainer * MutableIntVarContainer()
Definition: constraint_solver.h:5194
const IntContainer & IntVarContainer() const
Definition: constraint_solver.h:5193
const SequenceContainer & SequenceVarContainer() const
Definition: constraint_solver.h:5201
SequenceContainer * MutableSequenceVarContainer()
Definition: constraint_solver.h:5204
void Clear()
IntVarElement * FastAdd(IntVar *const var)
Adds without checking if variable has been previously added.
BaseIntExpr(Solver *const s)
Definition: constraint_solveri.h:102
virtual IntVar * CastToVar()
~BaseIntExpr() override
Definition: constraint_solveri.h:103
This is the base class for building an Lns operator.
Definition: constraint_solveri.h:1259
virtual bool NextFragment()=0
~BaseLns() override
bool HasFragments() const override
Definition: constraint_solveri.h:1267
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:3154
int VarType() const override
Definition: constraint_solveri.h:1970
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:1955
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:1963
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:1985
int64_t Min() const override
Definition: constraint_solveri.h:1950
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:1964
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:1943
int64_t Value() const override
This method returns the value of the variable.
Definition: constraint_solveri.h:1956
int64_t Max() const override
Definition: constraint_solveri.h:1952
void SetMax(int64_t m) override
SimpleRevFIFO< Demon * > bound_demons_
Definition: constraint_solveri.h:1984
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:1978
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:1945
IntVarIterator * MakeDomainIterator(bool reversible) const override
Creates a domain iterator.
~BooleanVar() override
Definition: constraint_solveri.h:1948
Demon proxy to a method on the constraint with no arguments.
Definition: constraint_solveri.h:498
~CallMethod0() override
Definition: constraint_solveri.h:503
CallMethod0(T *const ct, void(T::*method)(), const std::string &name)
Definition: constraint_solveri.h:500
void Run(Solver *const s) override
This is the main callback of the demon.
Definition: constraint_solveri.h:505
std::string DebugString() const override
Definition: constraint_solveri.h:507
Demon proxy to a method on the constraint with one argument.
Definition: constraint_solveri.h:536
~CallMethod1() override
Definition: constraint_solveri.h:542
void Run(Solver *const s) override
This is the main callback of the demon.
Definition: constraint_solveri.h:544
std::string DebugString() const override
Definition: constraint_solveri.h:546
CallMethod1(T *const ct, void(T::*method)(P), const std::string &name, P param1)
Definition: constraint_solveri.h:538
Demon proxy to a method on the constraint with two arguments.
Definition: constraint_solveri.h:566
CallMethod2(T *const ct, void(T::*method)(P, Q), const std::string &name, P param1, Q param2)
Definition: constraint_solveri.h:568
~CallMethod2() override
Definition: constraint_solveri.h:576
void Run(Solver *const s) override
This is the main callback of the demon.
Definition: constraint_solveri.h:578
std::string DebugString() const override
Definition: constraint_solveri.h:582
Demon proxy to a method on the constraint with three arguments.
Definition: constraint_solveri.h:606
~CallMethod3() override
Definition: constraint_solveri.h:617
CallMethod3(T *const ct, void(T::*method)(P, Q, R), const std::string &name, P param1, Q param2, R param3)
Definition: constraint_solveri.h:608
void Run(Solver *const s) override
This is the main callback of the demon.
Definition: constraint_solveri.h:619
std::string DebugString() const override
Definition: constraint_solveri.h:623
Defines operators which change the value of variables; each neighbor corresponds to one modified vari...
Definition: constraint_solveri.h:1283
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:3587
A Decision represents a choice point in the search tree.
Definition: constraint_solver.h:3230
A DecisionVisitor is used to inspect a decision.
Definition: constraint_solver.h:3251
Low-priority demon proxy to a method on the constraint with no arguments.
Definition: constraint_solveri.h:656
Solver::DemonPriority priority() const override
This method returns the priority of the demon.
Definition: constraint_solveri.h:665
~DelayedCallMethod0() override
Definition: constraint_solveri.h:661
void Run(Solver *const s) override
This is the main callback of the demon.
Definition: constraint_solveri.h:663
DelayedCallMethod0(T *const ct, void(T::*method)(), const std::string &name)
Definition: constraint_solveri.h:658
std::string DebugString() const override
Definition: constraint_solveri.h:669
Low-priority demon proxy to a method on the constraint with one argument.
Definition: constraint_solveri.h:689
Solver::DemonPriority priority() const override
This method returns the priority of the demon.
Definition: constraint_solveri.h:699
DelayedCallMethod1(T *const ct, void(T::*method)(P), const std::string &name, P param1)
Definition: constraint_solveri.h:691
void Run(Solver *const s) override
This is the main callback of the demon.
Definition: constraint_solveri.h:697
std::string DebugString() const override
Definition: constraint_solveri.h:703
~DelayedCallMethod1() override
Definition: constraint_solveri.h:695
Low-priority demon proxy to a method on the constraint with two arguments.
Definition: constraint_solveri.h:725
Solver::DemonPriority priority() const override
This method returns the priority of the demon.
Definition: constraint_solveri.h:741
~DelayedCallMethod2() override
Definition: constraint_solveri.h:735
DelayedCallMethod2(T *const ct, void(T::*method)(P, Q), const std::string &name, P param1, Q param2)
Definition: constraint_solveri.h:727
void Run(Solver *const s) override
This is the main callback of the demon.
Definition: constraint_solveri.h:737
std::string DebugString() const override
Definition: constraint_solveri.h:745
A Demon is the base element of a propagation queue.
Definition: constraint_solver.h:3303
The class IntExpr is the base of all integer expressions in constraint programming.
Definition: constraint_solver.h:3839
void SetValue(int64_t v)
Definition: constraint_solver.h:4689
The class IntVar is a subset of IntExpr.
Definition: constraint_solver.h:4001
The class Iterator has two direct subclasses.
Definition: constraint_solver.h:3917
void SynchronizeOnAssignment(const Assignment *assignment)
virtual void OnSynchronize(const Assignment *delta)
Definition: constraint_solveri.h:1836
int Size() const
Definition: constraint_solveri.h:1827
~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:1816
IntVarLocalSearchFilter(const std::vector< IntVar * > &vars)
int64_t Value(int index) const
Definition: constraint_solveri.h:1829
IntVar * Var(int index) const
Definition: constraint_solveri.h:1828
void AddVars(const std::vector< IntVar * > &vars)
Add variables to "track" to the filter.
bool IsVarSynced(int index) const
Definition: constraint_solveri.h:1833
bool ValueFromAssignment(const Assignment &assignment, IntVar *var, int64_t index, int64_t *value)
Definition: constraint_solveri.h:1085
void OnAddVars()
Definition: constraint_solveri.h:971
IntVarLocalSearchHandler()
Definition: constraint_solveri.h:941
IntVarLocalSearchHandler(const IntVarLocalSearchHandler &other)
Definition: constraint_solveri.h:942
IntVarLocalSearchHandler(IntVarLocalSearchOperator *op)
Definition: constraint_solveri.h:944
void OnRevertChanges(int64_t index, int64_t value)
Definition: constraint_solveri.h:1102
void AddToAssignment(IntVar *var, int64_t value, bool active, std::vector< int > *assignment_indices, int64_t index, Assignment *assignment) const
Definition: constraint_solveri.h:945
Specialization of LocalSearchOperator built from an array of IntVars which specifies the scope of the...
Definition: constraint_solveri.h:1021
int64_t OldInverseValue(int64_t index) const
Definition: constraint_solveri.h:1067
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:1065
friend class IntVarLocalSearchHandler
Definition: constraint_solveri.h:1052
virtual bool MakeOneNeighbor()
Creates a new neighbor.
void SetOldInverseValue(int64_t index, int64_t value)
Definition: constraint_solveri.h:1075
~IntVarLocalSearchOperator() override
Definition: constraint_solveri.h:1042
void SetInverseValue(int64_t index, int64_t value)
Definition: constraint_solveri.h:1071
IntVarLocalSearchOperator()
Definition: constraint_solveri.h:1023
IntVarLocalSearchOperator(const std::vector< IntVar * > &vars, bool keep_inverse_values=false)
Definition: constraint_solveri.h:1027
bool IsInverseValue(int64_t index) const
Definition: constraint_solveri.h:1060
Interval variables are often used in scheduling.
Definition: constraint_solver.h:4398
Local Search Filters are used for fast neighbor pruning.
Definition: constraint_solveri.h:1715
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:1753
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:1719
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:1734
virtual int64_t GetSynchronizedObjectiveValue() const
Objective value from last time Synchronize() was called.
Definition: constraint_solveri.h:1750
virtual void Revert()
Cancels the changes made by the last Relax()/Accept() calls.
Definition: constraint_solveri.h:1744
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:1721
Filter manager: when a move is made, filters are executed to decide whether the solution is feasible ...
Definition: constraint_solveri.h:1759
int64_t GetAcceptedObjectiveValue() const
Definition: constraint_solveri.h:1791
int64_t GetSynchronizedObjectiveValue() const
Definition: constraint_solveri.h:1790
LocalSearchFilterManager(std::vector< FilterEvent > filter_events)
FilterEventType
Definition: constraint_solveri.h:1763
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:1769
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:1919
~LocalSearchMonitor() override
The base class for all local search operators.
Definition: constraint_solveri.h:791
virtual bool HasFragments() const
Definition: constraint_solveri.h:801
virtual bool HoldsDelta() const
Definition: constraint_solveri.h:802
virtual const LocalSearchOperator * Self() const
Definition: constraint_solveri.h:799
virtual void Reset()
Definition: constraint_solveri.h:797
virtual bool MakeNextNeighbor(Assignment *delta, Assignment *deltadelta)=0
LocalSearchOperator()
Definition: constraint_solveri.h:793
virtual void Start(const Assignment *assignment)=0
~LocalSearchOperator() override
Definition: constraint_solveri.h:794
bool StateIsValid() const
Definition: constraint_solveri.h:1647
void Commit()
void Revert()
LocalSearchVariable AddVariable(int64_t initial_min, int64_t initial_max)
bool SetMax(int64_t new_max)
Definition: constraint_solveri.h:1682
bool SetMin(int64_t new_min)
Definition: constraint_solveri.h:1679
int64_t Min() const
Definition: constraint_solveri.h:1677
int64_t Max() const
Definition: constraint_solveri.h:1678
Implements a complete cache for model elements: expressions and constraints.
Definition: constraint_solveri.h:2073
VoidConstraintType
Definition: constraint_solveri.h:2075
@ VOID_CONSTRAINT_MAX
Definition: constraint_solveri.h:2078
@ VOID_TRUE_CONSTRAINT
Definition: constraint_solveri.h:2077
ExprExpressionType
Definition: constraint_solveri.h:2104
@ EXPR_EXPRESSION_MAX
Definition: constraint_solveri.h:2108
ExprConstantExpressionType
Definition: constraint_solveri.h:2130
@ EXPR_CONSTANT_PROD
Definition: constraint_solveri.h:2133
@ EXPR_CONSTANT_EXPRESSION_MAX
Definition: constraint_solveri.h:2141
@ EXPR_CONSTANT_IS_EQUAL
Definition: constraint_solveri.h:2137
@ EXPR_CONSTANT_IS_GREATER_OR_EQUAL
Definition: constraint_solveri.h:2139
@ EXPR_CONSTANT_MAX
Definition: constraint_solveri.h:2134
@ EXPR_CONSTANT_IS_NOT_EQUAL
Definition: constraint_solveri.h:2138
@ EXPR_CONSTANT_IS_LESS_OR_EQUAL
Definition: constraint_solveri.h:2140
@ EXPR_CONSTANT_MIN
Definition: constraint_solveri.h:2135
@ EXPR_CONSTANT_SUM
Definition: constraint_solveri.h:2136
@ EXPR_CONSTANT_DIVIDE
Definition: constraint_solveri.h:2132
virtual void InsertExprExprConstantExpression(IntExpr *const expression, IntExpr *const var1, IntExpr *const var2, int64_t constant, ExprExprConstantExpressionType type)=0
VarConstantConstraintType
Definition: constraint_solveri.h:2081
@ VAR_CONSTANT_GREATER_OR_EQUAL
Definition: constraint_solveri.h:2083
@ VAR_CONSTANT_NON_EQUALITY
Definition: constraint_solveri.h:2085
@ VAR_CONSTANT_CONSTRAINT_MAX
Definition: constraint_solveri.h:2086
@ VAR_CONSTANT_LESS_OR_EQUAL
Definition: constraint_solveri.h:2084
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:2153
@ VAR_ARRAY_CONSTANT_ARRAY_EXPRESSION_MAX
Definition: constraint_solveri.h:2155
virtual IntExpr * FindVarArrayConstantExpression(const std::vector< IntVar * > &vars, int64_t value, VarArrayConstantExpressionType type) const =0
Var Array Constant Expressions.
VarConstantConstantExpressionType
Definition: constraint_solveri.h:2143
@ VAR_CONSTANT_CONSTANT_EXPRESSION_MAX
Definition: constraint_solveri.h:2145
Solver * solver() const
VarConstantConstantConstraintType
Definition: constraint_solveri.h:2089
@ VAR_CONSTANT_CONSTANT_CONSTRAINT_MAX
Definition: constraint_solveri.h:2091
virtual void InsertVoidConstraint(Constraint *const ct, VoidConstraintType type)=0
ExprExprExpressionType
Definition: constraint_solveri.h:2111
@ EXPR_EXPR_IS_EQUAL
Definition: constraint_solveri.h:2120
@ EXPR_EXPR_PROD
Definition: constraint_solveri.h:2113
@ EXPR_EXPR_EXPRESSION_MAX
Definition: constraint_solveri.h:2122
@ EXPR_EXPR_IS_LESS
Definition: constraint_solveri.h:2118
@ EXPR_EXPR_IS_LESS_OR_EQUAL
Definition: constraint_solveri.h:2119
@ EXPR_EXPR_IS_NOT_EQUAL
Definition: constraint_solveri.h:2121
ExprExprConstraintType
Definition: constraint_solveri.h:2094
@ EXPR_EXPR_GREATER
Definition: constraint_solveri.h:2096
@ EXPR_EXPR_LESS
Definition: constraint_solveri.h:2098
@ EXPR_EXPR_NON_EQUALITY
Definition: constraint_solveri.h:2100
@ EXPR_EXPR_GREATER_OR_EQUAL
Definition: constraint_solveri.h:2097
@ EXPR_EXPR_CONSTRAINT_MAX
Definition: constraint_solveri.h:2101
@ EXPR_EXPR_LESS_OR_EQUAL
Definition: constraint_solveri.h:2099
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:2125
@ EXPR_EXPR_CONSTANT_EXPRESSION_MAX
Definition: constraint_solveri.h:2127
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:2165
@ VAR_ARRAY_CONSTANT_EXPRESSION_MAX
Definition: constraint_solveri.h:2167
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:2158
@ VAR_ARRAY_EXPRESSION_MAX
Definition: constraint_solveri.h:2162
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:2148
@ VAR_CONSTANT_ARRAY_EXPRESSION_MAX
Definition: constraint_solveri.h:2150
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
void Decr(Solver *const s)
Definition: constraint_solver.h:3771
void Incr(Solver *const s)
Definition: constraint_solver.h:3769
This class encapsulates an objective.
Definition: constraint_solver.h:4208
Base class of the local search operators dedicated to path modifications (a path is a set of nodes li...
Definition: constraint_solveri.h:1312
int64_t StartNode(int i) const
Returns the start node of the ith base node.
Definition: constraint_solveri.h:1395
bool IsInactive(int64_t node) const
Returns true if node is inactive.
Definition: constraint_solveri.h:1487
int64_t OldPrev(int64_t node) const
Definition: constraint_solveri.h:1442
virtual bool ConsiderAlternatives(int64_t base_index) const
Indicates if alternatives should be considered when iterating over base nodes.
Definition: constraint_solveri.h:1435
virtual bool MakeNeighbor()=0
int PathClass(int i) const
Returns the class of the path of the ith base node.
Definition: constraint_solveri.h:1399
virtual void OnNodeInitialization()
Called by OnStart() after initializing node information.
Definition: constraint_solveri.h:1366
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:1419
int64_t OldPath(int64_t node) const
Definition: constraint_solveri.h:1447
bool IsPathStart(int64_t node) const
Returns true if node is the first node on the path.
Definition: constraint_solveri.h:1484
int64_t GetActiveAlternativeNode(int node) const
Returns the active node in the alternative set of the given node.
Definition: constraint_solveri.h:1532
int AddAlternativeSet(const std::vector< int64_t > &alternative_set)
Handling node alternatives.
Definition: constraint_solveri.h:1502
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:1412
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:1481
int BaseSiblingAlternative(int i) const
Returns the alternative for the sibling of the ith base node.
Definition: constraint_solveri.h:1381
int64_t Next(int64_t node) const
Returns the node after node in the current delta.
Definition: constraint_solveri.h:1339
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:1331
int BaseAlternative(int i) const
Returns the alternative for the ith base node.
Definition: constraint_solveri.h:1371
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:1559
const std::vector< int64_t > & path_starts() const
Returns the vector of path start nodes.
Definition: constraint_solveri.h:1397
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:1469
int64_t BaseSiblingAlternativeNode(int i) const
Returns the alternative node for the sibling of the ith base node.
Definition: constraint_solveri.h:1385
int64_t Prev(int64_t node) const
Returns the node before node in the current delta.
Definition: constraint_solveri.h:1345
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:1543
int64_t OldNext(int64_t node) const
Definition: constraint_solveri.h:1437
bool SkipUnchanged(int index) const override
const int number_of_nexts_
Definition: constraint_solveri.h:1555
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:1497
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:1425
int64_t BaseNode(int i) const
Returns the ith base node of the operator.
Definition: constraint_solveri.h:1369
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)
Builds an instance of PathOperator from next and path variables.
int next_base_to_increment_
Definition: constraint_solveri.h:1557
int64_t BaseAlternativeNode(int i) const
Returns the alternative node for the ith base node.
Definition: constraint_solveri.h:1373
int GetSiblingAlternativeIndex(int node) const
Returns the index of the alternative set of the sibling of node.
Definition: constraint_solveri.h:1536
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:1515
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:1353
virtual bool InitPosition() const
Returns true if the operator needs to restart its initial position at each call to Start()
Definition: constraint_solveri.h:1493
const bool ignore_path_vars_
Definition: constraint_solveri.h:1556
virtual void SetNextBaseToIncrement(int64_t base_index)
Set the next base to increment on next iteration.
Definition: constraint_solveri.h:1430
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:3243
int operator*() const
Definition: constraint_solveri.h:3242
Iterator & operator++()
Definition: constraint_solveri.h:3238
Iterator begin() const
Definition: constraint_solveri.h:3262
Chain(const CommittedNode *begin_node, const CommittedNode *end_node)
Definition: constraint_solveri.h:3256
int NumNodes() const
Definition: constraint_solveri.h:3259
bool operator!=(Iterator other) const
Definition: constraint_solveri.h:3283
Chain operator*() const
Definition: constraint_solveri.h:3279
Iterator & operator++()
Definition: constraint_solveri.h:3275
Iterator begin() const
Definition: constraint_solveri.h:3303
Iterator end() const
Definition: constraint_solveri.h:3304
ChainRange(const ChainBounds *const begin_chain, const ChainBounds *const end_chain, const CommittedNode *const first_node)
Definition: constraint_solveri.h:3298
bool operator!=(Iterator other) const
Definition: constraint_solveri.h:3331
int operator*() const
Definition: constraint_solveri.h:3330
Iterator & operator++()
Definition: constraint_solveri.h:3318
Iterator begin() const
Definition: constraint_solveri.h:3357
Iterator end() const
Definition: constraint_solveri.h:3360
NodeRange(const ChainBounds *begin_chain, const ChainBounds *end_chain, const CommittedNode *first_node)
Definition: constraint_solveri.h:3352
const std::vector< int > & ChangedPaths() const
Definition: constraint_solveri.h:3095
void CutChains()
bool IsInvalid() const
Definition: constraint_solveri.h:3121
ChainRange Chains(int path) const
void Commit()
NodeRange Nodes(int path) const
void Revert()
const std::vector< std::pair< int, int > > & ChangedArcs() const
Definition: constraint_solveri.h:3090
void ChangeNext(int node, int new_next)
Definition: constraint_solveri.h:3105
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:1851
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:456
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:466
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:421
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:2469
void RevInsert(Solver *const solver, int64_t index, T value)
Definition: constraint_solveri.h:2492
T At(int64_t index) const
Definition: constraint_solveri.h:2482
~RevGrowingArray()
Definition: constraint_solveri.h:2476
RevGrowingArray(int64_t block_size)
Definition: constraint_solveri.h:2471
void SetValue(Solver *const s, const T &val)
Definition: constraint_solver.h:3744
Reversible Immutable MultiMap class.
Definition: constraint_solveri.h:274
void Insert(const K &key, const V &value)
Inserts (key, value) in the multi-map.
Definition: constraint_solveri.h:317
RevImmutableMultiMap(Solver *const solver, int initial_size)
Definition: constraint_solveri.h:276
~RevImmutableMultiMap()
Definition: constraint_solveri.h:284
bool ContainsKey(const K &key) const
Returns true if the multi-map contains at least one instance of 'key'.
Definition: constraint_solveri.h:289
int num_items() const
Definition: constraint_solveri.h:286
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:304
This is a special class to represent a 'residual' set of T.
Definition: constraint_solveri.h:2552
void Insert(Solver *const solver, const T &elt)
Definition: constraint_solveri.h:2602
RevIntSet(int capacity)
Capacity is the fixed size of the set (it cannot grow).
Definition: constraint_solveri.h:2557
const_iterator begin() const
Definition: constraint_solveri.h:2625
T RemovedElement(int i) const
Definition: constraint_solveri.h:2596
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:2569
void Restore(Solver *const solver, const T &value_index)
Definition: constraint_solveri.h:2616
void Remove(Solver *const solver, const T &value_index)
Definition: constraint_solveri.h:2611
void Clear(Solver *const solver)
Definition: constraint_solveri.h:2621
--— RevPartialSequence --—
Definition: constraint_solveri.h:2664
int NumLastRanked() const
Definition: constraint_solveri.h:2694
RevPartialSequence(int size)
Definition: constraint_solveri.h:2678
int NumFirstRanked() const
Definition: constraint_solveri.h:2692
bool IsRanked(int elt) const
Definition: constraint_solveri.h:2718
std::string DebugString() const
Definition: constraint_solveri.h:2724
void RankLast(Solver *const solver, int elt)
Definition: constraint_solveri.h:2712
~RevPartialSequence()
Definition: constraint_solveri.h:2690
void RankFirst(Solver *const solver, int elt)
Definition: constraint_solveri.h:2706
const int & operator[](int index) const
Definition: constraint_solveri.h:2699
RevPartialSequence(const std::vector< int > &items)
Definition: constraint_solveri.h:2666
A reversible switch that can switch once from false to true.
Definition: constraint_solveri.h:382
void Switch(Solver *const solver)
Definition: constraint_solveri.h:388
The base class of all search logs that periodically outputs information when the search is running.
Definition: constraint_solveri.h:2023
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:3638
The SequenceVarElement stores a partial representation of ranked interval variables in the underlying...
Definition: constraint_solver.h:4819
void SetBackwardSequence(const std::vector< int > &backward_sequence)
SequenceVar * Var() const
Definition: constraint_solver.h:4826
void SetForwardSequence(const std::vector< int > &forward_sequence)
const std::vector< int > & ForwardSequence() const
A sequence variable is a variable whose domain is a set of possible orderings of the interval variabl...
Definition: constraint_solver.h:4552
int64_t size() const
Returns the number of interval vars in the sequence.
Definition: constraint_solver.h:4628
void OnRevertChanges(int64_t index, const std::vector< int > &value)
Definition: constraint_solveri.h:1223
bool ValueFromAssignment(const Assignment &assignment, SequenceVar *var, int64_t index, std::vector< int > *value)
Definition: constraint_solveri.h:1205
SequenceVarLocalSearchHandler(const SequenceVarLocalSearchHandler &other)
Definition: constraint_solveri.h:1115
SequenceVarLocalSearchHandler()
Definition: constraint_solveri.h:1114
SequenceVarLocalSearchHandler(SequenceVarLocalSearchOperator *op)
Definition: constraint_solveri.h:1117
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:1179
void OnAddVars()
Definition: constraint_solveri.h:1228
void SetBackwardSequence(int64_t index, const std::vector< int > &value)
Definition: constraint_solveri.h:1168
void SetForwardSequence(int64_t index, const std::vector< int > &value)
Definition: constraint_solveri.h:1165
~SequenceVarLocalSearchOperator() override
Definition: constraint_solveri.h:1158
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:1161
std::vector< std::vector< int > > backward_values_
Definition: constraint_solveri.h:1176
SequenceVarLocalSearchOperator(const std::vector< SequenceVar * > &vars)
Definition: constraint_solveri.h:1153
const std::vector< int > & OldSequence(int64_t index) const
Definition: constraint_solveri.h:1162
SequenceVarLocalSearchOperator()
Definition: constraint_solveri.h:1152
This iterator is not stable with respect to deletion.
Definition: constraint_solveri.h:147
void operator++()
Definition: constraint_solveri.h:153
T operator*() const
Definition: constraint_solveri.h:152
Iterator(const SimpleRevFIFO< T > *l)
Definition: constraint_solveri.h:149
This class represent a reversible FIFO structure.
Definition: constraint_solveri.h:136
T * MutableLast()
Definition: constraint_solveri.h:192
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:181
void Push(Solver *const s, T val)
Definition: constraint_solveri.h:168
SimpleRevFIFO()
Definition: constraint_solveri.h:166
This class represents a small reversible bitset (size <= 64).
Definition: constraint_solveri.h:396
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:603
@ DELAYED_PRIORITY
DELAYED_PRIORITY is the lowest priority: Demons will be processed after VAR_PRIORITY and NORMAL_PRIOR...
Definition: constraint_solver.h:606
T * RevAlloc(T *object)
Registers the given object as being reversible.
Definition: constraint_solver.h:789
A symmetry breaker is an object that will visit a decision and create the 'symmetrical' decision in r...
Definition: constraint_solveri.h:1993
void AddIntegerVariableLessOrEqualValueClause(IntVar *const var, int64_t value)
SymmetryBreaker()
Definition: constraint_solveri.h:1995
void AddIntegerVariableEqualValueClause(IntVar *const var, int64_t value)
void AddIntegerVariableGreaterOrEqualValueClause(IntVar *const var, int64_t value)
~SymmetryBreaker() override
Definition: constraint_solveri.h:1997
bool Check() const
void Commit()
UnaryDimensionChecker(const PathState *path_state, std::vector< Interval > path_capacity, std::vector< int > path_class, std::vector< std::vector< Interval >> demand, std::vector< Interval > node_capacity)
This class represents a reversible bitset.
Definition: constraint_solveri.h:2778
int64_t word_size() const
Returns the number of 64 bit words used to store the bitset.
Definition: constraint_solveri.h:2816
int64_t bit_size() const
Returns the number of bits given in the constructor of the bitset.
Definition: constraint_solveri.h:2814
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:2783
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:2802
const RevIntSet< int > & active_words() const
Returns the set of active word indices.
Definition: constraint_solveri.h:2818
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:2799
Base operator class for operators manipulating variables.
Definition: constraint_solveri.h:807
void Activate(int64_t index)
Definition: constraint_solveri.h:849
void RevertChanges(bool incremental)
Definition: constraint_solveri.h:881
void Deactivate(int64_t index)
Definition: constraint_solveri.h:853
std::vector< Val > old_values_
Definition: constraint_solveri.h:925
virtual bool SkipUnchanged(int index) const
Definition: constraint_solveri.h:842
void SetValue(int64_t index, const Val &value)
Definition: constraint_solveri.h:844
int Size() const
Definition: constraint_solveri.h:833
bool HoldsDelta() const override
Definition: constraint_solveri.h:816
std::vector< Val > values_
Definition: constraint_solveri.h:924
SparseBitset delta_changes_
Definition: constraint_solveri.h:931
const Val & Value(int64_t index) const
Returns the value in the current assignment of the variable of given index.
Definition: constraint_solveri.h:836
std::vector< Val > prev_values_
Definition: constraint_solveri.h:926
Bitset64 activated_
Definition: constraint_solveri.h:928
std::vector< int > assignment_indices_
Definition: constraint_solveri.h:927
bool Activated(int64_t index) const
Definition: constraint_solveri.h:848
SparseBitset changes_
Definition: constraint_solveri.h:930
bool cleared_
Definition: constraint_solveri.h:932
virtual bool IsIncremental() const
Definition: constraint_solveri.h:832
Handler var_handler_
Definition: constraint_solveri.h:933
bool ApplyChanges(Assignment *delta, Assignment *deltadelta) const
Definition: constraint_solveri.h:857
VarLocalSearchOperator(Handler var_handler)
Definition: constraint_solveri.h:810
virtual void OnStart()
Called by Start() after synchronizing the operator with the current assignment.
Definition: constraint_solveri.h:913
void MarkChange(int64_t index)
OnStart() should really be protected, but then SWIG doesn't see it.
Definition: constraint_solveri.h:918
const Val & OldValue(int64_t index) const
Definition: constraint_solveri.h:843
std::vector< V * > vars_
Definition: constraint_solveri.h:923
VarLocalSearchOperator()
Definition: constraint_solveri.h:809
V * Var(int64_t index) const
Returns the variable of given index.
Definition: constraint_solveri.h:841
~VarLocalSearchOperator() override
Definition: constraint_solveri.h:815
Bitset64 was_activated_
Definition: constraint_solveri.h:929
void AddVars(const std::vector< V * > &vars)
Definition: constraint_solveri.h:894
void Start(const Assignment *assignment) override
This method should not be overridden.
Definition: constraint_solveri.h:819
Collection of objects used to extend the Constraint Solver library.
Definition: constraint_solver.h:108
std::string ParameterDebugString(P param)
Definition: constraint_solveri.h:524
Demon * MakeDelayedConstraintDemon1(Solver *const s, T *const ct, void(T::*method)(P), const std::string &name, P param1)
Definition: constraint_solveri.h:717
bool IsArrayConstant(const std::vector< T > &values, const T &value)
Definition: constraint_solveri.h:2831
bool AreAllLessOrEqual(const std::vector< T > &values, const T &value)
Definition: constraint_solveri.h:2871
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:761
bool AreAllNegative(const std::vector< T > &values)
Definition: constraint_solveri.h:2886
bool AreAllGreaterOrEqual(const std::vector< T > &values, const T &value)
Definition: constraint_solveri.h:2861
bool IsIncreasing(const std::vector< T > &values)
Definition: constraint_solveri.h:2911
bool AreAllStrictlyPositive(const std::vector< T > &values)
Definition: constraint_solveri.h:2891
Demon * MakeConstraintDemon0(Solver *const s, T *const ct, void(T::*method)(), const std::string &name)
Definition: constraint_solveri.h:518
bool IsArrayBoolean(const std::vector< T > &values)
Definition: constraint_solveri.h:2841
VarTypes
This enum is used internally to do dynamic typing on subclasses of integer variables.
Definition: constraint_solveri.h:114
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:598
Demon * MakeConstraintDemon1(Solver *const s, T *const ct, void(T::*method)(P), const std::string &name, P param1)
Definition: constraint_solveri.h:559
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:2947
int64_t MaxVarArray(const std::vector< IntVar * > &vars)
Definition: constraint_solveri.h:2967
bool AreAllBoundTo(const std::vector< IntVar * > &vars, int64_t value)
Returns true if all variables are assigned to 'value'.
Definition: constraint_solveri.h:2958
void FillValues(const std::vector< IntVar * > &vars, std::vector< int64_t > *const values)
Definition: constraint_solveri.h:2987
bool AreAllBooleans(const std::vector< IntVar * > &vars)
Definition: constraint_solveri.h:2940
Demon * MakeDelayedConstraintDemon0(Solver *const s, T *const ct, void(T::*method)(), const std::string &name)
Definition: constraint_solveri.h:681
bool AreAllStrictlyNegative(const std::vector< T > &values)
Definition: constraint_solveri.h:2896
LocalSearchFilter * MakeUnaryDimensionFilter(Solver *solver, std::unique_ptr< UnaryDimensionChecker > checker)
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:2977
bool IsIncreasingContiguous(const std::vector< T > &values)
Definition: constraint_solveri.h:2901
bool AreAllNull(const std::vector< T > &values)
Definition: constraint_solveri.h:2856
bool AreAllPositive(const std::vector< T > &values)
Definition: constraint_solveri.h:2881
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:641
VarLocalSearchOperator< SequenceVar, std::vector< int >, SequenceVarLocalSearchHandler > SequenceVarLocalSearchOperatorTemplate
Definition: constraint_solveri.h:1147
int64_t PosIntDivDown(int64_t e, int64_t v)
Definition: constraint_solveri.h:3001
bool IsArrayInRange(const std::vector< IntVar * > &vars, T range_min, T range_max)
Definition: constraint_solveri.h:2921
bool AreAllOnes(const std::vector< T > &values)
Definition: constraint_solveri.h:2851
bool AreAllBound(const std::vector< IntVar * > &vars)
Definition: constraint_solveri.h:2931
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:2996
LocalSearchFilter * filter
Definition: constraint_solveri.h:1765
FilterEventType event_type
Definition: constraint_solveri.h:1766
int64_t max
Definition: constraint_solveri.h:3386
int64_t min
Definition: constraint_solveri.h:3385