org.sat4j.pb.constraints.pb
Class MinWatchPbLongCP

java.lang.Object
  extended by org.sat4j.pb.constraints.pb.WatchPbLongCP
      extended by org.sat4j.pb.constraints.pb.MinWatchPbLongCP
All Implemented Interfaces:
Serializable, Constr, Propagatable, Undoable, IWatchPb, PBConstr, IConstr

public class MinWatchPbLongCP
extends WatchPbLongCP

Data structure for pseudo-boolean constraint with watched literals. All literals are watched. The sum of the literals satisfied or unvalued is always memorized, to detect conflict.

See Also:
Serialized Form

Field Summary
protected  long watchCumul
          sum of the coefficients of the literals satisfied or unvalued
protected  boolean[] watched
          is the literal of index i watching the constraint ?
protected  int[] watching
          indexes of literals watching the constraint
protected  int watchingCount
          number of literals watching the constraint.
 
Fields inherited from class org.sat4j.pb.constraints.pb.WatchPbLongCP
activity, bigCoefs, bigDegree, coefs, degree, learnt, lits, voc
 
Constructor Summary
protected MinWatchPbLongCP(ILits voc, IDataStructurePB mpb)
          Basic constructor for pb constraint a0.x0 + a1.x1 + ... + an.xn >= k This constructor is called for learnt pseudo boolean constraints.
protected MinWatchPbLongCP(ILits voc, int[] lits, BigInteger[] coefs, BigInteger degree)
          Basic constructor for PB constraint a0.x0 + a1.x1 + ... + an.xn >= k
 
Method Summary
protected  void computePropagation(UnitPropagationListener s)
           
protected  void computeWatches()
           
protected  long maximalCoefficient(int pIndice)
          the maximal coefficient for the watched literals
protected  int nbOfWatched()
          Number of really watched literals.
static MinWatchPbLongCP normalizedMinWatchPbNew(UnitPropagationListener s, ILits voc, int[] lits, BigInteger[] coefs, BigInteger degree)
          build a pseudo boolean constraint.
static WatchPbLongCP normalizedWatchPbNew(ILits voc, IDataStructurePB mpb)
          build a pseudo boolean constraint from a specific data structure.
 boolean propagate(UnitPropagationListener s, int p)
          Propagation of a falsified literal
 void remove(UnitPropagationListener upl)
          Remove the constraint from the solver
 void undo(int p)
          this method is called during backtrack
protected  long updateWatched(long mc, int pIndice)
          update arrays watched and watching w.r.t. the propagation of a literal.
 
Methods inherited from class org.sat4j.pb.constraints.pb.WatchPbLongCP
assertConstraint, calcReason, canBePropagatedMultipleTimes, coefficientsEqualToOne, computeAnImpliedClause, computeLeftSide, computeLeftSide, computeLeftSide, equals, forwardActivity, get, getActivity, getCoef, getCoefs, getDegree, getLits, getLongCoefs, getVocabulary, hashCode, incActivity, isAssertive, isSatisfiable, learnt, locked, ppcm, register, rescaleBy, setLearnt, simplify, size, slackConstraint, slackConstraint, slackConstraint, sort, sort, toLong, toString
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

watchCumul

protected long watchCumul
sum of the coefficients of the literals satisfied or unvalued


watched

protected boolean[] watched
is the literal of index i watching the constraint ?


watching

protected int[] watching
indexes of literals watching the constraint


watchingCount

protected int watchingCount
number of literals watching the constraint. This is the real size of the array watching

Constructor Detail

MinWatchPbLongCP

protected MinWatchPbLongCP(ILits voc,
                           IDataStructurePB mpb)
Basic constructor for pb constraint a0.x0 + a1.x1 + ... + an.xn >= k This constructor is called for learnt pseudo boolean constraints.

Parameters:
voc - all the possible variables (vocabulary)
mpb - a mutable PB constraint

MinWatchPbLongCP

protected MinWatchPbLongCP(ILits voc,
                           int[] lits,
                           BigInteger[] coefs,
                           BigInteger degree)
Basic constructor for PB constraint a0.x0 + a1.x1 + ... + an.xn >= k

Parameters:
voc - all the possible variables (vocabulary)
lits - literals of the constraint (x0,x1, ... xn)
coefs - coefficients of the left side of the constraint (a0, a1, ... an)
degree - degree of the constraint (k)
Method Detail

computeWatches

protected void computeWatches()
                       throws ContradictionException
Specified by:
computeWatches in class WatchPbLongCP
Throws:
ContradictionException

computePropagation

protected void computePropagation(UnitPropagationListener s)
                           throws ContradictionException
Specified by:
computePropagation in class WatchPbLongCP
Throws:
ContradictionException

normalizedMinWatchPbNew

public static MinWatchPbLongCP normalizedMinWatchPbNew(UnitPropagationListener s,
                                                       ILits voc,
                                                       int[] lits,
                                                       BigInteger[] coefs,
                                                       BigInteger degree)
                                                throws ContradictionException
build a pseudo boolean constraint. Coefficients are positive integers less than or equal to the degree (this is called a normalized constraint).

Parameters:
s - a unit propagation listener
voc - the vocabulary
lits - the literals
coefs - the coefficients
degree - the degree of the constraint to normalize.
Returns:
a new PB constraint or null if a trivial inconsistency is detected.
Throws:
ContradictionException

nbOfWatched

protected int nbOfWatched()
Number of really watched literals. It should return the same value as watchingCount. This method must only be called for assertions.

Returns:
number of watched literals.

propagate

public boolean propagate(UnitPropagationListener s,
                         int p)
Propagation of a falsified literal

Parameters:
s - the solver
p - the propagated literal (it must be falsified)
Returns:
false iff there is a conflict

remove

public void remove(UnitPropagationListener upl)
Remove the constraint from the solver


undo

public void undo(int p)
this method is called during backtrack

Parameters:
p - un unassigned literal

normalizedWatchPbNew

public static WatchPbLongCP normalizedWatchPbNew(ILits voc,
                                                 IDataStructurePB mpb)
build a pseudo boolean constraint from a specific data structure. For learnt constraints.

Parameters:
s - a unit propagation listener (usually the solver)
mpb - data structure which contains literals of the constraint, coefficients (a0, a1, ... an), and the degree of the constraint (k). The constraint is a "more than" constraint.
Returns:
a new PB constraint or null if a trivial inconsistency is detected.

maximalCoefficient

protected long maximalCoefficient(int pIndice)
the maximal coefficient for the watched literals

Parameters:
pIndice - propagated literal : its coefficient is excluded from the search of the maximal coefficient
Returns:
the maximal coefficient for the watched literals

updateWatched

protected long updateWatched(long mc,
                             int pIndice)
update arrays watched and watching w.r.t. the propagation of a literal. return the maximal coefficient of the watched literals (could have been changed).

Parameters:
mc - the current maximal coefficient of the watched literals
pIndice - the literal propagated (falsified)
Returns:
the new maximal coefficient of the watched literals


Copyright © 2011 Centre de Recherche en Informatique de Lens (CRIL). All Rights Reserved.