XPRSaddcbpreintsol
Purpose
Declares a user integer solution callback function, called when an integer solution is found by heuristics or during the branch and bound search, but before it is accepted by the Optimizer. This callback allows the user to accept or reject a candidate MIP solution before it is accepted as the new incumbent, and in some cases allows the user to modify the node problem (see notes below). This callback function will be called in addition to any integer solution callbacks already added by XPRSaddcbpreintsol.
Topic areas
Synopsis
int XPRS_CC XPRSaddcbpreintsol(XPRSprob prob, void (XPRS_CC *preintsol)(XPRSprob cbprob, void *cbdata, int soltype, int *p_reject, double *p_cutoff), void *data, int priority);
Arguments
|
prob
|
The current problem.
|
||||||
|
preintsol
|
The callback function, which takes arguments
cbprob,
cbdata,
soltype,
p_reject and
p_cutoff, and has no return value. This function is called when an integer solution is found, but before the solution is accepted by the Optimizer, allowing the user to reject the solution. |
||||||
|
cbprob
|
The problem passed to the callback function,
preintsol.
|
||||||
|
cbdata
|
The user-defined data passed as data when setting up the callback.
|
||||||
|
soltype
|
The type of MIP solution that has been found:
|
||||||
|
p_reject
|
Set this to 1 if the solution should be rejected. When soltype is zero, this will also drop the node problem.
|
||||||
|
p_cutoff
|
The new cutoff value that the Optimizer will use if the solution is accepted. If p_cutoff is assigned a value, the new value will be used instead. The cutoff value will not be updated if the solution is rejected. |
||||||
|
data
|
A user-defined data to be passed to the callback function,
preintsol.
|
||||||
|
priority
|
An integer that determines the order in which callbacks of this type will be invoked. The callback added with a higher priority will be called before a callback with a lower priority. Set to 0 if not required. |
Related controls
Integer
|
Branch and Bound: If the user knows that they are interested only in values of the objective function which are better than some value, this can be assigned to MIPABSCUTOFF.
|
Example
Further information
1. To retrieve the integer solution, use
XPRSgetcallbacksolution or
XPRSgetcallbackpresolvesolution. The matching objective value should be queried through the
LPOBJVAL attribute.
XPRSgetsolution and
MIPOBJVAL will not return the newly found solution and matching objective value, because the incumbent solution has not been updated at this point.
2. When
soltype is zero, the current node problem can be modified in this callback, including adding cuts, changing bounds and adding branching objects. If the problem is changed, the node LP relaxation will be resolved and checked for branching candidates again. This might retrigger any optnode (ref.
XPRSaddcboptnode) callback and the node will be branched, if required. Making any changes when soltype is not zero will raise an error.
3. When
soltype is zero, it is possible to add new solutions using
XPRSaddmipsol. If the node problem was not modified during the callback, any added solution will be checked after the current solution has been accepted as a new incumbent. Otherwise, the added solution will be checked after the node relaxation has been resolved.
4. When
soltype is zero and the solution is rejected, the node itself will be dropped without further branching, regardless of whether the node problem is modified within the callback.
5. The cutoff value returned in
p_cutoff is applied only if the solution is not rejected and the node problem (when
soltype is zero) is not modified. To change the cutoff value when rejecting a solution, the control MIPABSCUTOFF should be set instead.
6. For this callback attribute
MIPINFEAS is set to -1 if the solution was found by a heuristic.
Related topics
© 2001-2026 Fair Isaac Corporation. All rights reserved. This documentation is the property of Fair Isaac Corporation ("FICO"). Receipt or possession of this documentation does not convey rights to disclose, reproduce, make derivative works, use, or allow others to use it except solely for internal evaluation purposes to determine whether to purchase a license to the software described in this documentation, or as otherwise set forth in a written software license agreement between you and FICO (or a FICO affiliate). Use of this documentation and the software described in it must conform strictly to the foregoing permitted uses, and no other use is permitted.
