int user_create_subproblem(void *user, int *indices, MIPdesc *mip, int *maxn, int *maxm, int *maxnz)
Based on the instance data contained in the user data structure and the list
of base and extra variables that are active in the current subproblem, the
user has to create the subproblem for the search node. The matrix describing
the subproblem must contain those variables whose user indices are listed in
the array indices (in the same order) and the base constraints. The
extra (dynamically generated) constraints are added automatically by SYMPHONY
after the initial subproblem description is created.
In this function, the user is required to construct a description of the subproblem in column-ordered format and pass it back to SYMPHONY by filling out the MIPdesc data structure, described here. The user is not responsible for allocating extra memory to allow for the addition of dynamically generated cuts and variables. The arrays allocated in user_create_subproblem() are owned by SYMPHONY after allocation and are freed as soon as the relaxation is loaded into the solver. However, if the user has an idea as to the maximum number of variables and constraints that are likely to be generated during processing of the subproblem, this information can be passed to SYMPHONY in the variables *maxn, *maxm, and *maxnz. These numbers are only estimates that SYMPHONY can use to perform memory allocation. They do not have to be exact numbers. In fact, these estimates need not be provided at all. The obj_sense and obj_offset fields are set globally in the function user_initialize_root_node(). Setting them here will have no effect.
Note that, the user should return ``USER_DEFAULT'' if an MPS or GMPL/AMPL file was read in to describe the original MILP. SYMPHONY will allocate the corresponding arrays and specify the constraint matrix automatically in this case.
|void *user||IN||Pointer to the user-defined LP data structure.|
|int *indices||IN||The list of the active variables (base and extra).|
|MIPdesc *mip||OUT||Pointer to the MIPdesc data structure.|
|int *maxn||OUT||Estimated maximum number of variables.|
|int *maxm||OUT||Estimated maximum number of constraints.|
|int *maxnz||OUT||Estimated maximum number of nonzeros.|
|USER_ERROR||Error. The LP module is aborted.|
|USER_SUCCESS||User created the constraint matrix with the base constraints.|
|USER_DEFAULT||This return code is used when the default routines for reading in an MPS or AMPL file were used and the user wants to let SYMPHONY set up the subproblem automatically. This return will cause an error if the default I/O routines were not used.|
The extra constraints are added to the matrix by calling the user_unpack_cuts() subroutine and then adding the corresponding rows to the matrix. This is easier for the user to implement, but less efficient than adding the cuts at the time the original matrix was being constructed.