
squash(+Vars, ++Precision, ++lin/log)

   Refines the interval of Vars by the squashing algorithm.

Arguments
   Vars                List of variables
   Precision           Minimum required precision (float)
   lin/log             Domain splitting method (lin or log)

Type
   library(ria)

Description

Use the squash algorithm on Vars.
This is a deterministic reduction of the ranges of variables, done by
searching for domain restrictions which cause failure, and then reducing
the domain to the complement of that which caused the failure.
This algorithm is appropriate when the problem has continuous solution ranges
(where locate would return many adjacent solutions).


Precision is the minimum required precision, i.e. the maximum size of the 
resulting intervals. Note that the arc-propagation threshold (set by 
set_threshold/1), needs to be one or several orders of magnitude smaller 
than Precision, otherwise the solver may not be able to achieve the 
required precision.


The lin/log parameter guides the way domains are split.
If it is set to lin then the split is in the arithmetic middle.
If it is set to log, the split is such as to have the
same number of floats to either side of the split. This is to take
the logarithmic distribution of the floats into account.


If the ranges of variables at the start of the squashing algorithm are
known not to span several orders of magnitude, the somewhat cheaper 
linear splitting may be used. In general, log splitting is recommended.


See Also
   locate / 2, locate / 3, locate / 4, set_threshold / 1, get_threshold / 1
