The user's main avenues for customization of SYMPHONY are the tuning of parameters and the implementation of one or more of over 50 user callback functions. The callback functions allow the user to override SYMPHONY's default behavior for many of the functions performed as part of its algorithm. The user has complete control over branching, cutting plane generation, management of the cut pool and the LP relaxation, search and diving strategies, and limited column generation. The callback functions are grouped by module according to their functionality. The names of the callback functions begin with the prefix user_. For instance, the user_find_cuts() subroutine is used to implement subroutines for finding problem-specific cutting planes and is part of the cut generation module. A full list of callbacks is contained in Chapter 7.3.
Callbacks in SYMPHONY are implemented slightly differently than in other popular libraries. Each user function is called from a SYMPHONY wrapper function that interprets the user's return value and determines what action should be taken. If the user performs the required function, the wrapper function normally exits without further action. If the user requests that SYMPHONY perform a certain default action, then this is done. Files containing default function stubs for all callbacks are provided along with the SYMPHONY source code and must be compiled and linked with SYMPHONY's internal library functions to obtain an executable. Makefiles and Microsoft Visual C++ project files are provided for automatic compilation.