FRAMES NO FRAMES

Class IlcIntVarArray

Definition file: ilsolver/intexp.h
Include file: <ilsolver/ilosolver.h>

The class IlcIntVarArray is the class for an array of instances of IlcIntVar. Three integers—indexMin, indexMax, and indexStep—play an important role in such an array of constrained integer variables. The index of those variables ranges from indexMin, inclusive, to indexMax, exclusive, in steps of indexStep. The index of the first variable in the array is indexMin; the second one is indexMin+indexStep, and so forth. The quantity indexMax-indexMin must be a multiple of indexStep.

Generic Constraints

The array makes it easier to implement generic constraints. In this context, a generic constraint is a constraint that applies to all of the variables in the array. Member functions of the array class are available to post such generic constraints. A generic constraint is then allocated and recorded only once for all the variables in the array. This fact represents a significant economy in memory, compared to allocating and recording one constraint per variable.

Interval Constraints

Arrays of constrained variables also allow you to define interval constraints which propagate in a global way when the domains of one or more constrained variables in the array are modified. Propagation is then performed through a goal. Member functions such as whenValueInterval, whenRangeInterval, or whenDomainInterval associate goals with propagation events for this purpose.

Backtracking and Reversibility

All the functions and member functions capable of modifying arrays of constrained integer variables are reversible. In particular, when modifiers and functions that post constraints are called, the state before their call will be saved by Solver.

Empty Handle or Null Array

It is possible to create a null array, or in other words, an empty handle. When you do so, only these operations are allowed on that null array:

Attempts to access a null array in any other way will throw an exception (an instance of IloSolver::SolverErrorException).

See Also:

Constructor Summary
public IlcIntVarArray()
public IlcIntVarArray(IlcIntVarArrayI * impl)
public IlcIntVarArray(IloSolver solver, IlcInt size)
public IlcIntVarArray(IloSolver solver, IlcInt size ILCPARAM, const IlcIntVar v1, const IlcIntVar v2)
public IlcIntVarArray(IloSolver solver, IlcInt size, IlcInt min, IlcInt max)
public IlcIntVarArray(IloSolver s, IlcInt indexMin, IlcInt indexMax, IlcInt indexStep, const IlcIntVar prototype)
Method Summary
public IlcIntVarArraygetCopy(IloSolver solver) const
public IlcIntgetDomainIndexMax() const
public IlcIntgetDomainIndexMin() const
public IlcIntVarArrayI *getImpl() const
public IlcIntgetIndexMax() const
public IlcIntgetIndexMin() const
public IlcIntgetIndexStep() const
public IlcIntgetIndexValue() const
public IlcIntgetMaxMax() const
public IlcIntgetMaxMax(IlcInt indexMin, IlcInt indexMax) const
public IlcIntgetMaxMin() const
public IlcIntgetMaxMin(IlcInt indexMin, IlcInt indexMax) const
public IlcIntgetMinMax() const
public IlcIntgetMinMax(IlcInt indexMin, IlcInt indexMax) const
public IlcIntgetMinMin() const
public IlcIntgetMinMin(IlcInt indexMin, IlcInt indexMax) const
public const char *getName() const
public IlcIntgetRangeIndexMax() const
public IlcIntgetRangeIndexMin() const
public IlcIntgetSize() const
public IloSolvergetSolver() const
public IloSolverI *getSolverI() const
public IlcIntgetValueIndexMax() const
public IlcIntgetValueIndexMin() const
public IlcIntVargetVariable(IlcInt index, IlcBool before=IlcFalse) const
public voidoperator=(const IlcIntVarArray & h)
public IlcIntExpoperator[](const IlcIntExp exp) const
public IlcIntExpoperator[](IlcIndex & I) const
public IlcIntVar &operator[](IlcInt index) const
public voidsetName(const char * name) const
public voidwhenDomain(const IlcDemon demon)
public voidwhenDomainInterval(const IlcDemon demon)
public voidwhenRange(const IlcDemon demon)
public voidwhenRangeInterval(const IlcDemon demon)
public voidwhenValue(const IlcDemon demon)
public voidwhenValueInterval(const IlcDemon demon)
Constructor Detail

IlcIntVarArray

public IlcIntVarArray()
This constructor creates an empty handle. You must initialize it before you use it.

IlcIntVarArray

