public class PropSum extends Propagator<IntVar>
Modifier and Type | Field and Description |
---|---|
protected int |
b
Bound to respect
|
protected int[] |
I
Variability of each variable (ie domain amplitude)
|
protected int |
l
Number of variables
|
protected int |
maxI
Stores the maximal variability
|
protected Operator |
o
The operator among EQ, LE, GE and NE
|
protected int |
pos
The position of the last positive coefficient
|
protected int |
sumLB
SUm of lower bounds
|
protected int |
sumUB
Sum of upper bounds
|
ACTIVE, constraint, model, NEW, PASSIVE, priority, reactToFineEvt, REIFIED, vars
Constructor and Description |
---|
PropSum(IntVar[] variables,
int pos,
Operator o,
int b)
Creates a sum propagator: SUM(x_i) o b
Coefficients are induced by
pos :
those before pos (included) are equal to 1,
the other ones are equal to -1. |
Modifier and Type | Method and Description |
---|---|
protected ESat |
check(int sumLB,
int sumUB)
Whether the current state of the scalar product is entailed
|
protected static PropagatorPriority |
computePriority(int nbvars)
Compute the priority of the propagator wrt the number of involved variables
|
protected void |
filter()
Execute filtering wrt the operator
|
protected void |
filterOnEq()
Apply filtering when operator is EQ
|
protected void |
filterOnGeq()
Apply filtering when operator is GE
|
protected void |
filterOnLeq()
Apply filtering when operator is LE
|
protected void |
filterOnNeq()
Apply filtering when operator is NE
|
int |
getPropagationConditions(int vIdx)
Returns the specific mask indicating the variable events on which this
Propagator object can react. |
ESat |
isEntailed()
Check wether
this is entailed according to the current state of its internal structure. |
protected static int |
nb(Operator co) |
protected static Operator |
nop(Operator co) |
protected PropSum |
opposite() |
protected void |
prepare()
Prepare the propagation: compute sumLB, sumUB and I
|
void |
propagate(int evtmask)
Call the main filtering algorithm to apply to the
Domain of the Variable objects. |
String |
toString() |
boolean |
why(RuleStore ruleStore,
IntVar var,
IEventType evt,
int value)
Add new rules to the rule store
|
addVariable, arity, compareTo, defineIn, dynPriority, equals, fails, forcePropagate, forcePropagationOnBacktrack, getConstraint, getId, getModel, getNbVars, getPriority, getVar, getVars, getVIndices, hashCode, isActive, isCompletelyInstantiated, isPassive, isReifiedAndSilent, isStateLess, linkVariables, propagate, reactToFineEvent, setActive, setPassive, setReifiedSilent, setReifiedTrue, setVIndices
protected final int pos
protected final int l
protected final int b
protected final int[] I
protected int maxI
protected int sumLB
protected int sumUB
protected final Operator o
public PropSum(IntVar[] variables, int pos, Operator o, int b)
pos
:
those before pos
(included) are equal to 1,
the other ones are equal to -1.variables
- list of integer variablespos
- position of the last positive coefficiento
- operator amng EQ, LE, GE and NEb
- bound to respectprotected static PropagatorPriority computePriority(int nbvars)
nbvars
- number of variablespublic int getPropagationConditions(int vIdx)
Propagator
Propagator
object can react.IEventType
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:
IntEventType.VOID
which states
that this propagator should not be aware of modifications applied to the variable in position vIdx.getPropagationConditions
in class Propagator<IntVar>
vIdx
- index of the variable within the propagatorREMOVE
and/or INSTANTIATE
and/or DECUPP
and/or INCLOW
protected void prepare()
public void propagate(int evtmask) throws ContradictionException
Propagator
Domain
of the Variable
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:
propagate
in class Propagator<IntVar>
evtmask
- type of propagation event this
must consider.ContradictionException
- when a contradiction occurs, like domain wipe out or other incoherencies.protected void filter() throws ContradictionException
ContradictionException
- if contradiction is detectedprotected void filterOnEq() throws ContradictionException
ContradictionException
- if contradiction is detectedprotected void filterOnLeq() throws ContradictionException
ContradictionException
- if contradiction is detectedprotected void filterOnGeq() throws ContradictionException
ContradictionException
- if contradiction is detectedprotected void filterOnNeq() throws ContradictionException
ContradictionException
- if contradiction is detectedpublic ESat isEntailed()
Propagator
this
is entailed according to the current state of its internal structure.
At least, should check the satisfaction of this
(when all is instantiated).isEntailed
in class Propagator<IntVar>
protected ESat check(int sumLB, int sumUB)
sumLB
- sum of lower boundssumUB
- sum of upper boundspublic String toString()
toString
in class Propagator<IntVar>
public boolean why(RuleStore ruleStore, IntVar var, IEventType evt, int value)
ICause
why
in interface ICause
why
in class Propagator<IntVar>
ruleStore
- the rule storevar
- the modified variableevt
- the undergoing eventvalue
- the value (for REMOVE only)protected static int nb(Operator co)
protected PropSum opposite()
Copyright © 2016. All rights reserved.