pub unsafe extern "C" fn SCIPperformGenericDivingAlgorithm(
scip: *mut SCIP,
diveset: *mut SCIP_DIVESET,
worksol: *mut SCIP_SOL,
heur: *mut SCIP_HEUR,
result: *mut SCIP_RESULT,
nodeinfeasible: c_uint,
iterlim: c_longlong,
divecontext: SCIP_DIVECONTEXT,
) -> SCIP_RETCODE
Expand description
performs a diving within the limits of the @p diveset parameters
This method performs a diving according to the settings defined by the diving settings @p diveset; Contrary to the name, SCIP enters probing mode (not diving mode) and dives along a path into the tree. Domain propagation is applied at every node in the tree, whereas probing LPs might be solved less frequently.
Starting from the current LP solution, the algorithm selects candidates which maximize the score defined by the @p diveset and whose solution value has not yet been rendered infeasible by propagation, and propagates the bound change on this candidate.
The algorithm iteratively selects the the next (unfixed) candidate in the list, until either enough domain changes or the resolve frequency of the LP trigger an LP resolve (and hence, the set of potential candidates changes), or the last node is proven to be infeasible. It optionally backtracks and tries the other branching direction.
After the set of remaining candidates is empty or the targeted depth is reached, the node LP is solved, and the old candidates are replaced by the new LP candidates.
@see heur_guideddiving.c for an example implementation of a dive set controlling the diving algorithm.
@note the node from where the algorithm is called is checked for a basic LP solution. If the solution is non-basic, e.g., when barrier without crossover is used, the method returns without performing a dive.
@note currently, when multiple diving heuristics call this method and solve an LP at the same node, only the first call will be executed, @see SCIPgetLastDiveNode().