public IlcIntVarArray(IlcIntVarArrayI * impl)
This constructor creates a handle object from a pointer to an implementation object.

IlcIntVarArray

public IlcIntVarArray(IloSolver solver, IlcInt size)

This constructor creates an uninitialized array of length size. The argument size must be strictly greater than 0 (zero). The index range of the array is [0 size). Each element of the array must be assigned before the array can be used.


IlcIntVarArray

public IlcIntVarArray(IloSolver solver, IlcInt size ILCPARAM, const IlcIntVar v1, const IlcIntVar v2)

This constructor creates an array of length size. Its constrained integer variables are initialized with the list of variables provided as arguments to the constructor. The number of IlcIntVar arguments must be equal to size. The argument size must be strictly greater than 0 (zero).


IlcIntVarArray

public IlcIntVarArray(IloSolver solver, IlcInt size, IlcInt min, IlcInt max)

This constructor creates an array of size constrained integer variables. The argument size must be strictly greater than 0 (zero). Each constrained integer variable has a domain containing all integer values between min and max.


IlcIntVarArray

public IlcIntVarArray(IloSolver s, IlcInt indexMin, IlcInt indexMax, IlcInt indexStep, const IlcIntVar prototype)

This constructor creates an array of copies of the given constrained integer variable prototype. Each copy initially has the same domain as prototype currently has, but the copies do not share the constraints of prototype. That is, they are independent of it.

The index range of the array is [indexMin indexMax). The step of the array is indexStep. Solver will throw an exception (an instance of IloSolver::SolverErrorException) if any of the following conditions occur:

This constructor keeps no pointer to the prototype variable. That variable may be an automatic object allocated on the C++ stack.


Method Detail

getCopy

public IlcIntVarArray getCopy(IloSolver solver) const

This member function returns a copy of the invoking array of constrained variables and associates that copy with solver.


getDomainIndexMax

public IlcInt getDomainIndexMax() const

When it is called during the execution of a goal associated with an array by the member function whenDomainInterval, this member function returns the maximum of the range of the array [indexMin indexMax) over which some removal of values has occurred. The returned value of this member function is not meaningful outside the execution of a goal associated with the array by the member function whenDomainInterval.


getDomainIndexMin

public IlcInt getDomainIndexMin() const

When it is called during the execution of a goal associated with an array by the member function whenDomainInterval, this member function returns the minimum of the range of the array [indexMin indexMax) over which some removal of values has occurred. The returned value of this member function is not meaningful outside the execution of a goal associated with the array by the member function whenDomainInterval.


getImpl

public IlcIntVarArrayI * getImpl() const
This constructor creates an object by copying another one. This member function returns a pointer to the implementation object of the invoking handle.

getIndexMax

public IlcInt getIndexMax() const

This member function returns the maximal index of the invoking array of constrained integer variables.


getIndexMin

public IlcInt getIndexMin() const

This member function returns the minimal index of the invoking array of constrained integer variables.


getIndexStep

public IlcInt getIndexStep() const

This member function returns the index step of the invoking array of constrained integer variables. The meaning of this index step is that the indexed variable value may change only at indices equal to (getIndexMin() + i * getIndexStep()).


getIndexValue

public IlcInt getIndexValue() const

When it is called during the execution of a constraint or demon associated with an array by the member functions whenValue, whenDomain, or whenRange, this member function returns the index in the invoking array of the constrained variable that triggered the propagation event. Calling this member function outside the execution of the goal will throw an exception (an instance of IloSolver::SolverErrorException) with the message “unbound index”.


getMaxMax

public IlcInt getMaxMax() const

This member function returns the largest of the maximal values of the variables belonging to the invoking array of constrained integer variables.


getMaxMax

public IlcInt getMaxMax(IlcInt indexMin, IlcInt indexMax) const

