JaCoP.constraints.geost
Class NonOverlapping

java.lang.Object
  extended by JaCoP.constraints.geost.NonOverlapping
All Implemented Interfaces:
ExternalConstraint

public class NonOverlapping
extends java.lang.Object
implements ExternalConstraint

Author:
Marc-Olivier Fleury and Radoslaw Szymanek

Field Summary
 ObstacleObjectFrame[] objectConstraintMap
          It maps object (through object.id) to the internal constraint connected to this object.
 GeostObject[] objects
          It specifies the objects which are being in the scope of this external constraint.
 int[] selectedDimensions
          the dimensions (from 0 to dimension-1) on which the constraint applies.
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.
 
Constructor Summary
NonOverlapping(java.util.Collection<GeostObject> objects, int[] selectedDimensions)
          It creates an external constraint to make sure that specified set of objects does not overlap in k-dimensional space on the given number of selected dimensions within this k-dimensional space.
NonOverlapping(GeostObject[] objects, int[] selectedDimensions)
          It creates an external constraint to make sure that specified set of objects does not overlap in k-dimensional space on the given number of selected dimensions within this k-dimensional space.
 
Method Summary
 boolean addPrunableObjects(GeostObject o, SimpleHashSet<GeostObject> accumulator)
          It adds to the accumulator collection the objects that are likely to be pruned if the given object changes.
 java.util.Collection<ObstacleObjectFrame> genInternalConstraints(Geost geost)
          It generates internal constraints which will be used by Geost's sweeping algorithm.
 java.util.Collection<? extends InternalConstraint> getObjectConstraints(GeostObject o)
          It provides the collection of internal constraints that the given object has to satisfy.
 GeostObject[] getObjectScope()
          Provides the collection of objects that this constraint applies to
 boolean isInternalConstraintApplicableTo(InternalConstraint ic, GeostObject o)
          Returns true if the external constraint generated the supplied internal constraint ic, and that ic applies to object o.
 void onObjectUpdate(GeostObject o)
          Handler method called by the Geost kernel when the domain of the object changes.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

objects

public final GeostObject[] objects
It specifies the objects which are being in the scope of this external constraint.


objectConstraintMap

public ObstacleObjectFrame[] objectConstraintMap
It maps object (through object.id) to the internal constraint connected to this object.


selectedDimensions

public final int[] selectedDimensions
the dimensions (from 0 to dimension-1) on which the constraint applies. To consider time, include dimension in the array


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.

Constructor Detail

NonOverlapping

public NonOverlapping(GeostObject[] objects,
                      int[] selectedDimensions)
It creates an external constraint to make sure that specified set of objects does not overlap in k-dimensional space on the given number of selected dimensions within this k-dimensional space.

Parameters:
objects - the set of objects which can not overlap
selectedDimensions - the dimensions among which there must be at least one for which the objects do not overlap.

NonOverlapping

public NonOverlapping(java.util.Collection<GeostObject> objects,
                      int[] selectedDimensions)
It creates an external constraint to make sure that specified set of objects does not overlap in k-dimensional space on the given number of selected dimensions within this k-dimensional space.

Parameters:
objects - the set of objects which can not overlap
selectedDimensions - the dimensions among which there must be at least one for which the objects do not overlap.
Method Detail

addPrunableObjects

public boolean addPrunableObjects(GeostObject o,
                                  SimpleHashSet<GeostObject> accumulator)
Description copied from interface: ExternalConstraint
It adds to the accumulator collection the objects that are likely to be pruned if the given object changes. For instance, in the case of the non-overlapping constraint, these would be the objects that are close to the given object. TODO, optimize all the code around this functionality, avoid situation when accumulator has all objects anyway and external constraints are continuously queried to add objects and keep adding objects which are already in the set.

Specified by:
addPrunableObjects in interface ExternalConstraint
Parameters:
o - the object that was pruned
accumulator - the set of objects to add the object to
Returns:
true if a value was added, false otherwise

genInternalConstraints

public java.util.Collection<ObstacleObjectFrame> genInternalConstraints(Geost geost)
Description copied from interface: ExternalConstraint
It generates internal constraints which will be used by Geost's sweeping algorithm. The generation of internal constraints is done only once per search, implying that it is possible to do costly operations in order to generate internal constraints. However, another implication of this one-time use is that the internal constraints generated have to remain valid during the whole search.

Specified by:
genInternalConstraints in interface ExternalConstraint
Parameters:
geost - the geost kernel that will use the generated constraint
Returns:
the collection of internal constraints which correspond to this external constraint

onObjectUpdate

public void onObjectUpdate(GeostObject o)
Description copied from interface: ExternalConstraint
Handler method called by the Geost kernel when the domain of the object changes. Use this method to make changes to the state of the constraint (and of its relative internal constraints) if needed.

Specified by:
onObjectUpdate in interface ExternalConstraint

getObjectConstraints

public java.util.Collection<? extends InternalConstraint> getObjectConstraints(GeostObject o)
Description copied from interface: ExternalConstraint
It provides the collection of internal constraints that the given object has to satisfy. For instance, for the non overlapping constraint, the result would contain all the constraints corresponding to the objects in the non overlapping group. This method is used by the kernel only once per object, at the beginning of the search, to collect the set of constraints to use for each object.

Specified by:
getObjectConstraints in interface ExternalConstraint
Parameters:
o - the geost object that needs to be constrained
Returns:
the collection of internal constraints acting on the given object

isInternalConstraintApplicableTo

public boolean isInternalConstraintApplicableTo(InternalConstraint ic,
                                                GeostObject o)
Description copied from interface: ExternalConstraint
Returns true if the external constraint generated the supplied internal constraint ic, and that ic applies to object o.

Specified by:
isInternalConstraintApplicableTo in interface ExternalConstraint
Parameters:
ic - internal constraint being checked
o - object to which internal constrain should apply to
Returns:
true if the constraint was generated by this external constraint for the object o.

getObjectScope

public GeostObject[] getObjectScope()
Description copied from interface: ExternalConstraint
Provides the collection of objects that this constraint applies to

Specified by:
getObjectScope in interface ExternalConstraint
Returns:
the collection of objects, or null if the constraint applies to all objects