int user_generate_column(void *user, int generate_what, int cutnum, 
                         cut_data **cuts, int prevind, int nextind, 
                         int *real_nextind, double *colval, 
                         int *colind, int *collen, double *obj,
                         double *lb, double *ub)


This function is called when pricing out the columns that are not already fixed and are not explicitly represented in the matrix. Only the user knows the explicit description of these columns. When a missing variable need to be priced, the user is asked to provide the corresponding column. SYMPHONY scans through the known variables in the order of their user indices. After testing a variable in the matrix (prevind), SYMPHONY asks the user if there are any missing variables to be priced before the next variable in the matrix (nextind). If there are missing variables before nextind, the user has to supply the user index of the real next variable (real_nextind) along with the corresponding column. Occasionally SYMPHONY asks the user to simply supply the column corresponding to nextind. The generate_what flag is used for making a distinction between the two cases: in the former case it is set to GENERATE_REAL_NEXTIND and in the latter it is set to GENERATE_NEXTIND.


void *user IN Pointer to the user-defined LP data structure.
int generate_what IN GENERATE_NEXTIND or GENERATE_REAL_NEXTIND (see description above).
int cutnum IN The number of added rows in the LP formulation (i.e., the total number of rows less the number of base constraints). This is the length of the **cuts array.
cut_data **cuts IN Description of the cuts corresponding to the added rows of the current LP formulation. The user is supposed to know about the cuts corresponding to the base constraints.
int prevind IN The last variable processed ($ -1$ if there was none) by SYMPHONY.
int nextind IN The next variable ($ -1$ if there are none) known to SYMPHONY.
int *real_nextind OUT Pointer to the user index of the next variable ($ -1$ if there is none).
double *colval OUT Values of the nonzero entries in the column of the next variable. (Sufficient space is already allocated for this array.)
int *colind OUT Row indices of the nonzero entries in the column. (Sufficient space is already allocated for this array.)
int *collen OUT The length of the colval and colind arrays.
double *obj OUT Objective coefficient corresponding to the next variable.
double *lb OUT Lower bound of the next variable.
double *ub OUT Upper bound of the next variable.

Return values:

USER_ERROR Error. The LP process is aborted.
USER_SUCCESS User filled out *real_nextind and generated its column if needed.
USER_DEFAULT No column generation is done.

Wrapper invoked from:
price_all_vars() and restore_lp_feasibility().


colval, colind, collen and obj do not need to be filled out if real_nextind is the same as nextind and generate_what is GENERATE_REAL_NEXTIND.

Ted Ralphs