The Xpress-SLP Log
The Xpress-SLP log consists of log lines of two different types: the output of the underlying XPRS optimizer, and the log of XSLP itself.
By default, messages produced by the nonlinear code are sent to the normal XPRS message callback as controlled by XSLP_ECHOXPRSMESSAGES. It may also be intercepted by a user function using the user output callback; see XSLPsetcbmessage. Users need to define a callback function and print messages to the screen themselves if they wish output to be displayed.
Logging controls
General SLP logging
| XPRS_OUTPUTLOG | Logging level of the underlying XPRS problem |
| XPRS_LPLOG | Logging frequency for solving the linearization |
| XPRS_MIPLOG | Logging frequency for the MIP solver |
Logging for the underlying XPRS problem
| XSLP_LOG | Level of SLP logging (iteration, penalty, convergence) |
| XSLP_SLPLOG | Logging frequency for SLP iterations |
| XSLP_MIPLOG | MI-SLP specific logging |
Special logging settings
| XPRS_DCLOG | Logging of delayed constraint activation |
| XSLP_ERRORTOL_P | Absolute tolerance for printing error vectors |
The structure of the log
The typical log with the default settings starts with statistics about the problem sizes. On the Polygon1.mps example, using the Xpress console program to read the problem prints the following:
[xpress mps] readprob Polygon1.mps
Reading Problem Polygon
Problem Statistics
10 ( 1 spare) rows
10 ( 4 spare) structural columns
7 ( 1 spare) non-zero elements
MIP Entity Statistics
0 entities 0 sets 0 set members
DR: 0 SB: 0 EC: 0
IV: 0 RX: 0 TX: 0 Form: 7
UF: 0 WT: 0 Total: 0
Xpress-NLP Statistics:
7 coefficients
9 NLP variables
25 mul 0 div 0 sqrt
0 exp 0 log 12 pow
3 sin 6 cos 0 tan
The standard XPRS optimizer problem loading statistics is extended with a report about the special structures possibly present in the problem, including DR (determining rows), SB (initial step bounds), EC (enforced constraints), IV (initial values), RX/TX (relative and absolute tolerances), Form (formula tokens), UF (user functions), WT (initial row weights), followed by statistics about the number of NLP coefficients, NLP variables, and the types of nonlinear operations present (mul, div, sqrt, exp, log, pow, sin, cos, tan). Other operations such as arcsin, arccos, arctan, abs, sign, erfs, minmax, pwl, and ufun also exist. Only rows with nonzero counts are displayed.
When the SLP algorithm is started after setting the appropriate controls, the default log contains the following information:
[xpress mps] nlpsolver=1
[xpress mps] localsolver=0
[xpress mps] optimize
...
Minimizing problem using Xpress-SLP
Xpress-SLP Augmentation Statistics:
Columns:
4 implicit SLP variables
8 delta vectors
8 penalty error vectors (1 positive, 7 negative)
Rows:
7 nonlinear constraints
8 update rows
1 penalty error rows
Coefficients:
47 non-constant coefficients
It LP NetObj ValObj ErrorSum ErrorCost Validate KKT Unconv Ext Action T
1 O -3.673E-04 1.4E-07 .00 .00 .00 2.0E-05 0 0 K* 0
2 O -6.277E-05 1.4E-07 .00 .00 .00 2.0E-05 0 0 * 0
Returning final converged solution
Xpress-SLP stopped after 2 iterations. 0 unconverged items
Problem solved using Xpress-NLP SLP
No unconverged values in active constraints
Problem is nonlinear postsolved
Heap usage: 1246KB (peak 5618KB, 145KB system)
Observed Lipschitz constant: 4.99E-05
Final NLP objective (local optimum) : 1.499999749999847e-07
Max validation error (abs/rel) : .000 / .000
Max primal violation (abs/rel) : 1.102e-16 / 3.509e-17
Observed primal integral : 83.818%
Total / SLP / LP time : .065s / 5.99E-03s / 2.00E-03s
Work / work units per second : 0.00 / 0.00
*** Search completed ***
The default solution log shows the SLP augmentation statistics (columns, rows, and coefficients added for the SLP algorithm), followed by the iteration summary table showing convergence progress, and the final solution statistics.
Note: Setting XSLP_LOG to 1 or higher will also display the LP solver logs for each SLP iteration, which can be useful for debugging but may produce verbose output.
The final iteration summary contains the following fields:
It: The iteration number.
LP: The LP status of the linearization, which can take the following values:
| O | Linearization is optimal |
| I | Linearization is infeasible |
| U | Linearization is unbounded |
| X | Solving the linearization was interrupted |
NetObj: The net objective of the SLP iteration, excluding penalty costs associated with constraint violations. This represents what the current linearization predicted the objective to be.
ValObj: The validated objective function value as defined by the original problem formulation. This is the actual nonlinear objective value evaluated at the current iteration's solution. Note that this value may not always be available, for example if the solution is infeasible.
ErrorSum: Sum of the error delta variables. A measure of infeasibility.
ErrorCost: The value of the weighted error delta variables in the objective. A measure of the effort needed to push the model towards feasibility.
Validate: The validation error indicating the maximum absolute difference between the linearized and actual nonlinear function values.
KKT: The Karush-Kuhn-Tucker optimality measure, indicating how close the current solution is to satisfying optimality conditions.
Unconv: The number of SLP variables that are not converged.
Ext: The number of SLP variables that are converged, but only by extended criteria.
T: Timing information for the iteration.
Action: The special actions that happened in the iteration. These can be:
| * | A new incumbent solution was found |
| 0 | Failed line search (non-improving) |
| A | Adaptive iterations were enabled |
| B | Enforcing step bounds |
| C | Variable clamping was applied |
| D | The determining column filter was applied |
| E | Some infeasible rows were enforced |
| F | Function evaluation error |
| G | Discrete variables were fixed |
| I | At least one working problem was unexpectedly infeasible |
| K | Optimality validation induces further iterations |
| P | The solution needed polishing, postsolve instability |
| P! | Solution polishing failed |
| R | Penalty error vectors were removed |
| s | Switching to primal simplex |
| S | Step bound induced infeasibility was repaired |
| V | Feasiblity validation induces further iterations |
The presence of a P! suggests that the problem is particularly hard to solve without postsolve, and the model might benefit from setting XSLP_NOLPPOLISHING on XSLP_ALGORITHM (please note, that this should only be considered if the solution polishing features is very slow or fails, as the numerical inaccuracies it aims to remove can cause other problems to the solution process).
After the iteration summary, the log contains a final report about the solution, including the final objective value, validation error, primal violation, primal integral, timing information, and work units.
© 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.
