Class BoolNotView
- java.lang.Object
-
- org.chocosolver.solver.variables.impl.AbstractVariable
-
- org.chocosolver.solver.variables.view.IntView<BoolVar>
-
- org.chocosolver.solver.variables.view.BoolNotView
-
- All Implemented Interfaces:
Cloneable
,Comparable<Variable>
,Iterable<Integer>
,ILogical
,ArExpression
,ReExpression
,ICause
,Identity
,BoolVar
,IntVar
,Variable
,IView
public final class BoolNotView extends IntView<BoolVar> implements BoolVar
A view for boolean variable, that enforce not(b).- Since:
- 31/07/12
- Author:
- Charles Prud'homme
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.chocosolver.solver.expression.discrete.arithmetic.ArExpression
ArExpression.Operator
-
Nested classes/interfaces inherited from interface org.chocosolver.solver.expression.discrete.relational.ReExpression
ReExpression.Operator
-
-
Field Summary
-
Fields inherited from class org.chocosolver.solver.variables.impl.AbstractVariable
mIdx, model, monitors, MSG_EMPTY, MSG_INST, name, propagators
-
Fields inherited from interface org.chocosolver.solver.expression.discrete.arithmetic.ArExpression
NO_CHILD
-
Fields inherited from interface org.chocosolver.solver.variables.IntVar
MAX_INT_BOUND, MIN_INT_BOUND
-
-
Constructor Summary
Constructors Constructor Description BoolNotView(BoolVar var)
Create a not view based on var
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
_setNot(BoolVar not)
boolean
contains(int value)
Checks if a valuev
belongs to the domain ofthis
protected EvtScheduler
createScheduler()
void
explain(ExplanationForSignedClause explanation, ValueSortedMap<IntVar> front, Implications ig, int p)
Clausal explanation for this cause.ESat
getBooleanValue()
int
getLB()
Retrieves the lower bound of the variableint
getTypeAndKind()
Return a MASK composed of 2 main information: TYPE and KIND.int
getUB()
Retrieves the upper bound of the variableint
getValue()
Retrieves the current value of the variable if instantiated, otherwier the lower bound.boolean
hasNot()
boolean
instantiateTo(int value, ICause cause)
Instantiates the domain ofthis
tovalue
.boolean
isInstantiatedTo(int value)
Checks wetherthis
is instantiated toval
boolean
isLit()
Current tree is a literalboolean
isNot()
Current tree is rooted with NOT logical operator This is a one way relationship: in case a = not(b) a.isNot() returns true whereas b.isNot() returns false (unless b = not(c)...)void
justifyEvent(IntEventType mask, int one, int two, int three)
This methods is related to explanations, it binds an event occurring on the observed variable to the view.IIntDeltaMonitor
monitorDelta(ICause propagator)
Allow to monitor removed values ofthis
.int
nextValue(int v)
Returns the first value just after v inthis
which is in the domain.int
nextValueOut(int v)
Returns the first value just after v inthis
which is out of the domain.BoolVar
not()
int
previousValue(int v)
Returns the previous value just before v inthis
.int
previousValueOut(int v)
Returns the first value just before v inthis
which is out of the domain.boolean
removeAllValuesBut(IntIterableSet values, ICause cause)
Removes all values from the domain ofthis
except those invalues
.boolean
removeInterval(int from, int to, ICause cause)
Removes values between [from, to
] from the domain ofthis
.boolean
removeValue(int value, ICause cause)
Removesvalue
from the domain ofthis
.boolean
removeValues(IntIterableSet values, ICause cause)
Removes the value invalues
from the domain ofthis
.void
setNot(boolean isNot)
States whether or not this variable is the negation of another.boolean
setToFalse(ICause cause)
boolean
setToTrue(ICause cause)
String
toString()
boolean
updateBounds(int lb, int ub, ICause cause)
Updates the lower bound and the upper bound of the domain ofthis
to, resp.boolean
updateLowerBound(int value, ICause cause)
Updates the lower bound of the domain ofthis
tovalue
.boolean
updateUpperBound(int value, ICause cause)
Updates the upper bound of the domain ofthis
tovalue
.-
Methods inherited from class org.chocosolver.solver.variables.view.IntView
compareTo, createDelta, doInstantiateVar, doRemoveIntervalFromVar, doRemoveValueFromVar, doUpdateLowerBoundOfVar, doUpdateUpperBoundOfVar, forEachIntVar, getDelta, getDomainSize, getRange, getRangeIterator, getValueIterator, getVariable, hasEnumeratedDomain, isInstantiated, iterator, notify, transformEvent
-
Methods inherited from class org.chocosolver.solver.variables.impl.AbstractVariable
addMonitor, asBoolVar, asIntVar, asRealVar, asSetVar, clearEvents, contradiction, getCause, getDindex, getEvtScheduler, getId, getIndexInPropagator, getMask, getModel, getName, getNbProps, getNbViews, getPIndices, getPropagator, getPropagators, getView, isAConstant, isBool, link, notifyMonitors, notifyPropagators, notifyViews, removeMonitor, setPIndice, storeEvents, subscribeView, swapOnActivate, swapOnPassivate, unlink
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.chocosolver.solver.expression.discrete.arithmetic.ArExpression
abs, add, add, add, dist, dist, div, div, eq, eq, eq, ge, ge, getExpressionChild, gt, gt, le, le, lt, lt, max, max, max, min, min, min, mod, mod, mul, mul, mul, ne, ne, neg, pow, pow, sqr, sub, sub
-
Methods inherited from interface org.chocosolver.solver.variables.BoolVar
boolVar, extractVar, intVar
-
Methods inherited from interface java.lang.Comparable
compareTo
-
Methods inherited from interface org.chocosolver.solver.variables.IntVar
forEachIntVar, getDomainSize, getNoChild, getRange, getRangeIterator, getValueIterator, hasEnumeratedDomain, isBool, isExpressionLeaf, transformEvent
-
Methods inherited from interface java.lang.Iterable
forEach, iterator, spliterator
-
Methods inherited from interface org.chocosolver.solver.expression.discrete.relational.ReExpression
and, beval, decompose, extension, getModel, ieval, iff, ift, ift, ift, ift, imp, or, post, xor
-
Methods inherited from interface org.chocosolver.solver.variables.Variable
addMonitor, asBoolVar, asIntVar, asRealVar, asSetVar, clearEvents, contradiction, createDelta, getCause, getDelta, getDindex, getEnvironment, getEvtScheduler, getIndexInPropagator, getMask, getModel, getName, getNbProps, getNbViews, getPIndices, getPropagator, getPropagators, getView, isAConstant, isInstantiated, link, notifyMonitors, notifyPropagators, notifyViews, removeMonitor, setPIndice, storeEvents, subscribeView, swapOnActivate, swapOnPassivate, unlink
-
-
-
-
Constructor Detail
-
BoolNotView
public BoolNotView(BoolVar var)
Create a not view based on var- Parameters:
var
- a boolean variable
-
-
Method Detail
-
getBooleanValue
public ESat getBooleanValue()
- Specified by:
getBooleanValue
in interfaceBoolVar
-
setToTrue
public boolean setToTrue(ICause cause) throws ContradictionException
- Specified by:
setToTrue
in interfaceBoolVar
- Throws:
ContradictionException
-
setToFalse
public boolean setToFalse(ICause cause) throws ContradictionException
- Specified by:
setToFalse
in interfaceBoolVar
- Throws:
ContradictionException
-
removeValue
public boolean removeValue(int value, ICause cause) throws ContradictionException
Description copied from interface:IntVar
Removesvalue
from the domain ofthis
. The instruction comes frompropagator
.- If
value
is out of the domain, nothing is done and the return value isfalse
, - if removing
value
leads to a dead-end (domain wipe-out), aContradictionException
is thrown, - otherwise, if removing
value
from the domain can be done safely, the event type is created (the original event can be promoted) and observers are notified and the return value istrue
- Specified by:
removeValue
in interfaceIntVar
- Overrides:
removeValue
in classIntView<BoolVar>
- Parameters:
value
- value to remove from the domain (int)cause
- removal releaser- Returns:
- true if the value has been removed, false otherwise
- Throws:
ContradictionException
- if the domain become empty due to this action
- If
-
removeValues
public boolean removeValues(IntIterableSet values, ICause cause) throws ContradictionException
Description copied from interface:IntVar
Removes the value invalues
from the domain ofthis
. The instruction comes frompropagator
.- If all values are out of the domain, nothing is done and the return value is
false
, - if removing a value leads to a dead-end (domain wipe-out),
a
ContradictionException
is thrown, - otherwise, if removing the
values
from the domain can be done safely, the event type is created (the original event can be promoted) and observers are notified and the return value istrue
- Specified by:
removeValues
in interfaceIntVar
- Overrides:
removeValues
in classIntView<BoolVar>
- Parameters:
values
- set of ordered values to removecause
- removal release- Returns:
- true if at least a value has been removed, false otherwise
- Throws:
ContradictionException
- if the domain become empty due to this action
- If all values are out of the domain, nothing is done and the return value is
-
removeAllValuesBut
public boolean removeAllValuesBut(IntIterableSet values, ICause cause) throws ContradictionException
Description copied from interface:IntVar
Removes all values from the domain ofthis
except those invalues
. The instruction comes frompropagator
.- If all values are out of the domain,
a
ContradictionException
is thrown, - if the domain is a subset of values,
nothing is done and the return value is
false
, - otherwise, if removing all values but
values
from the domain can be done safely, the event type is created (the original event can be promoted) and observers are notified and the return value istrue
- Specified by:
removeAllValuesBut
in interfaceIntVar
- Overrides:
removeAllValuesBut
in classIntView<BoolVar>
- Parameters:
values
- set of ordered values to keep in the domaincause
- removal release- Returns:
- true if a at least a value has been removed, false otherwise
- Throws:
ContradictionException
- if the domain become empty due to this action
- If all values are out of the domain,
a
-
removeInterval
public boolean removeInterval(int from, int to, ICause cause) throws ContradictionException
Description copied from interface:IntVar
Removes values between [from, to
] from the domain ofthis
. The instruction comes frompropagator
.- If union between values and the current domain is empty, nothing is done and the return value is
false
, - if removing a
value
leads to a dead-end (domain wipe-out), aContradictionException
is thrown, - otherwise, if removing at least a
value
from the domain can be done safely, the event type is created (the original event can be promoted) and observers are notified and the return value istrue
- Specified by:
removeInterval
in interfaceIntVar
- Overrides:
removeInterval
in classIntView<BoolVar>
- Parameters:
from
- lower bound of the interval to remove (int)to
- upper bound of the interval to remove(int)cause
- removal releaser- Returns:
- true if the value has been removed, false otherwise
- Throws:
ContradictionException
- if the domain become empty due to this action
- If union between values and the current domain is empty, nothing is done and the return value is
-
instantiateTo
public boolean instantiateTo(int value, ICause cause) throws ContradictionException
Description copied from interface:IntVar
Instantiates the domain ofthis
tovalue
. The instruction comes frompropagator
.- If the domain of
this
is already instantiated tovalue
, nothing is done and the return value isfalse
, - If the domain of
this
is already instantiated to another value, then aContradictionException
is thrown, - Otherwise, the domain of
this
is restricted tovalue
and the observers are notified and the return value istrue
.
- Specified by:
instantiateTo
in interfaceIntVar
- Overrides:
instantiateTo
in classIntView<BoolVar>
- Parameters:
value
- instantiation value (int)cause
- instantiation releaser- Returns:
- true if the instantiation is done, false otherwise
- Throws:
ContradictionException
- if the domain become empty due to this action
- If the domain of
-
updateLowerBound
public boolean updateLowerBound(int value, ICause cause) throws ContradictionException
Description copied from interface:IntVar
Updates the lower bound of the domain ofthis
tovalue
. The instruction comes frompropagator
.- If
value
is smaller than the lower bound of the domain, nothing is done and the return value isfalse
, - if updating the lower bound to
value
leads to a dead-end (domain wipe-out), aContradictionException
is thrown, - otherwise, if updating the lower bound to
value
can be done safely, the event type is created (the original event can be promoted) and observers are notified and the return value istrue
- Specified by:
updateLowerBound
in interfaceIntVar
- Overrides:
updateLowerBound
in classIntView<BoolVar>
- Parameters:
value
- new lower bound (included)cause
- updating releaser- Returns:
- true if the lower bound has been updated, false otherwise
- Throws:
ContradictionException
- if the domain become empty due to this action
- If
-
updateUpperBound
public boolean updateUpperBound(int value, ICause cause) throws ContradictionException
Description copied from interface:IntVar
Updates the upper bound of the domain ofthis
tovalue
. The instruction comes frompropagator
.- If
value
is greater than the upper bound of the domain, nothing is done and the return value isfalse
, - if updating the upper bound to
value
leads to a dead-end (domain wipe-out), aContradictionException
is thrown, - otherwise, if updating the upper bound to
value
can be done safely, the event type is created (the original event can be promoted) and observers are notified and the return value istrue
- Specified by:
updateUpperBound
in interfaceIntVar
- Overrides:
updateUpperBound
in classIntView<BoolVar>
- Parameters:
value
- new upper bound (included)cause
- update releaser- Returns:
- true if the upper bound has been updated, false otherwise
- Throws:
ContradictionException
- if the domain become empty due to this action
- If
-
updateBounds
public boolean updateBounds(int lb, int ub, ICause cause) throws ContradictionException
Description copied from interface:IntVar
Updates the lower bound and the upper bound of the domain ofthis
to, resp.lb
andub
. The instruction comes frompropagator
.- If
lb
is smaller than the lower bound of the domain andub
is greater than the upper bound of the domain,nothing is done and the return value is
false
, - if updating the lower bound to
lb
, or updating the upper bound toub
leads to a dead-end (domain wipe-out), or iflb
is strictly greater thanub
, aContradictionException
is thrown, - otherwise, if updating the lower bound to
lb
and/or the upper bound toub
can be done safely can be done safely, the event type is created (the original event can be promoted) and observers are notified and the return value istrue
- Specified by:
updateBounds
in interfaceIntVar
- Overrides:
updateBounds
in classIntView<BoolVar>
- Parameters:
lb
- new lower bound (included)ub
- new upper bound (included)cause
- update releaser- Returns:
- true if the upper bound has been updated, false otherwise
- Throws:
ContradictionException
- if the domain become empty due to this action
- If
-
contains
public boolean contains(int value)
Description copied from interface:IntVar
Checks if a valuev
belongs to the domain ofthis
-
isInstantiatedTo
public boolean isInstantiatedTo(int value)
Description copied from interface:IntVar
Checks wetherthis
is instantiated toval
- Specified by:
isInstantiatedTo
in interfaceIntVar
- Parameters:
value
- int- Returns:
- true if
this
is instantiated toval
, false otherwise
-
getValue
public int getValue()
Description copied from interface:IntVar
Retrieves the current value of the variable if instantiated, otherwier the lower bound.
-
getLB
public int getLB()
Description copied from interface:IntVar
Retrieves the lower bound of the variable
-
getUB
public int getUB()
Description copied from interface:IntVar
Retrieves the upper bound of the variable
-
nextValue
public int nextValue(int v)
Description copied from interface:IntVar
Returns the first value just after v inthis
which is in the domain. If no such value exists, returns Integer.MAX_VALUE;To iterate over the values in a
IntVar
, use the following loop:int ub = iv.getUB(); for (int i = iv.getLB(); i <= ub; i = iv.nextValue(i)) { // operate on value i here }
-
nextValueOut
public int nextValueOut(int v)
Description copied from interface:IntVar
Returns the first value just after v inthis
which is out of the domain. If v is less than or equal toIntVar.getLB()
-2, returns v + 1, if v is greater than or equal toIntVar.getUB()
, returns v + 1.- Specified by:
nextValueOut
in interfaceIntVar
- Parameters:
v
- the value to start checking (exclusive)- Returns:
- the next value out of the domain
-
previousValue
public int previousValue(int v)
Description copied from interface:IntVar
Returns the previous value just before v inthis
. If no such value exists, returns Integer.MIN_VALUE;To iterate over the values in a
IntVar
, use the following loop:int lb = iv.getLB(); for (int i = iv.getUB(); i >= lb; i = iv.previousValue(i)) { // operate on value i here }
- Specified by:
previousValue
in interfaceIntVar
- Parameters:
v
- the value to start checking (exclusive)- Returns:
- the previous value in the domain
-
previousValueOut
public int previousValueOut(int v)
Description copied from interface:IntVar
Returns the first value just before v inthis
which is out of the domain. If v is greater than or equal toIntVar.getUB()
+2, returns v - 1, if v is less than or equal toIntVar.getLB()
, returns v - 1.- Specified by:
previousValueOut
in interfaceIntVar
- Parameters:
v
- the value to start checking (exclusive)- Returns:
- the previous value out of the domain
-
monitorDelta
public IIntDeltaMonitor monitorDelta(ICause propagator)
Description copied from interface:IntVar
Allow to monitor removed values ofthis
.- Specified by:
monitorDelta
in interfaceIntVar
- Parameters:
propagator
- the cause that requires to monitor delta- Returns:
- a delta monitor
-
createScheduler
protected EvtScheduler createScheduler()
- Specified by:
createScheduler
in classAbstractVariable
-
toString
public String toString()
- Overrides:
toString
in classAbstractVariable
-
not
public BoolVar not()
- Specified by:
not
in interfaceBoolVar
- Specified by:
not
in interfaceReExpression
- Returns:
- return the expression "¬x" where this is "x"
-
isLit
public boolean isLit()
Description copied from interface:ILogical
Current tree is a literal
-
isNot
public boolean isNot()
Description copied from interface:ILogical
Current tree is rooted with NOT logical operator This is a one way relationship: in case a = not(b) a.isNot() returns true whereas b.isNot() returns false (unless b = not(c)...)
-
setNot
public void setNot(boolean isNot)
Description copied from interface:ILogical
States whether or not this variable is the negation of another. This is a one way relationship: in case a = not(b) a.isNot() returns true whereas b.isNot() returns false (unless b = not(c)...)
-
getTypeAndKind
public int getTypeAndKind()
Description copied from interface:Variable
Return a MASK composed of 2 main information: TYPE and KIND.
TYPE is defined in the 3 first bits : VAR ( 1 << 0), CSTE (1 << 1) or VIEW (1 << 2)
KIND is defined on the other bits : INT (1 << 3), BOOL (INT + 1 << 4), GRAPH (1 << 5) or META (1 << 6) To get the TYPE of a variable:int type = var.getTypeAndKind() & Variable.TYPE;
To get the KIND of a variable:int kind = var.getTypeAndKind() & Variable.KIND;
To check a specific type or kind of a variable:boolean isVar = (var.getTypeAndKind() & Variable.VAR) !=0; boolean isInt = (var.getTypeAndKind() & Variable.INT) !=0;
- Specified by:
getTypeAndKind
in interfaceVariable
- Overrides:
getTypeAndKind
in classIntView<BoolVar>
- Returns:
- an int representing the type and kind of the variable
-
justifyEvent
public void justifyEvent(IntEventType mask, int one, int two, int three)
Description copied from interface:IView
This methods is related to explanations, it binds an event occurring on the observed variable to the view.- Specified by:
justifyEvent
in interfaceIView
- Parameters:
mask
- type of modificationone
- an inttwo
- an intthree
- an int
-
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.
-
-