[ library(fd) | Reference Manual | Alphabetic Index ]
# min_max(?Goal, ?C, +Lower, +Upper, +Percent, +Timeout)

Find the solution of Goal that minimizes the maximum of elements of C,
within the bounds set by Lower,Upper and Percent in time not longer than
Timeout.
*?Goal*
- A callable term.
*?C*
- A linear term or a list of linear terms.
*+Lower*
- An integer.
*+Upper*
- An integer.
*+Percent*
- An integer.
*+Timeout*
- A number.

## Description

If C is a linear term, a solution of the goal Goal is found that
minimizes the value of C. If C is a list of linear terms, the returned
solution minimizes the maximum value of terms in the list. The solution
is found using the branch and bound method; as soon as a partial
solution is found that is worse than a previous solution, the search is
abandoned and a new solution is searched for. The starting assumption
is that the value to minimize is less than Upper and that any value less
than Lower can be considered as a final solution. Moreover, solutions
whose minimized values are closer than Percent % are considered equal.
Every time a new better solution is found, the event 280 is raised, its
default handler prints the current cost.
If Timeout is not zero, the predicate will stop after Timeout seconds
and report the best solution it has found so far. Calls with specified
Timeout cannot be nested.

This predicate is to be used for optimization problems when the whole
search space is too large or when a suboptimal solution is sufficient.

### Fail Conditions

Fails if there is no solution to Goal.
### Resatisfiable

No.
## See Also

min_max / 2, min_max / 4, min_max / 5, min_max / 8, minimize / 2, minimize / 4, minimize / 5, minimize / 6, minimize / 8