CPXXstrongbranch and CPXstrongbranch

The routine CPXXstrongbranch/CPXstrongbranch computes information for selecting a branching variable in an integer-programming branch-and-cut search.

int  CPXXstrongbranch( CPXCENVptr env, CPXLPptr lp, CPXDIM const * indices, CPXDIM cnt, double * downobj, double * upobj, CPXCNT itlim )

int  CPXstrongbranch( CPXCENVptr env, CPXLPptr lp, int const * indices, int cnt, double * downobj, double * upobj, int itlim )

Description

Warning:

This is an advanced routine. Advanced routines typically demand a thorough understanding of the algorithms used by CPLEX. Thus they incur a higher risk of incorrect behavior in your application, behavior that can be difficult to debug. Therefore, the team encourages you to consider carefully whether you can accomplish the same task by means of other Callable Library routines instead.

The routine CPXXstrongbranch/CPXstrongbranch computes information for selecting a branching variable in an integer-programming branch-and-cut search.

To describe this routine, let's assume that an LP has been solved and that the optimal solution is resident. Let indices[] be the list of variable indices for this problem and cnt be the length of that list. Then indices[] gives rise to 2*cnt different LPs in which each of the listed variables in turn is fixed to the greatest integer value less than or equal to its value in the current optimal solution, and then each variable is fixed to the least integer value greater than or equal to its value in the current optimal solution. CPXXstrongbranch/CPXstrongbranch performs at most itlim dual Simplex iterations on each of these 2*cnt LPs, starting from the current optimal solution of the base LP. The objective values that these iterations yield are placed in the arrays downobj[] for the downward fix and upobj[] for the upward fix. If either of the fixings results in a problem which is dual unbounded (primal infeasible), the corresponding objective value is set to a large positive value for a minimization problem and a large negative value for a maximization problem. This value is system dependent, but it is usually of magnitude 1.0e+75. Setting the parameter that specifies the dual simplex pricing algorithm (CPXPARAM_Simplex_DGradient) to 2 may give more informative values for the arguments downobj[] and upobj[] for a given number of iterations itlim.

A user might use other routines of the Callable Library directly to build a function that computes the same values as CPXXstrongbranch/CPXstrongbranch. However, CPXXstrongbranch/CPXstrongbranch should be faster because it takes advantage of direct access to internal CPLEX data structures.

Arguments

env
The pointer to the CPLEX environment, as returned by CPXXopenCPLEX/CPXopenCPLEX.
lp
A pointer to a CPLEX LP problem object, as returned by CPXXcreateprob/CPXcreateprob.
indices
An array of integers. The length of the array must be at least cnt.
cnt
An integer specifying the number of entries in indices[].
downobj
An array containing objective values that are the result of the downward fix of branching variables in dual steepest-edge iterations carried out by CPXXstrongbranch/CPXstrongbranch. The length of the array must be at least cnt.
upobj
An array containing objective values that are the result of the upward fix of branching variables in dual steepest-edge iterations carried out by CPXXstrongbranch/CPXstrongbranch. The length of the array must be at least cnt.
itlim
An integer specifying the limit on the number of dual steepest-edge iterations carried out by CPXXstrongbranch/CPXstrongbranch on each LP.

Return

The routine returns 0 (zero) if successful and nonzero if an error occurs.