[ library(fd) | Reference Manual | Alphabetic Index ]

# minimize(+Goal, ?Template, ?Solution, ?C)

Find the solution of Goal that minimizes C, and unify the minimized Template with Solution.

+Goal
  A callable term.
?Template
  A term containing all or some of Goal's variables
?Solution
  Term to be unified with the minimized Template
?C
  A linear term or a list of linear terms.

## Description

A solution of the goal Goal is found that minimizes the value of C. The solution is found using the branch and bound method. Whenever a better solution is found, the upper cost bound is tightened and the search for a better solution continues. 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.

minimize/2 can be written in terms of minimize/4 as follows:

    	minimize(Goal, Cost) :-
    	    minimize(Goal, Goal, Goal, Cost).

### Fail Conditions

Fails if there is no solution to Goal.

### Resatisfiable

No.

## Examples

        % Find the minimal C and bind X to the corresponding value
        [eclipse]: X::1..3, C #= 3-X, minimize(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, minimize(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, minimize(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.

## See Also

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