
bb_min(+Goal, ?Cost, ?Template, ?Solution, ?Optimum, ?Options)

   Find a minimal solution using the branch-and-bound method

Arguments
   Goal                The (nondeterministic) search goal
   Cost                A (usually numeric domain) variable representing the cost
   Template            A term containing all or some problem variables
   Solution            A term which will be unified with the optimized Template
   Optimum             A variable which will be set to the optimum value of Cost
   Options             A bb_options structure or variable

Type
   library(branch_and_bound)

Description
	A solution of the goal Goal is found that minimizes
	the value of Cost.  Cost should be a
	variable that is affected, and eventually instantiated, by
	Goal.  Usually, Goal is the search procedure
	of a constraint problem and Cost is the variable
	representing the cost.  The solution is found using the branch
	and bound method:  as soon as a solution is found, it gets
	remembered and the search is continued or restarted with an
	additional constraint on the Cost variable which
	requires the next solution to be better than the previous one. 
	Iterating this process yields an optimal solution in the end.
	
	The possible options are 
	strategy:
	    
	    continue (default)after finding a solution, continue
	    	search with the newly found bound imposed on Cost
	    stepafter finding a solution, restart the whole
	    	search with the newly found bound imposed on Cost
	    dichotomicafter finding a solution, split the
	        remaning cost range and restart search to find a solution
		in the lower sub-range. If that fails, assume the upper
		sub-range as the remaning cost range and split again.
	    
	    The new bound or the split point, respectively, are computed
	    from the current best solution, while taking into account the
	    parameters delta and factor.
	    
	from:
	    number - an initial lower bound for the cost (default -1.0Inf)
	to:
	    number - an initial upper bound for the cost (default +1.0Inf)
	delta:	
	    number - minimal absolute improvement required for each step
	    (default 1.0), applies to all strategies
	factor:
	    number - minimal improvement ratio for strategies 'continue'
	    and 'step' (default 1.0),
	    or split factor for strategy 'dichotomic' (default 0.5)
	timeout:
	    number - maximum seconds of cpu time to spend (default: no limit)
	report_success:
	    name/arity - a handler of maximum arity 3 to be called whenever a
	    better solution is found. The handler arguments are:
	    Cost, Handle, Module.  The default handler prints a message.
	report_failure:
	    name/arity - a handler of maximum arity 3 to be called whenever
	    the absence of a solution in a cost range has been proven. The
	    handler arguments are: Range, Handle, Module. The default handler
	    prints a message.
	
	The default options can be selected by passing a free variable as
	the Options-argument. To specify other options, pass a bb_options-
	structure in with-syntax, e.g.
	
	bb_options with [strategy:dichotomic, timeout:60]
	
	In order to maximize instead of minimizing, introduce a negated
	cost variable in your model and minimize that instead.
	
	Unlike bb_min/3, bb_min/6 does not affect Goal or Cost after
	the optimum has been found. Instead, the optimum cost value is returned
	in Optimum, and the Solution argument gets unified with an instance of
	Template where the variables have the values that correspond to the
	optimal solution. Note that bb_min/3 is actually based on bb_min/6
	and can be defined as:
	
	bb_min(Goal, Cost, Options) :-
	    bb_min(Goal, Cost, Goal, Goal, Cost, Options).
	
	

See Also
   bb_min / 3
