Package org.jacop.floats.core
Class FloatIntervalDomain
java.lang.Object
org.jacop.core.Domain
org.jacop.floats.core.FloatDomain
org.jacop.floats.core.FloatIntervalDomain
- All Implemented Interfaces:
Cloneable
Defines interval of numbers which is part of FDV definition which consist of
one or several intervals.
- Version:
- 4.8
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final FloatIntervalDomain
An empty domain, so no constant creation of empty domains is required.The values of the domain are encoded as a list of intervals.int
It specifies number of intervals needed to encode the domain.Fields inherited from class org.jacop.floats.core.FloatDomain
ANY, BOUND, E, emptyFloatDomain, eventsInclusion, FloatIntervalDomainID, format, GROUND, IntervalDomainID, intervalPrint, MaxFloat, MinFloat, minimizationStep, outward, PI, precision, previousDomain
Fields inherited from class org.jacop.core.Domain
failException, modelConstraints, modelConstraintsToEvaluate, NOINFO, NONE, searchConstraints, searchConstraintsCloned, searchConstraintsToEvaluate, stamp
-
Constructor Summary
ConstructorsConstructorDescriptionEmpty constructor, does not initialize anything.FloatIntervalDomain
(double min, double max) It creates domain with all values between min and max.FloatIntervalDomain
(int size) It creates an empty domain, with at least specified number of places in an array list for intervals. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addDom
(FloatDomain domain) It adds values as specified by the parameter to the domain.void
addLastElement
(double i) It adds a value to the domain.It is a function to check if the object is in consistent state.void
clear()
It removes all elements.clone()
It clones the domain object.It clones the domain object, only data responsible for encoding domain values is cloned.It creates a complement of a domain.boolean
contains
(double value) boolean
contains
(double min, double max) It checks if an interval min..max belongs to the domain.boolean
contains
(int value) It checks if value belongs to the domain.boolean
contains
(FloatDomain domain) It specifies if the current domain contains the domain given as a parameter.int
domainID()
It returns an unique identifier of the domain.boolean
eq
(FloatDomain domain) It checks if the domain is equal to the supplied domain.It returns interval enumeration of the domain values.getInterval
(int position) It returns required interval.int
getSize()
It returns the size of the domain.double
void
It updates the domain to have values only within the interval min..max.void
in
(int storeLevel, Var var, FloatDomain domain) It updates the domain to have values only within the domain.void
inComplement
(int storeLevel, Var var, double complement) It updates the domain to not contain the value complement.void
inComplement
(int storeLevel, Var var, double min, double max) It updates the domain so it does not contain the supplied interval.void
It updates the domain according to the maximum value and stamp value.void
It updates the domain according to the minimum value and stamp value.void
inShift
(int storeLevel, Var var, FloatDomain domain, double shift) It updates the domain to contain the elements as specifed by the domain, which is shifted.intersect
(double min, double max) In intersects current domain with the domain min..max.intersect
(FloatDomain domain) It interesects current domain with the one given as a parameter.int
intersectAdapt
(int min, int max) It computes an intersection of this domain with an interval [min..max].int
intersectAdapt
(FloatDomain domain) It computes an intersection with a given domain and stores it in this domain.It returns interval enumeration of the domain values.int
intervalNo
(double value) It specifies the position of the interval which contains specified value.boolean
isEmpty()
It returns true if given domain is empty.boolean
isIntersecting
(double min, double max) It checks if interval min..max intersects with current domain.boolean
isIntersecting
(FloatDomain domain) Checks if two domains intersect.boolean
It specifies if domain is a finite domain of numeric values (integers).boolean
It specifies if the domain type is more suited to representing sparse domain.double
leftElement
(int intervalNo) It returns the left most element of the given interval.double
max()
It returns the maximum value in a domain.double
min()
It returns the minimum value in a domain.double
nextValue
(double value) int
It returns the number intervals into which this domain is split.It returns domain at earlier level at which the change has occurred.void
putSearchConstraint
(int storeLevel, Var var, Constraint C) It adds a constraint to a domain, it should only be called by putConstraint function of Variable object.recentDomainPruning
(int storeLevel) It removes a constraint from a domain, it should only be called by removeConstraint function of Variable object.void
removeInterval
(int position) It removes the counter-th interval from the domain.void
removeLevel
(int level, Var var) It removes a level of a domain.void
removeSearchConstraint
(int storeLevel, Var var, int position, Constraint C) It removes a constraint from a domain, it should only be called by removeConstraint function of Variable object.void
removeSearchConstraint
(int storeLevel, Var var, Constraint C) It removes a constraint from a domain, it should only be called by removeConstraint function of Variable object.double
rightElement
(int intervalNo) It returns the left most element of the given interval.void
setDomain
(double min, double max) It sets the domain to all values between min and max.void
setDomain
(FloatDomain domain) It sets the domain to the specified domain.boolean
It returns true if given domain has only one element.boolean
singleton
(double c) It returns true if given domain has only one element equal c.int
It returns all constraints which are associated with variable, even the ones which are already satisfied.int
sizeOfIntersection
(FloatDomain domain) It computes the size of the intersection between this domain and the domain supplied as a parameter.subtract
(double value) It intersects with the domain which is a complement of value.subtract
(double min, double max) It subtracts min..max from current domain and returns the result.subtract
(FloatDomain domain) It subtracts domain from current domain and returns the result.void
subtractAdapt
(double value) It removes value from the domain.void
subtractAdapt
(double minValue, double maxValue) It removes all values between min and max to the domain.toString()
It returns string description of the domain (only values in the domain).It returns string description of the constraints attached to the domain.It returns complete string description containing all relevant information.union
(double value) It computes union of dom1 and value and returns the result.union
(double min, double max) It computes union of current domain and an interval min..max;union
(FloatDomain domain) It computes union of dom1 from dom2 and returns the result.void
unionAdapt
(double value) It adds a values to the domain.void
unionAdapt
(double min, double max) It adds all values between min and max to the domain.int
unionAdapt
(FloatDomain union) It computes a union between this domain and the domain provided as a parameter.void
It adds interval of values to the domain.It returns value enumeration of the domain values.Methods inherited from class org.jacop.floats.core.FloatDomain
addBounds, divBounds, down, epsilon, format, getEventsInclusion, in, intervalPrint, inValue, lex, maxULP, minULP, mulBounds, next, noConstraints, precision, previous, previousForMinimization, putModelConstraint, removeModelConstraint, setFormat, setOutward, setPrecision, setStep, singleton, subBounds, toIntArray, ulp, up, value
Methods inherited from class org.jacop.core.Domain
constraints, noSearchConstraints, searchConstraints, setStamp, sizeConstraints, stamp
-
Field Details
-
intervals
The values of the domain are encoded as a list of intervals. -
size
public int sizeIt specifies number of intervals needed to encode the domain. -
emptyDomain
An empty domain, so no constant creation of empty domains is required.
-
-
Constructor Details
-
FloatIntervalDomain
public FloatIntervalDomain()Empty constructor, does not initialize anything. -
FloatIntervalDomain
public FloatIntervalDomain(int size) It creates an empty domain, with at least specified number of places in an array list for intervals.- Parameters:
size
- defines the initial size of an array storing the intervals.
-
FloatIntervalDomain
public FloatIntervalDomain(double min, double max) It creates domain with all values between min and max.- Parameters:
min
- defines the left bound of a domain.max
- defines the right bound of a domain.
-
-
Method Details
-
domainID
public int domainID()It returns an unique identifier of the domain. -
previousDomain
Description copied from class:FloatDomain
It returns domain at earlier level at which the change has occurred.- Specified by:
previousDomain
in classFloatDomain
- Returns:
- previous domain
-
unionAdapt
It adds interval of values to the domain. It adds at the end without checks for the correctness of domain representation.- Overrides:
unionAdapt
in classFloatDomain
- Parameters:
i
- Interval which needs to be added to the domain.
-
addLastElement
public void addLastElement(double i) It adds a value to the domain. It adds at the end without checks for the correctness of domain representation.- Parameters:
i
- value to be added
-
addDom
It adds values as specified by the parameter to the domain. The input parameter can not be an empty set.- Overrides:
addDom
in classFloatDomain
- Parameters:
domain
- Domain which needs to be added to the domain.
-
unionAdapt
public void unionAdapt(double min, double max) It adds all values between min and max to the domain.- Specified by:
unionAdapt
in classFloatDomain
- Parameters:
min
- the left bound of the interval being added.max
- the right bound of the interval being added.
-
isIntersecting
Checks if two domains intersect.- Overrides:
isIntersecting
in classFloatDomain
- Parameters:
domain
- the domain for which intersection is checked.- Returns:
- true if domains are intersecting.
-
isIntersecting
public boolean isIntersecting(double min, double max) Description copied from class:FloatDomain
It checks if interval min..max intersects with current domain.- Specified by:
isIntersecting
in classFloatDomain
- Parameters:
min
- the left bound of the interval.max
- the right bound of the interval.- Returns:
- true if domain intersects with the specified interval.
-
clear
public void clear()It removes all elements. -
cloneLight
It clones the domain object, only data responsible for encoding domain values is cloned. All other fields must be set separately.- Specified by:
cloneLight
in classFloatDomain
- Returns:
- It returns a clone of this domain.
-
clone
It clones the domain object. -
contains
It specifies if the current domain contains the domain given as a parameter. It assumes that input parameter does not represent an empty domain.- Overrides:
contains
in classFloatDomain
- Parameters:
domain
- for which we check if it is contained in the current domain.- Returns:
- true if the supplied domain is cover by this domain.
-
complement
It creates a complement of a domain.- Specified by:
complement
in classFloatDomain
- Returns:
- it returns the complement of this domain.
-
contains
public boolean contains(int value) It checks if value belongs to the domain.- Overrides:
contains
in classFloatDomain
- Parameters:
value
- which is checked if it exists in the domain.- Returns:
- true if value belongs to the domain.
-
contains
public boolean contains(double value) - Specified by:
contains
in classFloatDomain
-
nextValue
public double nextValue(double value) -
valueEnumeration
It returns value enumeration of the domain values.- Specified by:
valueEnumeration
in classFloatDomain
- Returns:
- valueEnumeration which can be used to enumerate one by one value from this domain.
-
intervalEnumeration
It returns interval enumeration of the domain values.- Specified by:
intervalEnumeration
in classFloatDomain
- Returns:
- intervalEnumeration which can be used to enumerate intervals in this domain.
-
floatIntervalEnumeration
It returns interval enumeration of the domain values.- Specified by:
floatIntervalEnumeration
in classFloatDomain
- Returns:
- intervalEnumeration which can be used to enumerate intervals in this domain.
-
eq
It checks if the domain is equal to the supplied domain.- Overrides:
eq
in classFloatDomain
- Parameters:
domain
- the domain which is compared to this domain.- Returns:
- true if both domains contain the same elements, false otherwise.
-
getSize
public int getSize()It returns the size of the domain.- Specified by:
getSize
in classFloatDomain
- Returns:
- number of elements in this domain.
-
getSizeFloat
public double getSizeFloat() -
intersect
It interesects current domain with the one given as a parameter.- Specified by:
intersect
in classFloatDomain
- Parameters:
domain
- domain with which the intersection needs to be computed.- Returns:
- the intersection between supplied domain and this domain.
-
intersect
In intersects current domain with the domain min..max.- Specified by:
intersect
in classFloatDomain
- Parameters:
min
- the left bound of the interval (inclusive)max
- the right bound of the interval (inclusive)- Returns:
- the intersection between the specified interval and this domain.
-
subtract
Description copied from class:FloatDomain
It intersects with the domain which is a complement of value.- Overrides:
subtract
in classFloatDomain
- Parameters:
value
- the value for which the complement is computed- Returns:
- the domain which does not contain specified value.
-
isEmpty
public boolean isEmpty()It returns true if given domain is empty. -
max
public double max()It returns the maximum value in a domain.- Specified by:
max
in classFloatDomain
- Returns:
- the largest value present in the domain.
-
min
public double min()It returns the minimum value in a domain.- Specified by:
min
in classFloatDomain
- Returns:
- the smallest value present in the domain.
-
removeInterval
public void removeInterval(int position) It removes the counter-th interval from the domain.- Parameters:
position
- it specifies the position of the removed interval.
-
setDomain
It sets the domain to the specified domain.- Specified by:
setDomain
in classFloatDomain
- Parameters:
domain
- the domain from which this domain takes all elements.
-
setDomain
public void setDomain(double min, double max) It sets the domain to all values between min and max.- Specified by:
setDomain
in classFloatDomain
- Parameters:
min
- the left bound of the interval (inclusive).max
- the right bound of the interval (inclusive).
-
singleton
public boolean singleton()It returns true if given domain has only one element. -
singleton
public boolean singleton(double c) It returns true if given domain has only one element equal c.- Overrides:
singleton
in classFloatDomain
- Parameters:
c
- the value to which the only element should be equal to.- Returns:
- true if the domain contains only one element c.
-
subtract
It subtracts domain from current domain and returns the result.- Overrides:
subtract
in classFloatDomain
- Parameters:
domain
- the domain which is subtracted from this domain.- Returns:
- the result of the subtraction.
-
subtract
It subtracts min..max from current domain and returns the result.- Specified by:
subtract
in classFloatDomain
- Parameters:
min
- the left bound of the interval (inclusive).max
- the right bound of the interval (inclusive).- Returns:
- the result of the subtraction.
-
union
It computes union of dom1 from dom2 and returns the result.- Overrides:
union
in classFloatDomain
- Parameters:
domain
- the domain for which the union is computed.- Returns:
- the union of this domain with the supplied one.
-
union
It computes union of current domain and an interval min..max;- Overrides:
union
in classFloatDomain
- Parameters:
min
- the left bound of the interval (inclusive).max
- the right bound of the interval (inclusive).- Returns:
- the union of this domain and the interval.
-
union
It computes union of dom1 and value and returns the result.- Overrides:
union
in classFloatDomain
- Parameters:
value
- it specifies the value which is being added.- Returns:
- domain which is a union of this one and the value.
-
toString
It returns string description of the domain (only values in the domain). -
toStringConstraints
It returns string description of the constraints attached to the domain.- Specified by:
toStringConstraints
in classDomain
- Returns:
- the string description.
-
toStringFull
It returns complete string description containing all relevant information.- Specified by:
toStringFull
in classDomain
- Returns:
- complete description of the domain.
-
inMin
It updates the domain according to the minimum value and stamp value. It informs the variable of a change if it occurred.- Overrides:
inMin
in classFloatDomain
- Parameters:
storeLevel
- level of the store at which the update occurs.var
- variable for which this domain is used.min
- the minimum value to which the domain is updated.
-
inMax
It updates the domain according to the maximum value and stamp value. It informs the variable of a change if it occurred.- Overrides:
inMax
in classFloatDomain
- Parameters:
storeLevel
- level of the store at which the update occurs.var
- variable for which this domain is used.max
- the maximum value to which the domain is updated.
-
in
It updates the domain to have values only within the interval min..max. The type of update is decided by the value of stamp. It informs the variable of a change if it occurred.- Specified by:
in
in classFloatDomain
- Parameters:
storeLevel
- level of the store at which the update occurs.var
- variable for which this domain is used.min
- the minimum value to which the domain is updated.max
- the maximum value to which the domain is updated.
-
in
It updates the domain to have values only within the domain. The type of update is decided by the value of stamp. It informs the variable of a change if it occurred.- Overrides:
in
in classFloatDomain
- Parameters:
storeLevel
- level of the store at which the update occurs.var
- variable for which this domain is used.domain
- the domain according to which the domain is updated.
-
noIntervals
public int noIntervals()It returns the number intervals into which this domain is split.- Specified by:
noIntervals
in classFloatDomain
- Returns:
- the number of intervals in the domain.
-
intervalNo
public int intervalNo(double value) It specifies the position of the interval which contains specified value.- Parameters:
value
- value for which an interval containing it is searched.- Returns:
- the position of the interval containing the specified value.
-
getInterval
Description copied from class:FloatDomain
It returns required interval.- Specified by:
getInterval
in classFloatDomain
- Parameters:
position
- the position of the interval.- Returns:
- the interval, or null if the required interval does not exist.
-
inComplement
It updates the domain to not contain the value complement. It informs the variable of a change if it occurred.- Overrides:
inComplement
in classFloatDomain
- Parameters:
storeLevel
- level of the store at which the update occurs.var
- variable for which this domain is used.complement
- value which is removed from the domain if it belonged to the domain.
-
inComplement
Description copied from class:FloatDomain
It updates the domain so it does not contain the supplied interval. It informs the variable of a change if it occurred.- Specified by:
inComplement
in classFloatDomain
- Parameters:
storeLevel
- level of the store at which the update occurs.var
- variable for which this domain is used.min
- the left bound of the interval (inclusive).max
- the right bound of the interval (inclusive).
-
inShift
It updates the domain to contain the elements as specifed by the domain, which is shifted. E.g. {1..4} + 3 = 4..7- Specified by:
inShift
in classFloatDomain
- Parameters:
storeLevel
- level of the store at which the update occurs.var
- variable for which this domain is used.domain
- the domain according to which the domain is updated.shift
- the shift which is used to shift the domain supplied as argument.
-
isSparseRepresentation
public boolean isSparseRepresentation()It specifies if the domain type is more suited to representing sparse domain.- Specified by:
isSparseRepresentation
in classDomain
- Returns:
- true if sparse, false otherwise.
-
isNumeric
public boolean isNumeric()It specifies if domain is a finite domain of numeric values (integers). -
leftElement
public double leftElement(int intervalNo) It returns the left most element of the given interval.- Overrides:
leftElement
in classFloatDomain
- Parameters:
intervalNo
- the interval number.- Returns:
- the left bound of the specified interval.
-
rightElement
public double rightElement(int intervalNo) It returns the left most element of the given interval.- Overrides:
rightElement
in classFloatDomain
- Parameters:
intervalNo
- the interval number.- Returns:
- the right bound of the specified interval.
-
removeLevel
It removes a level of a domain. If domain is represented as a list of domains, the domain pointer within variable will be updated.- Specified by:
removeLevel
in classDomain
- Parameters:
level
- the level which is being removed.var
- the variable to which this domain belonged to.
-
putSearchConstraint
It adds a constraint to a domain, it should only be called by putConstraint function of Variable object. putConstraint function from Variable must make a copy of a vector of constraints if vector was not cloned.- Specified by:
putSearchConstraint
in classDomain
- Parameters:
storeLevel
- the level at which the search constraint is to be added.var
- variable to which the constraint is attached to.C
- the constraint which is being attached to a variable.
-
removeSearchConstraint
It removes a constraint from a domain, it should only be called by removeConstraint function of Variable object.- Parameters:
storeLevel
- the current level of the store.var
- the variable for which the constraint is being removed.C
- the constraint being removed.
-
removeSearchConstraint
It removes a constraint from a domain, it should only be called by removeConstraint function of Variable object.- Specified by:
removeSearchConstraint
in classDomain
- Parameters:
storeLevel
- specifies the current level of the store, from which it should be removed.var
- specifies variable for which the constraint is being removed.position
- specifies the position of the removed constraint.C
- the constraint which is being removed.
-
recentDomainPruning
It removes a constraint from a domain, it should only be called by removeConstraint function of Variable object.- Specified by:
recentDomainPruning
in classFloatDomain
- Parameters:
storeLevel
- the current store level.- Returns:
- emptyDomain if domain did not change at current level, or the set of values which have been removed at current level.
-
sizeConstraintsOriginal
public int sizeConstraintsOriginal()It returns all constraints which are associated with variable, even the ones which are already satisfied.- Specified by:
sizeConstraintsOriginal
in classDomain
- Returns:
- the number of constraints attached to the original domain of the variable associated with this domain.
-
checkInvariants
It is a function to check if the object is in consistent state.- Specified by:
checkInvariants
in classDomain
- Returns:
- String describing the violated invariant, null if no invariant is violated.
-
unionAdapt
public void unionAdapt(double value) Description copied from class:FloatDomain
It adds a values to the domain.- Overrides:
unionAdapt
in classFloatDomain
- Parameters:
value
- value being added to the domain.
-
subtractAdapt
public void subtractAdapt(double value) Description copied from class:FloatDomain
It removes value from the domain. It adapts current (this) domain.- Specified by:
subtractAdapt
in classFloatDomain
- Parameters:
value
- the value for which the complement is computed
-
subtractAdapt
public void subtractAdapt(double minValue, double maxValue) Description copied from class:FloatDomain
It removes all values between min and max to the domain.- Specified by:
subtractAdapt
in classFloatDomain
- Parameters:
minValue
- the left bound of the interval being removed.maxValue
- the right bound of the interval being removed.
-
intersectAdapt
Description copied from class:FloatDomain
It computes an intersection with a given domain and stores it in this domain.- Specified by:
intersectAdapt
in classFloatDomain
- Parameters:
domain
- domain with which the intersection is being computed.- Returns:
- type of event which has occurred due to the operation.
-
unionAdapt
Description copied from class:FloatDomain
It computes a union between this domain and the domain provided as a parameter. This domain is changed to reflect the result.- Overrides:
unionAdapt
in classFloatDomain
- Parameters:
union
- the domain with is used for the union operation with this domain.- Returns:
- it returns information about the pruning event which has occurred due to this operation.
-
intersectAdapt
public int intersectAdapt(int min, int max) Description copied from class:FloatDomain
It computes an intersection of this domain with an interval [min..max]. It adapts this domain to the result of the intersection.- Specified by:
intersectAdapt
in classFloatDomain
- Parameters:
min
- the minimum value of the interval used in the intersection computation.max
- the maximum value of the interval used in the intersection computation.- Returns:
- it returns information about the pruning event which has occurred due to this operation.
-
sizeOfIntersection
Description copied from class:FloatDomain
It computes the size of the intersection between this domain and the domain supplied as a parameter.- Overrides:
sizeOfIntersection
in classFloatDomain
- Parameters:
domain
- the domain with which the intersection is computed.- Returns:
- the size of the intersection.
-
contains
public boolean contains(double min, double max) Description copied from class:FloatDomain
It checks if an interval min..max belongs to the domain.- Specified by:
contains
in classFloatDomain
- Parameters:
min
- the minimum value of the interval being checkedmax
- the maximum value of the interval being checked- Returns:
- true if value belongs to the domain.
-