| Overview | Group | Index | Concepts | 
This is an advanced routine. Advanced routines typically demand a thorough understanding of the algorithms used by ILOG CPLEX. Thus they incur a higher risk of incorrect behavior in your application, behavior that can be difficult to debug. Therefore, ILOG encourages you to consider carefully whether you can accomplish the same task by means of other Callable Library routines instead.
The routine CPXstrongbranch computes information for
 selecting a branching variable in an integer-programming branch & cut
 search.
To describe this routine, let's assume that an LP has been solved and
 that the optimal solution is resident. Let goodlist[] be the
 list of variable indices for this problem and goodlen be the
 length of that list. Then goodlist[] gives rise to
 2*goodlen 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. CPXstrongbranch performs at most
 itlim dual steepest-edge iterations on each of these
 2*goodlen LPs, starting from the current optimal solution of
 the base LP. The values that these iterations yield are placed in the arrays
 downpen[] for the downward fix and uppen[] for the
 upward fix. Setting CPX_PARAM_DPRIIND to 2 may give more
 informative values for the arguments downpen[] and
 uppen[] for a given number of iterations
 itlim.
For a given j = goodlist[i], 
 upratio[i] has the following meaning. 
 Let xj be the name of the basic variable with 
 index j, and suppose that xj is fixed 
 to some value t' > t. Then in a subsequent 
 call to CPXdualopt, the leaving variable 
 in the first iteration of this call is uniquely determined. 
 It must be xj. 
There are then two possibilities. Either an entering variable is
 determined, or it is concluded (in the first iteration) that the changed
 model is dual unbounded (primal infeasible). In the latter case,
 upratio[i] is set equal to a large positive value (this number
 is system dependent, but is usually 1.0E+75). In the former case,
 where r is the value of the objective function after this one
 iteration, upratio[i] is determined by |r| = (t' - t) *
 upratio[i].
A user might use other routines of the ILOG CPLEX Callable Library
 directly to build a function that computes the same values as
 CPXstrongbranch. However, CPXstrongbranch
 should be faster because it takes advantage of direct access to internal
 ILOG CPLEX data structures.
| env | The pointer to the ILOG CPLEX environment, as returned by   | 
| lp | A pointer to a CPLEX LP problem object, as returned by   | 
| goodlist | An array of integers. The length of the array must be at least   | 
| goodlen | An integer indicating the number of entries in   | 
| downpen | An array containing values that are the result of the downward fix of branching variables in dual steepest-edge iterations carried out by   | 
| uppen | An array containing values that are the result of the upward fix of branching variables in dual steepest-edge iterations carried out by   | 
| itlim | An integer indicating the limit on the number of dual steepest-edge iterations carried out by   |