JaCoP.constraints
Class ExtensionalSupportSTR

java.lang.Object
  extended by JaCoP.constraints.DecomposedConstraint
      extended by JaCoP.constraints.Constraint
          extended by JaCoP.constraints.ExtensionalSupportSTR

public class ExtensionalSupportSTR
extends Constraint

Extensional constraint assures that one of the tuples is enforced in the relation. This implementation uses technique developed/improved by Christophe Lecoutre. Paper presented at CP2008. We would like to thank him for making his code available, which helped to create our own version of this algorithm.

Version:
3.1
Author:
Radoslaw Szymanek

Field Summary
 boolean backtrackOccured
          It specifies if there was a backtrack and no yet consistency function execution after backtracking.
 int first
          Gives the position of the first tuple (in the current list) or -1 if the current list is empty.
 boolean firstConsistencyCheck
          It specifies if there was no first consistency check yet.
 int firstResidue
          It stores the position of the first residue.
 TimeStamp<java.lang.Integer> headsOfEliminatedTuples
          Gives the first position of the eliminated tuple at a given level.
 int last
          Gives the position of the last tuple (in the current list) or -1 if the current list is empty.
 int lastAssignedVariablePosition
           
 int lastResidue
          It stores the position of the last residue.
 IntVar[] list
          It stores variables within this extensional constraint, order does matter.
 int nbGlobalValuesToBeSupported
          The number of variable-value pairs which need to have support.
 int nbSupportsVariables
          It specifies the current number of variables for which it is required to check if their values from the domains are supported.
 int nbValidityVariables
          It specifies the number of variables for which validity check within a tuple must be performed.
 int[] nbValuesToBeSupported
          The number of variable-value pairs which need to have support per variable.
 int[] nexts
          Gives the position of the next tuple wrt the position given in index, or -1.
 boolean reinsertBefore
          It specifies if the tuples previously removed are re-inserted at the beginning.
 boolean residuesBefore
          It specifies if the residues are moved at the beginning of the list.
 int[] supportsVariablePositions
          The positions of the variables for which GAC must be checked.
 TimeStamp<java.lang.Integer> tailsOfEliminatedTuples
          Gives the last position of the eliminated tuple at a given level.
 int[][] tuples
           
 int[] validityVariablePositions
          The positions of the variables for which validity of any tuple must be checked.
 java.util.HashMap<Var,java.lang.Integer> varToIndex
          It specifies the mapping of the variable into its index.
static java.lang.String[] xmlAttributes
          It specifies the arguments required to be saved by an XML format as well as the constructor being called to recreate an object from an XML format.
 
Fields inherited from class JaCoP.constraints.Constraint
atomicExecution, consistencyPruningEvents, earlyTerminationOK, id, increaseWeight, numberArgs, numberId
 
Fields inherited from class JaCoP.constraints.DecomposedConstraint
queueIndex
 
Constructor Summary
ExtensionalSupportSTR(IntVar[] list, boolean reinsertBefore, boolean residuesBefore)
          Partial constructor which stores variables involved in a constraint but does not get information about tuples yet.
ExtensionalSupportSTR(IntVar[] variables, int[][] tuples)
          It creates an extensional constraint.
ExtensionalSupportSTR(IntVar[] list, int[][] tuples, boolean reinsertBefore, boolean residuesBefore)
          It constructs an extensional constraint.
 
Method Summary
 java.util.ArrayList<Var> arguments()
          It returns the variables in a scope of the constraint.
 void consistency(Store store)
          It is a (most probably incomplete) consistency function which removes the values from variables domains.
static void fromXML(ExtensionalSupportSTR object, java.lang.String content)
          It updates the specified constraint with the information stored in the string.
 int getConsistencyPruningEvent(Var var)
          It retrieves the pruning event which causes reevaluation of the constraint.
 java.lang.String id()
          It gives the id string of a constraint.
 void impose(Store store)
          It imposes the constraint in a given store.
 void increaseWeight()
          It increases the weight of the variables in the constraint scope.
 void queueVariable(int level, Var V)
          This is a function called to indicate which variable in a scope of constraint has changed.
 void remove(int previous, int current)
          It removes the tuple which is no longer valid.
 void removeConstraint()
          It removes the constraint by removing this constraint from all variables.
 void removeLevel(int level)
          This function is called in case of the backtrack, so a constraint can clear the queue of changed variables which is no longer valid.
 boolean satisfied()
          It checks if the constraint is satisfied.
 void storeResidue(int previous, int current)
          It moves the residue to the beginning of the list.
 java.lang.String toString()
          It produces a string representation of a constraint state.
 void toXML(javax.xml.transform.sax.TransformerHandler tf)
          It writes the content of this object as the content of XML element so later it can be used to restore the object from XML.
 