This member function returns the largest of the maximal values of the variables belonging to the invoking array of constrained integer variables. The arguments indexMin and indexMax are provided, only those variables that correspond to indices in the range [indexMin indexMax) are considered. Solver will throw an exception (an instance of IloSolver::SolverErrorException with the message "bad index interval" if the given indexMin and indexMax are not valid indices for the invoking array of constrained variables or if indexMin is not strictly less than indexMax.


getMaxMin

public IlcInt getMaxMin() const

This member function returns the largest of the minimal values of the variables belonging to the invoking array of constrained integer variables.


getMaxMin

public IlcInt getMaxMin(IlcInt indexMin, IlcInt indexMax) const

This member function returns the largest of the minimal values of the variables belonging to the invoking array of constrained integer variables. The arguments indexMin and indexMax are provided, only those variables that correspond to indices in the range [indexMin indexMax) are considered. Solver will throw an exception (an instance of IloSolver::SolverErrorException with the message "bad index interval" if the given indexMin and indexMax are not valid indices for the invoking array of constrained variables or if indexMin is not strictly less than indexMax.


getMinMax

public IlcInt getMinMax() const

This member function returns the smallest of the maximal values of the variables belonging to the invoking array of constrained integer variables.


getMinMax

public IlcInt getMinMax(IlcInt indexMin, IlcInt indexMax) const

This member function returns the smallest of the maximal values of the variables belonging to the invoking array of constrained integer variables. The arguments indexMin and indexMax are provided, only those variables that correspond to indices in the range [indexMin indexMax) are considered. Solver will throw an exception (an instance of IloSolver::SolverErrorException with the message "bad index interval" if the given indexMin and indexMax are not valid indices for the invoking array of constrained variables or if indexMin is not strictly less than indexMax.


getMinMin

public IlcInt getMinMin() const

This member function returns the smallest of the minimal values of the variables belonging to the invoking array of constrained integer variables.


getMinMin

public IlcInt getMinMin(IlcInt indexMin, IlcInt indexMax) const

This member function returns the smallest of the minimal values of the variables belonging to the invoking array of constrained integer variables. The arguments indexMin and indexMax are provided, only those variables that correspond to indices in the range [indexMin indexMax) are considered. Solver will throw an exception (an instance of IloSolver::SolverErrorException with the message "bad index interval" if the given indexMin and indexMax are not valid indices for the invoking array of constrained variables or if indexMin is not strictly less than indexMax.


getName

public const char * getName() const
This member function returns the name of the invoking object.

getRangeIndexMax

public IlcInt getRangeIndexMax() const

When it is called during the execution of a goal associated with an array by the member function whenRangeInterval, this member function returns the maximum of the range of the array [indexMin indexMax) over which some removal of values has occurred. The returned value of this member function is not meaningful outside the execution of a goal associated with the array by the member function whenRangeInterval.


getRangeIndexMin

public IlcInt getRangeIndexMin() const

When it is called during the execution of a goal associated with an array by the member function whenRangeInterval, this member function returns the minimum of the range of the array [indexMin indexMax) over which some removal of values has occurred. The returned value of this member function is not meaningful outside the execution of a goal associated with the array by the member function whenRangeInterval.


getSize

public IlcInt getSize() const

This member function returns the number of variables in the invoking array.


getSolver

public IloSolver getSolver() const

This member function returns an instance of IloSolver associated with the invoking object.


getSolverI

public IloSolverI * getSolverI() const

This member function returns a pointer to the implementation object of the solver where the invoking object was extracted.


getValueIndexMax

public IlcInt getValueIndexMax() const

When it is called during the execution of a goal associated with an array by the member function whenValueInterval, this member function returns the maximum of the range of the array [indexMin indexMax) over which some binding has occurred. The returned value of this member function is not meaningful outside the execution of a goal associated with the array by the member function whenValueInterval.


getValueIndexMin

public IlcInt getValueIndexMin() const

When it is called during the execution of a goal associated with an array by the member function whenValueInterval, this member function returns the minimum of the range of the array [indexMin indexMax) over which some binding has occurred. The returned value of this member function is not meaningful outside the execution of a goal associated with the array by the member function whenValueInterval.


getVariable

public IlcIntVar getVariable(IlcInt index, IlcBool before=IlcFalse) const

This member function returns the variable corresponding to the given index in the invoking array of constrained integer variables. However, if before is IlcTrue, then getVariable returns the variable before the variable at the given index. Solver will throw an exception (an instance of IloSolver::SolverErrorException) with the message "bad index" if the given index is not a valid one for the invoking array of constrained integer variables.

If t is an array of constrained integer variables, then these three expressions return the same value:

 t.getVariable(index, IlcFalse)
 t.getVariable(index + 1, IlcTrue)
 t[index]

operator=

public void operator=(const IlcIntVarArray & h)
This operator assigns an address to the handle pointer of the invoking object. That address is the location of the implementation object of the provided argument.

operator[]

public IlcIntExp operator[](const IlcIntExp exp) const

This subscripting operator returns a constrained integer expression. For clarity, let's call A the invoking array. When exp is bound to the value i, then the domain of the expression is the domain of A[i]. More generally, the domain of the expression is the union of the domains of the expressions A[i] where the i are in the domain of exp.


operator[]

public IlcIntExp operator[](IlcIndex & I) const

This operator returns a generic variable, which is a constrained variable representing an element of the array. That generic variable is said to stem from the index i.


operator[]

public IlcIntVar & operator[](IlcInt index) const

This subscripting operator returns a reference to a constrained integer variable corresponding to the given index in the invoking array of constrained integer variables. Solver will throw an exception (an instance of IloSolver::SolverErrorException) with the message "bad index" if the given index is not a valid one for the invoking array of constrained integer variables.


setName

public void setName(const char * name) const
This member function sets the name of the invoking object to a copy of name. This assignment is a reversible action.

whenDomain

public void whenDomain(const IlcDemon demon)

This member function associates demon with the domain propagation event of every variable in the invoking array. Whenever a value is removed from the domain of any of the variables in the invoking array, the demon will be executed immediately.

When the demon is executed, the index of the constrained variable that triggered the domain event can be known by a call to the member function getIndexValue.

Since a constraint is also a demon, a constraint can also be passed as an argument to this member function. Whenever a value is removed from the domain of any of the variables in the invoking array, the constraint will be propagated.


whenDomainInterval

public void whenDomainInterval(const IlcDemon demon)

This member function associates demon with the domain propagation event of every variable in the invoking array. It specifies that a given demon reacts globally to modifications of the domains of a collection of variables in the array. Whenever a domain propagation event or a series of such events occurs, the demon will be executed immediately.

Since a constraint is also a demon, a constraint can also be passed as an argument to this member function. Whenever a domain propagation event or a series of such events occurs, the constraint will be propagated.

A call to the demon signifies that some removal of values from domain(s) occurred over the index range [indexMin indexMax). It does not mean that values have been removed from the domains of all the variables in the range.


whenRange

public void whenRange(const IlcDemon demon)

This member function associates demon with the range propagation event of every variable in the invoking array. Whenever any bound of any of the variables in the array is modified, the demon will be executed immediately.

When the demon is executed, the index of the constrained integer variable that has triggered the range event can be known by a call to the member function getIndexValue.

Since a constraint is also a demon, a constraint can also be passed as an argument to this member function. Whenever any bound of any of the variables in the array is modified, the constraint will be propagated.


whenRangeInterval

public void whenRangeInterval(const IlcDemon demon)

This member function associates demon with the range propagation event of every variable in the invoking array. It specifies that a given demon reacts globally to modifications of the boundaries of a collection of variables in the array. Whenever a range propagation event or a series of such events occurs, the demon will be executed immediately.

Since a constraint is also a demon, a constraint can also be passed as an argument to this member function. Whenever a range propagation event or a series of such events occurs, the constraint will be propagated.

A call to the demon signifies that some modification of the boundaries occurred to variables over the index range [indexMin indexMax). It does not mean that all the variables in the range had their boundaries modified.


whenValue

public void whenValue(const IlcDemon demon)

This member function associates demon with the value propagation event of every variable in the invoking array. When one of the variables in the array receives a value, the demon will be executed immediately.

When the demon is executed, the index of the bound constrained variable can be known by a call to the member function getIndexValue.

Since a constraint is also a demon, a constraint can also be passed as an argument to this member function. When one of the variables in the array receives a value, the constraint will be propagated.


whenValueInterval

public void whenValueInterval(const IlcDemon demon)

This member function associates demon with the value propagation event of every variable in the invoking array. It specifies that a given demon reacts globally to the binding of a collection of variables in the array. When a value propagation event or a series of such events occurs, the demon will be executed immediately.

Since a constraint is also a demon, a constraint can also be passed as an argument to this member function. When a value propagation event or a series of such events occurs, the constraint will be propagated.

A call to the demon signifies that some variable binding occurred over the index range [indexMin indexMax). It does not mean that all the variables in the range have been bound.