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. |
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. |
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).