int user_unpack_cuts(void *user, int from, int type, int varnum, 
                     var_desc **vars, int cutnum, cut_data **cuts,
                     int *new_row_num, waiting_row ***new_rows)


If the user has defined application-specific cut classes, these cuts must be interpreted as constraints for the current LP relaxation, i.e., the user must decode the compact representation of the cuts (see the cut_data structure) into rows for the matrix. A pointer to the array of generated rows must be returned in ***new_rows (the user has to allocate this array) and their number in *new_row_num.

Note that SYMPHONY has built-in support for cuts generated explicitly as matrix rows with no user-defined packed form, i.e., cuts whose indices and coefficients are given explicitly (see the function user_find_cuts(). These cuts can be constructed and added using the helper function cg_add_explicit_cut() and are packed and unpacked automatically, so the user does not need to implement this function. In post processing, SYMPHONY unpacks explicitly defined cuts and internally generated generic cuts.


void *user IN Pointer to the user-defined LP data structure.
int from IN See below in ``Notes''.
int type IN UNPACK_CUTS_SINGLE or UNPACK_CUTS_MULTIPLE (see notes below).
int varnum IN The number of variables.
var_desc **vars IN The variables currently in the problem.
int cutnum IN The number of cuts to be decoded.
cut_data **cuts IN Cuts that need to be converted to rows for the current LP. See ``Warning'' below.
int *new_row_num OUT Pointer to the number of rows in **new_rows.
waiting_row ***new_rows OUT Pointer to the array of pointers to the new rows.

Return values:

USER_ERROR Error. The cuts are discarded.
USER_SUCCESS User unpacked the cuts.
USER_DEFAULT There are no user cut types defined. In this case, SYMPHONY deals with only explicit cuts and internally generated cuts.

Wrapper invoked from:
Wherever a cut needs to be unpacked (multiple places).


Explicit row cuts are processed, as well as SYMPHONY's internally generated cuts. Also, the pointers to each cut are transferred to the waiting_rows data structure (in previous version, this was done by the user).


Ted Ralphs