Package org.jacop.floats.core
Class FloatDomain
- java.lang.Object
-
- org.jacop.core.Domain
-
- org.jacop.floats.core.FloatDomain
-
- Direct Known Subclasses:
FloatIntervalDomain
public abstract class FloatDomain extends Domain
Defines an integer domain and related operations on it.FloatDomain implementations can not assume that arguments to any function can not be empty domains.
- Version:
- 4.7
-
-
Field Summary
Fields Modifier and Type Field Description static int
ANY
It specifies the constant for ANY event.static int
BOUND
It specifies the constant for BOUND event.static double
E
It specifies the constant e, as defined in java.lang.Math package.static FloatDomain
emptyFloatDomain
It specifies an empty integer domain.(package private) static int[][]
eventsInclusion
It specifies for each event what other events are subsumed by this event.static int
FloatIntervalDomainID
Unique identifier for an interval domain type.(package private) static double
format
It specifies the precision format for floating point print-outstatic int
GROUND
It specifies the constant for GROUND event.static int
IntervalDomainID
Unique identifier for an interval domain type.(package private) static boolean
intervalPrint
It specifies the method for printing a domain.static double
MaxFloat
It specifies the maximum element in the domain.static double
MinFloat
It specifies the minimum element in the domain.static double
minimizationStep
Minimization step for floating-point cost function minimization.(package private) static boolean
outward
It specifies the rounding method; true - extend interval outward false - does not extend interval and use calculation results.static double
PI
It specifies the constant pi, as defined in java.lang.Math package.(package private) static double
precision
It specifies the precision for floating point operations, among others decide when two numbers are equal and when a interval is singleton.FloatDomain
previousDomain
It specifies the previous domain which was used by this domain.-
Fields inherited from class org.jacop.core.Domain
failException, modelConstraints, modelConstraintsToEvaluate, NOINFO, NONE, searchConstraints, searchConstraintsCloned, searchConstraintsToEvaluate, stamp
-
-
Constructor Summary
Constructors Constructor Description FloatDomain()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description static FloatIntervalDomain
addBounds(double a, double b, double c, double d)
void
addDom(FloatDomain domain)
It adds values as specified by the parameter to the domain.abstract FloatDomain
cloneLight()
It clones the domain object, only data responsible for encoding domain values is cloned.abstract FloatDomain
complement()
It creates a complement of a domain.abstract boolean
contains(double value)
abstract 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.static FloatIntervalDomain
divBounds(double a, double b, double c, double d)
static double
down(double d)
static double
downBit(double x)
static double
epsilon(double f)
boolean
eq(FloatDomain domain)
It specifies if the other int domain is equal to this one.abstract FloatIntervalEnumeration
floatIntervalEnumeration()
It returns interval enumeration of the domain values.static double
format()
int[]
getEventsInclusion(int pruningEvent)
It helps to specify what events should be executed if a given event occurs.abstract FloatInterval
getInterval(int position)
It returns required interval.abstract int
getSize()
It returns the size of the domain.abstract void
in(int storeLevel, Var var, double min, double max)
It updates the domain to have values only within the interval min..max.void
in(int level, Var var, Domain domain)
It enforces that this domain is included within the specified domain.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.abstract void
inComplement(int storeLevel, Var var, double min, double max)
It updates the domain so it does not contain the supplied interval.void
inMax(int storeLevel, Var var, double max)
It updates the domain according to the maximum value and stamp value.void
inMin(int storeLevel, Var var, double min)
It updates the domain according to the minimum value and stamp value.abstract 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.abstract FloatDomain
intersect(double min, double max)
In intersects current domain with the interval min..max.abstract FloatDomain
intersect(FloatDomain dom)
It intersects current domain with the one given as a parameter.abstract int
intersectAdapt(int min, int max)
It computes an intersection of this domain with an interval [min..max].abstract int
intersectAdapt(FloatDomain intersect)
It computes an intersection with a given domain and stores it in this domain.abstract IntervalEnumeration
intervalEnumeration()
It returns interval enumeration of the domain values.static void
intervalPrint(boolean p)
void
inValue(int level, Var var, double value)
It reduces domain to a single value.abstract 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.double
leftElement(int intervalNo)
It returns the left most element of the given interval.int
lex(FloatDomain domain)
Returns the lexical ordering between the setsabstract double
max()
It returns the maximum value in a domain.static double
maxULP(FloatVar f)
abstract double
min()
It returns the minimum value in a domain.static double
minULP(FloatVar f)
static FloatIntervalDomain
mulBounds(double a, double b, double c, double d)
static double
next(double d)
int
noConstraints()
It returns the number of constraintsabstract int
noIntervals()
It returns number of intervals required to represent this domain.static double
precision()
static double
previous(double d)
abstract FloatDomain
previousDomain()
It returns domain at earlier level at which the change has occurred.static double
previousForMinimization(double d)
void
putModelConstraint(int storeLevel, Var var, Constraint C, int pruningEvent)
It adds a constraint to a domain, it should only be called by putConstraint function of Variable object.abstract FloatDomain
recentDomainPruning(int currentStoreLevel)
It returns the values which have been removed at current store level.void
removeModelConstraint(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 right most element of the given interval.abstract void
setDomain(double min, double max)
It sets this domain to contain exactly all values between min and max.abstract void
setDomain(FloatDomain domain)
It sets the domain to the specified domain.static void
setFormat(double f)
static void
setOutward(boolean out)
It defines rounding methodstatic void
setPrecision(double p)
static void
setStep(double s)
boolean
singleton(double c)
It returns true if given domain has only one element equal c.boolean
singleton(Domain value)
It returns true if given domain has only one element.int
sizeOfIntersection(FloatDomain domain)
It computes the size of the intersection between this domain and the domain supplied as a parameter.static FloatIntervalDomain
subBounds(double a, double b, double c, double d)
FloatDomain
subtract(double value)
It intersects with the domain which is a complement of value.abstract FloatDomain
subtract(double min, double max)
It subtracts interval min..max.FloatDomain
subtract(FloatDomain domain)
It subtracts domain from current domain and returns the result.abstract void
subtractAdapt(double value)
It removes value from the domain.abstract void
subtractAdapt(double min, double max)
It removes all values between min and max to the domain.int[]
toIntArray()
It constructs and int array containing all elements in the domain.static double
ulp(double f)
FloatDomain
union(double value)
It computes union of this domain and value.FloatDomain
union(double min, double max)
It computes union of this domain and the interval.FloatDomain
union(FloatDomain domain)
It computes union of the supplied domain with this domain.void
unionAdapt(double value)
It adds a values to the domain.abstract 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
unionAdapt(FloatInterval i)
It adds interval of values to the domain.static double
up(double d)
static double
upBit(double x)
double
value()
It returns the value to which this domain is grounded.abstract ValueEnumeration
valueEnumeration()
It returns value enumeration of the domain values.-
Methods inherited from class org.jacop.core.Domain
checkInvariants, clear, clone, constraints, domainID, isEmpty, isNumeric, isSparseRepresentation, noSearchConstraints, putSearchConstraint, removeLevel, removeSearchConstraint, searchConstraints, setStamp, singleton, sizeConstraints, sizeConstraintsOriginal, stamp, toString, toStringConstraints, toStringFull
-
-
-
-
Field Detail
-
MinFloat
public static final double MinFloat
It specifies the minimum element in the domain.- See Also:
- Constant Field Values
-
MaxFloat
public static final double MaxFloat
It specifies the maximum element in the domain.- See Also:
- Constant Field Values
-
minimizationStep
public static double minimizationStep
Minimization step for floating-point cost function minimization.
-
PI
public static final double PI
It specifies the constant pi, as defined in java.lang.Math package.- See Also:
- Constant Field Values
-
E
public static final double E
It specifies the constant e, as defined in java.lang.Math package.- See Also:
- Constant Field Values
-
outward
static boolean outward
It specifies the rounding method; true - extend interval outward false - does not extend interval and use calculation results.
-
intervalPrint
static boolean intervalPrint
It specifies the method for printing a domain. If true, we print each domain as an interval regardles of the current precision of calculations. If true, the print-out prints singletons, defined by method singleton() in FloatingInterval, as single values.
-
format
static double format
It specifies the precision format for floating point print-out
-
precision
static double precision
It specifies the precision for floating point operations, among others decide when two numbers are equal and when a interval is singleton.
-
previousDomain
public FloatDomain previousDomain
It specifies the previous domain which was used by this domain. The old domain is stored here and can be easily restored if necessary.
-
GROUND
public static final int GROUND
It specifies the constant for GROUND event. It has to be smaller than the constant for events BOUND and ANY.- See Also:
- Constant Field Values
-
BOUND
public static final int BOUND
It specifies the constant for BOUND event. It has to be smaller than the constant for event ANY.- See Also:
- Constant Field Values
-
ANY
public static final int ANY
It specifies the constant for ANY event.- See Also:
- Constant Field Values
-
FloatIntervalDomainID
public static final int FloatIntervalDomainID
Unique identifier for an interval domain type.- See Also:
- Constant Field Values
-
eventsInclusion
static final int[][] eventsInclusion
It specifies for each event what other events are subsumed by this event. Possibly implement this by bit flags in int.
-
IntervalDomainID
public static final int IntervalDomainID
Unique identifier for an interval domain type.- See Also:
- Constant Field Values
-
emptyFloatDomain
public static final FloatDomain emptyFloatDomain
It specifies an empty integer domain.
-
-
Method Detail
-
setOutward
public static void setOutward(boolean out)
It defines rounding method- Parameters:
out
- defines rounding method true = outward, false = no rounding outward
-
intervalPrint
public static void intervalPrint(boolean p)
-
format
public static double format()
-
setFormat
public static void setFormat(double f)
-
precision
public static double precision()
-
setPrecision
public static void setPrecision(double p)
-
epsilon
public static double epsilon(double f)
-
ulp
public static double ulp(double f)
-
minULP
public static double minULP(FloatVar f)
-
maxULP
public static double maxULP(FloatVar f)
-
down
public static double down(double d)
-
up
public static double up(double d)
-
upBit
public static double upBit(double x)
-
downBit
public static double downBit(double x)
-
previous
public static double previous(double d)
-
setStep
public static void setStep(double s)
-
previousForMinimization
public static double previousForMinimization(double d)
-
next
public static double next(double d)
-
getEventsInclusion
public int[] getEventsInclusion(int pruningEvent)
It helps to specify what events should be executed if a given event occurs.- Specified by:
getEventsInclusion
in classDomain
- Parameters:
pruningEvent
- the pruning event for which we want to know what events it encompasses.- Returns:
- an array specifying what events should be included given this event.
-
unionAdapt
public void unionAdapt(FloatInterval i)
It adds interval of values to the domain.- Parameters:
i
- Interval which needs to be added to the domain.
-
addDom
public void addDom(FloatDomain domain)
It adds values as specified by the parameter to the domain.- Parameters:
domain
- Domain which needs to be added to the domain.
-
unionAdapt
public abstract void unionAdapt(double min, double max)
It adds all values between min and max to the domain.- Parameters:
min
- the left bound of the interval being added.max
- the right bound of the interval being added.
-
unionAdapt
public void unionAdapt(double value)
It adds a values to the domain.- Parameters:
value
- value being added to the domain.
-
isIntersecting
public boolean isIntersecting(FloatDomain domain)
Checks if two domains intersect.- Parameters:
domain
- the domain for which intersection is checked.- Returns:
- true if domains are intersecting.
-
isIntersecting
public abstract boolean isIntersecting(double min, double max)
It checks if interval min..max intersects with current domain.- Parameters:
min
- the left bound of the interval.max
- the right bound of the interval.- Returns:
- true if domain intersects with the specified interval.
-
contains
public boolean contains(FloatDomain domain)
It specifies if the current domain contains the domain given as a parameter.- 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.
-
contains
public abstract boolean contains(double min, double max)
It checks if an interval min..max belongs to the domain.- 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.
-
complement
public abstract FloatDomain complement()
It creates a complement of a domain.- Returns:
- it returns the complement of this domain.
-
contains
public boolean contains(int value)
It checks if value belongs to the domain.- Parameters:
value
- which is checked if it exists in the domain.- Returns:
- true if value belongs to the domain.
-
contains
public abstract boolean contains(double value)
-
valueEnumeration
public abstract ValueEnumeration valueEnumeration()
It returns value enumeration of the domain values.- Specified by:
valueEnumeration
in classDomain
- Returns:
- valueEnumeration which can be used to enumerate one by one value from this domain.
-
intervalEnumeration
public abstract IntervalEnumeration intervalEnumeration()
It returns interval enumeration of the domain values.- Returns:
- intervalEnumeration which can be used to enumerate intervals in this domain.
-
floatIntervalEnumeration
public abstract FloatIntervalEnumeration floatIntervalEnumeration()
It returns interval enumeration of the domain values.- Returns:
- intervalEnumeration which can be used to enumerate intervals in this domain.
-
getSize
public abstract int getSize()
It returns the size of the domain.
-
intersect
public abstract FloatDomain intersect(FloatDomain dom)
It intersects current domain with the one given as a parameter.- Parameters:
dom
- domain with which the intersection needs to be computed.- Returns:
- the intersection between supplied domain and this domain.
-
intersect
public abstract FloatDomain intersect(double min, double max)
In intersects current domain with the interval min..max.- 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
public FloatDomain subtract(double value)
It intersects with the domain which is a complement of value.- Parameters:
value
- the value for which the complement is computed- Returns:
- the domain which does not contain specified value.
-
subtractAdapt
public abstract void subtractAdapt(double value)
It removes value from the domain. It adapts current (this) domain.- Parameters:
value
- the value for which the complement is computed
-
subtractAdapt
public abstract void subtractAdapt(double min, double max)
It removes all values between min and max to the domain.- Parameters:
min
- the left bound of the interval being removed.max
- the right bound of the interval being removed.
-
max
public abstract double max()
It returns the maximum value in a domain.- Returns:
- the largest value present in the domain.
-
min
public abstract double min()
It returns the minimum value in a domain.- Returns:
- the smallest value present in the domain.
-
setDomain
public abstract void setDomain(FloatDomain domain)
It sets the domain to the specified domain.- Parameters:
domain
- the domain from which this domain takes all elements.
-
setDomain
public abstract void setDomain(double min, double max)
It sets this domain to contain exactly all values between min and max.- Parameters:
min
- the left bound of the interval (inclusive).max
- the right bound of the interval (inclusive).
-
singleton
public boolean singleton(double c)
It returns true if given domain has only one element equal c.- Parameters:
c
- the value to which the only element should be equal to.- Returns:
- true if the domain contains only one element c.
-
subtract
public FloatDomain subtract(FloatDomain domain)
It subtracts domain from current domain and returns the result.- Parameters:
domain
- the domain which is subtracted from this domain.- Returns:
- the result of the subtraction.
-
subtract
public abstract FloatDomain subtract(double min, double max)
It subtracts interval min..max.- Parameters:
min
- the left bound of the interval (inclusive).max
- the right bound of the interval (inclusive).- Returns:
- the result of the subtraction.
-
union
public FloatDomain union(FloatDomain domain)
It computes union of the supplied domain with this domain.- Parameters:
domain
- the domain for which the union is computed.- Returns:
- the union of this domain with the supplied one.
-
union
public FloatDomain union(double min, double max)
It computes union of this domain and the interval.- 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
public FloatDomain union(double value)
It computes union of this domain and value.- Parameters:
value
- it specifies the value which is being added.- Returns:
- domain which is a union of this one and the value.
-
inMin
public void inMin(int storeLevel, Var var, double min)
It updates the domain according to the minimum value and stamp value. It informs the variable of a change if it occurred.- 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
public void inMax(int storeLevel, Var var, double max)
It updates the domain according to the maximum value and stamp value. It informs the variable of a change if it occurred.- 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
public abstract void in(int storeLevel, Var var, double min, double max)
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.- 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.
-
inValue
public void inValue(int level, Var var, double value)
It reduces domain to a single value.- Parameters:
level
- level of the store at which the update occurs.var
- variable for which this domain is used.value
- the value according to which the domain is updated.
-
in
public void in(int storeLevel, Var var, FloatDomain domain)
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.- 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.
-
inComplement
public void inComplement(int storeLevel, Var var, double complement)
It updates the domain to not contain the value complement. It informs the variable of a change if it occurred.- 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
public abstract void inComplement(int storeLevel, Var var, double min, double max)
It updates the domain so it does not contain the supplied interval. It informs the variable of a change if it occurred.- 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).
-
noIntervals
public abstract int noIntervals()
It returns number of intervals required to represent this domain.- Returns:
- the number of intervals in the domain.
-
getInterval
public abstract FloatInterval getInterval(int position)
It returns required interval.- Parameters:
position
- the position of the interval.- Returns:
- the interval, or null if the required interval does not exist.
-
inShift
public abstract 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. E.g. {1..4} + 3 = 4..7- 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.
-
leftElement
public double leftElement(int intervalNo)
It returns the left most element of the given interval.- Parameters:
intervalNo
- the interval number.- Returns:
- the left bound of the specified interval.
-
rightElement
public double rightElement(int intervalNo)
It returns the right most element of the given interval.- Parameters:
intervalNo
- the interval number.- Returns:
- the right bound of the specified interval.
-
recentDomainPruning
public abstract FloatDomain recentDomainPruning(int currentStoreLevel)
It returns the values which have been removed at current store level.- Parameters:
currentStoreLevel
- 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.
-
previousDomain
public abstract FloatDomain previousDomain()
It returns domain at earlier level at which the change has occurred.- Returns:
- previous domain
-
eq
public boolean eq(FloatDomain domain)
It specifies if the other int domain is equal to this one.- Parameters:
domain
- the domain which is compared to this domain.- Returns:
- true if both domains contain the same elements, false otherwise.
-
in
public void in(int level, Var var, Domain domain)
Description copied from class:Domain
It enforces that this domain is included within the specified domain.
-
singleton
public boolean singleton(Domain value)
Description copied from class:Domain
It returns true if given domain has only one element.
-
noConstraints
public int noConstraints()
It returns the number of constraints- Specified by:
noConstraints
in classDomain
- Returns:
- the number of constraints attached to this domain.
-
cloneLight
public abstract FloatDomain cloneLight()
Description copied from class:Domain
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 classDomain
- Returns:
- return a clone of the domain. It aims at getting domain of the proper class type.
-
lex
public int lex(FloatDomain domain)
Returns the lexical ordering between the sets- Parameters:
domain
- the set that should be lexically compared to this set- Returns:
- -1 if s is greater than this set, 0 if s is equal to this set and else it returns 1.
-
intersectAdapt
public abstract int intersectAdapt(FloatDomain intersect)
It computes an intersection with a given domain and stores it in this domain.- Parameters:
intersect
- domain with which the intersection is being computed.- Returns:
- type of event which has occurred due to the operation.
-
unionAdapt
public int unionAdapt(FloatDomain union)
It computes a union between this domain and the domain provided as a parameter. This domain is changed to reflect the result.- 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 abstract int intersectAdapt(int min, int max)
It computes an intersection of this domain with an interval [min..max]. It adapts this domain to the result of the intersection.- 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
public int sizeOfIntersection(FloatDomain domain)
It computes the size of the intersection between this domain and the domain supplied as a parameter.- Parameters:
domain
- the domain with which the intersection is computed.- Returns:
- the size of the intersection.
-
putModelConstraint
public void putModelConstraint(int storeLevel, Var var, Constraint C, int pruningEvent)
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:
putModelConstraint
in classDomain
- Parameters:
storeLevel
- the level at which the model constraint is to be added.var
- variable to which the constraint is attached to.C
- the constraint which is being attached to a variable.pruningEvent
- the type of the prunning event required to check the consistency of the attached constraint.
-
removeModelConstraint
public void removeModelConstraint(int storeLevel, Var var, Constraint C)
Description copied from class:Domain
It removes a constraint from a domain, it should only be called by removeConstraint function of Variable object. It is called for example in a situation when a constraint is satisfied.- Specified by:
removeModelConstraint
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.C
- the constraint which is being removed.
-
toIntArray
public int[] toIntArray()
It constructs and int array containing all elements in the domain. The array will have size equal to the number of elements in the domain.- Returns:
- the int array containing all elements in a domain.
-
value
public double value()
It returns the value to which this domain is grounded. It assumes that a domain is a singleton domain.- Returns:
- the only value remaining in the domain.
-
addBounds
public static final FloatIntervalDomain addBounds(double a, double b, double c, double d)
-
subBounds
public static final FloatIntervalDomain subBounds(double a, double b, double c, double d)
-
mulBounds
public static final FloatIntervalDomain mulBounds(double a, double b, double c, double d)
-
divBounds
public static final FloatIntervalDomain divBounds(double a, double b, double c, double d)
-
-