next up previous contents 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 up previous contents
Next: Using the Interactive Graph Up: Debugging Your Application Previous: Using Purify and Quantify
Ted Ralphs
2003-10-16