NO FRAMES

CPXsetnodecallbackfunc

public int CPXsetnodecallbackfunc(CPXENVptr env, int(CPXPUBLIC *nodecallback)(CALLBACK_NODE_ARGS), void * cbhandle)
Definition file: cplex.h
Note

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 CPXsetnodecallbackfunc sets and modifies the user-written callback to be called during MIP optimization after ILOG CPLEX has selected a node to explore, but before this exploration is carried out. The callback routine can change the node selected by ILOG CPLEX to a node selected by the user.

Example

 status = CPXgetnodecallbackfunc(env, mynodefunc, mydata);

See also the example admipex1.c in the standard distribution.

Parameters

env

A pointer to the CPLEX environment, as returned by CPXopenCPLEX.

nodecallback

A pointer to the current user-written node callback. If no callback has been set, the pointer evaluates to NULL.

cbhandle

A pointer to user private data. This pointer is passed to the user-written node callback.

Callback description

 int callback (CPXCENVptr env,
               void       *cbdata,
               int        wherefrom,
               void       *cbhandle,
               int        *nodeindex_p,
               int        *useraction_p);
 

ILOG CPLEX calls the node callback after selecting the next node to explore. The user can choose another node by setting the argument values of the callback.

Callback return value

The callback returns zero if successful and nonzero if an error occurs.

Callback arguments

env

A pointer to the CPLEX environment, as returned by CPXopenCPLEX.

cbdata

A pointer passed from the optimization routine to the user-written callback that identifies the problem being optimized. The only purpose of this pointer is to pass it to the callback information routines.

wherefrom

An integer value reporting where in the optimization this function was called. It has the value CPX_CALLBACK_MIP_NODE.

cbhandle

A pointer to user private data.

nodeindex_p

A pointer to an integer that specifies the node number of the user-selected node. The node selected by ILOG CPLEX is node number 0 (zero). Other nodes are numbered relative to their position in the tree, and this number changes with each tree operation. The unchanging identifier for a node is its sequence number. To access the sequence number of a node, use the routine CPXgetcallbacknodeinfo. An error results if a user attempts to select a node that has been moved to a node file. (See the ILOG CPLEX User's Manual for more information about node files.)

useraction_p

A pointer to an integer specifying the action to be taken on completion of the user callback. The table summarizes the possible actions.

Actions to be Taken after a User-Written Node Callback
ValueSymbolic ConstantAction
0CPX_CALLBACK_DEFAULTUse ILOG CPLEX-selected node
1CPX_CALLBACK_FAILExit optimization
2CPX_CALLBACK_SETUse user-selected node as defined in returned values

Returns:

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