Methods inherited from class JaCoP.constraints.Constraint
cleanAfterFailure, decompose, getGuideConstraint, getGuideValue, getGuideVariable, impose, imposeDecomposition, numberArgs, removeLevelLate, requiresMonotonicity, setConsistencyPruningEvent, supplyGuideFeedback
 
Methods inherited from class JaCoP.constraints.DecomposedConstraint
auxiliaryVariables, imposeDecomposition
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

list

public IntVar[] list
It stores variables within this extensional constraint, order does matter.


tuples

public int[][] tuples

first

public int first
Gives the position of the first tuple (in the current list) or -1 if the current list is empty.


last

public int last
Gives the position of the last tuple (in the current list) or -1 if the current list is empty.


nexts

public int[] nexts
Gives the position of the next tuple wrt the position given in index, or -1.


headsOfEliminatedTuples

public TimeStamp<java.lang.Integer> headsOfEliminatedTuples
Gives the first position of the eliminated tuple at a given level.


tailsOfEliminatedTuples

public TimeStamp<java.lang.Integer> tailsOfEliminatedTuples
Gives the last position of the eliminated tuple at a given level.


nbGlobalValuesToBeSupported

public int nbGlobalValuesToBeSupported
The number of variable-value pairs which need to have support.


nbValuesToBeSupported

public int[] nbValuesToBeSupported
The number of variable-value pairs which need to have support per variable.


firstResidue

public int firstResidue
It stores the position of the first residue.


lastResidue

public int lastResidue
It stores the position of the last residue.


nbValidityVariables

public int nbValidityVariables
It specifies the number of variables for which validity check within a tuple must be performed.


validityVariablePositions

public int[] validityVariablePositions
The positions of the variables for which validity of any tuple must be checked.


nbSupportsVariables

public int nbSupportsVariables
It specifies the current number of variables for which it is required to check if their values from the domains are supported.


supportsVariablePositions

public int[] supportsVariablePositions
The positions of the variables for which GAC must be checked. It does not contain variables which were singletons in previous invocation of the consistency function.


varToIndex

public java.util.HashMap<Var,java.lang.Integer> varToIndex
It specifies the mapping of the variable into its index.


lastAssignedVariablePosition

public int lastAssignedVariablePosition

xmlAttributes

public static java.lang.String[] xmlAttributes
It specifies the arguments required to be saved by an XML format as well as the constructor being called to recreate an object from an XML format.


reinsertBefore

public boolean reinsertBefore
It specifies if the tuples previously removed are re-inserted at the beginning.


residuesBefore

public boolean residuesBefore
It specifies if the residues are moved at the beginning of the list.


firstConsistencyCheck

public boolean firstConsistencyCheck
It specifies if there was no first consistency check yet.


backtrackOccured

public boolean backtrackOccured
It specifies if there was a backtrack and no yet consistency function execution after backtracking.

Constructor Detail

ExtensionalSupportSTR

public ExtensionalSupportSTR(IntVar[] list,
                             boolean reinsertBefore,
                             boolean residuesBefore)
Partial constructor which stores variables involved in a constraint but does not get information about tuples yet. The tuples must set separately.

Parameters:
list - the variables in the scope of the constraint.
reinsertBefore - it specifies if the tuples which were removed and are reinstatiated are inserted at the beginning.
residuesBefore - it specifies if the residue tuples are moved to the beginning.

ExtensionalSupportSTR

public ExtensionalSupportSTR(IntVar[] list,
                             int[][] tuples,
                             boolean reinsertBefore,
                             boolean residuesBefore)
