user_generate_cuts_in_lp

[cf]user_generate_cuts_in_lp
int user_generate_cuts_in_lp(void *user, LPdata *lp_data, int varnum,
                             var_desc **vars, double *x, int *new_row_num,
                             cut_data ***cuts)

Description:

The user might decide to generate cuts directly within the LP module instead of using the cut generator. This can be accomplished either through a call to this function or simply by configuring SYMPHONY such that the cut generator is called directly from the LP solver. One example of when this might be done is when generating Gomory cuts or something else that requires knowledge of the current LP tableau. The user must return the list of generated cuts by allocating an array of cut_data structures and setting *cuts to point to this array. Post-processing consists of checking if any of the new cuts are already in the local pool (or dominated by a cut in the local pool).

Arguments:

void *user IN Pointer to the user-defined LP data structure.
     
LPdata *lp_data IN A pointer to SYMPHONY's internal data structure for storing the LP relaxation and related data.
int varnum IN The number of variables currently in the LP relaxation. (The length of the *vars and x arrays.)
var_desc **vars IN The variables currently in the LP relaxation.
double *x IN Values of the above variables.
int *new_row_num OUT The number of cuts generated.
cut_data ***cuts OUT The cuts and the corresponding rows.

Return values:

USER_ERROR Error. Interpreted as if no cuts were generated.
USER_SUCCESS Cuts were generated.
USER_DEFAULT No cuts were generated. By default, SYMPHONY uses the CGL to generate generic cuts, according to parameter settings.
GENERATE_CGL_CUTS Generate generic CGL cuts, according to parameter settings.
DO_NOT_GENERATE_CGL_CUTS No additional cuts are generated.

Post-processing:

SYMPHONY checks if any of the newly generated cuts are already in the local pool.

Wrapper invoked from:
receive_cuts() before the cuts from the CG module are received. Since the user will probably use this function to generate tableau-dependent cuts, it is highly unlikely that any of the new cuts would already be in the pool. Therefore the user will probably return USER_AND_PP to force SYMPHONY to skip post-processing.

Notes:




Ted Ralphs
2010-03-24