Back to SYMPHONY Home Page
Next: Using the Interactive Graph
Up: Debugging Your Application
Previous: Using Purify and Quantify
Checking the Validity of Cuts and Tracing the Optimal Path
Sometimes the only evidence of a bug is the fact that the optimal
solution to a particular problem is never found. This is usually
caused by either (1) adding an invalid cut, or (2) performing an
invalid branching. There are two options available for discovering
such errors. The first is for checking the validity of added cuts.
This checking must, of course, be done by the user, but SYMPHONY can
facilitate such checking. To do this, the user must fill in the
function user_check_validity_of_cut(). THIS function is called every time a
cut is passed from the cut generator to the LP and can function as an
independent verifier. To do this, the user must pass (through her own
data structures) a known feasible solution. Then for each cut passed
into the function, the user can check whether the cut is satisfied
by the feasible solution. If not, then there is a problem! Of course,
the problem could also be with the checking routine.
After filling in this function, the user must recompile everything
(including the libraries) after uncommenting the line in the makefile
that contains ``BB_DEFINES += -DCHECK_CUT_VALIDITY.'' Type
``make clean_all'' and then ``make.''
Tracing the optimal path can alert the user when the subproblem which
admits a particular known feasible solution (at least
according to the branching restrictions that have been imposed so far)
is pruned. This could be due to an invalid branching. Note that this
option currently only works for branching on binary variables. To use
this facility, the user must fill in the function user_send_feas_sol(). All that is required is to pass out an array
of user indices that are in the feasible solution that you want to
trace. Each time the subproblem which admits this feasible solution is
branched on, the branch that continues to admit the solution is
marked. When one of these marked subproblems is pruned, the user is
notified.
Next: Using the Interactive Graph
Up: Debugging Your Application
Previous: Using Purify and Quantify
Ted Ralphs
2003-10-16