Module org.chocosolver
Class AbstractPropDistanceXYZ
- java.lang.Object
-
- org.chocosolver.solver.constraints.Propagator<IntVar>
-
- org.chocosolver.solver.constraints.ternary.AbstractPropDistanceXYZ
-
- All Implemented Interfaces:
Comparable<Propagator>
,ICause
,Identity
- Direct Known Subclasses:
PropEQDistanceXYZ
,PropGEDistanceXYZ
,PropGTDistanceXYZ
,PropLEDistanceXYZ
,PropLTDistanceXYZ
public abstract class AbstractPropDistanceXYZ extends Propagator<IntVar>
A constraint to state |X - Y| operator Z where operator can be =, <=, <, >=, > and X, Y, and Z are variables Warning: only achieves BoundConsistency for the moment !- Since:
- 06/04/12
- Author:
- Hadrien Cambazard, Charles Prud'homme, Arnaud Malapert
-
-
Field Summary
Fields Modifier and Type Field Description static int
X
static int
Y
static int
Z
-
Fields inherited from class org.chocosolver.solver.constraints.Propagator
ACTIVE, constraint, DEFAULT_EXPL, model, operations, OUTPUT_DEFAULT_EXPL, priority, reactToFineEvt, state, vars
-
-
Constructor Summary
Constructors Constructor Description AbstractPropDistanceXYZ(IntVar[] vars)
Enforces |X - Y| op Z
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description boolean
filterFromXYtoLBZ(int delta)
Update lower bound of Z if X !boolean
filterFromXYtoUBZ(int delta)
update upper bound of Z as max(|Y.sup - X.inf|, |Y.inf - X.sup|) - deltaprotected abstract boolean
filterFromXYtoZ()
protected abstract boolean
filterFromXZToY()
protected abstract boolean
filterFromYZToX()
boolean
filterGreaterFromIZToJ(int i, int j, int delta)
update bounds of X (resp.boolean
filterLowerFromIZToJ(int i, int j, int delta)
update bounds of X (resp.protected abstract String
getOperator()
int
getPropagationConditions(int vIdx)
Returns the specific mask indicating the variable events on which thisPropagator
object can react.
A mask is a bitwise OR operations overIEventType
this can react on.ESat
isEntailed()
Check wetherthis
is entailed according to the current state of its internal structure.protected abstract boolean
isEntailed(int distance, int value)
void
propagate()
void
propagate(int evtmask)
Call the main filtering algorithm to apply to theDomain
of theVariable
objects.void
propagate(int idxVarInProp, int mask)
Incremental filtering algorithm defined within thePropagator
, called whenever the variable of index idxVarInProp has changed.String
toString()
-
Methods inherited from class org.chocosolver.solver.constraints.Propagator
addVariable, arity, compareTo, defaultExplain, doFinePropagation, doFlush, doSchedule, doScheduleEvent, dynPriority, equals, explain, fails, forcePropagate, forcePropagationOnBacktrack, forEachIntVar, getConstraint, getId, getModel, getNbVars, getPosition, getPriority, getVar, getVars, getVIndice, getVIndices, hashCode, isActive, isCompletelyInstantiated, isPassive, isReified, isReifiedAndSilent, isScheduled, isStateLess, linkVariables, reactToFineEvent, reifiedWith, setActive, setActive0, setPassive, setPosition, setReifiedSilent, setReifiedTrue, setVIndices, unlinkVariables, unschedule
-
-
-
-
Field Detail
-
X
public static final int X
- See Also:
- Constant Field Values
-
Y
public static final int Y
- See Also:
- Constant Field Values
-
Z
public static final int Z
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
AbstractPropDistanceXYZ
public AbstractPropDistanceXYZ(IntVar[] vars)
Enforces |X - Y| op Z- Parameters:
vars
- variable
-
-
Method Detail
-
getPropagationConditions
public int getPropagationConditions(int vIdx)
Description copied from class:Propagator
Returns the specific mask indicating the variable events on which thisPropagator
object can react.
A mask is a bitwise OR operations overIEventType
this can react on. For example, consider a propagator that can deduce filtering based on the lower bound of the integer variable X. Then, for this variable, the mask should be equal to :int mask = IntEventType.INCLOW.getMask() | IntEventType.INSTANTIATE.getMask();
or, in a more convenient way:int mask = IntEvtType.combine(IntEventType.INCLOW,IntEventType.INSTANTIATE);
That indicates the following behavior:- if X is instantiated, this propagator will be executed,
- if the lower bound of X is modified, this propagator will be executed,
- if the lower bound of X is removed, the event is promoted from REMOVE to INCLOW and this propagator will NOT be executed,
- otherwise, this propagator will NOT be executed
IntEventType.VOID
which states that this propagator should not be aware of modifications applied to the variable in position vIdx.- Overrides:
getPropagationConditions
in classPropagator<IntVar>
- Parameters:
vIdx
- index of the variable within the propagator- Returns:
- an int composed of
REMOVE
and/orINSTANTIATE
and/orDECUPP
and/orINCLOW
-
propagate
public final void propagate() throws ContradictionException
- Throws:
ContradictionException
-
propagate
public void propagate(int evtmask) throws ContradictionException
Description copied from class:Propagator
Call the main filtering algorithm to apply to theDomain
of theVariable
objects. It considers the current state of this objects to remove some values from domains and/or instantiate some variables. Calling this method is done from 2 (and only 2) steps:
- at the initial propagation step,
- when involved in a reified constraint.
It should initialized the internal data structure and apply filtering algorithm from scratch.- Specified by:
propagate
in classPropagator<IntVar>
- Parameters:
evtmask
- type of propagation eventthis
must consider.- Throws:
ContradictionException
- when a contradiction occurs, like domain wipe out or other incoherencies.
-
propagate
public void propagate(int idxVarInProp, int mask) throws ContradictionException
Description copied from class:Propagator
Incremental filtering algorithm defined within thePropagator
, called whenever the variable of index idxVarInProp has changed. This method calls a CUSTOM_PROPAGATION (coarse-grained) by default.This method should be overridden if the argument
reactToFineEvt
is set totrue
in the constructor. Otherwise, it executespropagate(PropagatorEventType.CUSTOM_PROPAGATION.getStrengthenedMask());
- Overrides:
propagate
in classPropagator<IntVar>
- Parameters:
idxVarInProp
- index of the variablevar
inthis
mask
- type of event- Throws:
ContradictionException
- if a contradiction occurs
-
filterFromYZToX
protected abstract boolean filterFromYZToX() throws ContradictionException
- Throws:
ContradictionException
-
filterFromXZToY
protected abstract boolean filterFromXZToY() throws ContradictionException
- Throws:
ContradictionException
-
filterFromXYtoZ
protected abstract boolean filterFromXYtoZ() throws ContradictionException
- Throws:
ContradictionException
-
filterFromXYtoLBZ
public boolean filterFromXYtoLBZ(int delta) throws ContradictionException
Update lower bound of Z if X != Y- Returns:
true
if the domain of Z has changed- Throws:
ContradictionException
-
filterFromXYtoUBZ
public boolean filterFromXYtoUBZ(int delta) throws ContradictionException
update upper bound of Z as max(|Y.sup - X.inf|, |Y.inf - X.sup|) - delta- Returns:
true
if the domain of Z has changed- Throws:
ContradictionException
-
filterLowerFromIZToJ
public boolean filterLowerFromIZToJ(int i, int j, int delta) throws ContradictionException
update bounds of X (resp. Y) from Z and Y (resp. X) based on | X - Y| <(=) Z- Throws:
ContradictionException
-
filterGreaterFromIZToJ
public boolean filterGreaterFromIZToJ(int i, int j, int delta) throws ContradictionException
update bounds of X (resp. Y) from Z and Y (resp. X) based on | X - Y| >(=) Z- Throws:
ContradictionException
-
isEntailed
protected abstract boolean isEntailed(int distance, int value)
-
getOperator
protected abstract String getOperator()
-
isEntailed
public ESat isEntailed()
Description copied from class:Propagator
Check wetherthis
is entailed according to the current state of its internal structure. At least, should check the satisfaction ofthis
(when all is instantiated).- Specified by:
isEntailed
in classPropagator<IntVar>
- Returns:
- ESat.TRUE if entailed, ESat.FALSE if not entailed, ESat.UNDEFINED if unknown
-
toString
public String toString()
- Overrides:
toString
in classPropagator<IntVar>
-
-