- java.lang.Object
-
- org.chocosolver.solver.constraints.Propagator<IntVar>
-
- org.chocosolver.solver.constraints.nary.sum.PropSum
-
- All Implemented Interfaces:
Comparable<Propagator>
,ICause
,Identity
- Direct Known Subclasses:
PropScalar
,PropSumBool
,PropSumFullBool
public class PropSum extends Propagator<IntVar>
A propagator for SUM(x_i) o b
Based on "Bounds Consistency Techniques for Long Linear Constraint" W. Harvey and J. Schimpf- Since:
- 18/03/11
- Author:
- Charles Prud'homme
-
-
Field Summary
Fields Modifier and Type Field Description protected int
b
Bound to respectprotected int[]
I
Variability of each variable (ie domain amplitude)protected int
l
Number of variablesprotected int
maxI
Stores the maximal variabilityprotected Operator
o
The operator among EQ, LE, GE and NEprotected int
pos
The position of the last positive coefficientprotected int
sumLB
SUm of lower boundsprotected int
sumUB
Sum of upper bounds-
Fields inherited from class org.chocosolver.solver.constraints.Propagator
ACTIVE, constraint, DEFAULT_EXPL, model, operations, OUTPUT_DEFAULT_EXPL, priority, reactToFineEvt, state, vars
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description ESat
check(int sumLB, int sumUB)
Whether the current state of the scalar product is entailedprotected static PropagatorPriority
computePriority(int nbvars)
Compute the priority of the propagator wrt the number of involved variablesvoid
explain(ExplanationForSignedClause explanation, ValueSortedMap<IntVar> front, Implications ig, int p)
Clausal explanation for this cause.protected void
explainGlobal(ExplanationForSignedClause explanation, ValueSortedMap<IntVar> front, Implications ig, int F, int E)
protected void
filter()
Execute filtering wrt the operatorprotected void
filterOnEq()
Apply filtering when operator is EQprotected void
filterOnGeq()
Apply filtering when operator is GEprotected void
filterOnLeq()
Apply filtering when operator is LEprotected void
filterOnNeq()
Apply filtering when operator is NEint
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.static int
nb(Operator co)
static Operator
nop(Operator co)
protected PropSum
opposite()
protected void
prepare()
Prepare the propagation: compute sumLB, sumUB and Ivoid
propagate(int evtmask)
Call the main filtering algorithm to apply to theDomain
of theVariable
objects.String
toString()
-
Methods inherited from class org.chocosolver.solver.constraints.Propagator
addVariable, arity, compareTo, defaultExplain, doFinePropagation, doFlush, doSchedule, doScheduleEvent, dynPriority, equals, fails, forcePropagate, forcePropagationOnBacktrack, forEachIntVar, getConstraint, getId, getModel, getNbVars, getPosition, getPriority, getVar, getVars, getVIndice, getVIndices, hashCode, isActive, isCompletelyInstantiated, isPassive, isReified, isReifiedAndSilent, isScheduled, isStateLess, linkVariables, propagate, reactToFineEvent, reifiedWith, setActive, setActive0, setPassive, setPosition, setReifiedSilent, setReifiedTrue, setVIndices, unlinkVariables, unschedule
-
-
-
-
Field Detail
-
pos
protected final int pos
The position of the last positive coefficient
-
l
protected final int l
Number of variables
-
b
protected final int b
Bound to respect
-
I
protected final int[] I
Variability of each variable (ie domain amplitude)
-
maxI
protected int maxI
Stores the maximal variability
-
sumLB
protected int sumLB
SUm of lower bounds
-
sumUB
protected int sumUB
Sum of upper bounds
-
o
protected final Operator o
The operator among EQ, LE, GE and NE
-
-
Constructor Detail
-
PropSum
public PropSum(IntVar[] variables, int pos, Operator o, int b)
Creates a sum propagator: SUM(x_i) o b Coefficients are induced bypos
: those beforepos
(included) are equal to 1, the other ones are equal to -1.- Parameters:
variables
- list of integer variablespos
- position of the last positive coefficiento
- operator amng EQ, LE, GE and NEb
- bound to respect
-
-
Method Detail
-
computePriority
protected static PropagatorPriority computePriority(int nbvars)
Compute the priority of the propagator wrt the number of involved variables- Parameters:
nbvars
- number of variables- Returns:
- the priority
-
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
-
prepare
protected void prepare()
Prepare the propagation: compute sumLB, sumUB and I
-
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.
-
filter
protected void filter() throws ContradictionException
Execute filtering wrt the operator- Throws:
ContradictionException
- if contradiction is detected
-
filterOnEq
protected void filterOnEq() throws ContradictionException
Apply filtering when operator is EQ- Throws:
ContradictionException
- if contradiction is detected
-
filterOnLeq
protected void filterOnLeq() throws ContradictionException
Apply filtering when operator is LE- Throws:
ContradictionException
- if contradiction is detected
-
filterOnGeq
protected void filterOnGeq() throws ContradictionException
Apply filtering when operator is GE- Throws:
ContradictionException
- if contradiction is detected
-
filterOnNeq
protected void filterOnNeq() throws ContradictionException
Apply filtering when operator is NE- Throws:
ContradictionException
- if contradiction is detected
-
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
-
check
public ESat check(int sumLB, int sumUB)
Whether the current state of the scalar product is entailed- Parameters:
sumLB
- sum of lower boundssumUB
- sum of upper bounds- Returns:
- the entailment check
-
explain
public void explain(ExplanationForSignedClause explanation, ValueSortedMap<IntVar> front, Implications ig, int p)
Description copied from interface:ICause
Clausal explanation for this cause.This method must filled explanations with inferred literals. These literals are inferred from the analysis of (a subset of) conflicting nodes stored in front, the implication graph ig and the current node in conflict, not yet contained in front.
Optionally, this method can update front by looking for a predecessor of any node that seems more relevant than the declared one.
- Specified by:
explain
in interfaceICause
- Overrides:
explain
in classPropagator<IntVar>
- Parameters:
explanation
- explanation to computefront
- ordered map of (variable,node> in the conflict frontier of the implication graph.ig
- an implication graphp
- the pivot node out of front
-
explainGlobal
protected void explainGlobal(ExplanationForSignedClause explanation, ValueSortedMap<IntVar> front, Implications ig, int F, int E)
-
toString
public String toString()
- Overrides:
toString
in classPropagator<IntVar>
-
nb
public static int nb(Operator co)
-
opposite
protected PropSum opposite()
-
-