Class PropSumBool

  • All Implemented Interfaces:
    Comparable<Propagator>, ICause, Identity
    Direct Known Subclasses:
    PropSumBoolIncr

    public class PropSumBool
    extends PropSum
    A propagator for SUM(x_i) = y + b, where x_i are boolean variables
    Based on "Bounds Consistency Techniques for Long Linear Constraint"
    W. Harvey and J. Schimpf

    Since:
    18/03/11
    Author:
    Charles Prud'homme
    • Field Detail

      • sum

        protected final IntVar sum
        The resulting variable
    • Constructor Detail

      • PropSumBool

        protected PropSumBool​(BoolVar[] variables,
                              int pos,
                              Operator o,
                              IntVar sum,
                              int b,
                              boolean reactOnFineEvent)
        Creates a sum propagator: SUM(x_i) Op sum + b, where x_i are boolean variables. Coefficients are induced by pos: those before pos (included) are equal to 1, the other ones are equal to -1.
        Parameters:
        variables - list of boolean variables
        pos - position of the last positive (induced) coefficient
        o - operator
        sum - resulting variable
        b - bound to respect
        reactOnFineEvent - set to true to react on fine events
      • PropSumBool

        public PropSumBool​(BoolVar[] variables,
                           int pos,
                           Operator o,
                           IntVar sum,
                           int b)
        Creates a sum propagator: SUM(x_i) Op sum + b, where x_i are boolean variables. Coefficients are induced by pos: those before pos (included) are equal to 1, the other ones are equal to -1.
        Parameters:
        variables - list of boolean variables
        pos - position of the last positive (induced) coefficient
        o - operator
        sum - resulting variable
        b - bound to respect
    • Method Detail

      • getPropagationConditions

        public int getPropagationConditions​(int vIdx)
        Description copied from class: Propagator
        Returns the specific mask indicating the variable events on which this Propagator object can react.
        A mask is a bitwise OR operations over 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:
        1. if X is instantiated, this propagator will be executed,
        2. if the lower bound of X is modified, this propagator will be executed,
        3. if the lower bound of X is removed, the event is promoted from REMOVE to INCLOW and this propagator will NOT be executed,
        4. otherwise, this propagator will NOT be executed
        Some combinations are valid. For example, a propagator which reacts on REMOVE and INSTANTIATE should also declare INCLOW and DECUPP as conditions. Indeed INCLOW (resp. DECUPP), for efficiency purpose, removing the lower bound (resp. upper bound) of an integer variable will automatically be promoted into INCLOW (resp. DECUPP). So, ignoring INCLOW and/or DECUPP in that case may result in a lack of filtering. The same goes with events of other variable types, but most of the time, there are only few combinations. Reacts to any kind of event by default. Alternatively, this method can return IntEventType.VOID which states that this propagator should not be aware of modifications applied to the variable in position vIdx.
        Overrides:
        getPropagationConditions in class PropSum
        Parameters:
        vIdx - index of the variable within the propagator
        Returns:
        an int composed of REMOVE and/or INSTANTIATE and/or DECUPP and/or INCLOW
      • prepare

        protected void prepare()
        Description copied from class: PropSum
        Prepare the propagation: compute sumLB, sumUB and I
        Overrides:
        prepare in class PropSum