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)
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).
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. |
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. |
SYMPHONY checks if any of the newly generated cuts are already in the local pool.