- java.lang.Object
-
- org.chocosolver.solver.constraints.Propagator<Variable>
-
- org.chocosolver.solver.constraints.nary.sat.PropSat
-
- All Implemented Interfaces:
Comparable<Propagator<Variable>>
,ICause
,Identity
public class PropSat extends Propagator<Variable>
A propagator to deal with clauses and interface aMiniSat
.- Since:
- 12/07/13
- Author:
- Charles Prud'homme
-
-
Field Summary
-
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 Instance Methods Concrete Methods Modifier and Type Method Description boolean
addClause(gnu.trove.list.TIntList lits)
Add a clause to SAT solvervoid
addLearnt(int... lits)
Add learnt clause to SAT solvervoid
afterAddingClauses()
void
beforeAddingClauses()
protected void
doBound(int i)
MiniSat
getMiniSat()
void
initialize()
Initializes this propagatorESat
isEntailed()
Check wetherthis
is entailed according to the current state of its internal structure.void
lazyAddVar(Variable var)
int
makeBool(BoolVar expr)
Creates, or returns if already existing, the SAT variable corresponding to this CP variable.int
makeIntEq(IntVar var, int val)
Creates, or returns if already existing, the SAT variable corresponding to the relationshipvar = val
.int
makeIntLe(IntVar var, int val)
Creates, or returns if already existing, the SAT variable corresponding to the relationshipvar
≤val
.int
makeSetIn(SetVar var, int val)
Creates, or returns if already existing, the SAT variable corresponding to the relationshipval
∈var
.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.protected ESat
value(int svar)
-
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, getPropagationConditions, getVar, getVars, getVIndice, getVIndices, hashCode, isActive, isCompletelyInstantiated, isPassive, isReified, isReifiedAndSilent, isScheduled, isStateLess, linkVariables, reactToFineEvent, reifiedWith, setActive, setActive0, setEnabled, setPassive, setPosition, setReifiedSilent, setReifiedTrue, setVIndices, toString, unlinkVariables, unschedule
-
-
-
-
Constructor Detail
-
PropSat
public PropSat(Model model)
Create a (unique) propagator for clauses recording and propagation.- Parameters:
model
- the solver that declares the propagator
-
-
Method Detail
-
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<Variable>
- 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<Variable>
- Parameters:
idxVarInProp
- index of the variablevar
inthis
mask
- type of event- Throws:
ContradictionException
- if a contradiction occurs
-
doBound
protected void doBound(int i) throws ContradictionException
- Throws:
ContradictionException
-
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<Variable>
- Returns:
- ESat.TRUE if entailed, ESat.FALSE if not entailed, ESat.UNDEFINED if unknown
-
getMiniSat
public MiniSat getMiniSat()
- Returns:
- the underlying SAT solver
-
initialize
public void initialize()
Initializes this propagator
-
makeBool
public int makeBool(BoolVar expr)
Creates, or returns if already existing, the SAT variable corresponding to this CP variable.- Parameters:
expr
- a boolean variable- Returns:
- its SAT twin
-
makeIntEq
public int makeIntEq(IntVar var, int val)
Creates, or returns if already existing, the SAT variable corresponding to the relationshipvar = val
.- Parameters:
var
- an integer variableval
- an integer- Returns:
- its SAT twin
-
makeIntLe
public int makeIntLe(IntVar var, int val)
Creates, or returns if already existing, the SAT variable corresponding to the relationshipvar
≤val
.- Parameters:
var
- an integer variableval
- an integer- Returns:
- its SAT twin
-
makeSetIn
public int makeSetIn(SetVar var, int val)
Creates, or returns if already existing, the SAT variable corresponding to the relationshipval
∈var
.- Parameters:
var
- an integer variableval
- an integer- Returns:
- its SAT twin
-
lazyAddVar
public void lazyAddVar(Variable var)
-
value
protected ESat value(int svar)
-
beforeAddingClauses
public void beforeAddingClauses()
-
afterAddingClauses
public void afterAddingClauses()
-
addClause
public boolean addClause(gnu.trove.list.TIntList lits)
Add a clause to SAT solver- Parameters:
lits
- clause- Returns:
- false if failure is detected
-
addLearnt
public void addLearnt(int... lits)
Add learnt clause to SAT solver- Parameters:
lits
- clause
-
-