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.
Solutions will be unified with a copy of Template where the variables are replaced with their minimized values. Typically, the Template will contain all or a subset of Goal's variables.
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.
All other variants of min_max can be written in terms of min_max/9, eg.
min_max(Goal, Cost) :- minint(Min), maxint(Max), min_max(Goal, Goal, Goal, Cost, Min, Max, 0, 0).
% Find the minimal C and bind X to the corresponding value [eclipse]: X::1..3, C #= 3-X, min_max(indomain(X), X, X, C). Found a solution with cost 2 Found a solution with cost 1 Found a solution with cost 0 X = 3 C = 0 yes. % Find the minimal C and don't bind anything [eclipse]: X::1..3, C #= 3-X, min_max(indomain(X), [], [], C). Found a solution with cost 2 Found a solution with cost 1 Found a solution with cost 0 X = X{[1..3]} C = C{[0..2]} Delayed goals: -3 + X{[1..3]} + C{[0..2]}#=0 yes. % Find the minimal C and return it in MinC. Don't bind X or C. [eclipse]: X::1..3, C #= 3-X, min_max(indomain(X), C, MinC, C). Found a solution with cost 2 Found a solution with cost 1 Found a solution with cost 0 X = X{[1..3]} MinC = 0 C = C{[0..2]} Delayed goals: -3 + X{[1..3]} + C{[0..2]}#=0 yes.