It constructs an extensional constraint.

Parameters:
list - the variables in the scope of the constraint.
tuples - the tuples which are supports.
reinsertBefore - it specifies if the tuples which were removed and are reinstatiated are inserted at the beginning.
residuesBefore - it specifies if the residue tuples are moved to the beginning.

ExtensionalSupportSTR

public ExtensionalSupportSTR(IntVar[] variables,
                             int[][] tuples)
It creates an extensional constraint.

Parameters:
variables - the variables in the scope of the constraint.
tuples - the support tuples.
Method Detail

remove

public void remove(int previous,
                   int current)
It removes the tuple which is no longer valid.

Parameters:
previous - the tuple pointing at removed tuple.
current - the removed tuple.

storeResidue

public void storeResidue(int previous,
                         int current)
It moves the residue to the beginning of the list.

Parameters:
previous - the tuple pointing at tuple residue.
current - the residue tuple.

arguments

public java.util.ArrayList<Var> arguments()
Description copied from class: Constraint
It returns the variables in a scope of the constraint.

Specified by:
arguments in class Constraint
Returns:
variables in a scope of the constraint.

removeLevel

public void removeLevel(int level)
Description copied from class: Constraint
This function is called in case of the backtrack, so a constraint can clear the queue of changed variables which is no longer valid. This function is called *before* all timestamps, variables, mutablevariables have reverted to their previous value.

Overrides:
removeLevel in class Constraint
Parameters:
level - the level which is being removed.

consistency

public void consistency(Store store)
Description copied from class: Constraint
It is a (most probably incomplete) consistency function which removes the values from variables domains. Only values which do not have any support in a solution space are removed.

Specified by:
consistency in class Constraint
Parameters:
store - constraint store within which the constraint consistency is being checked.

getConsistencyPruningEvent

public int getConsistencyPruningEvent(Var var)
Description copied from class: Constraint
It retrieves the pruning event which causes reevaluation of the constraint.

Specified by:
getConsistencyPruningEvent in class Constraint
Parameters:
var - variable for which pruning event is retrieved
Returns:
it returns the int code of the pruning event (GROUND, BOUND, ANY, NONE)

id

public java.lang.String id()
Description copied from class: Constraint
It gives the id string of a constraint.

Specified by:
id in class Constraint
Returns:
string id of the constraint.

impose

public void impose(Store store)
Description copied from class: Constraint
It imposes the constraint in a given store.

Specified by:
impose in class Constraint
Parameters:
store - the constraint store to which the constraint is imposed to.

increaseWeight

public void increaseWeight()
Description copied from class: Constraint
It increases the weight of the variables in the constraint scope.

Specified by:
increaseWeight in class Constraint

queueVariable

public void queueVariable(int level,
                          Var V)
Description copied from class: Constraint
This is a function called to indicate which variable in a scope of constraint has changed. It also indicates a store level at which the change has occurred.

Overrides:
queueVariable in class Constraint
Parameters:
level - the level of the store at which the change has occurred.
V - variable which has changed.

removeConstraint

public void removeConstraint()
Description copied from class: Constraint
It removes the constraint by removing this constraint from all variables.

Specified by:
removeConstraint in class Constraint

satisfied

public boolean satisfied()
Description copied from class: Constraint
It checks if the constraint is satisfied. If this function is incorrectly implemented a constraint may not be satisfied in a solution.

Specified by:
satisfied in class Constraint
Returns:
true if the constraint is for certain satisfied, false otherwise.

toString

public java.lang.String toString()
Description copied from class: Constraint
It produces a string representation of a constraint state.

Specified by:
toString in class Constraint

toXML

public void toXML(javax.xml.transform.sax.TransformerHandler tf)
           throws org.xml.sax.SAXException
It writes the content of this object as the content of XML element so later it can be used to restore the object from XML. It is done after restoration of the part of the object specified in xmlAttributes.

Parameters:
tf - a place to write the content of the object.
Throws:
org.xml.sax.SAXException

fromXML

public static void fromXML(ExtensionalSupportSTR object,
                           java.lang.String content)
It updates the specified constraint with the information stored in the string.

Parameters:
object - the constraint to be updated.
content - the information used for update.