FICO Xpress OptimizationR⃝

Last update 01 April 2022

40.01
REFERENCE MANUAL

FICO Xpress OptimizerR⃝©1983–2022 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 thisdocumentation and the software described in it must conform strictly to the foregoing permitted uses, andno other use is permitted.
The information in this documentation is subject to change without notice. If you find any problems in thisdocumentation, please report them to us in writing. Neither FICO nor its affiliates warrant that thisdocumentation is error-free, nor are there any other warranties with respect to the documentation except as
may be provided in the license agreement. FICO and its affiliates specifically disclaim any warranties,
express or implied, including, but not limited to, non-infringement, merchantability and fitness for a particularpurpose. Portions of this documentation and the software described in it may contain copyright of various
authors and may be licensed under certain third-party licenses identified in the software, documentation, orboth.
In no event shall FICO or its affiliates be liable to any person for direct, indirect, special, incidental, or
consequential damages, including lost profits, arising out of the use of this documentation or the software
described in it, even if FICO or its affiliates have been advised of the possibility of such damage. FICO and its
affiliates have no obligation to provide maintenance, support, updates, enhancements, or modifications
except as required to licensed users under a license agreement.
FICO is a registered trademark of Fair Isaac Corporation in the United States and may be a registeredtrademark of Fair Isaac Corporation in other countries. Other product and company names herein may be
trademarks of their respective owners.
Xpress Optimizer
Deliverable Version: A
Last Revised: 01 April 2022
Version 40.01

Contents
1

Introduction
1.1 The FICO Xpress Optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Starting the First Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1 Licensing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.2 Starting Console Optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.3 Scripting Console Optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.4 Interrupting Console Optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Manual Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1
1
2
2
2
3
5
5

2 Basic Usage
2.1 Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 The Problem Pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 Problem Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5 Problem Solving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6 Interrupting the Solve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7 Results Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.8 Function Quick Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.8.1 Administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.8.2 Problem Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.8.3 Problem Solving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.8.4 Results Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.9 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6
6
7
7
8
8
9
10
11
11
11
11
12
12

3 Problem Types
3.1 Linear Programs (LPs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Mixed Integer Programs (MIPs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Quadratic Programs (QPs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 Quadratically Constrained Quadratic Programs (QCQPs) . . . . . . . . . . . . . . . . . . .
3.4.1 Algebraic and matrix form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.2 Convexity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.3 Characterizing Convexity in Quadratic Constraints . . . . . . . . . . . . . . . . . . .
3.5 Second Order Cone problems (SOCPs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13
13
13
14
15
15
15
16
16

4 Solution Methods
4.1 Simplex Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1 Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Newton Barrier Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.1 Crossover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.2 Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Branch and Bound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.1 Theory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.2 Variable Selection and Cutting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.3 Variable Selection for Branching . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.4 Cutting Planes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.5 Node Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18
18
19
19
19
20
20
20
22
22
23
23

Fair Isaac Corporation Proprietary Informationi

Contents

4.3.6 Adjusting the Cutoff Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.7 Stopping Criteria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.8 Integer Preprocessing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4 QCQP and SOCP Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.1 Convexity Checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.2 Quadratically Constrained and Second Order Cone Problems . . . . . . . . . . . .

24
24
24
25
25
26

5 Advanced Usage
5.1 Problem Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Manipulating the Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2.1 Reading the Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2.2 Modifying the Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3 Working with Presolve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.1 (Mixed) Integer Programming Problems . . . . . . . . . . . . . . . . . . . . . . . .
5.4 Working with LP Folding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.5 Working with Heuristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.6 Analyzing and Handling Numerical Issues . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.6.1 Analyzing Models for Numerical Issues . . . . . . . . . . . . . . . . . . . . . . . . .
5.6.2 Scaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.6.3 Solution Refinement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.6.4 Other Ways to Handle Numerical Issues . . . . . . . . . . . . . . . . . . . . . . . .
5.7 Common Causes of Confusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.8 Using the Callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.8.1 Output Callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.8.2 LP Callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.8.3 Global Search Callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.9 Working with the Cut Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.9.1 Cuts and the Cut Pool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.9.2 Cut Management Routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.9.3 User Cut Manager Routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.10 Solving Problems Using Multiple Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.10.1 The concurrent solver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.11 Solving Large Models (the 64 bit Functions) . . . . . . . . . . . . . . . . . . . . . . . . . .
5.12 Using the Tuner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.12.1 Basic Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.12.2 The Tuner Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.12.3 The Tuner Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.12.4 The Tuner Target . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.12.5 Restarting the Tuner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.12.6 Tuner with Multiple Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.12.7 Tuner with Problem Permutations . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.12.8 Tuning a Set of Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.12.9 Advanced Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.13 Remote Solving with Xpress Insight Compute Interface . . . . . . . . . . . . . . . . . . . .
5.13.1 Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.13.2 Callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.13.3 Licensing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.13.4 Advanced Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27
27
27
28
28
29
29
30
30
31
32
32
33
33
33
33
34
34
34
35
35
35
36
36
37
38
38
38
39
40
40
40
41
41
41
42
42
43
43
43
43

6 Infeasibility, Unboundedness and Instability
6.1 Infeasibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1 Diagnosis in Presolve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.2 Diagnosis using Primal Simplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.3 Irreducible Infeasible Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.4 The Infeasibility Repair Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

44
44
44
45
45
46

Fair Isaac Corporation Proprietary Informationii

Contents

6.1.5 Integer Infeasibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Unboundedness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3 Instability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3.1 Scaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3.2 Accuracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

47
47
48
48
49

7 Console and Library Functions
7.1 Console Mode Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 Layout for Function Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Function Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Purpose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Synopsis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Error Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Associated Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Further Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Related Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_bo_addbounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_bo_addbranches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_bo_addcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_bo_addrows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_bo_create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_bo_destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_bo_getbounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_bo_getbranches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_bo_getid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_bo_getlasterror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_bo_getrows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_bo_setpreferredbranch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_bo_setpriority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_bo_store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_bo_validate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_ge_addcbmsghandler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_ge_getcomputeallowed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_ge_getlasterror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_ge_removecbmsghandler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_ge_setarchconsistency (SETARCHCONSISTENCY) . . . . . . . . . . . . . . . . . . . . . .
XPRS_ge_setcomputeallowed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_nml_addnames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_nml_copynames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_nml_create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_nml_destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_nml_findname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_nml_getlasterror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_nml_getmaxnamelen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_nml_getnamecount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_nml_getnames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRS_nml_removenames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbbariteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbbarlog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbcomputerestart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbpresolve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbchecktime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbchgbranch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

51
51
52
52
52
53
53
53
53
53
53
53
54
55
56
57
59
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
90
91
92
93
94

Fair Isaac Corporation Proprietary Informationiii

Contents

XPRSaddcbchgbranchobject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbchgnode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbcutlog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbcutmgr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbdestroymt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbestimate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbgapnotify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbgloballog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbinfnode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbintsol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcblplog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbmessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbmipthread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbnewnode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbnodecutoff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcboptnode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbpreintsol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbprenode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbsepnode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcbusersolnotify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcols, XPRSaddcols64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddcuts, XPRSaddcuts64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddgencons, XPRSaddgencons64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddmipsol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddnames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddpwlcons, XPRSaddpwlcons64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddqmatrix, XPRSaddqmatrix64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddrows, XPRSaddrows64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddsets, XPRSaddsets64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSaddsetnames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSalter (ALTER) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSbasiscondition (BASISCONDITION) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSbasisstability (BASISSTABILITY) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSbndsa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSbtran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRScalcobjective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRScalcreducedcosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRScalcslacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRScalcsolinfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CHECKCONVEXITY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSchgbounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSchgcoef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSchgcoltype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSchgglblimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSchgmcoef, XPRSchgmcoef64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSchgmqobj, XPRSchgmqobj64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSchgobj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSchgobjsense (CHGOBJSENSE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSchgqobj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSchgqrowcoeff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSchgrhs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSchgrhsrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSchgrowtype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRScopycallbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSclearrowflags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Fair Isaac Corporation Proprietary Information

95
96
97
98
99
100
101
103
104
105
107
108
110
111
112
113
114
116
117
119
120
122
123
125
126
127
129
130
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158

iv

Contents

XPRScopycontrols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRScopyprob . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRScreateprob . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRScrossoverlpsol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSdelcols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSdelcpcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSdelcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSdelgencons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSdelindicators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSdelpwlcons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSdelqmatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSdelrows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSdelsets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSdestroyprob . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSdumpcontrols (DUMPCONTROLS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EXIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSestimaterowdualranges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSfeaturequery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSfixglobals (FIXGLOBALS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSfree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSftran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetattribinfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetbanner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetbasis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetbasisval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetcheckedmode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetcoef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetcols, XPRSgetcols64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetcoltype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetcontrolinfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetcpcutlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetcpcuts, XPRSgetcpcuts64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetcutlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetcutmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetcutslack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetdaysleft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetdblattrib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetdblcontrol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetdirs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetdualray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetgencons, XPRSgetgencons64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetglobal, XPRSgetglobal64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetiisdata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetindex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetindicators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetinfeas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetintattrib, XPRSgetintattrib64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetintcontrol, XPRSgetintcontrol64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetlastbarsol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetlasterror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetlb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetlicerrmsg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetlpsol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetlpsolval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetmessagestatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Fair Isaac Corporation Proprietary Information

159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
179
180
181
182
183
184
185
186
187
188
189
190
191
193
194
195
196
197
198
199
200
201
203
205
207
208
209
211
212
213
214
215
216
217
218
219

v

Contents

XPRSgetmipsol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetmipsolval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetmqobj, XPRSgetmqobj64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetnamelist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetnamelistobject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetnames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetobj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetobjecttypename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetpivotorder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetpivots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetpresolvebasis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetpresolvemap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetpresolvesol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetprimalray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetprobname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetpwlcons, XPRSgetpwlcons64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetqobj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetqrowcoeff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetqrowqmatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetqrowqmatrixtriplets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetqrows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetrhs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetrhsrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetrowflags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetrows, XPRSgetrows64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetrowtype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetscale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetscaledinfeas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetstrattrib, XPRSgetstringattrib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetstrcontrol, XPRSgetstringcontrol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetunbvec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSgetversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSglobal (GLOBAL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HELP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSiisall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSiisclear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSiisfirst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSiisisolations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSiisnext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSiisstatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSiiswrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSinit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSinitglobal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSinterrupt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSloadbasis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSloadbranchdirs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSloadcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSloaddelayedrows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSloaddirs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSloadglobal, XPRSloadglobal64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSloadlp, XPRSloadlp64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSloadlpsol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSloadmipsol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Fair Isaac Corporation Proprietary Information

220
221
222
223
225
226
227
228
229
230
231
232
233
234
235
236
238
239
240
241
242
243
244
245
246
247
248
249
251
252
253
254
255
256
258
259
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
279
281
282

vi

Contents

XPRSloadmodelcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSloadpresolvebasis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSloadpresolvedirs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSloadqcqp, XPRSloadqcqp64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSloadqcqpglobal, XPRSloadqcqpglobal64 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSloadqglobal, XPRSloadqglobal64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSloadqp, XPRSloadqp64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSloadsecurevecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSlpoptimize (LPOPTIMIZE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSmaxim, XPRSminim (MAXIM, MINIM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSmipoptimize (MIPOPTIMIZE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSobjsa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSpivot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSpostsolve (POSTSOLVE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSpresolverow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRINTSOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
QUIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSreadbasis (READBASIS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSreadbinsol (READBINSOL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSreaddirs (READDIRS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSreadprob (READPROB) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSreadslxsol (READSLXSOL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSrefinemipsol (REFINEMIPSOL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbbariteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbcomputerestart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbpresolve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbbarlog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbchgbranch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbchgbranchobject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbchecktime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbchgnode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbcutlog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbcutmgr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbdestroymt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbestimate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbgapnotify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbgloballog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbinfnode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbintsol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecblplog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbmessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbmipthread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbnewnode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbnodecutoff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecboptnode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbpreintsol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbprenode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbsepnode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSremovecbusersolnotify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSrepairinfeas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSrepairweightedinfeas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSrepairweightedinfeasbounds (REPAIRINFEAS) . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSrestore (RESTORE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSrhssa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSsave, XPRSsaveas (SAVE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Fair Isaac Corporation Proprietary Information

283
284
285
286
290
294
297
300
301
302
304
305
306
307
308
310
311
312
313
314
316
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
348
350
353
354
355

vii

Contents

XPRSscale (SCALE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSsetbranchbounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSsetbranchcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSsetcheckedmode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSsetdblcontrol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSsetdefaultcontrol (SETDEFAULTCONTROL) . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSsetdefaults (SETDEFAULTS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSsetindicators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSsetintcontrol, XPRSsetintcontrol64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSsetlogfile (SETLOGFILE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSsetmessagestatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSsetprobname (SETPROBNAME) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSsetstrcontrol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
STOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSstorebounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSstorecuts, XPRSstorecuts64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSstrongbranch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSstrongbranchcb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUNE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRStune . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRStunerreadmethod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRStunerwritemethod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSunloadprob . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSwritebasis (WRITEBASIS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSwritebinsol (WRITEBINSOL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSwritedirs (WRITEDIRS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSwriteprob (WRITEPROB) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSwriteprtsol (WRITEPRTSOL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSwriteslxsol (WRITESLXSOL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRSwritesol (WRITESOL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
373
374
375
377
378
379
380
381
382
383
384
385
386
387

8 Control Parameters389
8.1 Retrieving and Changing Control Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
ALGAFTERCROSSOVER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
ALGAFTERNETWORK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
AUTOCUTTING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
AUTOSCALING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
AUTOPERTURB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
BACKTRACK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
BACKTRACKTIE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
BARALG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
BARCRASH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
BARDUALSTOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
BARFREESCALE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
BARGAPSTOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
BARGAPTARGET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
BARFAILITERLIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
BARINDEFLIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
BARITERLIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
BARKERNEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
BAROBJPERTURB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
BAROBJSCALE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
BARORDER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
BARORDERTHREADS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
BAROUTPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396

Fair Isaac Corporation Proprietary Informationviii

Contents

BARPERTURB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BARREFITER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BARPRESOLVEOPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BARPRIMALSTOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BARREGULARIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BARRHSSCALE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BARSOLUTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BARSTART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BARSTARTWEIGHT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BARSTEPSTOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BARTHREADS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BARCORES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BIGM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BIGMMETHOD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BRANCHCHOICE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BRANCHDISJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BRANCHSTRUCTURAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BREADTHFIRST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CACHESIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CALLBACKFROMMASTERTHREAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CHOLESKYALG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CHOLESKYTOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CLAMPING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
COMPUTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
COMPUTEEXECSERVICE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
COMPUTEJOBPRIORITY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
COMPUTELOG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONFLICTCUTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONCURRENTTHREADS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CORESPERCPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
COVERCUTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CPIALPHA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CPUPLATFORM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CPUTIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CRASH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CROSSOVER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CROSSOVERACCURACYTOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CROSSOVERITERLIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CROSSOVEROPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CROSSOVERTHREADS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CSTYLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CUTDEPTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CUTFACTOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CUTFREQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CUTSTRATEGY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CUTSELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DEFAULTALG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DENSECOLLIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DETERMINISTIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DUALGRADIENT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DUALIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DUALIZEOPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DUALPERTURB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DUALSTRATEGY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DUALTHREADS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Fair Isaac Corporation Proprietary Information

396
397
397
397
397
398
398
399
399
399
399
400
400
400
401
401
401
402
402
403
403
404
404
404
405
405
405
406
406
406
406
407
407
407
408
408
409
409
409
410
410
410
410
411
411
411
412
412
413
413
413
414
414
414
415

ix

Contents

EIGENVALUETOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ELIMFILLIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ELIMTOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ESCAPENAMES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ETATOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EXTRACOLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EXTRAELEMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EXTRAMIPENTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EXTRAPRESOLVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EXTRAQCELEMENTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EXTRAQCROWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EXTRAROWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EXTRASETELEMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EXTRASETS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FEASIBILITYPUMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FEASTOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FEASTOLPERTURB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FEASTOLTARGET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FORCEOUTPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FORCEPARALLELDUAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
GENCONSABSTRANSFORMATION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
GENCONSDUALREDUCTIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
GLOBALFILEBIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
GLOBALFILELOGINTERVAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
GOMCUTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEURBEFORELP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEURDEPTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEURDIVEITERLIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEURDIVERANDOMIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEURDIVESOFTROUNDING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEURDIVESPEEDUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEURDIVESTRATEGY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEUREMPHASIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEURFORCESPECIALOBJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEURFREQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEURMAXSOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEURNODES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEURSEARCHEFFORT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEURSEARCHFREQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEURSEARCHROOTCUTFREQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEURSEARCHROOTSELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEURSEARCHTREESELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEURSTRATEGY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HEURTHREADS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HISTORYCOSTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IFCHECKCONVEXITY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INDLINBIGM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INDPRELINBIGM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INPUTTOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INVERTFREQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INVERTMIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IOTIMEOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
KEEPBASIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
KEEPNROWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
L1CACHE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Fair Isaac Corporation Proprietary Information

415
415
415
416
416
416
416
417
417
417
417
417
418
418
418
419
419
419
419
420
420
420
421
421
421
421
422
422
422
423
423
423
424
424
424
424
425
425
425
426
426
427
427
428
428
428
429
429
429
430
430
430
430
431
431

x

Contents

LINELENGTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LNPBEST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LNPITERLIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LPFLAGS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LPITERLIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LPREFINEITERLIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LOCALCHOICE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LPFOLDING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LPLOG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LPLOGDELAY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LPLOGSTYLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LPTHREADS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MARKOWITZTOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MATRIXTOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXCHECKSONMAXCUTTIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXCHECKSONMAXTIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXMCOEFFBUFFERELEMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXCUTTIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXGLOBALFILESIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXIIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXIMPLIEDBOUND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXLOCALBACKTRACK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXMEMORYHARD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXMEMORYSOFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXMIPTASKS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXMIPSOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXNODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXPAGELINES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXSCALEFACTOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXSTALLTIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXTIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPABSCUTOFF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPABSGAPNOTIFY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPABSGAPNOTIFYBOUND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPABSGAPNOTIFYOBJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPABSSTOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPADDCUTOFF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPCOMPONENTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPCONCURRENTNODES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPCONCURRENTSOLVES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPDUALREDUCTIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPFRACREDUCE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPKAPPAFREQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPLOG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPPRESOLVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPRAMPUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPRESTART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPRESTARTGAPTHRESHOLD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPRESTARTFACTOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIQCPALG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPREFINEITERLIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPRELCUTOFF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPRELGAPNOTIFY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPRELSTOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPTERMINATIONMETHOD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Fair Isaac Corporation Proprietary Information

431
431
432
432
432
432
433
433
433
434
434
434
434
435
435
435
436
436
436
436
437
437
437
438
438
439
439
439
439
440
440
440
441
441
441
441
442
442
443
443
444
444
445
445
446
446
447
447
447
448
448
448
448
449
449

xi

Contents

MIPTHREADS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPTOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPTOLTARGET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MPS18COMPATIBLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MPSBOUNDNAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MPSECHO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MPSFORMAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MPSOBJNAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MPSRANGENAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MPSRHSNAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MUTEXCALLBACKS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NETCUTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NETSTALLLIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NODEPROBINGEFFORT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NODESELECTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NUMERICALEMPHASIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OBJSCALEFACTOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OPTIMALITYTOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OPTIMALITYTOLTARGET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OUTPUTCONTROLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OUTPUTLOG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OUTPUTMASK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OUTPUTTOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PENALTY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PERTURB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PIVOTTOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PPFACTOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PREANALYTICCENTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PREBASISRED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PREBNDREDCONE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PREBNDREDQUAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRECLIQUESTRATEGY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRECOEFELIM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRECOMPONENTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRECOMPONENTSEFFORT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRECONEDECOMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRECONVERTSEPARABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PREDOMCOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PREDOMROW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PREDUPROW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PREELIMQUAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PREFOLDING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PREIMPLICATIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRELINDEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PREOBJCUTDETECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PREPERMUTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PREPERMUTESEED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PREPROBING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PREPROTECTDUAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRESOLVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRESOLVEMAXGROW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRESOLVEOPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRESOLVEPASSES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRESORT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRICINGALG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Fair Isaac Corporation Proprietary Information

450
450
450
450
451
451
451
451
452
452
452
452
453
453
453
454
454
454
454
455
455
455
456
456
456
456
456
457
457
457
457
458
458
458
459
459
459
460
460
460
461
461
461
462
462
462
463
463
463
463
464
464
465
465
465

xii

Contents

PRIMALOPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRIMALPERTURB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRIMALUNSHIFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PSEUDOCOST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PWLDUALREDUCTIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PWLNONCONVEXTRANSFORMATION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
QCCUTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
QCROOTALG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
QSIMPLEXOPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
QUADRATICUNSHIFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RANDOMSEED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
REFACTOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
REFINEOPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RELAXTREEMEMORYLIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RELPIVOTTOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
REPAIRINDEFINITEQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
REPAIRINFEASMAXTIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RESOURCESTRATEGY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ROOTPRESOLVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SBBEST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SBEFFORT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SBESTIMATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SBITERLIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SBSELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCALING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SERIALIZEPREINTSOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SIFTING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SIFTPASSES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SIFTPRESOLVEOPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SIFTSWITCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SLEEPONTHREADWAIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SOSREFTOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SYMMETRY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SYMSELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
THREADS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TRACE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TREECOMPRESSION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TREECOVERCUTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TREECUTSELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TREEDIAGNOSTICS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TREEGOMCUTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TREEMEMORYLIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TREEMEMORYSAVINGTARGET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TREEQCCUTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUNERHISTORY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUNERMAXTIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUNERMETHOD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUNERMETHODFILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUNERMODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUNEROUTPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUNEROUTPUTPATH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUNERPERMUTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUNERROOTALG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUNERSESSIONNAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUNERTARGET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Fair Isaac Corporation Proprietary Information

466
466
466
467
467
467
468
468
468
469
469
469
470
470
471
471
471
472
472
472
473
473
473
473
474
475
475
475
475
476
476
476
476
477
477
477
478
478
478
479
479
479
480
480
480
481
481
481
482
482
482
483
483
483
484

xiii

Contents

TUNERTHREADS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TUNERVERBOSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
USERSOLHEURISTIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
VARSELECTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
VERSION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

484
485
485
486
486

9 Problem Attributes
487
9.1 Retrieving Problem Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
ACTIVENODES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
ALGORITHM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
ATTENTIONLEVEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
AVAILABLEMEMORY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
BARAASIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
BARCGAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
BARCONDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
BARCONDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
BARCROSSOVER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
BARDENSECOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
BARDUALINF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
BARDUALOBJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
BARITER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
BARLSIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
BARPRIMALINF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
BARPRIMALOBJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
BARSING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
BARSINGR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
BESTBOUND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
BOUNDNAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
BRANCHVALUE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
BRANCHVAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
CALLBACKCOUNT_CUTMGR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
CALLBACKCOUNT_OPTNODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
CHECKSONMAXCUTTIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
CHECKSONMAXTIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
COLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
COMPUTEEXECUTIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
CONEELEMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
CONES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
CORESDETECTED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
CORESPERCPUDETECTED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
CPISCALEFACTOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
CPUSDETECTED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
CURRENTMEMORY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
CURRENTNODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
CURRMIPCUTOFF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
CUTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
DUALINFEAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
ELEMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
ERRORCODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
GENCONCOLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
GENCONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
GENCONVALS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
GLOBALFILESIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
GLOBALFILEUSAGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
INDICATORS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497

Fair Isaac Corporation Proprietary Informationxiv

Contents

LPOBJVAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LPSTATUS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MATRIXNAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXABSDUALINFEAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXABSPRIMALINFEAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXKAPPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXMIPINFEAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXPROBNAMELENGTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXRELDUALINFEAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXRELPRIMALINFEAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MEMORYLIMITDETECTED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPBESTOBJVAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPENTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPINFEAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPOBJVAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPSOLNODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPSOLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPSOLTIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPSTATUS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIPTHREADID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NAMELENGTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NODEDEPTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NODES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NUMIIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OBJNAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OBJRHS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OBSERVEDPRIMALINTEGRAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OBJSENSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ORIGINALCOLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ORIGINALGENCONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ORIGINALGENCONCOLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ORIGINALGENCONVALS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ORIGINALINDICATORS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ORIGINALMIPENTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ORIGINALPWLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ORIGINALPWLPOINTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ORIGINALQCONSTRAINTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ORIGINALQCELEMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ORIGINALQELEMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ORIGINALSETMEMBERS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ORIGINALSETS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ORIGINALROWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PARENTNODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PEAKMEMORY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PEAKTOTALTREEMEMORYUSAGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PENALTYVALUE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PHYSICALCORESDETECTED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PHYSICALCORESPERCPUDETECTED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PREDICTEDATTLEVEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRESOLVEINDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRESOLVESTATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRIMALDUALINTEGRAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRIMALINFEAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PWLCONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PWLPOINTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Fair Isaac Corporation Proprietary Information

497
497
497
498
498
498
498
498
498
499
499
499
499
499
500
500
500
500
500
501
501
501
502
502
502
502
502
503
503
503
503
504
504
504
504
504
505
505
505
505
505
506
506
506
506
506
507
507
507
507
508
508
508
508
509

xv

Contents

QCELEMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
QCONSTRAINTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
QELEMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RANGENAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RESTARTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RHSNAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ROWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SIMPLEXITER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SETMEMBERS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SETS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SPARECOLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SPAREELEMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SPAREMIPENTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SPAREROWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SPARESETELEMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SPARESETS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
STOPSTATUS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SUMPRIMALINF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SYSTEMMEMORY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TOTALMEMORY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TREECOMPLETION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TREEMEMORYUSAGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TREERESTARTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
UUID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XPRESSVERSION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

509
509
509
509
510
510
510
510
510
511
511
511
511
511
512
512
512
512
513
513
513
513
513
514
514
514

10 Return Codes and Error Messages
515
10.1 Optimizer Return Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
10.2 Optimizer Error and Warning Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515

Appendix548

A Log and File Formats
549
A.1 File Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
A.1.1 File Compression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
A.2 XMPS Matrix Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
A.2.1 NAME section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
A.2.2 ROWS section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
A.2.3 COLUMNS section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
A.2.4 QUADOBJ / QMATRIX section (Quadratic Programming only) . . . . . . . . . . . . 551
A.2.5 QCMATRIX section (Quadratic Constraint Programming only) . . . . . . . . . . . . 552
A.2.6 DELAYEDROWS section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
A.2.7 MODELCUTS section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
A.2.8 INDICATORS section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
A.2.9 SETS section (Integer Programming only) . . . . . . . . . . . . . . . . . . . . . . . 554
A.2.10 RHS section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
A.2.11 RANGES section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
A.2.12 BOUNDS section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
A.2.13 GENCONS section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
A.2.14 ENDATA section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
A.2.15 Compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
A.2.16 PWLOBJ section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
A.2.17 PWLNAM section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559

Fair Isaac Corporation Proprietary Information

xvi

Contents

A.2.18 PWLCON section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3 LP File Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.1 Rules for the LP file format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.2 Comments and blank lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.3 File lines, white space and identifiers . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.4 Sections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.5 Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.6 Linear expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.7 Objective function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.8 Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.9 Delayed rows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.10 Model cuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.11 Indicator contraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.12 Bounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.13 Generals, Integers and binaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.14 Semi-continuous and semi-integer . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.15 Partial integers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.16 Special ordered sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.17 Quadratic programming problems . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.18 Quadratic Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.19 General Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.20 Constraint ranges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.21 Extended naming convention . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.22 Compatibility to other extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.4 ASCII Solution Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.4.1 Solution Header .hdr Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.4.2 CSV Format Solution .asc Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.4.3 Fixed Format Solution (.prt) Files . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.4.4 ASCII Solution (.slx) Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.5 The Directives (.dir) File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.6 IIS description file in CSV format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.7 The Matrix Alteration (.alt) File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.7.1 Changing Upper or Lower Bounds . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.7.2 Changing Right Hand Side Coefficients . . . . . . . . . . . . . . . . . . . . . . . . .
A.7.3 Changing Constraint Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.8 The Tuner Method (.xtm) File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.8.1 The fixed controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.8.2 The tunable controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.9 The Simplex Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.10 The Barrier Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.11 The Global Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.12 The Tuner Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.13 The Remote Solving Configuration file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.13.1 caCertsPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.13.2 cleanupJobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.13.3 executionService . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.13.4 logLevel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.13.5 maxRetries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.13.6 priority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.13.7 trustSrv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

559
560
561
561
561
561
563
563
563
563
564
564
564
565
566
566
567
567
568
568
569
569
570
570
570
570
571
572
574
575
575
576
576
577
577
577
578
578
578
579
579
581
582
582
582
582
583
583
583
583

B Contacting FICO
585
Product support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
Product education . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
Product documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585

Fair Isaac Corporation Proprietary Information

xvii

Contents

Sales and maintenance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Related services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FICO Community . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
About FICO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Index

Fair Isaac Corporation Proprietary Information

586
586
586
586

587

xviii

CHAPTER 1

Introduction
The FICO Xpress Optimization Suite is a powerful mathematical optimization framework well–suited to abroad range of optimization problems. The core solver of this suite is the FICO Xpress Optimizer, which
combines ease of use with speed and flexibility. It can be interfaced via the command line Console
Optimizer, via the graphical interface application IVE and through a callable library that is accessible fromall the major programming platforms. It combines flexible data access functionality and optimization
algorithms, using state–of–the–art methods, which enable the user to handle the increasingly complex
problems arising in industry and academia.
The Console Optimizer provides a suite of ’Console Mode’ Optimizer functionality. Using the Console
Optimizer the user can load problems from widely used problem file formats such as the MPS and LP
formats and solve them using any of the algorithms supported by the Optimizer. The results may then beprocessed and viewed in a variety of ways. The Console Mode provides full access to the Optimizer
control variables allowing the user to customize the optimization algorithms to tune the solving
performance on the most demanding problems.
The FICO Xpress Optimizer library provides full, high performance access to the internal data structuresof the Optimizer and full flexibility to manipulate the problem and customize the optimization process.
For example, the Cut Manager framework allows the user to exploit their detailed knowledge of the
problem to generate specialized cutting planes during branch and bound that may improve solving
performance of Mixed Integer Programs (MIPs).
Of most interest to the library users will be the embedding of the Optimizer functionality within their own
applications. The available programming interfaces of the library include interfaces for C/C++, .NET and
Java. Note that the interface specifications in the following documentation are given exclusively in termsof the C/C++ language. Short examples of the interface usage using other languages may be found in the
FICO Xpress Getting Started manual.

1.1 The FICO Xpress Optimizer
The FICO Xpress Optimizer is a mathematical programming framework designed to provide highperformance solving capabilities. Problems can be loaded into the Optimizer via matrix files such as MPS
and LP files and/or constructed in memory and loaded using a variety of approaches via the libraryinterface routines. Note that in most cases it is more convenient for the user to construct their problems
using FICO Xpress Mosel or FICO Xpress BCL and then solve the problem using the interfaces provided
by these packages to the Optimizer.
The solving algorithms provided with the Optimizer include the primal simplex, the dual simplex and the
Newton barrier algorithms. For solving Mixed Integer Programs (MIPs) the Optimizer provides a powerfulbranch and bound framework. The various types of problems the Optimizer can solve are outlined in
Chapter 3.
Solution information can be exported to file using a variety of ASCII and binary formats or accessed via
memory using the library interface. Advanced solution information, such as solution bases, can be both

Fair Isaac Corporation Proprietary Information

1

Chapter 1: Introduction

exported and imported either via files or via memory, using the library interface. Note that bases can be
useful for so called ’warm–starting’ the solving of Linear Programming (LP) problems.

1.2 Starting the First TimeWe recommend that new FICO Xpress Optimizer users first try running the Console Optimizer ’optimizer’
executable from the command prompt before using the other interfaces of Optimizer. This is because (i)it is the easiest way to confirm the license status of the installation and (ii) it is an introduction to a
powerful tool with many uses during the development cycle of optimization applications. For this reason
we focus mainly on discussing the Console Optimizer in this section as an introduction to various basic
functions of the Optimizer.

1.2.1 Licensing
To run the Optimizer from any interface it is necessary to have a valid licence file, xpauth.xpr. The
FICO Xpress licensing system is highly flexible and is easily configurable to cater for the user’s
requirements. The system can allow the Optimizer to be run on a specific machine, on a machine with a
specific ethernet address or on a machine connected to an authorized hardware dongle.
If the Optimizer fails to verify a valid license then a message can be obtained that describes the reasonsfor the failure and the Optimizer will be unusable. When using the Console Optimizer the licensing failure
message will be displayed on the console. Library users can call the function XPRSgetlicerrmsg to
get the licensing failure message.
On Windows operating systems the Optimizer searches for the license file in the directory containing theXpress libraries, which are installed by default into the C:\xpressmp\bin folder. To avoid unnecessary
licensing problems, it is recommended that the XPAUTH_PATH environment variable is not set on
Windows.
On Unix systems it is necessary to set the XPAUTH_PATH environment variable to the full path to thelicense file. For ease of support it is recommended that the license file is placed in the bin directory
within your Xpress installation and the XPAUTH_PATH environment variable is set accordingly, e.g.,/opt/xpressmp/bin/xpauth.xpr.

1.2.2 Starting Console Optimizer
Console Optimizer is an interactive command line interface to the Optimizer. Console Optimizer is started
from the command line using the following syntax:
C:\> optimizer [problem_name] [@filename]

From the command line an initial problem name can be optionally specified together with an optional
second argument specifying a text "script" file from which the console input will be read as if it had been
typed interactively.
Note that the syntax example above shows the command as if it were input from the Windows Command
Prompt (i.e., it is prefixed with the command prompt string C:\>). For Windows users Console Optimizer
can also be started by typing optimizer into the "Run ..." dialog box in the Start menu.
The Console Optimizer provides a quick and convenient interface for operating on a single problem
loaded into the Optimizer. Compare this with the more powerful library interface that allows one or more
problems to co–exist in a process. The Console Optimizer problem contains the problem data as well as(i) control variables for handling and solving the problem and (ii) attributes of the problem and its solution
information.
Useful features of Console Optimizer include a help system, auto–completion of command names andFair Isaac Corporation Proprietary Information

2

Chapter 1: Introduction

integration of system commands.
Typing "help" will list the various options for getting help. Typing "help commands" will list available
commands. Typing "help attributes" and "help controls" will list the available attributes andcontrols, respectively. Typing "help" followed by a command name or control/attribute name will list thehelp for this item. For example, typing "help lpoptimize" will get help for the LPOPTIMIZE
command.
The Console Optimizer auto–completion feature is a useful way of reducing key strokes when issuingcommands. To use the auto–completion feature, type the first part of an optimizer command namefollowed by the Tab key. For example, by typing "lpopt" followed by the Tab key Console Optimizer willcomplete to the LPOPTIMIZE command. Note that once you have finished inputting the command name
portion of your command line, Console Optimizer can also auto–complete on file names. For example, if
you have a matrix file named hpw15.mps in the current working directory then by typing "readprob
hpw" followed by the Tab key the command should auto–complete to the string "readprob
hpw15.mps". Note that the auto–completion of file names is case–sensitive.
Console Optimizer also features integration with the operating system’s shell commands. For example,
by typing "dir" (or "ls" under Unix) you will directly run the operating system’s directory listing command.
Using the "cd" command will change the working directory, which will be indicated in the prompt string:[xpress bin] cd \[xpress C:\]

Finally, note that when the Console Optimizer is first started it will attempt to read in an initialization file
named optimizer.ini from the current working directory. This is an ASCII file that may contain anylines that can normally be entered at the console prompt, such as commands or control parametersettings. The lines of the optimizer.ini file are run with at start up, and can be useful for setting up acustomized default Console Optimizer environment for the user (e.g., defining custom controls settings
on the Console Optimizer problem).

1.2.3 Scripting Console Optimizer
The Console Optimizer interactive command line hosts a TCL script parser (http://www.tcl.tk). With TCL
scripting the user can program flow control into their Console Optimizer scripts. Also TCL scripting
provides the user with programmatic access to a powerful suite of functionality in the TCL library. With
scripting support the Console Optimizer provides a high level of control and flexibility well beyond thatwhich can be achieved by combining operating system batch files with simple piped script files. Indeed,with scripting support, Console Optimizer is ideal for (i) early application development, (ii) tuning ofmodel formulations and solving performance and (iii) analyzing difficulties and bugs in models.
Note that the TCL parser has been customized and simplified to handle intuitive access to the controls
and attributes of the Optimizer. The following example shows how to proceed with write and read accessto the MIPLOG Optimizer control:[xpress C:\] miplog=3[xpress C:\] miplog
3

The following shows how this would usually be achieved using TCL syntax:[xpress C:\] set miplog 33[xpress C:\] $miplog
3

The following set of examples demonstrate how with some simple TCL commands and some basic flow
control constructs the user can quickly and easily create powerful programs.

Fair Isaac Corporation Proprietary Information

3

Chapter 1: Introduction

The first example demonstrates a loop through a list of matrix files where a simple regular expression on
the matrix file name and a simple condition on the number of rows in the problem decide whether or not
the problem is solved using lpoptimize. Note the use of:■the creation of a list of file names using the TCL glob command■the use of the TCL square bracket notation ([]) for evaluating commands to their string result value■

the TCL foreach loop construct iterating over the list of file names■

dereferencing the string value of a variable using ’$’■

the use of the TCL regexp regular expression command■

the two TCL if statements and their condition statements■

the use of the two Optimizer commands READPROB and MINIM■

the TCL continue command used to skip to the next loop iteration
set filelist [glob ⁎.mps]
foreach filename $filelist {if { [regexp -all {large_problem} $filename] } continue
readprob $filename
if { $rows > 200 } continue
lpoptimize}

The second example demonstrates a loop though some control settings and the tracking of the control
setting that gave the best performance. Note the use of:■

the TCL for loop construct iterating over the values of variable i from --1 to 3■

console output formatting with the TCL puts command■setting the values of Optimizer controls CUTSTRATEGY and MAXNODE■

multiple commands per line separated using a semicolon■use of the MIPSTATUS problem attribute in the TCL if statement■

comment lines using the hash character ’#’
set bestnodes 10000000
set p hpw15
for { set i -1 } { $i <= 3 } { incr i } {puts "Solving with cutstrategy : $i"cutstrategy=$i; maxnode=$bestnodes
readprob $p
mipoptimize
if { $mipstatus == 6 } {# Problem was solved within $bestnodes
set bestnodes $nodes; set beststrat $i}}
puts "Best cutstrategy : $beststrat : $bestnodes"

Fair Isaac Corporation Proprietary Information

4

Chapter 1: Introduction

1.2.4 Interrupting Console Optimizer
Console Optimizer users may interrupt the running of the commands (e.g., lpoptimize) by typing
Ctrl–C. Once interrupted Console Optimizer will return to its command prompt. If an optimization
algorithm has been interrupted in this way, any solution process will stop at the first ’safe’ place before
returning to the prompt. Optimization iterations may be resumed by re–entering the interrupted
command. Note that by using this interrupt–resume functionality the user has a convenient way ofdynamically changing controls during an optimization run.
Lastly, note that "typing ahead" while the console is writing output to screen can cause Ctrl–C input to failon some operating systems.

1.3 Manual Layout
So far the manual has given a basic introduction to the FICO Xpress Optimization Suite. The reader
should be able to start the Console Optimizer command line tool and have the license verified correctly.
They should also be able to enter some common commands used in Console Optimizer (e.g., READPROB
and LPOPTIMIZE) and get help on command usage using the Console Optimizer help functionality.
The remainder of this manual is divided into two parts. These are the first chapters up to but notincluding Chapter 7 and the remaining chapters from Chapter 7.
The first part of the manual, beginning with Chapter 2, provides a brief overview of common Optimizer
usage, introducing the various routines available and setting them in the typical context they are used.
This is followed in Chapter 3 by a brief overview of the types of problems that the FICO Xpress Optimizer
can be used to solve. Chapter 4 provides a description of the solution methods and some of the more
frequently used parameters for controlling these methods along with some ideas of how they may be
used to enhance the solution process. Finally, Chapter 5 details some more advanced topics in Optimizer
usage.
The second half of the manual is the main reference section. Chapter 7 details all functions in both theConsole and Advanced Modes alphabetically. Chapters 8 and 9 then provide a reference for the various
controls and attributes, followed by a list of Optimizer error and return codes in Chapter 10. A descriptionof several of the file formats is provided in Appendix A.

Fair Isaac Corporation Proprietary Information

5

CHAPTER 2

Basic Usage
The FICO Xpress Optimization Suite is a powerful and flexible framework catering for the development ofa wide range of optimization applications. From the script–based Console Optimizer providing rapid
development access to a subset of Optimizer functionality (Console Mode) to the more advanced, highperformance access of the full Optimizer functionality through the library interface.
In the previous section we looked at the Console Optimizer interface and introduced some basic
functions that all FICO Xpress Optimizer users should be familiar with. In this section we expand on thediscussion and include some basic functions of the library interface.

2.1 Initialization
Before the FICO Xpress Optimization Suite can be used from any of the interfaces the Optimizer librarymust be initialized and the licensing status successfully verified. Details about licensing your installation
can be found in FICO Xpress Installation Guide.
When Console Optimizer is started from the command line the initialization and licensing security checks
happen immediately and the results are displayed with the banner in the console window. For the libraryinterface users, the initialization and licensing are triggered by a call to the library function XPRSinit,
which must be made before any of the other Optimizer library routines can be successfully called. If thelicensing security checks fail to check out a license then library users can obtain a string message
explaining the issue using the function XPRSgetlicerrmsg.
Note that it is recommended that the users having licensing problems use the Console Optimizer as ameans of checking the licensing status while resolving the issues. This is because it is the quickest andeasiest way to check and display the licensing status.
Once the Optimizer functionality is no longer required the license and any system resources held by the
Optimizer should be released. The Console Optimizer releases these automatically when the user exits
the Console Optimizer with the QUIT or STOP command. For library users the Optimizer can be triggered
to release its resources with a call to the routine XPRSfree, which will free the license checked out in theearlier call to XPRSinit.
{}

if(XPRSinit(NULL)) printf("Problem with XPRSinit\n");XPRSfree();

In general, library users will call XPRSinit once when their application starts and then call XPRSfree
before it exits. This approach is recommended since calls to XPRSinit can have non–negligible (approx.
0.5 sec) overhead when using floating network licensing.
Although it is recommended that the user writes their code such that XPRSinit and XPRSfree arecalled only in sequence note that the routine XPRSinit may be called repeatedly before a call to
XPRSfree. Each subsequent call to XPRSinit after the first will simply return without performing any

Fair Isaac Corporation Proprietary Information

6

Chapter 2: Basic Usagetasks. In this case note that the routine XPRSfree must be called the same number of times as the calls
to XPRSinit to fully release the resources held by the library. Only on the last of these calls to
XPRSfree will the library be released and the license freed.

2.2 The Problem PointerThe Optimizer provides a container or problem pointer to contain an optimization problem and its
associated controls, attributes and any other resources the user may attach to help construct and solve
the problem. Console Optimizer has one of these problem pointers that it uses to provide the user withloading and solving functionality. This problem pointer is automatically initialized when Console
Optimizer is started and release again when it is stopped.
In contrast to Console Optimizer, library interface users can have multiple problem pointers coexisting
simultaneously in a process. The library user creates and destroys a problem pointer using the routines
XPRScreateprob and XPRSdestroyprob, respectively. In the C library interface, the user passes the
problem pointer as the first argument in routines that are used to operate on the problem pointer’s data.
Note that it is recommended that the library user destroys all problem pointers before calling XPRSfree.
{}

XPRSprob prob;
XPRScreateprob(&prob);
XPRSdestroyprob(prob);

2.3 Logging
The Optimizer provides useful text logging messages for indicating progress during the optimization
algorithms and for indicating the status of certain important commands such as XPRSreadprob. The
messages from the optimization algorithms report information on iterations of the algorithm. The mostimportant use of the logging, however, is to convey error messages reported by the Optimizer. Note thatonce a system is in production the error messages are typically the only messages of interest to the user.
Conveniently, Console Optimizer automatically writes the logging messages for its problem pointer to theconsole screen. Although message management for the library users is more complicated than for
Console Optimizer users, library users have more flexibility with the handling and routing of messages.
The library user can route messages directly to file or they can intercept the messages via callback andmarshal the message strings to appropriate destinations depending on the type of message and/or the
problem pointer from which the message originates.
To write the messages sent from a problem pointer directly to file the user can call XPRSsetlogfile
with specification of an output file name. To get messages sent from a problem pointer to the libraryuser’s application the user will define and then register a messaging callback function with a call to the
XPRSaddcbmessage routine.
{}

XPRSprob prob;
XPRScreateprob(&prob);
XPRSsetlogfile(prob, "logfile.log");
XPRSdestroyprob(prob);

Note that a high level messaging framework is also available — which handles messages from all
problem pointers created by the Optimizer library and messages related to initialization of the library itself— by calling the XPRS_ge_addcbmsghandler function. A convenient use of this callback, particularly
when developing and debugging an application, is to trap all messages to file. The following line of codeshows how to use the library function XPRSlogfilehandler together with
XPRS_ge_addcbmsghandler to write all library message output to the file log.txt.

Fair Isaac Corporation Proprietary Information

7

Chapter 2: Basic UsageXPRS_ge_addcbmsghandler(XPRSlogfilehandler, "log.txt", 0);

Details about the use of callback functions can be found in section 5.8.

2.4 Problem Loading
Once a problem pointer has been created, an optimization problem can be loaded into it. The problem
can be loaded either from file or from memory via the suite of problem loading and problem manipulation
routines available in the Optimizer library interface. The simplest of these approaches, and the only
approach available to Console Optimizer users, is to read a matrix from an MPS or LP file using
XPRSreadprob (READPROB).
{}XPRSprob prob;
XPRScreateprob(&prob);
XPRSsetlogfile(prob, "logfile.log");
XPRSreadprob(prob, "hpw15", "");XPRSdestroyprob(prob);

Library users can construct the problem in their own arrays and then load this problem specification
using one of the functions XPRSloadlp, XPRSloadqp, XPRSloadqcqp, XPRSloadglobal,
XPRSloadqglobal or XPRSloadqcqpglobal. During the problem load routine the Optimizer will use
the user’s data to construct the internal problem representation in new memory that is associated withthe problem pointer. Note, therefore, that the user’s arrays can be freed immediately after the call. Oncethe problem has been loaded, any subsequent call to one of these load routines will overwrite theproblem currently represented in the problem pointer.
The names of the problem loading routines indicate the type of problem that can be represented using
the routine. The following table outlines the components of an optimization problem as denoted by thecodes used in the function names.
Code

Problem Content

lpLinear Program (LP) (linear constraints and linear objective)

qp

Quadratic Program (LP with quadratic objective)

globalGlobal Constraints (LP with discrete entities e.g., binary variables)

qc

Quadratic Constraints (LP with quadratic constraints)

Many of the array arguments of the load routines can optionally take NULL pointers if the associatedcomponent of the problem is not required to be defined. Note, therefore, that the user need only use the
XPRSloadqcqpglobal routine to load any problem that can be loaded by the other routines.
Finally, note that the names of the rows and columns of the problem are not loaded together with the
problem specification. These may be loaded afterwards using a call to the function XPRSaddnames.

2.5 Problem Solving
With a problem loaded into a problem pointer the user can run the optimization algorithms on the
problem to solve it.
The two main commands to run the optimization algorithms on a problem are
XPRSmipoptimize(MIPOPTIMIZE) and XPRSlpoptimize(LPOPTIMIZE) depending on whether the
problem needs to be solved with or without global entities. The XPRSlpoptimize function will solve LPs,QPs and QCQPs or the initial continuous relaxation of a MIP problem, depending on the type of problem
loaded in the problem pointer. The XPRSmipoptimize function will solve MIPs, MIQPs and MIQCQPs.

Fair Isaac Corporation Proprietary Information

8

Chapter 2: Basic Usage

For problems with global entities the Optimizer can be told to stop after having solved the initial
relaxation by passing the ’l’ flag to the XPRSmipoptimize function. The remaining MIP search can be
run by calling the XPRSmipoptimize function without the ’l’ flag.
{}

XPRSprob prob;
XPRScreateprob(&prob);
XPRSsetlogfile(prob, "logfile.log");
XPRSreadprob(prob, "hpw15", "");XPRSmipoptimize(prob, "");XPRSdestroyprob(prob);

2.6 Interrupting the Solve
It is common that users need to interrupt iterations before a solving algorithm is complete. This isparticularly common when solving MIP problems since the time to solve these to completion can be large
and users are often satisfied with near–optimal solutions. The Optimizer provides for this with structured
interrupt criteria using controls and with user–triggered interrupts.
As described previously in section 1.2.4 Console Optimizer can receive a user–triggered interrupt fromthe keyboard Ctrl–C event. It was also described in this previous section how interrupted commands
could be resumed by simply reissuing the command. Similarly, optimization runs started from the libraryinterface and interrupted by either structured or user–triggered interrupts, will return from the call in sucha state that the run may be resumed with a follow–on call.
To setup structured interrupts the user will need to set the value of certain controls. Controls are scalarvalues that are accessed by their name in Console Optimizer and by their id number via the libraryinterface using functions such as XPRSgetintcontrol and XPRSsetintcontrol. These particularlibrary functions are used for getting and setting the values of integer controls. Similar library functions
are used for accessing double precision and string type controls.
Some types of structured interrupts include limits on iterations of the solving algorithms and a limit on
the overall time of the optimization run. Limits on the simplex algorithms’ iterations are set using thecontrol LPITERLIMIT. Iterations of the Newton barrier algorithm are limited using the control
BARITERLIMIT. A limit on the number of nodes processed in the branch and bound search when solving
MIP problems is provided with the MAXNODE control. The integer control MAXTIME is used to limit theoverall run time of the optimization run.
Note that it is important to be careful when using interrupts, to ensure that the optimization run is not
being unduly restricted. This is particularly important when using interrupts on MIP optimization runs.
Specific controls to use as stopping criteria for the MIP search are discussed in section 4.3.7.
{}

XPRSprob prob;
XPRScreateprob(&prob);
XPRSsetlogfile(prob, "logfile.log");
XPRSreadprob(prob, "hpw15", "");XPRSsetintcontrol(prob, XPRS_MAXNODE, 20000);
XPRSmipoptimize(prob, "");XPRSdestroyprob(prob);

Finally note that library users can trigger an interrupt on an optimization run (in a similar way to the Ctrl–Cinterrupt in Console Optimizer) using a call to the function XPRSinterrupt. It is recommended that theuser call this function from a callback during the optimization run. See section 5.8 for details about using
callbacks.

Fair Isaac Corporation Proprietary Information

9

Chapter 2: Basic Usage

2.7 Results Processing
Once the optimization algorithms have completed, either a solution will be available, or else the problem
will have been identified as infeasible or unbounded. In the latter case, the user might want to know whatcaused this particular outcome and take steps to correct it. How to identify the causes of infeasibility andunboundedness are discussed in Chapter 6. In the former case, however, the user typically wants toretrieve the solution information into the required format.
The FICO Xpress Optimizer provides a number of functions for accessing solution information. An ASCII
solution file can be obtained by XPRSwriteslxsol (WRITESLXSOL). The .slx format is similar format
to the .mps format for MIP models and to the .sol format. Files in .slx format can be read back into
the optimizer using the XPRSreadslxsol function. An extended solution file with additional information
per column may be obtained as an ASCII file using either of XPRSwritesol (WRITESOL) or
XPRSwriteprtsol(WRITEPRTSOL).
Library interface users may additionally access the current LP, QP or QCQP solution information via
memory using XPRSgetlpsol. By calling XPRSgetlpsol the user can obtain copies of the double
precision values of the decision variables, the slack variables, dual values and reduced costs. Libraryinterface users can obtain the last MIP solution information with the XPRSgetmipsol function.
In addition to the arrays of solution information provided by the Optimizer, summary solution informationis also available through problem attributes. These are named scalar values that can be accessed by their
id number using the library functions XPRSgetintattrib, XPRSgetdblattrib and
XPRSgetstrattrib. Examples of attributes include LPOBJVAL and MIPOBJVAL, which return theobjective function values for the current LP, QP or QCQP solution and the last MIP solution, respectively. A
full list of attributes may be found in Chapter 9.
When the optimization routine returns it is recommended that the user check the status of the run toensure the results are interpreted correctly. For continuous optimization runs (started with
XPRSlpoptimize) the status is available using the LPSTATUS integer problem attribute. For MIP
optimization runs (started with XPRSmipoptimize) the status is available using the MIPSTATUS
integer problem attribute. See the attribute’s reference section for the definition of their values.
{}

XPRSprob prob;
int nCols;
double ⁎x;
XPRScreateprob(&prob);
XPRSsetlogfile(prob, "logfile.log");
XPRSreadprob(prob, "hpw15", "");XPRSgetintattrib(prob, XPRS_COLS, &nCols);
XPRSsetintcontrol(prob, XPRS_MAXNODE, 20000);
XPRSmipoptimize(prob, "");XPRSgetintattrib(prob, XPRS_MIPSTATUS, &iStatus);if(iStatus == XPRS_MIP_SOLUTION || iStatus == XPRS_MIP_OPTIMAL) {x = (double ⁎) malloc(sizeof(double) ⁎ nCols);
XPRSgetmipsol(prob, x, NULL);}XPRSdestroyprob(prob);

Note that, unlike for LP, QP or QCQP solutions, dual solution information is not provided with the call to
XPRSgetmipsol and is not automatically generated with the MIP solutions. Only the decision and slack
variable values for a MIP solution are obtained when calling XPRSgetmipsol. The reason for this is that
MIP problems do not satisfy the theoretical conditions by which dual information is derived (i.e.,
Karush–Kuhn–Tucker conditions). In particular, this is because the MIP constraint functions are, in
general, not continuously differentiable (indeed, the domains of integer variables are not continuous).
Despite this, some useful dual information can be generated if a MIP has continuous variables and wesolve the resulting LP problem generated by fixing the non–continuous component of the problem to

Fair Isaac Corporation Proprietary Information

10

Chapter 2: Basic Usage

their solution values. Because this process can be expensive it is left to the user to perform this in a post
solving phase where the user will simply call the function XPRSfixglobals followed with a call to the
optimization routine XPRSlpoptimize.

2.8 Function Quick Reference
2.8.1 Administration
XPRSinit

Initialize the Optimizer.

XPRScreateprob

Create a problem pointer.

XPRSsetlogfile

Direct all Optimizer output to a log file.

XPRSaddcbmessage

Define a message handler callback function.

XPRSgetintcontrol

Get the value of an integer control,

XPRSsetintcontrol

Set the value of an integer control.

XPRSinterrupt

Set the interrupt status of an optimization run.

XPRSdestroyprob

Destroy a problem pointer.

XPRSfreeRelease resources used by the Optimizer.

2.8.2 Problem Loading
XPRSreadprob

Read an MPS or LP format file.

XPRSloadlp

Load an LP problem.

XPRSloadqp

Load a quadratic objective problem.

XPRSloadqcqp

Load a quadratically constrained, quadratic objective problem.

XPRSloadglobal

Load a MIP problem.

XPRSloadqglobal

Load a quadratic objective MIP problem.

XPRSloadqcqpglobal

Load a quadratically constrained, quadratic objective MIP problem.

XPRSaddnames

Load names for a range of rows or columns in a problem.

2.8.3 Problem Solving
XPRSreadbasis
XPRSloadbasis

Read a basis from file.
Load a basis from user arrays.

XPRSreaddirs

Read a directives file.

XPRSlpoptimize

Solve the problem without global entities.

XPRSmipoptimize

Run the problem with global entities.

XPRSfixglobals

Fix the discrete variables in the problem to the values of the current
MIP solution stored with the problem pointer.

XPRSgetbasis

Copy the current basis into user arrays.

XPRSwritebasis

Write the current basis to file.

Fair Isaac Corporation Proprietary Information

11

Chapter 2: Basic Usage

2.8.4 Results Processing
XPRSwritesol

Write the current solution to ASCII files.

XPRSwriteprtsol

Write the current solution in printable format to file.

XPRSgetlpsol

Copy the current LP solution values into user arrays.

XPRSgetmipsol

Copy the values of the last MIP solution into user arrays.

XPRSgetintattrib

Get the value of an integer problem attribute e.g., by passing the id

XPRSgetdblattrib

Get the value of a double problem attribute e.g., by passing the id

MIPSOLS the user can get the number of MIP solutions found.
MIPOBJVAL the user can get the objective value of the last MIP
solution.
XPRSgetstrattrib

Get the value of a string problem attribute.

2.9 Summary
In the previous sections a brief introduction is provided to the most common features of the FICO Xpress
Optimizer and its most general usage. The reader should now be familiar with the main routines in the
Optimizer library. These routines allow a user to create problem pointers and load problems into these
problem pointers. The reader should be familiar with the requirements for setting up message handlingwith the Optimizer library. Also the reader should know how to run the optimization algorithms on theloaded problems and be familiar with the various ways that results can be accessed.
Examples of using the Optimizer are available from a number of sources, most notably from FICO Xpress
Getting Started manual. This provides a straight forward, "hands–on" approach to the FICO Xpress
Optimization Suite and it is highly recommended that users read the relevant chapters before considering
the reference manuals. Additionally, more advanced, examples may be downloaded from the website.

Fair Isaac Corporation Proprietary Information

12

CHAPTER 3

Problem Types
The FICO Xpress Optimization Suite is a powerful optimization tool for solving Mathematical
Programming problems. Users of FICO Xpress formulate real–world problems as Mathematical
Programming problems by defining a set of decision variables, a set of constraints on these variables andan objective function of the variables that should be maximized or minimized. Our FICO Xpress users
have applications that define and solve important Mathematical Programming problems in academia andindustry, including areas such as production scheduling, transportation, supply chain management,
telecommunications, finance and personnel planning.
Mathematical Programming problems are usually classified according to the types of decision variables,
constraints and objective function in the problem. Perhaps the most popular application of the FICO
Xpress Optimizer is for the class of Mixed Integer Programs (MIPs). In this section we will briefly
introduce some important types of problems.

3.1 Linear Programs (LPs)Linear Programming (LP) problems are a very common type of optimization problems. In this type ofproblem all constraints and the objective function are linear expressions of the decision variables. Eachdecision variable is restricted to some continuous interval (typically non–negative). Although themethods for solving these types of problems are well known (e.g., the simplex method), only a few
efficient implementations of these methods (and additional specialized methods for particular classes ofLPs) exists, and these are often crucial for solving the increasingly large instances of LPs arising inindustry.

3.2 Mixed Integer Programs (MIPs)
Many problems can be modeled satisfactorily as Linear Programs (LPs), i.e., with variables that are only
restricted to having values in continuous intervals. However, a common class of problems requires
modeling using discrete variables. These problems are called Mixed Integer Programs (MIPs). MIP
problems are often hard to solve and may require large amounts of computation time to obtain evensatisfactory, if not optimal, results.
Perhaps the most common use of the FICO Xpress Optimization Suite is for solving MIP problems and it
is designed to handle the most challenging of these problems. Besides providing solution support for
MIP problems the Optimizer provides support for a variety of popular MIP modeling constructs:
Binary variables – decision variables that have value either 0 or 1, sometimes called 0/1 variables;
Integer variables – decision variables that have integer values;
Semi–continuous variables – decision variables that either have value 0, or a continuous value
above a specified non–negative limit. Semi–continuous variables are useful for modeling cases

Fair Isaac Corporation Proprietary Information

13

Chapter 3: Problem Types

where, for example, if a quantity is to be supplied at all then it will be supplied starting from someminimum level (e.g., a power generation unit);
Semi–continuous integer variables – decision variables that either have value 0, or an integer
value above a specified non–negative limit;
Partial integer variables – decision variables that have integer values below a specified limit andcontinuous values above the limit. Partial integer variables are useful for modeling cases where a
supply of some quantity needs to be modeled as discrete for small values but we are indifferent
whether it is discrete when the values are large (e.g., because, say, we do not need to distinguishbetween 10000 items and 10000.25 items);
Special ordered sets of type one (SOS1) — a set of decision variables ordered by a set of specified
continuous values (or reference values) of which at most one can take a nonzero value. SOS1s areuseful for modeling quantities that are taken from a specified discrete set of continuous values(e.g., choosing one of a set of transportation capacities);
Special ordered sets of type two (SOS2) – a set of variables ordered by a set of specified
continuous values (or reference values) of which at most two can be nonzero, and if two arenonzero then they must be consecutive in their ordering. SOS2s are useful for modeling apiecewise linear quantity (e.g., unit cost as a function of volume supplied);
Indicator constraints – constraints each with a specified associated binary ’controlling’ variable
where we assume the constraint must be satisfied when the binary variable is at a specified binary
value; otherwise the constraint does not need to be satisfied. Indicator constraints are useful formodeling cases where supplying some quantity implies that a fixed cost is incurred; otherwise ifno quantity is supplied then there is no fixed cost (e.g., starting up a production facility to supply
various types of goods and the total volume of goods supplied is bounded above).
Piecewise linear constraints – constraints that define a piecewise linear relationship between two
variables. These are defined via a set of breakpoints with linearly interpolated values between andbeyond them (with the slope before the first and after the last point continuing the slope between
the first/last two points). The piecewise linear functions are allowed to be discontinuous bydefining multiple points with the same value of the input variable x, in which case the output
variable y is allowed to take any value between the corresponding y-values of these breakpoints,
while the first of them will define the slope before and the last will define the slope after thisx-value. Piecewise linear constraints are useful to model e.g. transportation costs that are
constant/linear in specific intervals but may jump between the different brackets.
General constraints – specific type of MIP constraints to model min, max, and, or, and absolutevalue relationships between two or more variables.
All of the above MIP variable types are collectively referred to as global entities.

3.3 Quadratic Programs (QPs)
Quadratic Programming (QP) problems are an extension of Linear Programming (LP) problems where theobjective function may include a second order polynomial. An example of this is where the user wants tominimize the statistical variance (a quadratic function) of the solution values.
The FICO Xpress Optimizer can be used directly for solving QP problems with support for quadratic
objectives in the MPS and LP file formats and library routines for loading QPs and manipulating quadratic
objective functions. Note that the Optimizer requires the quadratic function to be convex see section
3.4.2 for a description about convexity)

Fair Isaac Corporation Proprietary Information

14

Chapter 3: Problem Types

3.4 Quadratically Constrained Quadratic Programs (QCQPs)
Quadratically Constrained Quadratic Programs (QCQPs) are an extension of the Quadratic Programming(QP) problem where the constraints may also include second order polynomials.
A QCQP problem may be written as:
minimize:c1 x1 +...+cn xn +xT Q0 x

subject to:

a11 x1 +...+a1n xn +xT Q1 x

≤

b1

≤

bm

...
am1 x1 +...+amn xn +xT Qm x
l1 ≤ x1 ≤ u1 ,...,ln ≤ xn ≤ un
where any of the lower or upper bounds li or ui may be infinite.
The FICO Xpress Optimizer can be used directly for solving QCQP problems with support for quadratic
constraints and quadratic objectives in the MPS and LP file formats and library routines for loading
QCQPs and manipulating quadratic objective functions and the quadratic component of constraints.
Properties of QCQP problems are discussed in the following few sections.

3.4.1 Algebraic and matrix form
Each second order polynomial can be expressed as xT Qx where Q is an appropriate symmetric matrix:
the quadratic expressions are generally either given in the algebraic form
a11 x12 + 2a12 x1 x2 + 2a13 x1 x3 + ... + a22 x22 + 2a23 x2 x3 + ...
like in LP files, or in the matrix form xT Qx where
a11 a12
 a21 a22

Q= .
 ..
an1

an2

···

a1n






..

.
···



ann

like in MPS files. As symmetry is always assumed, aij = aji for all index pairs (i, j).

3.4.2 Convexity
A fundamental property for nonlinear optimization problems, thus in QCQP as well, is convexity. A region
is called convex if for any two points from the region the connecting line segment is also part of theregion.
The lack of convexity may give rise to several unfavorable model properties. Lack of convexity in theobjective may introduce the phenomenon of locally optimal solutions that are not global ones (a local
optimal solution is one for which a neighborhood in the feasible region exists in which that solution is thebest). While the lack of convexity in constraints can also give rise to local optima, they may evenintroduce non–connected feasible regions as shown in Figure 3.1.
In this example, the feasible region is divided into two parts. In region B, the objective function has twoalternative locally optimal solutions, while in region A the objective function is not even bounded.
For convex problems, each locally optimal solution is a global one, making the characterization of the
optimal solution efficient.

Fair Isaac Corporation Proprietary Information

15

Chapter 3: Problem Types

Figure 3.1: Non-connected feasible regions

3.4.3 Characterizing Convexity in Quadratic Constraints
A quadratic constraint of the form
a1 x1 + ... + an xn + xT Qx ≤ bdefines a convex region if and only if Q is a so–called positive semi–definite (PSD) matrix.
A square matrix Q is PSD by definition if for any vector (not restricted to the feasible set of a problem) x it
holds that xT Qx ≥ 0.
It follows that for greater-than or equal constraints
a1 x1 + ... + an xn + xT Qx ≥ b
the negative of Q must be PSD.
A nontrivial quadratic equality constraint (one for which not every coefficient is zero) always defines anonconvex region (or in other words, if both Q and its negative is PSD, then Q must be equal to the 0
matrix). Therefore, quadratic equality constraints are not allowed by the Optimizer.
Determining whether a matrix is PSD is not always obvious nor trivial. There are certain constructs,
however, that can easily be recognized as being non convex:
1. the product of two variables, say xy, without having both x2 and y2 present;
2. having –x2 in any quadratic expression in a less–than or equal constraint, or having x2 in any
greater– than or equal constraint.

3.5 Second Order Cone problems (SOCPs)
Second order cone problems (SOCP) are a special class of quadratically constrained problems, where thequadratic matrix Q is not required to be semi–definite.
The FICO Xpress Optimizer supports (mixed integer) second order cone problems that satisfy thefollowing requirements.
Each quadratic constraint satisfies one of the following two forms:

Fair Isaac Corporation Proprietary Information

16

Chapter 3: Problem Types

1. Second order (or Lorentz) cone: x12 + x12 + ... + xk2 – t2 ≤ 0 where t ≥ 0
2. Rotated second order (or Lorentz) cone: x12 + x12 + ... + xk2 – 2t1 t2 ≤ 0 where t1 , t2 ≥ 0
All of the cone coefficients must be exactly one, except for the coefficient of 2 for the t1 t2 product.
Constants or linear terms are not allowed.
Cones cannot be overlapping. That is, a variable x can appear in at most one second–order cone
constraint.
Second order cone problems are loaded using the same API functions as for quadratic constraints, andthe conic constraints are auto–detected by the optimizer at run time.

Fair Isaac Corporation Proprietary Information

17

CHAPTER 4

Solution Methods
The FICO Xpress Optimization Suite provides three fundamental optimization algorithms for LP or QP
problems: the primal simplex, the dual simplex and the Newton barrier algorithm (QCQP and SOCP
problems are always solved with the Newton barrier algorithm). Using these algorithms the Optimizer
implements solving functionality for the various types of continuous problems the user may want tosolve.
Typically the user will allow the Optimizer to choose what combination of methods to use for solving theirproblem. For example, by default, the FICO Xpress Optimizer uses the dual simplex method for solving LP
problems and the barrier method for solving QP problems. For the initial continuous relaxation of a MIP,
the defaults will be different and depends both on the number of solver threads used, the type of the
problem and the MIP technique selected.
For most users the default behavior of the Optimizer will provide satisfactory solution performance andthey need not consider any customization. However, if a problem seems to be taking an unusually longtime to solve or if the solving performance is critical for the application, the user may consider, as a firstattempt, to force the Optimizer to use an algorithm other than the default.
The main points where the user has a choice of what algorithm to use are (i) when the user calls the
optimization routine XPRSlpoptimize (LPOPTIMIZE) and (ii) when the Optimizer solves the noderelaxation problems during the branch and bound search. The user may force the use of a particularalgorithm by specifying flags to the optimization routine XPRSlpoptimize (LPOPTIMIZE). If the user
specifies flags to XPRSmipoptimize (MIPOPTIMIZE) to select a particular algorithm then thisalgorithm will be used for the initial relaxation only. To specify what algorithm to use when solving thenode relaxation problems during branch and bound use the special control parameter, DEFAULTALG.
As a guide for choosing optimization algorithms other than the default consider the following. As ageneral rule, the dual simplex is usually much faster than the primal simplex if the problem is neither
infeasible nor near–infeasible. If the problem is likely to be infeasible or if the user wishes to get
diagnostic information about an infeasible problem then the primal simplex is the best choice. This isbecause the primal simplex algorithm finds a basic solution that minimizes the sum of infeasibilities andthese solutions are typically helpful in identifying causes of infeasibility. The Newton barrier algorithm
can perform much better than the simplex algorithms on certain classes of problems. The barrier
algorithm will, however, likely be slower than the simplex algorithms if, for a problem coefficient matrix A,
AT A is large and dense.
In the following few sections, performance issues relating to these methods will be discussed in moredetail. Performance issues relating to the search for MIP solutions will also be discussed.

4.1 Simplex Method
The simplex method was the first efficient method devised for solving Linear Programs (LPs). Thismethod is still commonly used today and there are efficient implementations of the primal and dual
simplex methods available in the Optimizer. We briefly outline some basic simplex theory to give the user

Fair Isaac Corporation Proprietary Information

18

Chapter 4: Solution Methods

a general idea of the simplex algorithm’s behavior and to define some terminology that is used in thereference sections.
A region defined by a set of constraints is known in Mathematical Programming as a feasible region.
When these constraints are linear the feasible region defines the solution space of a Linear Programming(LP) problem. Each value of the objective function of an LP defines a hyperplane or a level set. A
fundamental result of simplex algorithm theory is that an optimal value of the LP objective function will
occur when the level set grazes the boundary of the feasible region. The optimal level set either intersects
a single point (or vertex) of the feasible region (if such a point exists), in which case the solution is unique,or it intersects a boundary set of the feasible region in which case there is an infinite set of solutions.
In general, vertices occur at points where as many constraints and variable bounds as there are variablesin the problem intersect. Simplex methods usually only consider solutions at vertices, or bases (known asbasic solutions) and proceed or iterate from one vertex to another until an optimal solution has beenfound, or the problem proves to be infeasible or unbounded. The number of iterations required increases
with model size, and typically goes up slightly faster than the increase in the number of constraints.
The primal and dual simplex methods differ in which vertices they consider and how they iterate. The
dual is the default for LP problems, but may be explicitly invoked using the d flag with XPRSlpoptimize(LPOPTIMIZE).

4.1.1 Output
While the simplex methods iterate, the Optimizer produces iteration logs. Console Optimizer writes these
logging messages to the screen. Library users can setup logging management using the various relevant
functions in the Optimizer library e.g., XPRSsetlogfile, XPRSaddcbmessage or XPRSaddcblplog.
The simplex iteration log is produced at regular time intervals, determined by an internal deterministic.
When LPLOG is set to 0, a log is displayed only when the optimization run terminates. If it is set to a
positive value, a summary style log is output; otherwise, a detailed log is output.

4.2 Newton Barrier Method
In contrast to the simplex methods that iterate through boundary points (vertices) of the feasible region,
the Newton barrier method iterates through solutions in the interior of the feasible region and will
typically find a close approximation of an optimal solution. Consequently, the number of barrier iterations
required to complete the method on a problem is determined more so by the required proximity to the
optimal solution than the number of decision variables in the problem. Unlike the simplex method,
therefore, the barrier often completes in a similar number of iterations regardless of the problem size.
The barrier solver can be invoked on a problem by using the ’b’ flag with XPRSlpoptimize(LPOPTIMIZE). This is used by default for QP problems, whose quadratic objective functions in general
result in optimal solutions that lie on a face of the feasible region, rather than at a vertex.

4.2.1 Crossover
Typically the barrier algorithm terminates when it is within a given tolerance of an optimal solution. Since
this solution will not lie exactly on the boundary of the feasible region, the Optimizer can be optionallymade to perform a, so–called, ’crossover’ phase to obtain an optimal solution on the boundary. The
nature of the ’crossover’ phase results in a basic optimal solution, which is at a vertex of the feasible
region. In the crossover phase the simplex method is used to continue the optimization from the solution
found by the barrier algorithm. The CROSSOVER control determines whether the Optimizer performs
crossover. When set to 1 (the default for LP problems), crossover is performed. If CROSSOVER is set to 0,
no crossover will be attempted and the solution provided will be that determined purely by the barrier
method. Note that if a basic optimal solution is required, then the CROSSOVER option must be activatedbefore optimization starts.

Fair Isaac Corporation Proprietary Information

19

Chapter 4: Solution Methods

4.2.2 Output
While the barrier method iterates, the Optimizer produces iteration log messages. Console Optimizer
writes these log messages to the screen. Library users can setup logging management using the various
relevant functions in the Optimizer library, e.g. XPRSsetlogfile, XPRSaddcbmessage or
XPRSaddcbbarlog. Note that the amount of barrier iteration logging is dependent on the value of the
BAROUTPUT control.

4.3 Branch and Bound
The FICO Xpress Optimizer uses the approach of LP based branch and bound with cutting planes forsolving Mixed Integer Programming (MIP) problems. That is, the Optimizer solves the optimization
problem (typically an LP problem) resulting from relaxing the discreteness constraints on the variables
and then uses branch and bound to search the relaxation space for MIP solutions. It combines this withheuristic methods to quickly find good solutions, and cutting planes to strengthen the LP relaxations.
The Optimizer’s MIP solving methods are coordinated internally by sophisticated algorithms so the
Optimizer will work well on a wide range of MIP problems with a wide range of solution performancerequirements without any user intervention in the solving process. Despite this the user should note thatthe formulation of a MIP problem is typically not unique and the solving performance can be highly
dependent on the formulation of the problem. It is recommended, therefore, that the user undertake
careful experimentation with the problem formulation using realistic examples before committing theformulation for use on large production problems. It is also recommended that users have small scale
examples available to use during development.
Because of the inherent difficulty in solving MIP problems and the variety of requirements users have on
the solution performance on these problems it is not uncommon that users would like to improve overthe default performance of the Optimizer. In the following sections we discuss aspects of the branch andbound method for which the user may want to investigate when customizing the Optimizer’s MIP search.

4.3.1 Theory
In this section we present a brief overview of branch and bound theory as a guide for the user on where tolook to begin customizing the Optimizer’s MIP search and also to define the terminology used whendescribing branch and bound methods.
To simplify the text in the following, we limit the discussion to MIP problems with linear constraints and alinear objective function. Note that it is not difficult to generalize the discussion to problems withquadratic constraints and a quadratic objective function.
The branch and bound method has three main concepts: relaxation, branching and fathoming.
The relaxation concept relates to the way discreteness or integrality constraints are dropped or ’relaxed’
in the problem. The initial relaxation problem is a Linear Programming (LP) problem which we solve
resulting in one of the following cases:(a) The LP is infeasible so the MIP problem must also be infeasible;(b) The LP has a feasible solution, but some of the integrality constraints are not satisfied – the MIP
has not yet been solved;(c) The LP has a feasible solution and all the integrality constraints are satisfied so the MIP has also
been solved;(d) The LP is unbounded.
Case (d) is a special case. It can only occur when solving the initial relaxation problem and in thisFair Isaac Corporation Proprietary Information

20

Chapter 4: Solution Methods

situation the MIP problem itself is not well posed (see Chapter 6 for details about what to do in this case).
For the remaining discussion we assume that the LP is not unbounded.
Outcomes (a) and (c) are said to ’fathom’ the particular MIP, since no further work on it is necessary. For
case (b) more work is required, since one of the unsatisfied integrality constraints must be selected andthe concept of separation applied.
To illustrate the branching concept suppose, for example, that the optimal LP value of an integer variable
x is 1.34, a value which violates the integrality constraint. It follows that in any solution to the original
problem either x ≤ 1.0 or x ≥ 2.0. If the two resulting MIP problems are solved (with the integrality
constraints), all integer values of x are considered in the combined solution spaces of the two MIP
problems and no solution to one of the MIP problems is a solution to the other. In this way we havebranched the problem into two disjoint sub–problems.

If both of these sub–problems can be solved and the better of the two is chosen, then the MIP is solved.
By recursively applying this same strategy to solve each of the sub–problems and given that in thelimiting case the integer variables will have their domains divided into fixed integer values then we canguarantee that we solve the MIP problem.
Branch and bound can be viewed as a tree–search algorithm. Each node of the tree is a MIP problem. A
MIP node is relaxed and the LP relaxation is solved. If the LP relaxation is not fathomed, then the node
MIP problem is partitioned into two more sub–problems, or child nodes. Each child MIP will have thesame constraints as the parent node MIP, plus one additional inequality constraint. Each node is therefore
either fathomed or has two children or descendants.
We now introduce the concept of a cutoff, which is an extension of the fathoming concept. To understandthe cutoff concept we first make two observations about the behavior of the node MIP problems. Firstly,
the optimal MIP objective of a node problem can be no better than the optimal objective of the LP
relaxation. Secondly, the optimal objective of a child LP relaxation can be no better than the optimal
objective of its parent LP relaxation. Now assume that we are exploring the tree and we are keeping thevalue of the best MIP objective found so far. Assume also that we keep a ’cutoff value’ equal to the best
MIP objective found so far. To use the cutoff value we reason that if the optimal LP relaxation objective is
no better than the cutoff then any MIP solution of a descendant can be no better than the cutoff and thenode can be fathomed (or cutoff) and need not be considered further in the search.
The concept of a cutoff can be extended to apply even when no integer solution has been found insituations where it is known, or may be assumed, from the outset that the optimal solution must be better
than some value. If the relaxation is worse than this cutoff, then the node may be fathomed. In this way
the user can reduce the number of nodes processed and improve the solution performance. Note that
there is the possibility, however, that all MIP solutions, including the optimal one, may be missed if an
overly optimistic cutoff value is chosen.
The cutoff concept may also be extended in a different way if the user intends only to find a solution
within a certain tolerance of the overall optimal MIP solution. Assume that we have found a MIP solution
to our problem and assume that the cutoff is maintained at a value 100 objective units better than thecurrent best MIP solution. Proceeding in this way we are guaranteed to find a MIP solution within 100
units of the overall MIP optimal since we only cutoff nodes with LP relaxation solutions worse than 100
units better than the best MIP solution that we find.
If the MIP problem contains SOS entities then the nodes of the branch and bound tree are determined bybranching on the sets. Note that each member of the set has a double precision reference row entry andFair Isaac Corporation Proprietary Information

21

Chapter 4: Solution Methods

the sets are ordered by these reference row entries. Branching on the sets is done by choosing a positionin the ordering of the set variables and setting all members of the set to 0 either above or below thechosen point. The optimizer used the reference row entries to decide on the branching position and so it
is important to choose the reference row entries which reflect the cost of setting the set member to 0. In
some cases it maybe better to model the problem with binary variables instead of special ordered sets.
This is especially the case if the sets are small.

4.3.2 Variable Selection and Cutting
The branch and bound technique leaves many choices open to the user. In practice, the success of thetechnique is highly dependent on several key choices.
(a) Deciding which variable to branch on is known as the variable selection problem and is often themost critical choice.
(b) Cutting planes are used to strengthen the LP relaxation of a subproblem, and can often bring asignificant reduction in the number of sub–problems that must be solved
The Optimizer incorporates a default strategy for both choices which has been found to work adequately
on most problems. Several controls are provided to tailor the search strategy to a particular problem.

4.3.3 Variable Selection for Branching
Each global entity has a priority for branching, or one set by the user in the directives file. A low priority
value means that the variable is more likely to be selected for branching. The Optimizer uses a priority
range of 400–500 by default. To guarantee that a particular global entitity is always branched first, theuser should assign a priority value less than 400. Likewise, to guarantee that a global entity is only
branched on when it is the only candidate left, a priority value above 500 should be used.
The Optimizer uses a wide variety of information to select among those entities that remain unsatisifed
and which belong to the lowest valued priority class. A pseudo cost is calculated for each candidate entity,
which is typically an estimate of how much the LP relaxation objective value will change (degradationas a
result of branching on this particular candidate. Estimates are calculated separately for the up and down
branches and combined according to the strategy selected by the VARSELECTION control.
The default strategy is based on calculating pseudo costs using the method of strong branching. Withstrong brancing, the LP relaxations of the two potential subproblems that would result from branching on
a candidate global entity, are solved partially. Dual simplex is applied for a limited number of iterations
and the change in objective value is recorded as a pseudo cost. This can be very expensive to apply toevery candidate for every node of the branch and bound search, which is why the Optimizer by default willreuse pseudo costs collected from one node, on subsequent nodes of the search.
Selecting a global entity for branching is a multi–stage process, which combines estimates that arecheap to compute, with the more expensive strong branching based pseudo costs. The basic selection
process is given by the following outline, together with the controls that affect each step:
1. Pre–filter the set of candidate entities using very cheap estimates.
SBSELECT: determine the filter size.
2. Calculate simple estimates based on local node information and rank the selected candidates.
SBESTIMATE: local ranking function.
3. Calculate strong–branching pseudo costs for candidates lacking such information.
SBBEST: number of variables to strong branch on.
SBITERLIMIT: LP iteration limit for strong branching.

Fair Isaac Corporation Proprietary Information

22

Chapter 4: Solution Methods

4. Select the best candidate using a combination of pseudo costs and the local ranking functions.
The overall amount of effort put into this process can be adjusted using the SBEFFORT control.

4.3.4 Cutting Planes
Cutting planes are valid constraints used for tightening the LP relaxation of a MIP problem, without
affecting the MIP solution space. They can be very effective at reducing the amount of subproblems thatthe branch and bound search has to solve. The Optimizer will automatically create many different
well–known classes of cutting planes, such as mixed integer Gomory cuts, lift–and–project cuts, mixed
integer rounding (MIR) cuts, clique cuts, implied bound cuts, flow–path cuts, zero–half cuts, etc. These
classes of cuts are grouped together into two groups that can be controlled separately. The following
table lists the main controls and the related cut classes that are affected by those control:
COVERCUTS

Mixed integer rounding cuts

TREECOVERCUTS

Lifted cover cuts
Clique cuts
Implied bound cuts
Flow–path cuts
Zero–half cuts

GOMCUTS

Mixed integer Gomory cuts

TREEGOMCUTS

Lift–and–project cuts

The controls COVERCUTS and GOMCUTS sets an upper limit on the number of rounds of cuts to create forthe root problem, for their respective groups. Correspondingly, TREECOVERCUTS and TREEGOMCUTS
sets an upper limit on the number of rounds of cuts for any subproblem in the tree.
An important aspect of cutting is the choice of how many cuts to add to a subproblem. The more cuts areadded, the harder it becomes to solve the LP relaxation of the node problem. The tradeoff is therefore
between the additional effort in solving the LP relaxation versus the strengthening of the subproblem.
The CUTSTRATEGY control sets the general level of how many cuts to add, expressed as a value from 0(no cutting at all) to 3 (high level of cuts).
Another important aspect of cutting is how often cuts should be created and added to a subproblem. The
Optimizer will automatically decide on a frequency that attempts to balance the effort of creating cuts
versus the benefits they provide. It is possible to override this and set a fixed strategy using the CUTFREQ
control. When set to a value k, cutting will be applied to every k’th level of the branch and bound tree. Notethat setting CUTFREQ = 0 will disable cutting on subproblems completely, leaving only cutting on the root
problem. This might be advantageous for some problems and the Optimizer uses an ML-based strategy
to detect such cases automatically. This feature can be (de)activated by the AUTOCUTTING control.

4.3.5 Node Selection
The Optimizer applies a search scheme involving best–bound first search combined with dives.
Subproblems that have not been fathomed or which have not been branched further into new
subproblems are referred to as active nodes of the branch and bound search tree. Such activate nodes
are maintained by the Optimizer in a pool.
The search process involves selecting a subproblem (or node) from this active nodes pool andcommencing a dive. When the Optimizer branches on a global entity and creates the two subproblems, it
has a choice of which of the two subproblems to work on next. This choice is determined by the
BRANCHCHOICE control. The dive is a recursive search, where it selects a child problem, branches on it tocreate two new child problems, and repeats with one of the new child problems, until it ends with a

Fair Isaac Corporation Proprietary Information

23

Chapter 4: Solution Methods

subproblem that should not be branched further. At this point it will go back to the active nodes pool andpick a new subproblem to perform a dive on. This is called a backtrack and the choice of node isdetermined by the BACKTRACK control. The default backtrack strategy will select the active node with thebest bound.

4.3.6 Adjusting the Cutoff Value
The parameter MIPADDCUTOFF determines the cutoff value set by the Optimizer when it has identified a
new MIP solution. The new cutoff value is set as the objective function value of the MIP solution plus thevalue of MIPADDCUTOFF. If MIPADDCUTOFF has not been set by the user, the value used by the
Optimizer will be calculated after the initial LP optimization step as:max (MIPADDCUTOFF, 0.01 · MIPRELCUTOFF · LP_value)

using the initial values for MIPADDCUTOFF and MIPRELCUTOFF, and where LP_value is the optimal
objective value of the initial LP relaxation.

4.3.7 Stopping Criteria
Often when solving a MIP problem it is sufficient to stop with a good solution instead of waiting for apotentially long solve process to find an optimal solution. The Optimizer provides several stopping
criteria related to the solutions found, through the MIPRELSTOP and MIPABSSTOP parameters. If
MIPABSSTOP is set for a minimization problem, the Optimizer will stop when it finds a MIP solution withan objective value equal to or less than MIPABSSTOP. The MIPRELSTOP parameter can be used to stop
the solve process when the found solution is sufficiently close to optimality, as measure relative to thebest available bound. The optimizer will stop due to MIPRELSTOP when the following is satisfied:| MIPOBJVAL – BESTBOUND | ≤ MIPRELSTOP · max( | BESTBOUND |, | MIPOBJVAL | )It is also possible to set limits on the solve process, such as number of nodes (MAXNODE), time limit(MAXTIME) or on the number of solutions found (MAXMIPSOL). If the solve process is interrupted due toany of these limits, the problem will be left in its unfinished state. It is possible to resume the solve froman unfinished state by calling XPRSmipoptimize (MIPOPTIMIZE) again.
To return an unfinished problem to its starting state, where it can be modified again, the user should use
the function XPRSpostsolve (POSTSOLVE). This function can be used to restore a problem from aninterrupted global search even if the problem is not in a presolved state.

4.3.8 Integer Preprocessing
If MIPPRESOLVE has been set to a nonzero value before solving a MIP problem, integer preprocessing
will be performed at each node of the branch and bound tree search (including the root node). This
incorporates reduced cost tightening of bounds and tightening of implied variable bounds after
branching. If a variable is fixed at a node, it remains fixed at all its child nodes, but it is not deleted fromthe matrix (unlike the variables fixed by presolve).
MIPPRESOLVE is a bitmap whose values are acted on as follows:

Fair Isaac Corporation Proprietary Information

24

Chapter 4: Solution Methods

Bit

Value

Action01Reduced cost fixing;

1

2

Integer implication tightening.

2

4

Unused3

8

Tightening of implied continuous variables.

4

16

Fixing of variables based on dual (i.e. optimality) implications.

So a value of 1+2=3 for MIPPRESOLVE causes reduced cost fixing and tightening of implied bounds on
integer variables.

4.4 QCQP and SOCP Methods
Continuous QCQP and SOCP problems are always solved by the Xpress Newton–barrier solver. For QCQP,
SOCP and QP problems, there is no solution purification method applied after the barrier (such as the
crossover for linear problems). This means that solutions tend to contain more active variables thanbasic solutions, and fewer variables will be at or close to one of their bounds.
When solving a linearly constrained quadratic program (QP) from scratch, the Newton barrier method isusually the algorithm of choice. In general, the quadratic simplex methods are better if a solution with alow number of active variables is required, or when a good starting basis is available (e.g., whenreoptimizing).

4.4.1 Convexity Checking
The Optimizer requires that the quadratic coefficient matrix in each constraint or in the objective function
is either positive semi–definite or negative semi–definite, depending on the sense of for constraints or
the direction of optimization for the objective. The only exception is when a quadratic constraint
describes a second order cone. Quadratic constraints and a quadratic objective is therefore automaticallychecked for convexity. Note that this convexity checker will reject any problem where this requirement isviolated by more than a small tolerance.
Each constraint is checked individually for convexity. In certain cases it is possible that the problem itself
is convex, but the representation of it is not. A simple example would be
minimize:x

subject to:x2 –y2 +2xy

≤

1

y=0
The optimizer will deny solving this problem if the automatic convexity check is on, although the problem
is clearly convex. The reason is that convexity of QCQPs is checked before any presolve takes place. To
understand why, consider the following example:
minimize:ysubject to:

y–x2

≤

1

y=2
This problem is clearly feasible, and an optimal solution is (x, y) = (1, 2). However, when presolving the
problem, it will be found infeasible, since assuming that the quadratic part of the first constraint is convex
the constraint cannot be satisfied (remember that if a constraint is convex, then removing the quadratic
part is always a relaxation). Thus since presolve makes use of the assumption that the problem isconvex, convexity must be checked before presolve.

Fair Isaac Corporation Proprietary Information

25

Chapter 4: Solution Methods

Note that for quadratic programming (QP) and mixed integer quadratic programs (MIQP) where thequadratic expressions appear only in the objective, the convexity check takes place after presolve,
making it possible to accept matrices that are not PSD, but define a convex function over the feasible
region (note that this is only a chance).
It is possible to turn the automatic convexity check off. By doing so, one may save time when solving
problems that are known to be convex, or one might even want to experiment trying to solve non–convex
problems. For a non–convex problem, any of the following might happen:
1. the algorithm converges to a local optimum which it declares optimal (and which might or might
not be the actual optimum);2. the algorithm doesn’t converge and stops after reaching the iteration limit;
3. the algorithm cannot make sufficient improvement and stops;
4. the algorithm stops because it cannot solve a subproblem (in this case it will declare the matrix non
semidefinite);
5. presolve declares a feasible problem infeasible;
6. presolve eliminates variables that otherwise play an important role, thus significantly change themodel;
7. different solutions (even feasibility/infeasibility) are generated to the same problem, only by slightly
changing its formulation.
There is no guarantee on which of the cases above will occur, and as mentioned before, thebehavior/outcome might be formulation dependent. One should take extreme care when interpreting thesolution information returned for a non–convex problem.

4.4.2 Quadratically Constrained and Second Order Cone Problems
Quadratically constrained and second order cone problems are solved by the barrier algorithm.
Mixed integer quadratically constrained (MIQCQP) and mixed integer second order problems (MISOCP)
are solved using traditional branch and bound using the barrier to solve the node problems, or by meansof outer approximation, as defined by control MIQCPALG.
It is sometimes beneficial to solve the root node of an MIQCQP or MISOCP by the barrier, even if outerapproximation is used later; controlled by the QCROOTALG control. The number of cut rounds on the root
for outer approximation is defined by QCCUTS.

Fair Isaac Corporation Proprietary Information

26

CHAPTER 5

Advanced Usage
5.1 Problem Names
Problems loaded in the Optimizer have a name. The name is either taken from the file name if the problem
is read into the optimizer or it is specified as a string in a function call when a problem is loaded into the
Optimizer using the library interface. Once loaded the name of the problem can be queried and modified.
For example, the library provides the function XPRSsetprobname for changing the name of a problem.
When reading a problem from a matrix file the user can optionally specify a file extension. The searchorder used for matrix files in the case where the file extension is not specified is described in thereference for the function XPRSreadprob. In this case, the problem name becomes the file name,including the full path, but without the file extension.
Note that matrix files can be read directly from a gzip compressed file. Recognized names of matrix files
stored with gzip compression have an extension that is one of the usual matrix file format extensions
followed by the .gz extension. For example, hpw15.mps.gz.
The problem name is used as a default base name for the various file system interactions that the
Optimizer may make when handling a problem. For example, when commanded to read a basis file for a
problem and the basis file name is not supplied with the read basis command the Optimizer will try to
open a file with the problem name appended with the .bss extension.
It is useful to note that the problem name can include file system path information. For example,
c:/matrices/hpw15. Note the use of forward slashes in the Windows path string. It is recommended
that Windows users use forward slashes as path delimiters in all file name specifications for the
Optimizer since (i) this will work in all situations and (ii) it avoids any problems with the back slash being
interpreted as the escape character.

5.2 Manipulating the Matrix
In general, the basic usage of the FICO Xpress Optimizer described in the previous chapters will be
sufficient for most users’ requirements. Using the Optimizer in this way simply means load the problem,
solve the problem, get the results and finish.
In some cases, however, it is required that the problem is first solved, then modified, and solved again.
We may want to do this, for example, if a problem was found to be infeasible. In this case, to find afeasible subset of constraints we iteratively remove some constraints and re–solve the problem. Anotherexample is when a user wants to ’generate’ columns using the optimal duals of a ’restricted’ LP problem.
In this case we will first need to load a problem and then we will need to add columns to this problem
after it has been solved.
For library users, FICO Xpress provides a suite of functions providing read and modify access to thematrix.

Fair Isaac Corporation Proprietary Information

27

Chapter 5: Advanced Usage

5.2.1 Reading the Matrix
The Optimizer provides a suite of routines for read access to the optimization problem including accessto the objective coefficients, constraint right hand sides, decision variable bounds and the matrix
coefficients.
It is important to note that the information returned by these functions will depend on whether or not the
problem has been run through an optimization algorithm or if the problem is currently being solved using
an optimization algorithm, in which case the user will be calling the access routines from a callback (seesection 5.8 for details about callbacks). Note that the dependency on when the access routine is called ismainly due to the way "presolve" methods are applied to modify the problem. How the presolve methods
affect what the user accesses through the read routines is discussed in section 5.3.
The user can access the names of the problem’s constraints, or ’rows’, as well as the decision variables,or ’columns’, using the XPRSgetnames routine.
The linear coefficients of the problem constraints can be read using XPRSgetrows. Note that for thecases where the user requires access to the linear matrix coefficients in the column–wise sense theOptimizer includes the XPRSgetcols function. The type of the constraint, the right hand side and theright hand side range are accessed using the functions XPRSgetrowtype, XPRSgetrhs and
XPRSgetrhsrange, respectively.
The coefficients of the objective function can be accessed using the XPRSgetobj routine, for the linear
coefficients, and XPRSgetqobj for the quadratic objective function coefficients. The type of a column(or decision variable) and its upper and lower bounds can be accessed using the routines
XPRSgetcoltype, XPRSgetub and XPRSgetlb, respectively.
The quadratic coefficients in constraints can be accessed either in matrix form, using the
XPRSgetqrowqmatrix routine, or as a list of quadratic coefficients with the
XPRSgetqrowqmatrixtriplets.
Note that the reference section in Chapter 7 of this manual provides details on the usage of thesefunctions.

5.2.2 Modifying the Matrix
The Optimizer provides a set of routines for manipulating the problem data. These include a set ofroutines for adding and deleting problem constraints (’rows’) and decision variables (’columns’). A set ofroutines is also provided for changing individual coefficients of the problem and for changing the types ofdecision variables in the problem.
Rows and columns can be added to a problem together with their linear coefficients using
XPRSaddrows and XPRSaddcols, respectively. Rows and columns can be deleted using
XPRSdelrows and XPRSdelcols, respectively.
The Optimizer provides a suite of routines for modifying the data for existing rows and columns. The
linear matrix coefficients can be modified using XPRSchgcoef (or use XPRSchgmcoef if a batch ofcoefficients are to be changed). Row and column types can be changed using the routines
XPRSchgrowtype and XPRSchgcoltype, respectively. Right hand sides and their ranges may bechanged with XPRSchgrhs and XPRSchgrhsrange. The linear objective function coefficients may bechanged with XPRSchgobj while the quadratic objective function coefficients are changed using
XPRSchgqobj (or use XPRSchgmqobj if a batch of coefficients are to be changed). Likewise, quadraticcoefficients in constraints are changed with XPRSchgqrowcoeff.
Examples of the usage of all the above functions and their syntax may be found in the reference sectionof this manual in Chapter 7.
Finally, it is important to note that it is not possible to modify a matrix when it has been ’presolved’ andhas not been subsequently ’postsolved’. The following section 5.3 discusses some important points

Fair Isaac Corporation Proprietary Information

28

Chapter 5: Advanced Usage

concerning reading and modifying a problem that is "presolved".

5.3 Working with Presolve
The Optimizer provides a number of algorithms for simplifying a problem prior to the optimization
process. This elaborate collection of procedures, known as presolve, can often greatly improve theOptimizer’s performance by modifying the problem matrix, making it easier to solve. The presolve
algorithms identify and remove redundant rows and columns, reducing the size of the matrix, for which
reason most users will find it a helpful tool in reducing solution times. However, presolve is included as
an option and can be disabled if not required by setting the PRESOLVE control to 0. Usually this is set to 1
and presolve is called by default.
For some users the presolve routines can result in confusion since a problem viewed in its presolved
form will look very different to the original model. Under standard use of the Optimizer this may cause nodifficulty. On a few occasions, however, if errors occur or if a user tries to access additional properties ofthe matrix for certain types of problem, the presolved values may be returned instead. In this section we
provide a few notes on how such confusion may be best avoided. If you are unsure if the matrix is in apresolved state or not, check the PRESOLVESTATE attribute
It is important to note that when solving a problem with presolve on, the Optimizer will take a copy of thematrix and modify the copy. The original matrix is therefore preserved, but will be inaccessible to the user
while the presolved problem exists. Following optimization, the whole matrix is automatically postsolved
to recover a solution to the original problem and restoring the original matrix. Consequently, either before
or after, but not during, a completed optimization run, the full matrix may be viewed and altered as
described above, being in its original form.
A problem might be left in a presolved state if the solve was interrupted, for example due to the Ctrl–C
key combination, or if a time limit (set by MAXTIME) was reached. In such a case, the matrix can always
be returned to its original state by calling XPRSpostsolve (POSTSOLVE). If the matrix is already in theoriginal state then XPRSpostsolve (POSTSOLVE) will return without doing anything.
While a problem is in a presolved state it is not possible to make any modifications to it, such as adding
rows or columns. The problem must first be returned to its original state by calling XPRSpostsolve
before it can be changed.

5.3.1 (Mixed) Integer Programming Problems
If a model contains global entities, integer presolve methods such as bound tightening and coefficienttightening are applied to tighten the LP relaxation. As a simple example of this might be if the matrix has
a binary variable x and one of the constraints of the matrix is x ≤ 0.2. It follows that x can be fixed at zero
since it can never take the value 1. If presolve uses the global entities to alter the matrix in this way, thenthe LP relaxation is said to have been tightened. For Console users, notice of this is sent to the screen; forlibrary users it may be sent to a callback function, or printed to the log file if one has been set up. In suchcircumstances, the optimal objective function value of the LP relaxation for a presolved matrix may bedifferent from that for the unpresolved matrix.
The strict LP solution to a model with global entities can be obtained by calling the XPRSlpoptimize(LPOPTIMIZE) command. This removes the global constraints from the variables, preventing the LP
relaxation from being tightened and solves the resulting matrix. In the example above, x would not be
fixed at 0, but allowed to range between 0 and 0.2.
When XPRSmipoptimize (GLOBAL) finds an integer solution, it is postsolved and saved in memory. The
solution can be read with the XPRSgetmipsol function. A permanent copy can be saved to a solution
file by calling XPRSwritebinsol (WRITEBINSOL), or XPRSwriteslxsol (WRITESLXSOL) for a
simpler text file. This can be retrieved later by calling XPRSreadbinsol (READBINSOL) or
XPRSreadslxsol (READSLXSOL), respectively.

Fair Isaac Corporation Proprietary Information

29

Chapter 5: Advanced Usage

After calling XPRSmipoptimize (MIPOPTIMIZE), the matrix will be postsolved whenever the MIP search
has completed. If the MIP search hasn’t completed the matrix can be postsolved by calling the
XPRSpostsolve (POSTSOLVE) function.

5.4 Working with LP Folding
In addition to presolve procedures, the Optimizer provides an algorithm called LP folding that can further
simplify LP problems. The LP folding is applicable to LP problems that can be partitioned into equitablepartitions, and it works by aggregating matrix columns of equitable partitions and then reducing the
problem size.
Solutions for the folded problem are also valid for the original problem. While it is straightforward totransfer a solution from the folded problem to the original problem, it is non–trivial to do so for the basis.
When an LP problem is solved to optimality and a basis is needed, the LP unfolding will use the crossoveralgorithm to provide one. When the folded LP problem is unbounded or infeasible, or when the solving
process is stopped due to time or iteration limit, the basis will not be available. Please note that LP folding
tends to provide solutions with a larger support (number of variables that are not at any of their bounds).
LP folding is applied automatically when appropriate. It can be enabled or disabled by setting the
LPFOLDING control.

5.5 Working with Heuristics
The Optimizer contains several primal heuristics that help to find feasible solutions during a global
search. These heuristics fall broadly into one of three classes:
1. Simple rounding heuristics
These take the continuous relaxation solution to a node and, through simple roundings of thesolution values for global entities, try to construct a feasible MIP solution. These are typically run
on every node.
2. Diving heuristics
These start from the continuous relaxation solution to a node and combines rounding and fixing of
global entities with occasional reoptimization of the continuous relaxation to construct a better
quality MIP solution. They are run frequently on both the root node and during the branch andbound tree search.
3. Local search heuristics
The local search heuristics are generally the most expensive heuristics and involve solving one ormore smaller MIPs whose feasible regions describe a neighborhood around a candidate MIP
solution. These heuristics are run at the end of the root solve and typically on every 500–1000
nodes during the tree search.
Some simple heuristics and a few fast diving heuristics, which do not require a starting solution, will be
tried before the initial continuous relaxation of a MIP is solved. On very simple problems, it is possiblethat an optimal MIP solution will be found at this point, which can lead to the initial relaxation being cut
off. These heuristics can be enabled or disabled using the HEURBEFORELP control.
The most important control for steering the overall heuristic behavior of the Optimizer is HEUREMPHASIS
Setting this control to 1 will trigger many additional heuristic calls. This setting typically leads to a quicker
reduction of the optimality gap at the beginning of the search. However, it often comes at the expense of
the running time to proven optimality increasing. Consequently, we recommend this setting for use casesthat aim to find a reasonably good solution quickly but for which proving optimality is out of scope.
Setting HEUREMPHASIS to 2 will enable a very aggressive heuristic behavior. While this can be beneficial
for some problems, it is on average inferior to the more balanced setting of 1. Setting HEUREMPHASIS to

Fair Isaac Corporation Proprietary Information

30

Chapter 5: Advanced Usage

0 will disable all heuristics. This replaces the deprecated HEURSTRATEGY=0 setting.
In addition to running the solver with a heuristic emphasis from the beginning, a secondary application of
HEUREMPHASIS is solution polishing. Therefore, the user would alter the heuristic emphasis only when
the solve comes close to the intended time limit or the progress in the optimality gap stalls. This can, e.g.,
happen from a callback. Note that this is most promising when the solver has already made somesignificant progress in tree search. Especially for problems that spend a majority of the targeted solution
time in the root node, we recommend setting HEUREMPHASIS=1 from the beginning.
There are a few other controls that affect heuristics. The diving heuristics have the following controls:
HEURFREQ

The frequency at which to run a diving heuristic during the branch andbound tree search. If HEURFREQ=k, a diving heuristic will be applied
when at least k nodes of the tree search have been solved since the lastrun. Set this control to zero to disable diving heuristics during the tree
search. With a default setting of -1, the Optimizer will automaticallyselect a frequency that depends on how expensive it is to run and how
many integer variables need to be rounded. Typically, this results in a
diving heuristic being run for every 10–50 nodes.

HEURDIVESTRATEGY

Can be used to select one specific out of 10 predefined diving strategies,
otherwise the Optimizer will automatically select which appears to work
best. Set this control to zero to disable the diving heuristic.

HEURDIVERANDOMIZE

How much randomization to introduce into the diving heuristics.

HEURDIVESPEEDUPThe amount of effort to put into the individual dives. This essentiallydetermines how often the continuous relaxation is reoptimized during adive.

The local search heuristics have the following controls:
HEURSEARCHFREQ

The frequency at which to run the local search heuristics during the branch
and bound tree search. If HEURSEARCHFREQ=k, the local search heuristics
will be run when at least k nodes of the tree search have been solved since
the last run.

HEURSEARCHEFFORT

Determines the complexity of the local search MIP problems solved and, if
HEURSEARCHFREQ=-1, also how often they are applied.

HEURSEARCHROOTSELECT

Selects which local search heuristics are allowed to be run on the root
node. Each bit of this integer control represents an individual heuristic.

HEURSEARCHTREESELECT

Selects which local search heuristics are allowed to be run during thebranch and bound tree search.

The simple rounding heuristics do not have any further controls associated with them.

5.6 Analyzing and Handling Numerical Issues
There are many optimization applications which give rise to numerically challenging models. You might
notice that the Optimizer takes unexpectedly long for simplex reoptimization, that minimal changes in themodels lead to an unexpectedly large change in the optimal solution value or that the optimal solution
shows a certain amount of violation in the postsolved state. The Optimizer provides various tools toanalyze whether a model is numerically challenging and to handle numerical issues when they occur.

Fair Isaac Corporation Proprietary Information

31

Chapter 5: Advanced Usage

5.6.1 Analyzing Models for Numerical Issues
There are two main reasons which can make models numerically challenging: Firstly, using coefficientsthat span many orders of magnitude, e.g., using numbers as large as 100 million mixed with numbers as
small as 1 over 100 million. Those span 16 orders of magnitude. A double–precision floating point
number, however, can only represent 15 precise digits. Thus, round–off errors are inevitable. Secondly, if amodel contains structures that amplify the effect of numeric error propagation, e.g., when the result ofsubtracting two almost identical values is scaled up and then used for further computations.
To both ends, Xpress provides features to analyze models for numerical stability. Addressing the firstissue, Xpress provides the user with information on the coefficient ranges in both the original problem
and the problem that is solved after presolving and scaling has been applied. In the log, the minimum andmaximum absolute values of the matrix coefficients, the right–hand side/bounds and the objective areprinted. The relevant part for the numerical behavior of the solution process are the coefficient ranges inthe solved model. The difference between the exponents of the min and max values tells you how manyorders of magnitude are covered. As a rule of thumb, those should not be more than nine (and not morethan six in an individual row or column of the original matrix). For MIP solves, Xpress will notify the user
after the solution of the root LP when the coefficient ranges and other stability measures indicate that thesolve might become numerically cumbersome. In such a case, it will print a warning "High attention level
predicted from matrix features" to the log.
The second issue, error propagation, is a bit trickier to trace. The most important source to consider forthis is the multiplication of a vector with the constraint matrix, which gets stored in a factorized fashion.
Hence, it makes sense to consider the condition number of the basis inverse matrix. Computing this canbe expensive and is hence not done by default. You can activate it by setting the MIPKAPPAFREQ control
to one. When setting this control, you will get a final statistic report that summarizes the condition
numbers collected during search. Besides the percentage of stable, suspicious, unstable, and ill–posedbasis inverse matrices, the Optimizer will report a quantity called the attention level after the solve. The
attention level takes values between zero and one. It is equal to zero if all basis inverse matrices arestable, and one if all basis inverse matrices are ill–posed. The higher the attention level, the more likely
are numerical errors. As a rule of thumb, matrices with an attention level larger than 0.1 should be
investigated further. The attention level is available as an attribute: ATTENTIONLEVEL.
After having solved the root LP relaxation of a MIP solve, the Optimizer applies a Machine Learning model
to predict the attention level of the current MIP solve. If the prediction is larger than 0.1, it will print a
message to the log: "High attention level predicted from matrix features". The predicted attention level isavailable as an attribute: PREDICTEDATTLEVEL. Finally, if the Optimizer undergoes numerical failuresduring the optimization process, it will report these at the end of the solve. If you see dual, primal or
barrier failures, or single inverts being reported, it might be worthwhile to try some of the methods
described in the following sections.

5.6.2 Scaling
Scaling is a widely used preconditioning technique that aims at reducing the condition number of theconstraint matrix, at reducing error propagation, and at reducing the number of LP iterations required tosolve the problem. In Xpress, both columns and rows are scaled, however, only by powers of 2 to avoid
round–off errors. By default, Xpress applies a machine learning algorithm to choose a scaling variant thatis predicted to give the most stable performance. Although this prediction is correct in most of the cases,
one can try the opposite setting, i.e., setting SCALING to 163 when autoscaling selected Curtis–Reidscaling and setting scaling to 16 when autoscaling selected standard scaling. Furthermore, disabling
special handling of big-M rows and conduction scaling before presolving, represented by bits 6 and 9 of
the SCALING control, is useful for some problems.

Fair Isaac Corporation Proprietary Information

32

Chapter 5: Advanced Usage

5.6.3 Solution Refinement
The Optimizer offers two methods of refining solutions, both are independent and complement eachother. The first is called LP Refinement and aims at providing LP solutions of a higher precision, i.e., withmore significant bits. It consists of two parts. Standard LP Refinement iteratively attempts to increase theaccuracy of the solution until either both FEASTOLTARGET and OPTIMALITYTOLTARGET are satisfied,or accuracy cannot further be increased, or some effort limit is exhausted. It is applied by default both to
LP solutions and to MIP solutions. Iterative refinement has the same goal, but uses more expensive, butalso more promising measures of doing so, e.g., quad precision computing. If the postsolved LP solution
is slightly infeasible, setting bits 5 and 6 of the REFINEOPS control aims at reducing those infeasibilities.
The second refinement scheme is called MIP Refinement and aims at providing MIP solutions which are
truly integral and will not lead to infeasibilities when fixing integer variables in the original space. Notethat both Iterative Refinement and MIP Refinement can lead to a slowdown of the solution process which
is more considerable the more numerically challenging the matrix is.

5.6.4 Other Ways to Handle Numerical Issues
In addition to the methods named above, the Optimizer gives the user the possibility to change thenumerical tolerances, such as FEASTOL and MATRIXTOL, but caution is advised here. Finally, if thenumerical issues mainly come from the behavior of the simplex algorithm, setting DUALSTRATEGY tovalues 7 or 32 might help, or even using only barrier for solving LPs during a MIP solve, achieved bychanging DEFAULTALG to 4.
In any case, it is best practice to reconsider the model. If you have very small and/or very large values inthere — are those really necessary? Or could they be adapted to some significantly more stable value
while still representing the same logic? Can you determine places where large values might cancel eachother out and the residual is used for further computations? Have you tried using indicator instead of
big-M formulations?

5.7 Common Causes of Confusion
It should be noted that most of the library routines described above and in chapter 7, which modify thematrix will not work on a presolved matrix. The only exception is inside a callback for a MIP solve, where
cuts may be added or variable bounds tightened (using XPRSchgbounds). Any of these functions expectreferences to the presolved problem. If one tries to retrieve rows, columns, bounds or the number ofthese, such information will come from the presolved matrix and not the original. A few functions exist
which are specifically designed to work with presolved and scaled matrices, although care should be
exercised in using them. Examples of these include the commands XPRSgetpresolvesol,
XPRSgetpresolvebasis,
XPRSgetscaledinfeas, XPRSloadpresolvebasis and XPRSloadpresolvedirs.

5.8 Using the Callbacks
Console users are constantly provided with information on the standard output device by the Optimizer
as it searches for a solution to the current problem. The same output is also available to library users if alog file has been set up using XPRSsetlogfile. However, whilst Console users can respond to thisinformation as it is produced and allow it to influence their session, the same is not immediately true forlibrary users, since their program must be written and compiled before the session is initiated. For suchusers, a more interactive alternative to the above forms of output is provided by the use of callback
functions.
The library callbacks are a collection of functions which allow user–defined routines to be specified to the
Optimizer. In this way, users may define their own routines which should be called at various stages

Fair Isaac Corporation Proprietary Information

33

Chapter 5: Advanced Usage

during the optimization process, prompting the Optimizer to return to the user’s program before
continuing with the solution algorithm. Perhaps the three most general of the callback functions arethose associated with the search for an LP solution. However, the vast majority of situations in whichsuch routines might be called are associated with the global search, and will be addressed below.

5.8.1 Output Callbacks
Instead of catching the standard output from the Optimizer and saving it to a log file, the callback
XPRSaddcbmessage allows the user to define a routine which should be called every time a text line is
output by the Optimizer. Since this returns the status of each message output, the user’s routine could
test for error or warning messages and take appropriate action accordingly.

5.8.2 LP Callbacks
The functions XPRSaddcblplog and XPRSaddcbbarlog allow the user to respond after each iterationof either the simplex or barrier algorithms, respectively. The controls LPLOG and BAROUTPUT may
additionally be set to reduce the frequency at which these routines should be called.

5.8.3 Global Search Callbacks
When a problem with global entities is to be optimized, a large number of subproblems, called nodes,
must typically be solved as part of the global tree search. At various points in this process user–definedroutines can be called, depending on the callback that is used to specify the routine to the Optimizer.
In a global tree search, the Optimizer starts by selecting an active node amongst all candidates (known
as a full backtrack) and then proceed with solving it, which can lead to new descendent nodes being
created. If there is a descendent node, the optimizer will by default select one of these next to solve andrepeat this iterative descend while new descendent nodes are being created. This dive stops when it
reaches a node that is found to be infeasible or cutoff, at which point the Optimizer will perform a fullbacktrack again and repeat the process with a new active node.
A routine may be called whenever a node is selected by the optimizer during a full backtrack, using
XPRSaddcbchgnode. This will also allow a user to directly select the active node for the optimizer.
Whenever a new node is created, a routine set by XPRSaddcbnewnode will be called, which can be used
to record the identifier of the new node, e.g. for use with XPRSaddcbchgnode.
When the Optimizer solves a new node, it will first call any routine set by XPRSaddcbprenode, which
can be used to e.g. tighten bounds on columns (with XPRSchgbounds) as part of a user node presolve.
Afterwards, the LP relaxation of the node problem is solved to obtain a feasible solution and a best boundfor the node. This might be followed by one or more rounds of cuts. If the node problem is found to be
infeasible or cutoff during this process, a routine set by XPRSaddcbinfnode will be called. Otherwise, aroutine set by XPRSaddcboptnode will be called to let the user know that the optimizer now has an
optimal solution to the LP relaxation of the node problem. In this routine, the user is allowed to add cuts(see section 5.9) and tighten bounds to tighten the node problem, or apply branching objects (seeXPRS_bo_create) to separate on the current node problem. If the user modifies the problem inside this
optnode callback routine, the optimizer will automatically resolve the node LP and, if the LP is still
feasible, call the optnode routine again.
If the LP relaxation solution to the node problem also satisfies all global entities and the user has not
added any branching objects, i.e., if it is a MIP solution, the Optimizer will call a routine set by
XPRSaddcbpreintsol before saving the new solution, and call a routine set by XPRSaddcbintsol
after saving the solution. These two routines will also be called whenever a new MIP solution is foundusing one of the Optimizer heuristics.
Otherwise, if the node LP solution does not satisfy the global entities (or any user branching objects), theOptimizer will proceed with branching. After the optimizer has selected the candidate entity for branching,

Fair Isaac Corporation Proprietary Information

34

Chapter 5: Advanced Usagea routine set by XPRSaddcbchgbranch will be called, which also allows a user to change the selectedcandidate. If, during the candidate evaluation the optimizer discovers that e.g. bounds can be tightened,
it will tighten the node problem and go back to resolving the node LP, followed by the callback routines
explained above.
When the Optimizer finds a better MIP solution, it is possible that some of the nodes in the active nodes
pool are cut off due to having an LP solution bound that is worse than the new cutoff value. For suchnodes, a routine set by XPRSaddcbnodecutoff will be called and the node will be dropped from theactive nodes pool.
The final global callback, XPRSaddcbgloballog, is more similar to the LP search callbacks, allowing auser’s routine to be called whenever a line of the global log is printed. The frequency with which thisoccurs is set by the control MIPLOG.

5.9 Working with the Cut Manager
5.9.1 Cuts and the Cut Pool
Solving the LP relaxations during a global search is often made more efficient by supplying additionalrows (constraints) to the matrix which reduce the size of the feasible region, whilst ensuring that it stillcontains an optimal integer solution. Such additional rows are called cutting planes, or cuts.
By default, cuts are automatically added to the matrix by the Optimizer during a global search to speed up
the solution process. However, for advanced users, the Optimizer library provides greater freedom,allowing the possibility of choosing which cuts are to be added at particular nodes, or removing cuts
entirely. The cutting planes themselves are held in a cut pool, which may be manipulated using libraryfunctions.
Cuts may be added directly to the matrix at a particular node, or may be stored in the cut pool first before
subsequently being loaded into the matrix. It often makes little difference which of these two approaches
is adopted, although as a general rule if cuts are cheap to generate, it may be preferable to add the cuts
directly to the matrix and delete any redundant cuts after each sub–problem (node) has been optimized.
Any cuts added to the matrix at a node and not deleted at that node will automatically be added to the cut
pool. If you wish to save all the cuts that are generated, it is better to add the cuts to the cut pool first.
Cuts can then be loaded into the matrix from the cut pool. This approach has the advantage that the cutpool routines can be used to identify duplicate cuts and save only the stronger cuts.
To help track the cuts that have been added to the matrix at different nodes, the cuts can be classified
according to a user–defined cut type. The cut type can either be a number such as the node number or it
can be a bit map. In the latter case each bit of the cut type may be used to indicate a property of the cut.
For example, cuts could be classified as local cuts applicable at the current node and its descendants, oras global cuts applicable at all nodes. If the first bit of the cut type is set this could indicate a local cut
and if the second bit is set this could indicate a global cut. Other bits of the cut type could then be used tosignify other properties of the cuts. The advantage of using bit maps is that all cuts with a particularproperty can easily be selected, for example all local cuts.

5.9.2 Cut Management Routines
Cuts may be added directly into the matrix at the current node using XPRSaddcuts. Any cuts added tothe matrix at a node will be automatically added to the cut pool and hence restored at descendant nodes
unless specifically deleted at that node, using XPRSdelcuts. Cuts may be deleted from a parent node
which have been automatically restored, as well as those added to the current node using XPRSaddcuts,or loaded from the cut pool using XPRSloadcuts.
It is recommended to delete only those cuts with basic slacks. Otherwise, the basis will no longer be valid
and it may take many iterations to recover an optimal basis. If the second argument to XPRSdelcuts is

Fair Isaac Corporation Proprietary Information

35

Chapter 5: Advanced Usage

set to 1, this will ensure that cuts with non–basic slacks will not be deleted, even if the other controls
specify that they should be. It is highly recommended that this is always set to 1.
Cuts may be saved directly to the cut pool using the function XPRSstorecuts. Since cuts added to thecut pool are not automatically added to the matrix at the current node, any such cut must be explicitly
loaded into the matrix using XPRSloadcuts before it can become active. If the third argument of
XPRSstorecuts is set to 1, the cut pool will be checked for duplicate cuts with a cut type identical tothe cuts being added. If a duplicate cut is found, the new cut will only be added if its right hand side value
makes the cut stronger. If the cut in the cut pool is weaker than the added cut, it will be removed unless it
has already been applied to active nodes of the tree. If, instead, this argument is set to 2, the same test is
carried out on all cuts, ignoring the cut type. The routine XPRSdelcpcuts allows the user to remove cuts
from the cut pool, unless they have already been applied to active nodes in the branch and bound tree.
A list of cuts in the cut pool may be obtained using the command XPRSgetcpcuts, whilst
XPRSgetcpcutlist returns a list of their indices. A list of those cuts which are active at the current
node is returned using XPRSgetcutlist.

5.9.3 User Cut Manager Routines
Users may also write their own cut manager routines to be called during the branch and bound search.
Cuts can be added or removed on any node of the branch and bound search using a callback function set
by the routine XPRSaddcboptnode (see section 5.8.3).
Further details of these functions may be found in chapter 7 within the functional reference which follows.

5.10 Solving Problems Using Multiple Threads
It is possible to use multiple processors when solving any type of problem with the Optimizer. On the
more common processor types, such as those from Intel or AMD, the Optimizer will detect how many
logical processors are available in the system and attempt to solve the problem in parallel using as many
threads as possible. The number detected can be read through the CORESDETECTED integer attribute. It
is also possible to adjust the number of threads to use by setting the integer parameter THREADS.
By default a problem will be solved deterministically, in the sense that the same solution path will befollowed each time the problem is solved when given the same number of threads. For an LP this meansthat the number of iterations and the optimal, feasible solution returned will always be the same.
When solving a MIP deterministically, each node of the branch–and–bound tree will always be solved thesame. Each node of the branch–and–bound tree can be identified by a unique number, available throughthe attribute CURRENTNODE. The tree will always have the same parent/child relationship in terms ofthese identifiers. A deterministic MIP solve will always find integer solutions on the same nodes and theattributes and solutions on a node will always be returned the same from one run to another. Since nodes
will be solved in parallel the order in which nodes are solved can vary. There is an overhead insynchronizing the threads to make the parallel runs deterministic and it can be faster to run in
non–deterministic mode. This can be done by setting the DETERMINISTIC control to 0.
For an LP problem (or the initial continuous relaxation of a MIP), there are several choices of parallelism.
Both the barrier algorithm and the dual simplex algorithm support multiple threads. The number of
threads to use can be set with BARTHREADS or DUALTHREADS, respectively. It is also possible to runsome or all of primal simplex, dual simplex and the Barrier algorithm side–by–side in separate threads,
known as a concurrent LP solve. This can be useful when none of the methods is the obvious choice. In
this mode, the Optimizer will stop with the first algorithm to solve the problem. The number of threads forthe concurrent LP solve can be set using CONCURRENTTHREADS. The algorithms to use for the
concurrent solve can be specified by concatenating the required "d", "p", "n" and "b" flags when calling
XPRSlpoptimize (LPOPTIMIZE) or XPRSmipoptimize (MIPOPTIMIZE); please refer to section

Fair Isaac Corporation Proprietary Information

36

Chapter 5: Advanced Usage

5.10.1 for more details.
When solving a MIP problem, the Optimizer will try to run the branch and bound tree search in parallel.
Use the MIPTHREADS control to set the number of threads specifically for the tree search.
The operation of the optimizer for MIPs is fairly similar in serial and parallel mode. The MIP callbacks canstill be used in parallel and callbacks are called when each MIP worker problem is created and destroyed.
The mipthread callback (declared with XPRSaddcbmipthread) is called whenever a MIP worker
problem is created and the callback declared with XPRSaddcbdestroymt is called whenever the worker
problem is destroyed. Each worker problem has a unique ID which can be obtained from the
MIPTHREADID integer attribute. When an executing thread solves a branch–and–bound node, it will also
do so on a worker problem assigned to it. Note that a given worker problem can be assigned to different
threads during its lifetime and the threads might differ from one run to another.
When the MIP callbacks are called they are MUTEX protected to allow non threadsafe user callbacks. If asignificant amount of time is spent in the callbacks then it is worth turning off the automatic MUTEX
protection by setting the MUTEXCALLBACKS control to 0. It this is done then the user must ensure that
their callbacks are threadsafe.
On some problems it is also possible to obtain a speedup by using multiple threads for the MIP solve
process between the initial LP relaxation solve and the branch and bound search. The default behavior
here is for the Optimizer to use a single thread to create its rounds of cuts and to run its heuristic
methods to obtain MIP solutions. Extra threads can be started, dedicated to running the heuristics only,
by setting the HEURTHREADS control. By setting HEURTHREADS to a non–zero value, the heuristics will
be run in separate threads, in parallel with cutting.
When a MIP solve is terminated early, due to e.g. a time or node limit, it is possible to select between two
different termination behaviors. This has implications for the determinism of callbacks called neartermination and how quickly the Optimizer stops. In the default behavior, when termination is detected, allwork is immediately stopped and any partial node solves are discarded. It is therefore possible that somecallbacks will have been called for nodes that are discarded at termination. Note that this termination
method does not affect the final state the problem is left in after termination and that any integer solution
for which the preintsol and intsol callbacks are called will never be dropped. By setting the control
MIPTERMINATIONMETHOD to 1, the termination behavior will be changed such that partial work is neverdiscarded. Instead, all worker threads will be allowed to complete their current work before the solve
stops. This termination behavior might cause a longer delay between termination is detected and the
Optimizer stops, but it will ensure that work is never dropped for any callbacks that have already beencalled.

5.10.1 The concurrent solver
The concurrent solve is activated either by passing multiple algorithm flags to XPRSlpoptimize (e.g.
"pb" for running primal and the barrier) or by setting CONCURRENTTHREADS to a positive number. The
order in which threads are allocated to the algorithms is not affected by the order of the flags provided.
Instead of passing flags, you can alternatively set the LPFLAGS control.
If algorithm flags are specified or the LPFLAGS control is set, then concurrent will run the specified
algorithms, provided that the setting of CONCURRENTTHREADS allows for a sufficient number of threads.
When no flags are specified, the automatic order of selecting algorithms starts with dual, followed bybarrier. Primal simplex will be added as a third solver only in a minority of cases, mainly when the
problem has much more columns than rows. The network solver is only used if specified by flags.
CONCURRENTTHREADS represents the total target number of threads that can be used by concurrent.
The optimizer will then first start dual then barrier (if CONCURRENTTHREADS >1), in some cases, seeabove, followed by primal (if CONCURRENTTHREADS >2). Any remaining threads will be allocated toparallel barrier.
If manual algorithm selection has been made using algorithm flags, then CONCURRENTTHREADS will limit

Fair Isaac Corporation Proprietary Information

37

Chapter 5: Advanced Usage

the number of algorithms started (if smaller than the number of algorithms provided), in which case thenumber of algorithms started will be the first CONCURRENTTHREADS in the dual → barrier → primal →network order.
Once an algorithm is started, the direct thread controls BARTHREADS and DUALTHREADS are respected.
Note that due to the latter controls the total number of theads may exceed CONCURRENTTHREADS.
In case a single algorithm is started and relevant controls are on automatic, the value of the THREADS
control is used.
If multiple algorithms have been started and CONCURRENTTHREADS is on automatic, then THREADS will
be used as the overall number of threads used in concurrent (unless overwritten by the relevant algorithm
specific control on a per–algorithm basis).

5.11 Solving Large Models (the 64 bit Functions)
The size of the models that can be loaded into the optimizer using the standard optimizer functions islimited by the largest number that can be held in a 32–bit integer. This means that it is not possible toload any problem with more than 2147483648 matrix elements with the standard optimizer functions. On
64–bit machines, it is possible to use the optimizer 64–bit functions to load problems with a larger
number of elements (these functions have 64 appended to the standard optimizer function names). For
example, it is possible to load a problem with a large number of elements with the XPRSloadlp64
function. The only difference between XPRSloadlp64 and XPRSloadlp is that the mstart array
containing the starting points of the elements in each column that is passed to XPRSloadlp64 is apointer to an array of 64–bit integers. Typically, the declaration and allocation of space for the 64–bit
mstart array would be as follows:
XPRSint64 ⁎mstart = malloc( ncol ⁎ sizeof( ⁎mstart) );The starting points of the elements in mstart can then exceed the largest 32–bit integer.
Wherever there is a need to pass a large array to an optimizer subroutine there is a corresponding 64–bit
function. Once a large model has been loaded into the optimizer then all the standard optimizer functions(such as XPRSlpoptimize) can be used.
Note that although the 64–bit functions allow very large models to be loaded, there is no guarantee thatsuch large problems can be solved in a reasonable time. Also if the machine doesn’t have sufficient
memory, the matrix will be constantly swapped in and out of memory which can slow the solution
process considerably.

5.12 Using the Tuner
For a given optimization problem, setting suitable control parameters frequently results in improved
performance such as solution time reduction. The Xpress Optimizer built–in tuner can help a user to
identify such set of control settings that allows the Xpress Optimizer or Xpress SLP to solve problems
faster than by using defaults. For instances that should be tuned for heuristic performance, we
recommend trying HEUREMPHASIS=1 first. This setting addresses instances that will likely not solve toproven optimality within a given time limit. It aims at reducing the primal-dual gap in an early stage of thephase, primarily by running more aggressive heuristics.

5.12.1 Basic Usage
With a loaded problem, the tuner can be started by simply calling TUNE from the console, or XPRStunefrom a user application. The tuner will then search for better control settings from a list of controls(called the tuner method). To achieve this, the tuner will solve the problem with its default baseline
control settings and then solve the problem multiple times with each individual control and certain

Fair Isaac Corporation Proprietary Information

38

Chapter 5: Advanced Usagecombinations of these controls.
As the tuner works by solving a problem mutiple times, it is important and recommended to set time
limits. Setting MAXTIME will limit the effort spent on each individual solve and setting TUNERMAXTIME
will limit the overall effort of the tuner.
The tuner works with LP and MIP problems. It automatically determines the problem type by examining
the characteristics of the current problem. It is possible to tune a MIP problem as an LP or vice versa by
passing the flag l or g to XPRStune or TUNE.
The tuner can also work with SLP and MISLP problems when Xpress Nonlinear is available. Note that for
SLP or MISLP problems, the time limit is set with XSLP_MAXTIME.

5.12.2 The Tuner Method
A tuner method consists of a list of controls for the tuner to try with. It is possible to run the tuner withdifferent pre–defined lists of controls, so–called factory tuner methods, or with a user–defined list ofcontrols. When using the tuner, it will automatically choose a default factory tuner method according to
the problem type. A non–default factory tuner method can be selected by setting the TUNERMETHOD
control. There are several choices available for factory tuner methods, among them:■ A simple MIP method, which only features a few controls and can be used in situations wheretuning with the default method would take too long, e.g., because the instance to be tuned takes along time for each individual solve■ A comprehensive MIP method, which features a larger list of controls (and control settings) and canbe used when individual instance solves are relatively fast or the default method could not reveal asatisfying improvement■ A root–focus method, which only considers controls that affect the root node processing of the

MIP solve. It can either be used when root and tree behavior should be tuned independently, in a
two stage process, or when it is evident that improvements have to come from root node
processing. When tuning with a root–focus, it might make sense to choose minimizing the primaldual integral as a tuner target.

■ A tree–focus method, which only considers controls that affect the tree search behavior of the MIP

solve. It can either be used when root and tree behavior should be tuned independently, in a twostage process, or when it is evident that improvements have to come from the tree search, e.g.,
because the dual bound needs better branching.

■ A method for tuning primal heuristics, which should be used when finding a better MIP solutions is

the only focus and improving the best bound can be neglected. In this case, it might make sense tochoose improvement of the primal bound also as a tuner target.

Please also refer to the documentation of the TUNERMETHOD control.
A tuner method can be written out using XPRStunerwritemethod. This function will create a file in
XTM format, that is effectively a list of Xpress Optimizer controls, each with a set of possible settings to
try in tuning. When writing out one of the factory methods, it is recommended to first select the tuner
method by setting TUNERMETHOD, or to load a targeting problem, so that the tuner can write out suitable
tuner methods for the respective problem types.
Users can provide their own method to the tuner by setting up an XTM file (or editing one that has been
written out). This can be read into the tuner with XPRStunerreadmethod.
An alternate way to load a user–defined tuner method is to set the TUNERMETHODFILE control to the file
name. This will only work when no tuner method has been loaded by explicitly calling
XPRStunerreadmethod. If a user–defined method is successfully loaded, the tuner will use it and notload any factory tuner method.

Fair Isaac Corporation Proprietary Information

39

Chapter 5: Advanced Usage

Please refer to Appendix A.8 for the format of tuner method file.

5.12.3 The Tuner Output
While the tuner examines various control settings, it prints a progress report to the console. At the sametime, it writes out the result and individual logs to the file system.
On the console, the tuner will print a one–line summary for each finished run. When a new better control
setting is identified, it will be highlighted with an asterisk (*) at the begining of its log line, and followed bydetails of the control setting and its log file name. The console progress logging can be switched off by
disabling the OUTPUTLOG control. Please refer to Appendix A.12 for a more detailed description of thetuner logging.
In the background, the tuner will output the result and individual logs to the file system. By default, all the
output files will be stored in the directory tuneroutput/probname/. The root folder path can bechanged by setting the TUNEROUTPUTPATH control. This is the central folder in which all subfolders forthe results and logs of different problems will be stored. The subfolders themselves are automatically
named using the current problem name. They can be manually given a different name by setting the
TUNERSESSIONNAME control. The subfolder contains one result file in XML format, and many log files,
one for each evaluated control setting. The XML result file consists of the control settings, solution
results and pointers to the log files of all finished tuner runs.
The file output can be turned off completely by disabling the TUNEROUTPUT control.

5.12.4 The Tuner Target
A tuner target defines how to compare two finished runs with different control settings.
A common usage of the tuner is to pursue a solution time reduction, where two runs will be compared bytheir solution time, the faster one is considered the better. However, when both of the runs time out, it will
be more meaningful to compare other attributes of the two runs, for example the final gap or the best
integer solution for MIP problems.
The tuner will choose a default tuner target according to problem types. For instance, comparing the timefirstly and then the gap is the default tuner target for MIP problems. A user can select a different target bysetting the TUNERTARGET control. Please refer to the documentation of TUNERTARGET for a list of
supported tuner targets.

5.12.5 Restarting the Tuner
When tuning the same problem again, the tuner will attempt to pick up results from previous tuner runs sothat it can avoid testing with the same control settings again. For this, it checks whether an XML result
file is available in the directory tuneroutput/probname/, see Section 5.12.3. Reusing of the history
results even works when a user changes the baseline settings or uses a different tuner method. In thiscase, the tuner will only pick up history results which match the new control combinations. By default,
when a new control setting is evaluated, the result will be appended to the existing result file from theprevious tuner session.
This feature of reusing and appending to previous results can be switched off by setting the
TUNERHISTORY control. This control has the default value 2, which allows both, reusing and appending.
Setting it to 1 will switch off reusing of the results, while still allowing to append new result to the XML
result file. Setting it to 0 will switch off appending as well; consequently, the old result file will beoverwritten. Note that all log files from previous tuner session will always be kept even if they run withidentical settings. This is realized by having a time stamp and a unique number in the file name. Log files
can only be removed manually.

Fair Isaac Corporation Proprietary Information

40

Chapter 5: Advanced Usage

5.12.6 Tuner with Multiple Threads
The tuner can work in parallel, i.e., it can run several evaluations of different control settings
simultaneously. When setting TUNERTHREADS larger than 1, the tuner will start in parallel mode with thegiven number of threads. Setting the tuner threads won’t affect the number of threads used by eachindividual run. However, it is natural that, when solving different control settings in parallel, each of theruns may slow down.
When using the parallel tuner, it is worth considering to set the THREADS control as well; ideally such thatthe product of THREADS and TUNERTHREADS is at most the number of system threads.

5.12.7 Tuner with Problem Permutations
For a certain problem, there may exist several "lucky" controls, that show a better performance bycoincidence and not due to structural reasons. Such lucky controls will typically not work with otherproblems of the same type, or when a user modifies the problem slightly or updates Xpress. They can bethought of as false positives of tuning.
To address this issue, the tuner can exploit a phenomenon known as performance variability and solve
the problem with multiple random permutations. When setting TUNERPERMUTE to a positive number, foreach control setting, the tuner will solve the original problem and the corresponding number of permuted
problems and finally aggregate their results as one. Generally, tuner results with permutations are
expected to be more stable.

5.12.8 Tuning a Set of Problems
The tuner can tune a set of problems to search for an overall best control setting for all the problems inthe set. Tuning a problem set can be started from the optimizer console with the command
tune probset problem.set,

where the problem.set is a plain text file which contains a list of problem files in MPS or LP format.
The tuner starts by checking all the problems defined in the problem set file. It will read in each problem
to find out its type (one of LP, MIP, SLP and MISLP) and optimization direction. When there are mixed
problem types, the tuner will quit with a warning message. The tuner can work with mixed optimization
directions and it will treat the whole problem set as a minimization problem. For a given problem set, it ispossible to force the tuner to tune the problem set as LP or MIP problems with the command
tune lpset problem.set or tune mipset problem.set

respectively.
For a problem set, the tuner works by solving each individual problem in the set for each specificcombination of control settings separately. When all the problems in the set are solved for a specificcontrol setting, the tuner combines the individual problem results into a consolidated one and reports iton the console. During the solve, for each problem in the set, the tuner will output its result and log files toa path defined by TUNEROUTPUTPATH/PROBLEMNAME. For the main problem set, the tuner will write theconsolidated results to the main output path, together with a concatenated copy of all the individual
problem logs.
When tuning a problem set again, the tuner can pick up the result of existing runs for the main problem
set and for each separate problem in the set as well. If the full problem set can be recovered from theexisting tuning records, the tuner will omit solving them as usual. Otherwise, the tuner will go through all
the problems in the set. For each problem in the set, the tuner will also check whether it is possible to pickup an existing result with the specific control setting and omit solving for existing ones when possible.

Fair Isaac Corporation Proprietary Information

41

Chapter 5: Advanced Usage

5.12.9 Advanced Topics
Besides explicitly calling TUNE or XPRStune, the tuner can also be started by enabling the TUNERMODE
control. When enabling this control (setting to 1), all the optimization such as XPRSmipoptimize or
XPRSlpoptimize will be carried out as a tuned optimization. The Optimizer will first use the tuner tofind the best setting and then apply the best setting to solve the problem. On the other hand, a user candisable this control (setting to 0) to always disable the tuner, such that a call to XPRStune will have noeffect. This TUNERMODE has a default value of -1, which won’t affect the behaviour of any of the above
mentioned functions.
When using the tuner from a user application with callbacks, the callbacks will also be passed on to eachindividual runs. A user needs to keep in mind that these callbacks may be called mutiple times from thetuner, as the tuner will solve the problem mutiples times. Moreover, when using the parallel tuner, it is theuser’s responsibility to ensure that callbacks are thread–safe.
Though the tuner is built–in with the Xpress Optimizer, it can tune nonlinear problems when Xpress
Nonlinear is available. Currently, parallel tuning and permutations will be disabled in this case.

5.13 Remote Solving with Xpress Insight Compute Interface
The Xpress Optimizer libraries can be configured to outsource optimization computation to a remote
Insight server that supports the Compute Interface. Software applications which depend on the Optimizer
libraries for optimization computation therefore inherit the ability to transparently send jobs to Insight.
This includes the Xpress applications (Optimizer Console, Mosel, Workbench).
When a solve is started, the Optimizer library directs any operations that can be solved remotely to theremote server. Some features such as callbacks, multi-start, and the solution enumerator haverestrictions applied which are documented here.
To integrate Xpress with an Insight Compute Server you must provide some configuration. Please see
Chapter 3 of the Xpress Insight Compute Interface guide here:(https://www.fico.com/fico-xpress-optimization/docs/latest/insight5/compute/)
The single solve operations XPRSlpoptimize, XPRSmipoptimize, XSLPnlpoptimize, XSLPminim,
XSLPmaxim, XPRSiis are supported. Calls to XPRSrepairinfeas and XPRStune which generate multiple
problem solves are also supported and each solve will be outsourced to the remote Insight server. The
number of parallel solves in the tuner is driven by the TUNERTHREADS control.
The Xpress Insight execution service and the local client application must be using the same major
version of Xpress. Remote solves by Insight are supported by Xpress v8.10 and higher. Note: If you get asolve path difference, update the version of Xpress to match the version on the server with that on theclient machine and check hardware controls, in particular threading controls. Solves will use the default
execution service unless you specify one using the COMPUTEEXECSERVICE control or the configuration
file as described in Appendix A.13.3.
Compute solves do not support the continuation of solves once they are interrupted, nor the multistart
nonlinear algorithm.
A remote solve can be terminated by calling XPRSinterrupt. When called from the supported callbacks with the exception of the message callback - this will stop the optimizer the same way as for a local solve.
Otherwise, calling XPRSinterrupt outside of the supported callbacks will terminate the solve at theearliest opportunity, and no results will be generated.
The remote solve is resilient to a temporary loss of connection between client and server. Xpress will try
to reconnect for a period of time and a message will appear in the run log if this is successful, or thesolve will terminate with an error if it is not. If the connection between client and server is established

Fair Isaac Corporation Proprietary Information

42

Chapter 5: Advanced Usage

when the connection between server and the executing worker is lost then the solve will be restarted tomaintain determinism, and a computerestart callback will be fired to notify the calling application. Any
work done by the disconnected remote worker, including any integer solution callbacks already fired, will
be repeated.
Support for the following features are disabled when solving remotely and calling the related API
methods will cause a runtime error:■

multiple solution pools,■

solution enumeration,■

callbacks not listed as supported above.

5.13.1 Authentication
Please refer to the Insight Compute Interface guide Chapter 2 and 3 for details of connecting Xpress to aremote Insight server. (https://www.fico.com/fico-xpress-optimization/docs/latest/insight5/compute/)

5.13.2 Callbacks
Callbacks are supported. When submitting a job to a remote machine, these callbacks are restricted tothe message, barlog, globallog, lplog and cutlog, gapnotify, and intsol callbacks. Attempting to set anyother callbacks will cause a runtime error. Controls can be changed in the usual way in all the supported
callbacks with the exception of the message callback. Note: when solving remotely, the value of control
XSLP_AUTOSAVE is always ignored.
Within the supported callbacks, calls can be made to functions that retrieve attributes and setting control
values. Within the intsol callback, calls to XPRSgetmipsol and XPRSgetmipsolvalue are permitted. Calling
any other API function will cause a runtime error, including any XSLP and BCL API calls. Note: Whilecalling XPRSgetlpsol is also permitted in the intsol callback, it will return the same solution as
XPRSgetmipsol, both being the solution associated to the intsol callback. This is different to non–remotesolves where getmipsol would return the overall best solution instead. It is therefore safe to keep using
getlpsol in applications utilizing compute solves.
Any job that features callbacks which return hardware related attributes will use values from the remote
server. For example, XPRS_CORESDETECTED will reflect the hardware on which the problem is being
solved, not the hardware of the local client.

5.13.3 Licensing
When an Xpress application or an application embedding the Optimizer library is started with remotesolving configured, the local license check is omitted and no local license is required to execute theapplication.
When a solve is started, the Optimizer instance will direct any operations that can be solved remotely tothe remote server. This will also be the case if additional Optimizer instances are initiated as separate
threads of the same process.

5.13.4 Advanced Configuration
There are some advanced settings that can be set using the Remote Solving Configuration file; this is
described in section A.13.

Fair Isaac Corporation Proprietary Information

43

CHAPTER 6

Infeasibility, Unboundedness and Instability
All users will, generally, encounter occasions in which an instance of the model they are developing issolved and found to be infeasible or unbounded. An infeasible problem is a problem that has no solution
while an unbounded problem is one where the constraints do not restrict the objective function and theobjective goes to infinity. Both situations often arise due to errors or shortcomings in the formulation orin the data defining the problem. When such a result is found it is typically not clear what it is about theformulation or the data that has caused the problem.
Problem instability arises when the coefficient values of the problem are such that the optimization
algorithms find it difficult to converge to a solution. This is typically because of large ratios between thelargest and smallest coefficients in the rows or columns and the handling of the range of numericalvalues in the algorithm is causing floating point accuracy issues. Problem instability generally manifests
in either long run times or spurious infeasibilities.
It is often difficult to deal with these issues since it is often difficult to diagnose the cause of the
problems. In this chapter we discuss the various approaches and tools provided by the Optimizer forhandling these issues.

6.1 Infeasibility
A problem is said to be infeasible if no solution exists which satisfies all the constraints. The FICO Xpress
Optimizer provides functionality for diagnosing the cause of infeasibility in the user’s problem.
Before we discuss the infeasibility diagnostics of the Optimizer we will define some types of infeasibility
in terms of the type of problem it relates to and how the infeasibility is detected by the Optimizer.
We will consider two basic types of infeasibility. The first we will call continuous infeasibility and thesecond discrete or integer infeasibility. Continuous infeasibility is where a non–MIP problem is infeasible.
In this case the feasible region defined by the intersecting constraints is empty. Discrete or integer
infeasibility is where a MIP problem has a feasible relaxation (a relaxation of a MIP is the problem we getwhen we drop the discreteness requirement on the variables) but the feasible region of the relaxation
contains no solution that satisfies the discreteness requirement.
Either type of infeasibility may be detected at the presolve phase of an optimization run. Presolve is theanalysis and processing of the problem before the problem is run through the optimization algorithm. If
continuous infeasibility is not detected in presolve then the optimization algorithm will detect theinfeasibility. If integer infeasibility is not detected in presolve, a branch and bound search will benecessary to detect the infeasibility. These scenarios are discussed in the following sections.

6.1.1 Diagnosis in Presolve
The presolve processing, if activated (see section 5.3), provides a variety of checks for infeasibility. Whenpresolve detects infeasibility, it is possible to "trace" back the implications that determined aninconsistency and identify a particular cause. This diagnosis is carried out whenever the control

Fair Isaac Corporation Proprietary Information

44

Chapter 6: Infeasibility, Unboundedness and Instability

parameter TRACE is set to 1 before the optimization routine XPRSlpoptimize (LPOPTIMIZE) is called.
In such a situation, the cause of the infeasibility is then reported as part of the output from theoptimization routine.

6.1.2 Diagnosis using Primal Simplex
The trace presolve functionality is typically useful when the infeasibility is simple, such that the sequenceof bound implications that explains the infeasibility is short. If, however, this sequence is long or there are
a number of sequences on different sets of variables, it might be useful to try forcing presolve to continue
processing and then solve the problem using the primal simplex to get the, so called, ’phase 1’ solution.
To force presolve to continue even when an infeasibility is discovered the user can set the control
PRESOLVE to --1. The ’phase 1’ solution is useful because the sum of infeasibilities is minimized in thesolution and the resulting set of violated constraints and violated variable bounds provides a clear pictureof what aspect of the model is causing the infeasibility.

6.1.3 Irreducible Infeasible Sets
A general technique to analyze infeasibility is to find a small subset of the matrix that is itself infeasible.
The Optimizer does this by finding irreducible infeasible sets (IISs). An IIS is a minimal set of constraints
and variable bounds which is infeasible, but becomes feasible if any constraint or bound in it is removed.
A model may have several infeasibilities. Repairing a single IIS may not make the model feasible, forwhich reason the Optimizer can attempt to find an IIS for each of the infeasibilities in a model. The IISs
found by the optimizer are independent in the sense that each constraint and variable bound may only bepresent in at most one IIS. In some problems there are overlapping IISs. The number of all IISs present ina problem may be exponential, and no attempt is made to enumerate all. If the infeasibility can be
represented by several different IISs the Optimizer will attempt to find the IIS with the smallest number of
constraints in order to make the infeasibility easier to diagnose (the Optimizer tries to minimize thenumber of constraints involved, even if it means that the IIS will contain more bounds).
Using the library functions IISs can be generated iteratively using the XPRSiisfirst and
XPRSiisnext functions. All (a maximal set of independent) IISs can also be obtained with the
XPRSiisall function. Note that if the problem is modified during the iterative search for IISs, theprocess has to be started from scratch. After a set of IISs is identified, the information contained by any
one of the IISs (size, constraint and bound lists, duals, etc.) may be retrieved with the function
XPRSgetiisdata. A summary on the generated IISs is provided by function XPRSiisstatus, while itis possible to save the IIS data or the IIS subproblem directly into a file in MPS or LP format using
XPRSiiswrite. The information about the IISs is available while the problem remains unchanged. The
information about an IIS may be obtained at any time after it has been generated. Function
XPRSiisclear clears the information already stored about IISs.
On the console, all the IIS functions are available by passing different flags to the IIS console command.
A single IIS may be found with the command IIS. If further IISs are required (e.g., if trying to find thesmallest one) the IIS --n command may be used to generate subsequent IISs, or the IIS --a togenerate all independent IISs, until no further independent IIS exists. These functions display theconstraints and bounds that are identified to be in an IIS as they are found. If further information isrequired, the IIS --p num command may be used to retrieve all the data for a given IIS, or the IISw and
IISe functions to create an LP/MPS or CSV containing the IIS subproblem or the additional information
about the IIS in a file.
Once an IIS has been found it is useful to know if dropping a single constraint or bound in the IIS willcompletely remove the infeasibility represented by the IIS, thus an attempt is made to identify a subset of
the IIS called a sub--IIS isolation. A sub--IIS isolation is a special constraint or bound in
an IIS. Removing an IIS isolation constraint or bound will remove all infeasibilities in the IIS without
increasing the infeasibilities outside the IIS, that is, in any other independent IISs.

Fair Isaac Corporation Proprietary Information

45

Chapter 6: Infeasibility, Unboundedness and Instability

The IIS isolations thus indicate the likely cause of each independent infeasibility and give an
indication of which constraint or bound to drop or modify. This procedure is computationally expensive,
and is carried out separately by function XPRSiisisolations (IIS--i) for an already identified IIS. It
is not always possible to find IIS isolations.
After an optimal but infeasible first phase primal simplex, it is possible to identify a subproblem
containing all the infeasibilities (corresponding to the given basis) to reduce the IIS work–problem
dramatically. Rows with zero duals (thus with slack variables having zero reduced cost) and columns thathave zero reduced costs may be excluded from the search for IISs. Moreover, for rows and columns with
nonzero costs, the sign of the cost is used to relax equality rows either to less then or greater than equalrows, and to drop either possible upper or lower bounds on variables. This process is referred to as
sensitivity filter for IISs.
The identification of an IIS, especially if the isolations search is also performed, may take a very long time.
For this reason, using the sensitivity filter for IISs, it is possible to find only an approximation of the IISs,
which typically contains all the IISs (and may contain several rows and bounds that are not part of any
IIS). This approximation is a sub–problem identified at the beginning of the search for IISs, and is referred
to as the initial infeasible sub–problem. Its size is typically crucial to the running time of the IIS procedure.
This sub–problem is accessible by setting the input parameters of XPRSiisfirst or by calling (IIS--f) on the console. Note that the IIS approximation and the IISs generated so far are always available.
The XPRSgetiisdata function also returns dual multipliers. These multipliers are associated with
Farkas’ lemma of linear optimization. Farkas’ lemma in its simplest form states that if Ax = b, x ≥ 0 has
no solution, then there exists a y for which yT A ≥ 0 and yT b < 0. In other words, if the constraints andbounds are contradictory, then an inequality of form dT x < 0 may be derived, where d is a constant vectorof nonnegative values. The vector y, i.e., the multipliers with which the constraints and bounds have to be
combined to get the contradiction is called dual multipliers. For each IIS identified, these multipliers arealso provided. For an IIS all the dual multipliers should be nonzero.

6.1.4 The Infeasibility Repair Utility
In some cases, identifying the cause of infeasibility, even if the search is based on IISs may prove very
demanding and time consuming. In such cases, a solution that violates the constraints and bounds
minimally can greatly assist modeling. This functionality is provided by the
XPRSrepairweightedinfeas function.
Based on preferences provided by the user, the Optimizer relaxes the constraints and bounds in the
problem by introducing penalized deviation variables associated with selected rows and columns. Then aweighted sum of these variables (sometimes referred to as infeasibility breakers) is minimized, resulting
in a solution that violates the constraints and bounds minimally regarding the provided preferences. The
preference associated with a constraint or bound reflects the modeler’s will to relax the corresponding
right–hand–side or bound. The higher the preference, the more willing the modeler is to relax (the penalty
value associated is the reciprocal of the preference). A zero preference reflects that the constraint orbound cannot be relaxed. It is the responsibility of the modeler to provide preferences that yield a feasible
relaxed problem. Note, that if all preferences are nonzero, the relaxed problem is always feasible (with the
exception of problems containing binary or semi–continuous variables, since because of their special
associated modeling properties, such variables are not relaxed).
Note, that this utility does not repair the infeasibility of the original model, but based on the preferences
provided by the user, it introduces extra freedom into it to make it feasible, and minimizes the utilizationof the added freedom.
The magnitude of the preferences does not affect the quality of the resulting solution, and only the ratiosof the individual preferences determine the resulting solution. If a single penalty value is used for eachconstraint and bound group (less than and greater than or equal constraints, as well as lower and upperbounds are treated separately) the XPRSrepairinfeas (REPAIRINFEAS) function may be used, which
provides a simplified interface toFair Isaac Corporation Proprietary Information46

Chapter 6: Infeasibility, Unboundedness and Instability

XPRSrepairweightedinfeas.
Using the new variables introduced, it is possible to warm start the primal simplex algorithm with a basic
solution. However, based on the value of the control KEEPBASIS, the function may modify the actual
basis to produce a warm start basis for the solution process. An infeasible, but first phase optimal primal
solution typically speeds up the solution of the relaxed problem.
Once the optimal solution to the relaxed problem is identified (and is automatically projected back to theoriginal problem space), it may be used by the modeler to modify the problem in order to become feasible.
However, it may be of interest to know what the optimal objective value will be if the original problem isrelaxed according to the solution found be the infeasibility repair function.
In order to provide such information, the infeasibility repair tool may carry out a second phase, in which
the weighted violation of the constraints and bounds are restricted to be no greater than the optimum of
the first phase in the infeasibility repair function, and the original objective function is minimized or
maximized.
It is possible to slightly relax the restriction on the weighted violation of the constraints and bounds in thesecond phase by setting the value of the parameter delta in
XPRSrepairweightedinfeas, or using the --delta option with the Console Optimizer command
REPAIRINFEAS. If the minimal weighted violation in the first phase is p, a nonzero delta would relax
the restriction on the weighted violations to be less or equal than (1+delta)p. While such a relaxation
allows considering the effect of the original objective function in more detail, on some problems thetrade–off between increasing delta to improve the objective can be very large, and the modeler isadvised to carefully analyze the effect of the extra violations of the constraints and bounds to theunderlying model.
Note, that it is possible that an infeasible problem becomes unbounded in the second phase of theinfeasibility repair function. In such cases, the cause of the problem being unbounded is likely to be
independent from the cause of its infeasibility.
When not all constraints and bounds are relaxed it is possible for the relaxed problem to remain
infeasible. In such cases it is possible to run the IIS tool on the relaxed problem, which can be used to
identify why it is still infeasible.
It is also possible to limit the amount of relaxation allowed on a per constraint side or bound by using
XPRSrepairweightedinfeasbounds.
It can sometimes be desired to achieve an even distribution of relaxation values. This can be achieved byusing quadratic penalties on the added relaxation variables, and is indicated to the optimizer by specifying
a negative preference value for the constraint or bound on which a quadratic penalty should be added.

6.1.5 Integer Infeasibility
In rare cases a MIP problem can be found to be infeasible although its LP relaxation was found to befeasible. In such circumstances the feasible region for the LP relaxation, while nontrivial, contains nosolutions which satisfy the various integrality constraints. These are perhaps the worst kind of
infeasibilities as it can be hard to determine the cause. In such cases it is recommended that the user try
to introduce some flexibility into the problem by adding slack variables to all of the constraints each withsome moderate penalty cost. With the solution to this problem the user should be able to identify, fromthe non–zero slack variables, where the problem is being overly restricted and with this decide how tomodify the formulation and/or the data to avoid the problem.

6.2 Unboundedness
A problem is said to be unbounded if the objective function may be improved indefinitely without violating
the constraints and bounds. This can happen if a problem is being solved with the wrong optimization
sense, e.g., a maximization problem is being minimized. However, when a problem is unbounded and the

Fair Isaac Corporation Proprietary Information

47

Chapter 6: Infeasibility, Unboundedness and Instability

problem is being solved with the correct optimization sense then this indicates a problem in theformulation of the model or the data. Typically, the problem is caused by missing constraints or thewrong signs on the coefficients. Note that unboundedness is often diagnosed by presolve.

6.3 Instability
6.3.1 Scaling
When developing a model and the definition of its input data users often produce problems that contain
constraints and/or columns with large ratios in the absolute values of the largest and smallest
coefficients. For example:
maximize:

106 x + 7y=z

subject to:

106 x + 0.1y≤

100

107 x + 8y≤

5001012 x + 106 y≤

50⁎106

Here the objective coefficients, constraint coefficients, and right–hand side values range between 0.1 and1012 . We say that the model is badly scaled.
During the optimization process, the Optimizer must perform many calculations involving subtraction anddivision of quantities derived from the constraints and the objective function. When these calculations
are carried out with values differing greatly in magnitude, the finite precision of computer arithmetic andthe fixed tolerances employed by FICO Xpress result in a build up of rounding errors to a point where theOptimizer can no longer reliably find the optimal solution.
To minimize undesirable effects, when formulating your problem try to choose units (or equivalently scale
your problem) so that objective coefficients and matrix elements do not range by more than 106 , and theright–hand side and non–infinite bound values do not exceed 106 . One common problem is the use oflarge finite bound values to represent infinite bounds (i.e., no bounds) — if you have to enter explicit
infinite bounds, make sure you use values greater than 1020 which will be interpreted as infinity by the
Optimizer. Avoid having large objective values that have a small relative difference — this makes it hardfor the dual simplex algorithm to solve the problem. Similarly, avoid having large right–hand side orbound values that are close together, but not identical.
In the above example, both the coefficient for x and the last constraint might be better scaled. Issues
arising from the first may be overcome by column scaling, effectively a change of coordinates, with thereplacement of 106 x by some new variable. Those from the second may be overcome by row scaling. If
we set x = 106 x′ and scale the last row by 10–6 , the example becomes the much better scaled problem:
maximize:subject to:x’ + 7y=zx’ + 0.1y≤100

10x’ + 8y≤

500x’ + y≤50

FICO Xpress also incorporates a number of automatic scaling options to improve the scaling of thematrix. However, the general techniques described below cannot replace attention to the choice of units
specific to your problem. The best option is to scale your problem following the advice above, and use
the automatic scaling provided by the Optimizer.
The form of scaling provided by the Optimizer depends on the setting of the bits of the control parameter
SCALING. To get a particular form of scaling, set SCALING to the sum of the values corresponding to thescaling required. For instance, to get row scaling, column scaling and then row scaling again, set
SCALING to 1+2+4=7. The scaling processing is applied after presolve and before the optimization

Fair Isaac Corporation Proprietary Information48

Chapter 6: Infeasibility, Unboundedness and Instability

algorithm. The most important of the defined bits are given in the following table. For a full list, refer to
SCALING in Chapter 8
Bit

Value

Type of Scaling0

1

Row scaling.

1

2

Column scaling.

2

4

Row scaling again.

3
4

8
16

Maximin.
Curtis–Reid.

5

32

0– scale by geometric mean;
1– scale by maximum element(not applicable if maximin or Curtis–Reid is specified).

7

128

Objective function scaling.

8

256

Exclude the quadratic part of constraint when calculating scaling factors.

9

512

Scale the problem before presolve is applied.

If scaling is not required, SCALING should be set to 0.
If the user wants to get quick results when attempting to solve a badly scaled problem it may be useful to
try running customized scaling on a problem before calling the optimization algorithm. To run the scaling
process on a problem the user can call the routine XPRSscale(SCALE). The SCALING control
determines how the scaling will be applied.
If the user is applying customized scaling to their problem and they are subsequently modifying the
problem, it is important to note that the addition of new elements in the matrix can cause the problem tobecome badly scaled again. This can be avoided by reapplying their scaling strategy after completing
their modifications to the matrix.
Finally, note that the scaling operations are determined by the matrix elements only. The objective
coefficients, right hand side values and bound values do not influence the scaling. Only continuous
variables (i.e., their bounds and coefficients) and constraints (i.e., their right–hand sides and coefficients)
are scaled. Discrete entities such as integer variables are not scaled so the user should choose carefully
the scaling of these variables.

6.3.2 Accuracy
The accuracy of the computed variable values and objective function value is affected in general by thevarious tolerances used in the Optimizer. Of particular relevance to MIP problems are the accuracy andcut off controls. The MIPRELCUTOFF control has a non–zero default value, which will prevent solutions
very close but better than a known solution being found. This control can of course be set to zero if
required.
When the LP solver stops at an optimal solution, the scaled constraints will be violated by no more than
FEASTOL and the variables will be within FEASTOL of their scaled bounds. However once the constraints
and variables have been unscaled the constraint and variable bound violation can increase to more than
FEASTOL. If this happens then it indicates the problem is badly scaled. Reducing FEASTOL can help
however this can cause the LP solve to be unstable and reduce solution performance.
However, for all problems it is probably ambitious to expect a level of accuracy in the objective of morethan 1 in 1,000,000. Bear in mind that the default feasibility and optimality tolerances are 10–6 . It is often
not practially possible to compute the solution values and reduced costs from a basis, to an accuracy
better than 10–8 anyway, particularly for large models. It depends on the condition number of the basis
matrix and the size of the right—hand side and cost coefficients. Under reasonable assumptions, anupper bound for the computed variable value accuracy is 4xKx∥RHS∥/1016 , where ∥RHS∥ denotes theL–infinity norm of the right–hand side and K is the basis condition number. The basis condition number

Fair Isaac Corporation Proprietary Information

49

Chapter 6: Infeasibility, Unboundedness and Instability

can be found using the XPRSbasiscondition (BASISCONDITION) function.
You should also bear in mind that the matrix is scaled, which would normally have the effect of increasing
the apparent feasibility tolerance.

Fair Isaac Corporation Proprietary Information50

CHAPTER 7

Console and Library Functions
A large number of routines are available for both Console and Library users of the FICO Xpress Optimizer,
ranging from simple routines for the input and solution of problems from matrix files to sophisticatedcallback functions and greater control over the solution process. Of these, the core functionality isavailable to both sets of users and comprises the ’Console Mode’. Library users additionally have accessto a set of more ’advanced’ functions, which extend the functionality provided by the Console Mode,
providing more control over their program’s interaction with the Optimizer and catering for more
complicated problem development.

7.1 Console Mode Functions
With both the Console and Advanced Mode functions described side-by-side in this chapter, library users
can use this as a quick reference for the full capabilities of the Optimizer library. For users of Console
Optimizer, only the following functions will be of relevance:

Command

Description

Page

CHECKCONVEXITY

Convexity checker.

p. 143EXIT

Terminate the Console Optimizer.

p. 174

HELP

Quick reference help for the Optimizer console.

p. 258IIS

Console IIS command.

p. 259PRINTSOL

Write the current solution to screen.

p. 310QUIT

Terminate the Console Optimizer.

p. 311STOP

Terminate the Console Optimizer.

p. 369TUNE

Console Tuner command.

p. 375SETARCHCONSISTENCY

Sets whether to force the same execution path on various CPU architecture extensions,in particular (pre-)AVX and AVX2.
p. 76

ALTER

Alters or changes matrix elements, right hand sides and constraint senses in thecurrent problem.
p. 134BASISCONDITION

Calculates the condition number of the current basis after solving the LP relaxation.
p. 135BASISSTABILITY

Calculates various measures for the stability of the current basis, including the basis
condition number.
p. 136CHGOBJSENSE

Changes the problem’s objective function sense to minimize or maximize.

DUMPCONTROLS

Displays the list of controls and their current value for those controls that have been set
to a non default value.
p. 173FIXGLOBALS

Fixes all the global entities to the values of the last found MIP solution. This is usefulfor finding the reduced costs for the continuous variables after the global variables
have been fixed to their optimal values.
p. 177

GLOBAL

Starts the global search for an integer solution after solving the LP relaxation with
XPRSmaxim (MAXIM) or XPRSminim (MINIM) or continues a global search if it has
been interrupted.
p. 256

Fair Isaac Corporation Proprietary Information

p. 15151

Chapter 7: Console and Library Functions
LPOPTIMIZE

This function begins a search for the optimal continuous (LP) solution. The direction of
optimization is given by OBJSENSE. The status of the problem when the function
completes can be checked using LPSTATUS. Any global entities in the problem will beignored.
p. 301MAXIM, MINIM

Begins a search for the optimal LP solution.

MIPOPTIMIZE

This function begins a global search for the optimal MIP solution. The direction of
optimization is given by OBJSENSE. The status of the problem when the function
completes can be checked using MIPSTATUS.
p. 304POSTSOLVE

Postsolve the current matrix when it is in a presolved state.

p. 307READBASIS

Instructs the Optimizer to read in a previously saved basis from a file.

p. 312READBINSOL

Reads a solution from a binary solution file.

p. 313READDIRS

Reads a directives file to help direct the global search.

p. 314READPROB

Reads an (X)MPS or LP format matrix from file.

p. 316READSLXSOL

Reads an ASCII solution file (.slx) created by the XPRSwriteslxsol function. p. 318

REFINEMIPSOL

Executes the MIP solution refiner.

REPAIRINFEAS

An extended version of XPRSrepairweightedinfeas that allows for bounding thelevel of relaxation allowed.
p. 350RESTORE

Restores the Optimizer’s data structures from a file created by XPRSsave (SAVE).
Optimization may then recommence from the point at which the file was created. p. 353

SAVE

Saves the current data structures to file and terminates the run

p. 355SCALE

Re-scales the current matrix.

p. 356SETDEFAULTCONTROL

Sets a single control to its default value.

p. 361SETDEFAULTS

Sets all controls to their default values. Must be called before the problem is read or
loaded by XPRSreadprob, XPRSloadglobal, XPRSloadlp, XPRSloadqglobal,
XPRSloadqp.
p. 362SETLOGFILE

This directs all Optimizer output to a log file.

p. 365

SETPROBNAME

Sets the current default problem name. This command is rarely used.

p. 367

WRITEBASIS

Writes the current basis to a file for later input into the Optimizer.

p. 381WRITEBINSOL

Writes the current MIP or LP solution to a binary solution file for later input into the
Optimizer.
p. 382WRITEDIRS

Writes the global search directives from the current problem to a directives file. p. 383

WRITEPROB

Writes the current problem to an MPS or LP file.

p. 384

WRITEPRTSOL

Writes the current solution to a fixed format ASCII file, problem_name .prt.

p. 385

WRITESLXSOLCreates an ASCII solution file (.slx) using a similar format to MPS files. These files
can be read back into the Optimizer using the XPRSreadslxsol function.
p. 386

WRITESOL

Writes the current solution to a CSV format ASCII file, problem_name.asc (and .hdr).
p. 387

p. 302

p. 319For a list of functions by task, refer to 2.8.

7.2 Layout for Function Descriptions
All functions mentioned in this chapter are described under the following set of headings:

Function Name
The description of each routine starts on a new page. The library name for a function is on the left andthe Console Optimizer command name, if one exists, is on the right.

PurposeA short description of the routine and its purpose begins the information section.

Fair Isaac Corporation Proprietary Information

52

Chapter 7: Console and Library Functions

Synopsis
A synopsis of the syntax for usage of the routine is provided. "Optional" arguments and flags may be
specified as NULL if not required. Where this possibility exists, it will be described alongside theargument, or in the Further Information at the end of the routine’s description. If the function is available
in the Console, the library syntax is described first, followed by the Console Optimizer syntax.

Arguments
A list of arguments to the routine with a description of possible values for them follows.

Error Values
Optimizer return codes are described in Chapter 10. For library users, however, a return code of 32
indicates that additional error information may be obtained, specific to the function which caused theerror. Such is available by calling
XPRSgetintattrib(prob,XPRS_ERRORCODE,&errorcode);

Likely error values returned by this for each function are listed in the Error Values section. A description of
the error may be obtained using the XPRSgetlasterror function. If no attention need be drawn toparticular error values, this section will be omitted.

Associated Controls
Controls which affect a given routine are listed next, separated into lists by type. The control name given
here should have XPRS_ prefixed by library users, in a similar way to the XPRSgetintattrib example
in the Error Values section above. Console Xpress users should use the controls without this prefix, as
described in FICO Xpress Getting Started manual. These controls must be set before the routine is called
if they are to have any effect.

ExamplesOne or two examples are provided which explain certain aspects of the routine’s use.

Further Information
Additional information not contained elsewhere in the routine’s description is provided at the end.

Related Topics
Finally a list of related routines and topics is provided for comparison and reference.

Fair Isaac Corporation Proprietary Information

53

Chapter 7: Console and Library Functions

XPRS_bo_addbounds
Purpose
Synopsis

Adds new bounds to a branch of a user branching object.
int XPRS_CC XPRS_bo_addbounds(XPRSbranchobject bo, int branch, int nbounds,
const char bndtype[], const int colind[], const double bndval[]);Argumentsbobranchnbounds
bndtypecolindbndvalExampleThe user branching object to modify.
The number of the branch to add the new bounds for. This branch must already have beencreated using XPRS_bo_addbranches. Branches are indexed starting from zero.
Number of new bounds to add.
Character array of length nbounds indicating the type of bounds to add:
L
Lower bound.
U
Upper bound.
Integer array of length nbounds containing the column indices for the new bounds.
Double array of length nbounds giving the bound values.

See XPRS_bo_create for an example using XPRS_bo_addbounds.

Related topics
XPRS_bo_create.

Fair Isaac Corporation Proprietary Information

54

Chapter 7: Console and Library Functions

XPRS_bo_addbranches
Purpose
Synopsis

Adds new, empty branches to a user defined branching object.
int XPRS_CC XPRS_bo_addbranches(XPRSbranchobject bo, int nbranches);

Argumentsbonbranches
ExampleThe user branching object to modify.
Number of new branches to create.

See XPRS_bo_create for an example using XPRS_bo_addbranches.

Related topics
XPRS_bo_create.

Fair Isaac Corporation Proprietary Information

55

Chapter 7: Console and Library Functions

XPRS_bo_addcuts
Purpose
Synopsis

Adds stored user cuts as new constraints to a branch of a user branching object.
int XPRS_CC XPRS_bo_addcuts(XPRSbranchobject bo, int branch, int ncuts,
const XPRScut cutind[]);Argumentsbobranchncuts
cutindThe user branching object to modify.
The number of the branch to add the cuts for. This branch must already have beencreated using XPRS_bo_addbranches. Branches are indexed starting from zero.
Number of cuts to add.
Array of length ncuts containing the pointers to user cuts that should be added to thebranch.

Related topics
XPRS_bo_create, XPRS_bo_addrows.

Fair Isaac Corporation Proprietary Information

56

Chapter 7: Console and Library Functions

XPRS_bo_addrows
Purpose
Synopsis

Adds new constraints to a branch of a user branching object.
int XPRS_CC XPRS_bo_addrows(XPRSbranchobject bo, int branch, int nrows, int
ncoefs, const char rowtype[], const double rhs[], const int start[],const int colind[], const double rowcoef[]);Argumentsbobranchnrows
ncoefsrowtyperhs
startcolindrowcoef
ExampleThe user branching object to modify.
The number of the branch to add the new constraints for. This branch must already havebeen created using XPRS_bo_addbranches. Branches are indexed starting from zero.
Number of new constraints to add.
Number of non-zero coefficients in all new constraints.
Character array of length nrows indicating the type of constraints to add:
L
Less than type.
G
Greater than type.
E
Equality type.
Double array of length nrows containing the right hand side values.
Integer array of length nrows containing the offsets of the colind and rowcoef arraysof the start of the non zero coefficients in the new constraints.
Integer array of length ncoefs containing the column indices for the non zerocoefficients.
Double array of length ncoefs containing the non zero coefficient values.

The following function will create a branching object that branches on constraints x1 + x2 ≥ 1 or
x1 + x2 ≤ 0:
XPRSbranchobject CreateConstraintBranch(XPRSprob xp_mip, int icol){
char
cRowType;
double dRowRHS;
int
mRowBeg;
intmElemCol[2];double dElemVal[2];
XPRSbranchobject bo = NULL;
int isoriginal = 1;/⁎ Create the new object with two empty branches. ⁎/XPRS_bo_create(&bo, xp_mip, isoriginal);
XPRS_bo_addbranches(bo, 2);/⁎ Add the constraint x1 + x2 >= 1. ⁎/cRowType = 'G';dRowRHS = 1.0;
mRowBeg = 0;mElemCol[0] = 0; mElemCol[1] = 1;
dElemVal[0] = 1.0; dElemVal[1] = 1.0;
XPRS_bo_addrows(bo, 0, 1, 2, &cRowType, &dRowRHS, &mRowBeg, mElemCol, dElemVal);

Fair Isaac Corporation Proprietary Information

57

Chapter 7: Console and Library Functions/⁎ Add the constraint x1 + x2 <= 0. ⁎/cRowType = 'L';
dRowRHS = 0.0;
XPRS_bo_addrows(bo, 1, 1, 2, &cRowType, &dRowRHS, &mRowBeg, mElemCol, dElemVal);/⁎ Set a low priority value so our branch object is picked up ⁎//⁎ before the default branch candidates. ⁎/XPRS_bo_setpriority(bo, 100);}

return bo;

Related topics
XPRS_bo_create.

Fair Isaac Corporation Proprietary Information

58

Chapter 7: Console and Library Functions

XPRS_bo_create
Purpose

SynopsisCreates a new user defined branching object for the Optimizer to branch on. This function should becalled only from within one of the callback functions set by XPRSaddcboptnode or
XPRSaddcbchgbranchobject.
int XPRS_CC XPRS_bo_create(XPRSbranchobject⁎ p_bo, XPRSprob prob, int
isoriginal);

Arguments
p_bo
Pointer to where the new object should be returned.
prob
The problem structure that the branching object should be created for.
isoriginal If the branching object will be set up for the original matrix, which determines how
column indices are interpreted when adding bounds and rows to the object:0Column indices should refer to the current (presolved) node problem.
1
Column indices should refer to the original matrix.

Fair Isaac Corporation Proprietary Information

59

Chapter 7: Console and Library Functions

Further information
1. In addition to the standard global entities supported by the Optimizer, the Optimizer also allows the user
to define their own global entities for branching, using branching objects.
2. A branching object of type XPRSbranchobject should provide a linear description of how to branch on
the current node for a user’s global entities. Any number of branches is allowed and each branch
description can contain any combination of columns bounds and new constraints.
3. Branching objects must always contain at least one branch and all branches of the object must contain atleast one bound or constraint.
4. If multiple lower or multiple upper bounds on the same variable are given, the strictest one will be applied.
5. When the Optimizer branches the current node on a user’s branching object, a new child node will becreated for each branch defined in the object. The child nodes will inherit the bounds and constraint of
the current node, plus any new bounds or constraints defined for that branch in the object.
6. Inside the callback function set by XPRSaddcboptnode, a user can define any number of branching
objects and pass them to the Optimizer. These objects are added to the set of infeasible global entities
for the current node and the Optimizer will select a best candidate from this extended set using all of its
normal evaluation methods.
7. The callback function set by XPRSaddcbchgbranchobject can be used to override the Optimizer’s
selected branching candidate with the user’s own object. This can for example be used to modify how tobranch on the global entity selected by the Optimizer.
8. The following functions are available to set up a new user branching object:
XPRS_bo_create
XPRS_bo_addbranches
XPRS_bo_addbounds
XPRS_bo_addrows
XPRS_bo_setpriority
XPRS_bo_setpreferredbranch
XPRS_bo_store
ExampleCreates a new, empty branching object with no branches.
Adds new, empty branches to the object. Branches must be
created before column bounds or rows can be added to abranch.
Adds new column bounds to a given branch of the object.
Adds new constraints to a given branch of the object.
Sets the priority value for the object. These are equivalent
to the priority values for regular global entities that can be
set through directives (see also Appendix A.5).
Specifies which of the child nodes corresponding to thebranches of the object should be explored first.
Adds the created object to the candidate list for branching.

The following function will create a branching object equivalent to a standard binary branch on a column:
XPRSbranchobject CreateBinaryBranchObject(XPRSprob xp_mip, int icol){
char
cBndType;
double dBndValue;
int isoriginal = 1;
XPRSbranchobject bo = NULL;/⁎ Create the new object with two empty branches. ⁎/XPRS_bo_create(&bo, xp_mip, isoriginal);
XPRS_bo_addbranches(bo, 2);/⁎ Add bounds to branch the column to either zero or one. ⁎/Fair Isaac Corporation Proprietary Information

60

Chapter 7: Console and Library Functions

cBndType = 'U';
dBndValue = 0.0;
XPRS_bo_addbounds(bo, 0, 1, &cBndType, &icol, &dBndValue);cBndType = 'L';
dBndValue = 1.0;
XPRS_bo_addbounds(bo, 1, 1, &cBndType, &icol, &dBndValue);/⁎ Set a low priority value so our branch object is picked up ⁎//⁎ before the default branch candidates. ⁎/XPRS_bo_setpriority(bo, 100);}

return bo;

Related topics
XPRSaddcboptnode, XPRSaddcbchgbranchobject.

Fair Isaac Corporation Proprietary Information

61

Chapter 7: Console and Library Functions

XPRS_bo_destroy
Purpose
Synopsis

Frees all memory for a user branching object, when the object was not stored with the Optimizer.
int XPRS_CC XPRS_bo_destroy(XPRSbranchobject bo);

Argumentbo

The user branching object to free.

Related topics
XPRS_bo_create, XPRS_bo_store.

Fair Isaac Corporation Proprietary Information

62

Chapter 7: Console and Library Functions

XPRS_bo_getbounds
Purpose
Synopsis

Returns the bounds for a branch of a user branching object.
int XPRS_CC XPRS_bo_getbounds(XPRSbranchobject bo, int branch, int⁎
p_nbounds, int maxbounds, char bndtype[], int colind[], double
bndval[]);Argumentsbobranchp_nbounds
maxbounds
bndtypecolindbndvalThe branching object to inspect.
The number of the branch to get the bounds for.
Location where the number of bounds for the given branch should be returned.
Maximum number of bounds to return.
Character array of length maxbounds where the types of bounds will be returned:
L
Lower bound.
U
Upper bound.
Allowed to be NULL.
Integer array of length maxbounds where the column indices will be returned. Allowed to
be NULL.
Double array of length maxbounds where the bound values will be returned. Allowed to
be NULL.

Related topics
XPRS_bo_create, XPRS_bo_addbounds.

Fair Isaac Corporation Proprietary Information

63

Chapter 7: Console and Library Functions

XPRS_bo_getbranches
Purpose
Synopsis

Returns the number of branches of a branching object.
int XPRS_CC XPRS_bo_getbranches(XPRSbranchobject bo, int⁎ p_nbranches);

Argumentsbo
The user branching object to inspect.
p_nbranches Memory where the number of branches should be returned.
Related topics
XPRS_bo_create, XPRS_bo_addbranches.

Fair Isaac Corporation Proprietary Information

64Chapter 7: Console and Library Functions

XPRS_bo_getid
Purpose
Synopsis

Returns the unique identifier assigned to a branching object.
int XPRS_CC XPRS_bo_getid(XPRSbranchobject bo, int⁎ p_id);

Argumentsbo
p_id

A branching object.
Pointer to an integer where the identifier should be returned.

Further information
1. Branching objects associated with existing column entities (binaries, integers, semi–continuous andpartial integers), are given an identifier from 1 to MIPENTS.
2. Branching objects associated with existing Special Ordered Sets, are given an identifier from MIPENTS+1
to MIPENTS+SETS.
3. User created branching objects will always have a negative identifier.
Related topics
XPRS_bo_create.

Fair Isaac Corporation Proprietary Information

65

Chapter 7: Console and Library Functions

XPRS_bo_getlasterror
Purpose
Synopsis

Returns the last error encountered during a call to the given branch object.
int XPRS_CC XPRS_bo_getlasterror(XPRSbranchobject bo, int⁎ p_msgcode, char⁎msg, int _iStringBufferBytes, int⁎ p_nbytes);

Argumentsbop_msgcodemsg
maxbytes
p_nbytes
ExampleThe branch object.
Location where the error code will be returned. Can be NULL if not required.
A character buffer of size maxbytes in which the last error message relating to the given
branching object will be returned.
The size of the character buffer msg.
The size of the required character buffer to fully return the error string.

The following shows how this function might be used in error checking:
XPRSbranchobject bo;...
char⁎ cbuf;
int cbuflen;
if (XPRS_bo_setpreferredbranch(bo,3)) {XPRS_bo_getlasterror(bo,NULL,NULL,0,&cbuflen);cbuf = malloc(cbuflen);
XPRS_bo_getlasterror(bo,NULL, cbuf, cbuflen, NULL);
printf("ERROR when setting preferred branch: %s\n", cbuf);}

Related topics
XPRS_ge_addcbmsghandler.

Fair Isaac Corporation Proprietary Information

66

Chapter 7: Console and Library Functions

XPRS_bo_getrows
Purpose
Synopsis

Returns the constraints for a branch of a user branching object.
int XPRS_CC XPRS_bo_getrows(XPRSbranchobject bo, int branch, int⁎ p_nrows,
int maxrows, int⁎ p_ncoefs, int maxcoefs, char rowtype[], double
rhs[], int start[], int colind[], double rowcoef[]);Argumentsbobranchp_nrows
maxrows
p_ncoefs
maxcoefs
rowtyperhs
startcolindrowcoef

The user branching object to inspect.
The number of the branch to get the constraints from.
Memory location where the number of rows should be returned.
Maximum number of rows to return.
Memory location where the number of non zero coefficients in the constraints should be
returned.
Maximum number of non zero coefficients to return.
Character array of length maxrows where the types of the rows will be returned:
L
Less than type.
G
Greater than type.
E
Equality type.
Double array of length maxrows where the right hand side values will be returned.
Integer array of length maxrows which will be filled with the offsets of the colind androwcoef arrays of the start of the non zero coefficients in the returned constraints.
Integer array of length maxcoefs which will be filled with the column indices for the nonzero coefficients.
Double array of length maxcoefs which will be filled with the non zero coefficient values.

Related topics
XPRS_bo_create, XPRS_bo_addrows.

Fair Isaac Corporation Proprietary Information

67

Chapter 7: Console and Library Functions

XPRS_bo_setpreferredbranch
Purpose
Synopsis

Specifies which of the child nodes corresponding to the branches of the object should be explored first.
int XPRS_CC XPRS_bo_setpreferredbranch(XPRSbranchobject bo, int branch);ArgumentsbobranchThe user branching object.
The number of the branch to mark as preferred.

Related topics
XPRS_bo_create.

Fair Isaac Corporation Proprietary Information

68

Chapter 7: Console and Library Functions

XPRS_bo_setpriority
Purpose
Synopsis

Sets the priority value of a user branching object.
int XPRS_CC XPRS_bo_setpriority(XPRSbranchobject bo, int priority);

Argumentsbopriority

The user branching object.
The new priority value to assign to the branching object, which must be a number from 0
to 1000. User branching objects are created with a default priority value of 500.

Further information
1. A candidate branching object with lowest priority number will always be selected for branching before an
object with a higher number.
2. Priority values must be an integer from 0 to 1000. User branching objects and global entities are by
default assigned a priority value of 500. Special branching objects, such as those arising from structuralbranches or split disjunctions are assigned a priority value of 400.
Related topics
XPRS_bo_create, Section A.5.

Fair Isaac Corporation Proprietary Information

69

Chapter 7: Console and Library Functions

XPRS_bo_store
Purpose

Synopsis

Adds a new user branching object to the Optimizer’s list of candidates for branching. This function isavailable only through the callback function set by XPRSaddcboptnode.
int XPRS_CC XPRS_bo_store(XPRSbranchobject bo, int⁎ p_status);

Argumentsbop_status

The new user branching object to store. After this call the bo object is no longer valid andshould not be referred to again.
The returned status from checking the provided branching object:0
The object was accepted successfully.
1
Failed to presolve the object due to dual reductions in presolve.
2
Failed to presolve the object due to duplicate column reductions in presolve.
3
The object contains an empty branch.
The object was not added to the candidate list if a non zero status is returned.

Further information
1. To ensure that a user branching object expressed in terms of the original matrix columns can be applied
to the presolved problem, it might be necessary to turn off certain presolve operations.
2. If any of the original matrix columns referred to in the object are unbounded, dual reductions might
prevent the corresponding bound or constraint from being presolved. To avoid this, dual reductions
should be turned off in presolve, by clearing bit 3 of the integer control PRESOLVEOPS.
3. If one or more of the original matrix columns of the object are duplicates in the original matrix, but not in
the branching object, it might not be possible to presolve the object due to duplicate column eliminationsin presolve. To avoid this, duplicate column eliminations should be turned off in presolve, by clearing bit 5of PRESOLVEOPS.
4. As an alternative to turning off the above mentioned presolve features, it is possible to protect individualcolumns of a the problem from being modified by presolve. Use the XPRSloadsecurevecs function tomark any columns that might be branched on using branching objects.
Related topics
XPRS_bo_create, XPRS_bo_validate.

Fair Isaac Corporation Proprietary Information

70

Chapter 7: Console and Library Functions

XPRS_bo_validate
Purpose

Synopsis

Verifies that a given branching object is valid for branching on the current branch-and-bound node of a
MIP solve. The function will check that all branches are non-empty, and if required, verify that thebranching object can be presolved.
int XPRS_CC XPRS_bo_validate(XPRSbranchobject bo, int⁎ p_status);

Argumentsbop_status

A branching object.
The returned status from checking the provided branching object:0
The object is acceptable.
1
Failed to presolve the object due to dual reductions in presolve.
2
Failed to presolve the object due to duplicate column reductions in presolve.
3
The object contains an empty branch.

Related topics
XPRS_bo_create.

Fair Isaac Corporation Proprietary Information

71

Chapter 7: Console and Library Functions

XPRS_ge_addcbmsghandler
Purpose

Synopsis

Declares an output callback function in the global environment, called every time a line of message text is
output by any data in the library. This callback function will be called in addition to any output callbacks
already added by XPRS_ge_addcbmsghandler.
int XPRS_CC XPRS_ge_addcbmsghandler(int (XPRS_CC ⁎msghandler)(XPRSobject
object, void ⁎ cbdata, void ⁎ thread, const char ⁎ msg, int msgtype,int msgcode), void ⁎data, int priority);

Arguments
msghandler The callback function which takes six arguments, object, cbdata, thread, msg,
msgtype and msgcode. Use a NULL value to cancel a callback function.
object
The data sending the message. Use XPRSgetobjecttypename to get the name of thedata type.
cbdataThe user-defined data passed to the callback function.
threadThe system id of the thread sending the message cast to a void ⁎.
msg
A null terminated character array (string) containing the message, which may simply be a
new line. When the callback is called for the first time msg will be a NULL pointer.
msgtype
Indicates the type of output message:
1
information messages;
2(not used);3
warning messages;
4
error messages.
When the callback is called for the first time msgtype will be a negative value.
msgcodeThe number associated with the message. If the message is an error or a warning then
you can look up the number in the section Optimizer Error and Warning Messages foradvice on what it means and how to resolve the associated issue.
data
A user-defined data to be passed to the callback function.
priority
An integer that determines the order in which multiple message handler callbacks will be
invoked. The callback added with a higher priority will be called before a callback with alower priority. Set to 0 if not required.
Further information
To send all messages to a log file the built in message handler XPRSlogfilehandler can be used.
This can be done with:
XPRS_ge_addcbmsghandler(XPRSlogfilehandler, "log.txt", 0);

Related topics
XPRS_ge_removecbmsghandler, XPRSgetobjecttypename.

Fair Isaac Corporation Proprietary Information72

Chapter 7: Console and Library Functions

XPRS_ge_getcomputeallowed
Purpose
SynopsisQuery whether the current application is allowed to use the Insight Compute interface.
int XPRS_CC XPRS_ge_getcomputeallowed(int⁎ p_allow);

Argument
p_allow

ExampleMemory location in which the value will be returned. Value will equal one of the following
constants.
XPRS_ALLOW_COMPUTE_ALWAYS
Always allow solves to be sent to Compute.
XPRS_ALLOW_COMPUTE_NEVER
Never allow solves to be sent to Compute.
XPRS_ALLOW_COMPUTE_DEFAULT Allow solves to be sent to Compute only from
non-OEM applications.

The following shows how this function might be used:
int isComputeAllowed;
if (XPRS_ge_getcomputeallowed(&isComputeAllowed)!=0) {switch (isComputeAllowed) {case XPRS_ALLOW_COMPUTE_ALWAYS:
printf("Compute integration is always allowed.\n");break;
case XPRS_ALLOW_COMPUTE_NEVER:
printf("Compute integration is never allowed.\n");break;
case XPRS_ALLOW_COMPUTE_DEFAULT:
printf("Compute integration is allowed if ""this is not an OEM application.\n");break;}}

Further information
This value supplied by this function describes whether this process would be allowed to use Insight 5Compute Interface - this is not affected by whether or not the user has tried to enable use of the Insight 5Compute interface.
Related topics
XPRS_ge_setcomputeallowed.

Fair Isaac Corporation Proprietary Information73

Chapter 7: Console and Library Functions

XPRS_ge_getlasterror
Purpose
Synopsis

Returns the last error encountered during a call to the Xpress global environment.
int XPRS_CC XPRS_ge_getlasterror(int⁎ p_msgcode, char⁎ msg, int_iStringBufferBytes, int⁎ p_nbytes);

Arguments
p_msgcodemsg

maxbytes
p_nbytes
ExampleMemory location in which the error code will be returned. Can be NULL if not required.
A character buffer of size maxbytes in which the last error message relating to the global
environment will be returned. If the message is longer than maxbytes then it will betruncated. The message will always be terminated by a NUL character (provided
maxbytes is bigger than 0.
The size of the character buffer msg.
Memory location in which the minimum required size of the buffer to hold the full error
string will be returned. Can be NULL if not required.

The following shows how this function might be used in error checking:char⁎ cbuf;
int cbuflen;
if (XPRS_ge_addcbmsghandler(myfunc,NULL,0)!=0) {XPRS_ge_getlasterror(NULL,NULL,0,&cbuflen);cbuf = malloc(cbuflen);
XPRS_ge_getlasterror(NULL, cbuf, cbuflen, NULL);
printf("ERROR from Xpress global environment: %s\n", cbuf);}

Related topics
XPRS_ge_addcbmsghandler.

Fair Isaac Corporation Proprietary Information

74

Chapter 7: Console and Library Functions

XPRS_ge_removecbmsghandler
Purpose

Synopsis

Removes a message callback function previously added by XPRS_ge_addcbmsghandler. The
specified callback function will no longer be called after it has been removed.
int XPRS_CC XPRS_ge_removecbmsghandler(int (XPRS_CC ⁎msghandler)(XPRSobject object, void ⁎ cbdata, void ⁎ thread, const char ⁎ msg,
int msgtype, int msgcode), void ⁎ data);

Arguments
msghandler The callback function to remove. If NULL then all message callback functions added withthe given user-defined data value will be removed.
data
The data value that the callback was added with. If NULL, then the data value will not bechecked and all message callbacks with the function pointer msghandler will be
removed.
Related topics
XPRS_ge_addcbmsghandler

Fair Isaac Corporation Proprietary Information75

Chapter 7: Console and Library Functions

XPRS_ge_setarchconsistency
Purpose

Synopsis

SETARCHCONSISTENCY

Sets whether to force the same execution path on various CPU architecture extensions, in particular(pre-)AVX and AVX2.
int XPRS_CC XPRS_ge_setarchconsistency(int consistent);
SETARCHCONSISTENCY consistentArgument
consistent

Whether to force the same execution path:0
Do not force the same execution path (default behavior);
1
Force the same execution path.

Further information
Note that, using this general environment API function is different from setting the CPUPLATFORM
control. Setting CPUPLATFORM selects a vectorization instruction set for the barrier method.

Fair Isaac Corporation Proprietary Information

76

Chapter 7: Console and Library Functions

XPRS_ge_setcomputeallowed
Purpose
Synopsis

Set whether the current application is allowed to use the Insight Compute interface.
int XPRS_CC XPRS_ge_setcomputeallowed(int allow);

Argument
allow

ExampleWhether the Insight Compute interface may be used; must be one of the following
constants:
XPRS_ALLOW_COMPUTE_ALWAYS
Always allow solves to be sent to Compute.
XPRS_ALLOW_COMPUTE_NEVER
Never allow solves to be sent to Compute.
XPRS_ALLOW_COMPUTE_DEFAULT Allow solves to be sent to Compute only from
non-OEM applications.

The following shows how this function might be used:
XPRS_ge_setcomputeallowed(XPRS_ALLOW_COMPUTE_NEVER);

Further information
1. This function controls whether this process would be allowed to use the Insight Compute Interface if theuser tries to enable it.
2. If the user enables the Insight Compute Interface but the value specified through this function does notallow the Insight Compute Interface to be used, any solves will terminate with an immediate error. Thisfunction can be used to prevent solves being sent to Insight Compute but cannot be used to force solves
to be performed locally. The purpose of this function is to allow an application to prevent the optimization
model being sent to the Insight Compute Interface.
Related topics
XPRS_ge_getcomputeallowed.

Fair Isaac Corporation Proprietary Information

77

Chapter 7: Console and Library Functions

XPRS_nml_addnames
PurposeThis subroutine is deprecated and will be removed in a future release. The names list API is scheduled forremoval.
The XPRS_nml_⁎ functions provide a simple, generic interface to lists of names, which may be names ofrows/columns on a problem or may be a list of arbitrary names provided by the user. Use the
XPRS_nml_addnames to add names to a name list, or modify existing names on a namelist.
Synopsis

int XPRS_CC XPRS_nml_addnames(XPRSnamelist nml, const char buf[], int
firstIndex, int lastIndex);

Arguments
nml

names
first
last

The name list to which you want to add names. Must be an object previously returned by
XPRS_nml_create, as XPRSnamelist objects returned by other functions are
immutable and cannot be changed.
Character buffer containing the null-terminated string names.
The index of the first name to add/replace. Name indices in a namelist always start from0.
The index of the last name to add/replace.

Examplechar mynames[0] = "fred\0jim\0sheila"...
XPRS_nml_addnames(nml,mynames,0,2);
Related topics
XPRS_nml_create, XPRS_nml_removenames, XPRS_nml_copynames, XPRSaddnames.

Fair Isaac Corporation Proprietary Information

78

Chapter 7: Console and Library Functions

XPRS_nml_copynames
PurposeThis subroutine is deprecated and will be removed in a future release. The names list API is scheduled forremoval.
The XPRS_nml_⁎ functions provide a simple, generic interface to lists of names, which may be names ofrows/columns on a problem or may be a list of arbitrary names provided by the user.
XPRS_nml_copynames allows you to copy all the names from one name list to another. As name lists
representing row/column names cannot be modified, XPRS_nml_copynames will be most often used tocopy such names to a namelist where they can be modified, for some later use.
Synopsis

int XPRS_CC XPRS_nml_copynames(XPRSnamelist dest, XPRSnamelist src);

Arguments
destsrc

The namelist object to copy names to. Any names already in this name list will be
removed. Must be an object previously returned by XPRS_nml_create.
The namelist object from which all the names should be copied.

ExampleXPRSprob prob;
XPRSnamelist rnames, rnames_on_prob;...
/⁎ Create a namelist ⁎/XPRS_nml_create(&rnames);/⁎ Get a namelist through which we can access the row names ⁎/XPRSgetnamelistobject(prob,1,&rnames_on_prob);/⁎ Now copy these names from the immutable 'XPRSprob' namelist
to another one ⁎/XPRS_nml_copynames(rnames,rnames_on_prob);/⁎ The names in the list can now be modified then put to someother use ⁎/Related topics
XPRS_nml_create, XPRS_nml_addnames, XPRSgetnamelistobject.

Fair Isaac Corporation Proprietary Information

79

Chapter 7: Console and Library Functions

XPRS_nml_create
PurposeThis subroutine is deprecated and will be removed in a future release. The names list API is scheduled forremoval.
The XPRS_nml_⁎ functions provide a simple, generic interface to lists of names, which may be names ofrows/columns on a problem or may be a list of arbitrary names provided by the user. XPRS_nml_create
will create a new namelist to which the user can add, remove and otherwise modify names.
Synopsis

int XPRS_CC XPRS_nml_create(XPRSnamelist⁎ p_nml);

Argument
p_nml

Pointer to location where the new namelist will be returned.

Example
XPRSnamelist mylist;
XPRS_nml_create(&mylist);
Related topics
XPRSgetnamelistobject, XPRS_nml_destroy.

Fair Isaac Corporation Proprietary Information

80Chapter 7: Console and Library Functions

XPRS_nml_destroy
PurposeThis subroutine is deprecated and will be removed in a future release. The names list API is scheduled forremoval.
Destroys a namelist and frees any memory associated with it. Note you need only destroy namelists
created by XPRS_nml_destroy - those returned by XPRSgetnamelistobject are automaticallydestroyed when you destroy the problem object.
Synopsis

int XPRS_CC XPRS_nml_destroy(XPRSnamelist nml);

Argument
nml

The namelist to be destroyed.

Example
XPRSnamelist mylist;
XPRS_nml_create(&mylist);...
XPRS_nml_destroy(&mylist);
Related topics
XPRS_nml_create, XPRSgetnamelistobject, XPRSdestroyprob.

Fair Isaac Corporation Proprietary Information81

Chapter 7: Console and Library Functions

XPRS_nml_findname
PurposeThis subroutine is deprecated and will be removed in a future release. The names list API is scheduled forremoval.
The XPRS_nml_⁎ functions provide a simple, generic interface to lists of names, which may be names ofrows/columns on a problem or may be a list of arbitrary names provided by the user.
XPRS_nml_findname returns the index of the given name in the given name list.
Synopsis

int XPRS_CC XPRS_nml_findname(XPRSnamelist nml, const char⁎ name, int⁎
p_index);

Arguments
nml
namep_index

The namelist in which to look for the name.
Null-terminated string containing the name for which to search.
Pointer to variable in which the index of the name is returned, or in which is returned -1 if
the name is not found in the namelist.

Example
XPRSnamelist mylist;
int idx;...
XPRS_nml_findname(mylist, "profit_after_work", &idx);
if (idx==-1)
printf("'profit_after_work' was not found in the namelist");else
printf("'profit_after_work' was found at position %d", idx);
Related topics
XPRS_nml_addnames, XPRS_nml_getnames.

Fair Isaac Corporation Proprietary Information

82

Chapter 7: Console and Library Functions

XPRS_nml_getlasterror
PurposeThis subroutine is deprecated and will be removed in a future release. The names list API is scheduled forremoval.
Returns the last error encountered during a call to a namelist object.
Synopsis

int XPRS_CC XPRS_nml_getlasterror(XPRSnamelist nml, int⁎ p_msgcode, char⁎msg, int maxbytes, int⁎ p_nbytes);

Arguments
nml
p_msgcodemsg
maxbytes
p_nbytes

The namelist object.
Variable in which the error code will be returned. Can be NULL if not required.
A character buffer of size iStringBufferBytes in which the last error message
relating to this namelist will be returned.
The size of the character buffer msg.
Memory location in which the minimum required size of the buffer to hold the full error
string will be returned. Can be NULL if not required.

Example
XPRSnamelist nml;
char⁎ cbuf;
int cbuflen;...
if (XPRS_nml_removenames(nml,2,35)) {XPRS_nml_getlasterror(nml, NULL, NULL, 0, &cbuflen);cbuf = malloc(cbuflen);
XPRS_nml_getlasterror(nml, NULL, cbuf, cbuflen, NULL);
printf("ERROR removing names: %s\n", cbuf);}
Related topics
None.

Fair Isaac Corporation Proprietary Information

83

Chapter 7: Console and Library Functions

XPRS_nml_getmaxnamelen
PurposeThis subroutine is deprecated and will be removed in a future release. The names list API is scheduled forremoval.
The XPRS_nml_⁎ functions provide a simple, generic interface to lists of names, which may be names ofrows/columns on a problem or may be a list of arbitrary names provided by the user.
XPRS_nml_getmaxnamelen returns the length of the longest name in the namelist.
Synopsis

int XPRS_CC XPRS_nml_getmaxnamelen(XPRSnamelist nml, int⁎ namlen);

Arguments
nml
p_namelen

The namelist object.
Pointer to a variable into which shall be written the length of the longest name.

Related topics
None.

Fair Isaac Corporation Proprietary Information

84

Chapter 7: Console and Library Functions

XPRS_nml_getnamecountPurposeThis subroutine is deprecated and will be removed in a future release. The names list API is scheduled forremoval.
The XPRS_nml_⁎ functions provide a simple, generic interface to lists of names, which may be names ofrows/columns on a problem or may be a list of arbitrary names provided by the user.
XPRS_nlm_getnamecount returns the number of names in the namelist.
Synopsis

int XPRS_CC XPRS_nml_getnamecount(XPRSnamelist nml, int⁎ p_count);

Arguments
nml
p_count

The namelist object.
Pointer to a variable into which shall be written the number of names.

Example
XPRSnamelist mylist;
int count;...
XPRS_nml_getnamecount(mylist,&count);
printf("There are %d names", count);
Related topics
None.

Fair Isaac Corporation Proprietary Information

85

Chapter 7: Console and Library Functions

XPRS_nml_getnames
PurposeThis subroutine is deprecated and will be removed in a future release. The names list API is scheduled forremoval.
The XPRS_nml_⁎ functions provide a simple, generic interface to lists of names, which may be names ofrows/columns on a problem or may be a list of arbitrary names provided by the user. The
XPRS_nml_getnames function returns some of the names held in the name list. The names shall be
returned in a character buffer, and with each name being separated by a NULL character.
Synopsis

int XPRS_CC XPRS_nml_getnames(XPRSnamelist nml, int pad, char buffer[], int
maxbytes, int⁎ p_nbytes, int first, int last);

Arguments
nml
padbuffermaxbytes
p_nbytes
first
last

The namelist object.
The minimum length of each name. If > 0 then names shorter than pad will beconcatenated with whitespace to make them this length.
Buffer of length maxbytes into which the names shall be returned.
The maximum number of bytes that may be written to the character buffer buffer.
A pointer to a variable into which will be written the number of bytes required to containthe names. May be NULL if not required.
The index of the first name in the namelist to return. Note name list indexes always startfrom 0.
The index of the last name in the namelist to return.

Example
XPRSnamelist mylist;char⁎ cbuf;
int o, i, cbuflen;...
/⁎ Find out how much space we'll require for these names ⁎/XPRS_nml_getnames(mylist, 0, NULL, 0, &cbuflen, 0, 5 );/⁎ Allocate a buffer large enough to hold the names ⁎/cbuf = malloc(cbuflen);/⁎ Retrieve the names ⁎/XPRS_nml_getnames(mylist, 0, cbuf, cbuflen, NULL, 0, 5);/⁎ Display the names ⁎/o=0;
for (i=0;i<6;i++) {printf("Name #%d = %s\n", i, cbuf+o);o += strlen(cbuf)+1;}
Related topics
None.

Fair Isaac Corporation Proprietary Information

86Chapter 7: Console and Library Functions

XPRS_nml_removenames
PurposeThis subroutine is deprecated and will be removed in a future release. The names list API is scheduled forremoval.
The XPRS_nml_⁎ functions provide a simple, generic interface to lists of names, which may be names ofrows/columns on a problem or may be a list of arbitrary names provided by the user.
XPRS_nml_removenames will remove the specified names from the name list. Any subsequent names
will be moved down to replace the removed names.
Synopsis

int XPRS_CC XPRS_nml_removenames(XPRSnamelist nml, int first, int last);

Arguments
nml

first
last

The name list from which you want to remove names. Must be an object previously
returned by XPRS_nml_create, as XPRSnamelist objects returned by other functions
are immutable and cannot be changed.
The index of the first name to remove. Note that indices for names in a name list always
start from 0.
The index of the last name to remove.

ExampleXPRS_nml_removenames(mylist, 3, 5);
Related topics
XPRS_nml_addnames.

Fair Isaac Corporation Proprietary Information

87

Chapter 7: Console and Library Functions

XPRSaddcbbariteration
Purpose

Synopsis

Declares a barrier iteration callback function, called after each iteration during the interior point algorithm,
with the ability to access the current barrier solution/slack/duals or reduced cost values, and to ask
barrier to stop. This callback function will be called in addition to any callbacks already added by
XPRSaddcbbariteration.
int XPRS_CC XPRSaddcbbariteration (XPRSprob prob, void (XPRS_CC⁎bariteration)( XPRSprob cbprob, void ⁎cbdata, int ⁎p_action), void
⁎data, int priority);

Arguments
prob
The current problem.
bariteration The callback function itself. This takes three arguments, cbprob, cbdata, and
p_action serving as an integer return value. This function is called at every barrier
iteration.
cbprob
The problem passed to the callback function, bariteration.
cbdataThe user-defined data passed as data when setting up the callback with
XPRSaddcbbariteration.
p_action
Defines a return value controlling barrier:<0
continue with the next iteration;=0
let barrier decide (use default stopping criteria);
1
barrier stops with status not defined;2
barrier stops with optimal status;
3
barrier stops with dual infeasible status;
4barrier stops wih primal infeasible status;
data
A user-defined data to be passed to the callback function, bariteration.
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.
ExampleThis simple example demonstrates how the solution might be retrieved for each barrier iteration.
// Barrier iteration callback
void XPRS_CC BarrierIterCallback(XPRSprob cbprob,
void ⁎cbdata, int ⁎p_action) {int current_iteration;
double PrimalObj, DualObj, Gap, PrimalInf, DualInf,
ComplementaryGap;
my_object_s ⁎my = (my_object_s ⁎) cbdata;
XPRSgetintattrib(cbprob, XPRS_BARITER, &current_iteration);// try to get all the solution values
XPRSgetlpsol(cbprob, my->x, my->slacks, my->y, my->dj);
XPRSgetdblattrib(cbprob, XPRS_BARPRIMALOBJ, &PrimalObj);XPRSgetdblattrib(cbprob, XPRS_BARDUALOBJ, &DualObj);
Gap = DualObj - PrimalObj;
XPRSgetdblattrib(cbprob, XPRS_BARPRIMALINF, &PrimalInf);

Fair Isaac Corporation Proprietary Information

88Chapter 7: Console and Library Functions

XPRSgetdblattrib(cbprob, XPRS_BARDUALINF, &DualInf);
XPRSgetdblattrib(cbprob, XPRS_BARCGAP, &ComplementaryGap);}// decide if stop or continue⁎p_action = BARRIER_CHECKSTOPPING;
if (current_iteration >= 50|| Gap <= 0.1⁎max(fabs(PrimalObj),fabs(DualObj))) {⁎p_action = BARRIER_OPTIMAL;}// To set callback:
XPRSaddcbbariteration(xprob, BarrierIterCallback, (void ⁎) &my, 0);
Further information
1. Only the following functions are expected to be called from the callback: XPRSgetlpsol and theattribute/control value retrieving and setting routines.
2. General barrier iteration values are available by using XPRSgetdblattrib to retrieve:■

BARPRIMALOBJ - current primal objective■

BARDUALOBJ - current dual objective■

BARPRIMALINF - current primal infeasibility■

BARDUALINF - current dual infeasibility■

BARCGAP - current complementary gap

3. Please note that these values refer to the scaled and presolved problem used by barrier, and may differ
from the ones calculated from the postsolved solution returned by XPRSgetlpsol.
Related topics
XPRSremovecbbariteration.

Fair Isaac Corporation Proprietary Information

89

Chapter 7: Console and Library Functions

XPRSaddcbbarlog
Purpose

Synopsis

Declares a barrier log callback function, called at each iteration during the interior point algorithm. This
callback function will be called in addition to any barrier log callbacks already added by
XPRSaddcbbarlog.
int XPRS_CC XPRSaddcbbarlog (XPRSprob prob, int (XPRS_CC ⁎barlog)(XPRSprob
cbprob, void ⁎cbdata), void ⁎data, int priority);

Argumentsprobbarlogcbprobcbdatadata
priority

ExampleThe current problem.
The callback function itself. This takes two arguments, cbprob and cbdata, and has aninteger return value. If the value returned by barlog is nonzero, the solution process will
be interrupted. This function is called at every barrier iteration.
The problem passed to the callback function, barlog.
The user-defined data passed as data when setting up the callback with
XPRSaddcbbarlog.
A user-defined data to be passed to the callback function, barlog.
An integer that determines the order in which multiple barrier log callbacks 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.

This simple example prints a line to the screen for each iteration of the algorithm.
XPRSaddcbbarlog(prob,barLog,NULL,0);
XPRSlpoptimize(prob,"b");The callback function might resemble:
int XPRS_CC barLog(XPRSprob prob, void ⁎data){
printf("Next barrier iteration\n");}Further information
If the callback function returns a nonzero value, the Optimizer run will be interrupted.
Related topics
XPRSremovecbbarlog, XPRSaddcbgloballog, XPRSaddcblplog, XPRSaddcbmessage.

Fair Isaac Corporation Proprietary Information

90

Chapter 7: Console and Library Functions

XPRSaddcbcomputerestartPurpose
Synopsis

Declares a callback to be called when a solve executed in compute mode needs to be restarted.
int XPRS_CC XPRSaddcbcomputerestart (XPRSprob prob, void (XPRS_CC⁎f_computerestart)(XPRSprob cbprob, void ⁎cbdata), void ⁎data, intpriority);

Arguments
prob
The current problem.
computerestart The callback function itself. This takes two arguments, cbprob and cbdata, andhas an integer return value. This function is called when a solve had to be restarted incompute mode.
cbprob
The problem passed to the callback function, f_computerestart.
cbdataThe user-defined data passed as data when setting up the callback with
XPRSaddcbcomputerestart.
data
A user-defined data to be passed to the callback function, f_computerestart.
priority
An integer that determines the order in which multiple computerestart callbacks will be
invoked. The callback added with a higher priority will be called before a callback with alower priority. Set to 0 if not required.
Related topics
XPRSremovecbcomputerestart

Fair Isaac Corporation Proprietary Information

91

Chapter 7: Console and Library Functions

XPRSaddcbpresolve
Purpose
Synopsis

Declares a callback to be called after presolve has been performed.
int XPRS_CC XPRSaddcbpresolve (XPRSprob prob, void (XPRS_CC⁎presolve)(XPRSprob cbprob, void ⁎cbdata), void ⁎data, int priority);

Arguments
prob
presolve
cbprobcbdatadata
priority

The current problem.
The callback function itself. This takes two arguments, cbprob and cbdata, and has aninteger return value. This function is called after presolve is complete.
The problem passed to the callback function, f_barlog.
The user-defined data passed as data when setting up the callback with
XPRSaddcbpresolve.
A user-defined data to be passed to the callback function, presolve.
An integer that determines the order in which multiple presolve callbacks 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 topics
XPRSremovecbpresolve

Fair Isaac Corporation Proprietary Information

92

Chapter 7: Console and Library Functions

XPRSaddcbchecktime
Purpose

Synopsis

Declares a callback function which is called every time the Optimizer checks if the time limit has beenreached. This callback function will be called in addition to any callbacks already added by
XPRSaddcbchecktime.
int XPRS_CC XPRSaddcbchecktime(XPRSprob prob, int (XPRS_CC⁎checktime)(XPRSprob cbprob, void⁎ cbdata), void⁎ data, intpriority);

Arguments
prob
checktime

cbprobcbdatadata
priority

The current problem.
The callback function which takes two arguments, cbprob and cbdata, and has aninteger return value. This function is called every time the Optimizer checks against thetime limit.
The problem passed to the callback function, checktime.
The user-defined data passed as data when setting up the callback with
XPRSaddcbchecktime.
A user-defined data to be passed to the callback function, checktime.
An integer that determines the order in which multiple checktime callbacks will be
invoked. The callback added with a higher priority will be called before a callback with alower priority. Set to 0 if not required.

Further information
If the callback function returns a nonzero value the solution process will be interrupted.
Related topics
XPRSremovecbchecktime MAXTIME CHECKSONMAXTIME MAXCHECKSONMAXTIMEFair Isaac Corporation Proprietary Information

93

Chapter 7: Console and Library Functions

XPRSaddcbchgbranch
PurposeThis subroutine is deprecated and will be removed in a future release. Please use
XPRSaddcbchgbranchobject instead.
Declares a branching variable callback function, called every time a new branching variable is set or
selected during the branch and bound search. This callback function will be called in addition to any
change branch callbacks already added by XPRSaddcbchgbranch.
Synopsis

int XPRS_CC XPRSaddcbchgbranch(XPRSprob prob, void (XPRS_CC⁎chgbranch)(XPRSprob cbprob, void ⁎cbdata, int ⁎p_entity, int ⁎p_up,
double ⁎p_estdeg), void ⁎data, int priority);

Arguments
prob
chgbranch

cbprobcbdatap_entity
p_up
p_estdeg
data
priority

The current problem.
The callback function, which takes five arguments, cbprob, cbdata, p_entity, p_up
and p_estdeg, and has no return value. This function is called every time a new
branching variable or set is selected.
The problem passed to the callback function, chgbranch.
The user-defined data passed as data when setting up the callback with
XPRSaddcbchgbranch.
A pointer to the variable or set on which to branch. Ordinary global variables are identified
by their column index, i.e. 0, 1,...(COLS- 1) and by their set index, i.e. 0, 1,...,(SETS- 1).
If p_entity is a variable, this is 1 if the upward branch is to be made first, or 0 otherwise.
If p_entity is a set, this is 3 if the upward branch is to be made first, or 2 otherwise.
This value is obsolete. It will be set to zero and any returned value is ignored.
A user-defined data to be passed to the callback function, chgbranch.
An integer that determines the order in which multiple branching variable callbacks will be
invoked. The callback added with a higher priority will be called before a callback with alower priority. Set to 0 if not required.

Further information
The arguments initially contain the default values of the branching variable, branching variable, branchingdirection and estimated degradation. If they are changed then the Optimizer will use the new values, if
they are not changed then the default values will be used.
Related topics
XPRSremovecbchgbranch, XPRSaddcbchgnode, XPRSaddcboptnode, XPRSaddcbinfnode,
XPRSaddcbintsol, XPRSaddcbnodecutoff, XPRSaddcbprenode.

Fair Isaac Corporation Proprietary Information

94

Chapter 7: Console and Library Functions

XPRSaddcbchgbranchobject
Purpose

Synopsis

Declares a callback function that will be called after the selection of a global entity to branch on. This
callback allows the user to inspect and replace the Optimizer’s choice of how to branch the current node.
This callback will also be called in the case when there are no candidates to branch on, that is, when all
global entities are already satisfied. This callback function will be called in addition to any callbacks
already added by XPRSaddcbchgbranchobject.
int XPRS_CC XPRSaddcbchgbranchobject(XPRSprob prob, void (XPRS_CC⁎chgbranchobject)(XPRSprob cbprob, void⁎ cbdata, XPRSbranchobject
branch, XPRSbranchobject⁎ p_newbranch), void⁎ data, int priority);

Arguments
prob
The current problem.
chgbranchobject The callback function, which takes four arguments: cbprob, cbdata, branch
and p_newbranch. This function is called every time the Optimizer has selected acandidate entity for branching.
cbprob
The problem passed to the callback function, chgbranchobject.
cbdataThe user defined data passed as data when setting up the callback with
XPRSaddcbchgbranchobject.
branchThe candidate branching data selected by the Optimizer. Will be NULL if no candidates
exist.
p_newbranch Optional new branching data to replace the Optimizer’s selection. If branch or NULL ispassed back, no change will be applied.
data
A user-defined data to be passed to the callback function, chgbranchobject.
priority
An integer that determines the order in which multiple callbacks of this type will be
invoked. The callback added with a higher priority will be called before a callback with alower priority. Set to 0 if not required.
Further information
1. The branching data given by the Optimizer provides a linear description of how the Optimizer intends tobranch on the selected candidate. This will often be one of standard global entities of the current
problem, but can also be e.g. a split disjunction or a structural branch, if those features are turned on.
2. The functions XPRS_bo_getbranches, XPRS_bo_getbounds and XPRS_bo_getrows can be used
to inspect the given branching data.
3. Refer to XPRS_bo_create on how to create a new branching data to replace the Optimizer’s selection.
Note that the new branching data should be created with a priority value no higher than the current data
to guarantee it will be used for branching.
Related topics
XPRSremovecbchgbranchobject, XPRS_bo_create.

Fair Isaac Corporation Proprietary Information95

Chapter 7: Console and Library Functions

XPRSaddcbchgnodePurposeThis subroutine is deprecated and will be removed in a future release.
Declares a callback that is fired every time the code performs a global backtrack to select a node to starta dive on. Note that it is no longer possible to change the selected node but the callback may still be used
to keep track of dives. This callback function will be called in addition to any callbacks already added by
XPRSaddcbchgnode.
Synopsis

int XPRS_CC XPRSaddcbchgnode(XPRSprob prob, void (XPRS_CC⁎chgnode)(XPRSprob cbprob, void ⁎cbdata, int ⁎p_node), void ⁎data,
int priority);

Arguments
prob
chgnodecbprobcbdatap_nodedata
priority

The current problem.
The callback function which takes three arguments, cbprob, cbdata and p_node, andhas no return value. This function is called every time a new node is selected.
The problem passed to the callback function, chgnode.
The user-defined data passed as data when setting up the callback with
XPRSaddcbchgnode.
A pointer to the number of the node selected by the Optimizer. This value cannot bechanged.
A user-defined data to be passed to the callback function, chgnode.
An integer that determines the order in which multiple node selection callbacks will be
invoked. The callback added with a higher priority will be called before a callback with alower priority. Set to 0 if not required.

Related topics
XPRSremovecbchgnode

Fair Isaac Corporation Proprietary Information

96

Chapter 7: Console and Library Functions

XPRSaddcbcutlog
Purpose

Synopsis

Declares a cut log callback function, called each time the cut log is printed. This callback function will becalled in addition to any callbacks already added by XPRSaddcbcutlog.
int XPRS_CC XPRSaddcbcutlog(XPRSprob prob, int (XPRS_CC ⁎cutlog)(XPRSprob
cbprob, void ⁎cbdata), void ⁎data, int priority);

Arguments
prob
cutlogcbprobcbdatadata
priority

The current problem.
The callback function which takes two arguments, cbprob and cbdata, and has aninteger return value.
The problem passed to the callback function, cutlog.
The user-defined data passed as data when setting up the callback with
XPRSaddcbcutlog.
A user-defined data to be passed to the callback function, cutlog.
An integer that determines the order in which multiple cut log callbacks 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.

Further information
Return a non-zero value from cutlog to stop cutting on the current node.
Related topics
XPRSremovecbcutlog, XPRSaddcbcutmgr.

Fair Isaac Corporation Proprietary Information

97

Chapter 7: Console and Library Functions

XPRSaddcbcutmgr
PurposeThis subroutine is deprecated and will be removed in a future release. Please use XPRSaddcboptnodeinstead.
Declares a user-defined cut manager routine, called at each node of the branch and bound search. This
callback function will be called in addition to any callbacks already added by XPRSaddcbcutmgr.
Synopsis

int XPRS_CC XPRSaddcbcutmgr(XPRSprob prob, int (XPRS_CC ⁎cutmgr)(XPRSprob
cbprob, void ⁎cbdata), void ⁎data, int priority);

Arguments
prob
cutmgr
cbprobcbdatadata
priority

The current problem
The callback function which takes two arguments, cbprob and cbdata, and has aninteger return value. This function is called at each node in the Branch and Bound search.
The problem passed to the callback function, cutmgr.
The user-defined data passed as data when setting up the callback with
XPRSaddcbcutmgr.
A user-defined data to be passed to the callback function, cutmgr.
An integer that determines the order in which multiple global log callbacks 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.

Further information
1. When returning from the user function f_cutlog, the Optimizer will automatically reoptimize the LP
relaxation of the node problem. If a non-zero value is returned from f_cutlog, the function will be calledagain afterwards, unless the LP relaxation has become infeasible or was cut off due to the objectivefunction value. Return 0 from f_cutlog to prevent the function from being called again for the samebranch and bound node.
2. f_cutlog is called for a branch-and-bound node problem after the Optimizer has already applied any
internal cuts and heuristics, but before determining if the node problem should be branched or if the node
LP relaxation solution is MIP feasible.
3. The Optimizer ensures that cuts added to a node are automatically restored at descendant nodes. To dothis, all cuts are stored in a cut pool and the Optimizer keeps track of which cuts from the cut pool must
be restored at each node.
Related topics
XPRSremovecbcutmgr, XPRSaddcbcutlog, CALLBACKCOUNT_CUTMGR.

Fair Isaac Corporation Proprietary Information98

Chapter 7: Console and Library Functions

XPRSaddcbdestroymt
Purpose

Synopsis

Declares a destroy MIP thread callback function, called every time a MIP thread is destroyed by theparallel MIP code. This callback function will be called in addition to any callbacks already added by
XPRSaddcbdestroymt.
int XPRS_CC XPRSaddcbdestroymt(XPRSprob prob, void (XPRS_CC⁎destroymt)(XPRSprob cbprob, void ⁎cbdata), void ⁎data, intpriority);

Arguments
prob
destroymt
cbprobcbdatadata
priority

Related controls
Integer
MIPTHREADS

The current thread problem.
The callback function which takes two arguments, cbprob and cbdata, and has noreturn value.
The thread problem passed to the callback function.
The user-defined data passed as data when setting up the callback with
XPRSaddcbdestroymt.
A user-defined data to be passed to the callback function.
An integer that determines the order in which multiple callbacks of this type will be
invoked. The callback added with a higher priority will be called before a callback with alower priority. Set to 0 if not required.

Number of MIP threads to create.

Further information
This callback is useful for freeing up any user data created in the MIP thread callback.
Related topics
XPRSremovecbdestroymt,XPRSaddcbmipthread.

Fair Isaac Corporation Proprietary Information

99

Chapter 7: Console and Library Functions

XPRSaddcbestimate
PurposeThis subroutine is deprecated and will be removed in a future release. Please use branching objects
instead, see XPRSaddcbchgbranchobject.
Declares an estimate callback function. If defined, it will be called at each node of the branch and boundtree to determine the estimated degradation from branching the user’s global entities. This callback
function will be called in addition to any callbacks already added by XPRSaddcbestimate.
Synopsis

int XPRS_CC XPRSaddcbestimate(XPRSprob prob, int (XPRS_CC⁎estimate)(XPRSprob cbprob, void ⁎cbdata, int ⁎p_entity, int ⁎p_prio,
double ⁎p_degbest, double ⁎p_degworst, double ⁎p_current, int⁎p_preferred, int ⁎p_ninf, double ⁎p_degsum, int ⁎p_nbranches), void
⁎data, int priority);

Argumentsprob
estimate

The current problem.
The callback function which takes eleven arguments, cbprob, cbdata, p_entity,
p_prio, p_degbest, p_degworst, p_current, p_preferred, p_ninf, p_degsum
and p_nbranches, and has an integer return value. This function is called at each nodeof the branch and bound search.
cbprob
The problem passed to the callback function, estimate.
cbdataThe user-defined data passed as data when setting up the callback with
XPRSaddcbestimate.
p_entity
Selected user global entity. Must be non-negative or -1 to indicate that there is no user
global entity candidate for branching. If set to -1, all other arguments, except for p_ninf
and p_degsum are ignored. This argument is initialized to -1.
p_prioPriority of selected user global entity. This argument is initialized to a value larger (i.e.,lower priority) than the default priority for global entities (see Section 4.3.3 in Section 4.3).
p_degbest Estimated degradation from branching on selected user entity in preferred direction.
p_degworst Estimated degradation from branching on selected user entity in worst direction.
p_current Current value of user global entities.
p_preferred Preferred branch on user global entity (0,...,p_nbranches-1).
p_ninfNumber of infeasible user global entities.
p_degsum
Sum of estimated degradations of satisfying all user entities.
p_nbranches Number of branches. The user separate routine (set up with XPRSaddcbsepnode) will
be called p_nbranches times in order to create the actual branches.
data
A user-defined data to be passed to the callback function, estimate.
priority
An integer that determines the order in which multiple estimate callbacks 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.

Further information
Consider using the more flexible branching objects, as described for the XPRS_bo_create function.
Related topics
XPRSremovecbestimate, XPRSsetbranchcuts, XPRSaddcbsepnode, XPRS_bo_create.

Fair Isaac Corporation Proprietary Information

100Chapter 7: Console and Library Functions

XPRSaddcbgapnotify
Purpose

Synopsis

Declares a gap notification callback, to be called when a MIP solve reaches a predefined target, set using
the MIPRELGAPNOTIFY, MIPABSGAPNOTIFY, MIPABSGAPNOTIFYOBJ and/or
MIPABSGAPNOTIFYBOUND controls.
int XPRS_CC XPRSaddcbgapnotify(XPRSprob prob, void (XPRS_CC⁎gapnotify)(XPRSprob cbprob, void⁎ cbdata, double⁎
p_relgapnotifytarget, double⁎ p_absgapnotifytarget, double⁎
p_absgapnotifyobjtarget, double⁎ p_absgapnotifyboundtarget), void⁎data, int priority);

Arguments
prob
gapnotify
cbprobcbdataThe current problem.
The callback function.
The current problem.
The user-defined data passed as data when setting up the callback with
XPRSaddcbgapnotify.
p_relgapnotifytarget The value the MIPRELGAPNOTIFY control will be set to after this callback.
May be modified within the callback in order to set a new notification target.
p_absgapnotifytarget The value the MIPABSGAPNOTIFY control will be set to after this callback.
May be modified within the callback in order to set a new notification target.
p_absgapnotifyobjtarget The value the MIPABSGAPNOTIFYOBJ control will be set to after thiscallback. May be modified within the callback in order to set a new notification target.
p_absgapnotifyboundtarget The value the MIPABSGAPNOTIFYBOUND control will be set to after
this callback. May be modified within the callback in order to set a new notification target.
data
A user-defined data to be passed to the callback function, gapnotify.
priority
An integer that determines the order in which multiple estimate callbacks 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.

ExampleThe following example prints a message when the gap reaches 10% and 1%
void XPRS_CC gapnotify(XPRSprob prob, void⁎ data,
double⁎ p_relgapnotifytarget, double⁎ p_absgapnotifytarget,
double⁎ p_absgapnotifyobjtarget, double⁎ p_absgapnotifyboundtarget){
double obj, bound, relgap;
XPRSgetdblattrib(prob, XPRS_MIPOBJVAL, &obj);
XPRSgetdblattrib(prob, XPRS_BESTBOUND, &bound);if (obj != 0.0 || bound != 0.0)
relgap = fabs((obj - bound)/ max(fabs(obj), fabs(bound)));else
relgap = 0.0;
if (relgap<=0.10) {printf("Gap reached 10%");⁎p_relgapnotifytarget = 0.1;}
if (relgap<=0.01) {printf("Gap reached 1%");⁎p_relgapnotifytarget = -1; /⁎ Don't call gapnotify again ⁎/Fair Isaac Corporation Proprietary Information

101

Chapter 7: Console and Library Functions}}

XPRSsetdblcontrol( prob, XPRS_MIPRELGAPNOTIFY, 0.10 );XPRSaddcbgapnotify( prob, gapnotify, NULL, 0 );XPRSmipoptimize(prob, "");
Further information
The target values that caused the callback to be triggered will automatically be reset to prevent the same
callback from being fired again.
Related topics
MIPRELGAPNOTIFY, MIPABSGAPNOTIFY, MIPABSGAPNOTIFYOBJ, MIPABSGAPNOTIFYBOUND,XPRSremovecbgapnotify.

Fair Isaac Corporation Proprietary Information

102

Chapter 7: Console and Library Functions

XPRSaddcbgloballog
Purpose

Synopsis

Declares a global log callback function, called each time the global log is printed. This callback function
will be called in addition to any callbacks already added by XPRSaddcbgloballog.
int XPRS_CC XPRSaddcbgloballog(XPRSprob prob, int (XPRS_CC⁎globallog)(XPRSprob cbprob, void ⁎cbdata), void ⁎data, intpriority);

Arguments
prob
globallog

cbprobcbdatadata
priority

Related controls
Integer
MIPLOG
ExampleThe current problem.
The callback function which takes two arguments, cbprob and cbdata, and has aninteger return value. This function is called whenever the global log is printed asdetermined by the MIPLOG control.
The problem passed to the callback function, globallog.
The user-defined data passed as data when setting up the callback with
XPRSaddcbgloballog.
A user-defined data to be passed to the callback function, globallog.
An integer that determines the order in which multiple global log callbacks 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.

Global print flag.

The following example prints at each node of the global search the node number and its depth:
XPRSsetintcontrol(prob, XPRS_MIPLOG, 3);
XPRSaddcbgloballog(prob, globalLog, NULL, 0);
XPRSmipoptimize(prob,"");
The callback function may resemble:
int XPRS_CC globalLog(XPRSprob prob, void ⁎data){
int node, nodedepth;
XPRSgetintattrib(prob, XPRS_NODEDEPTH, &nodedepth);
XPRSgetintattrib(prob, XPRS_CURRENTNODE, &node);
printf("Node %d with depth %d has just been processed\n",node, nodedepth);}

return 0;

See the example depthfirst.c in the examples/optimizer/c folder.
Further information
If the callback function returns a nonzero value, the global search will be interrupted.
Related topics
XPRSremovecbgloballog, XPRSaddcbbarlog, XPRSaddcblplog, XPRSaddcbmessage.

Fair Isaac Corporation Proprietary Information

103

Chapter 7: Console and Library Functions

XPRSaddcbinfnode
Purpose

Synopsis

Declares a user infeasible node callback function, called after the current node has been found to be
infeasible during the Branch and Bound search. This callback function will be called in addition to any
callbacks already added by XPRSaddcbinfnode.
int XPRS_CC XPRSaddcbinfnode(XPRSprob prob, void (XPRS_CC⁎infnode)(XPRSprob cbprob, void ⁎cbdata), void ⁎data, int priority);

Arguments
prob
infnodecbprobcbdatadata
priority

ExampleThe current problem
The callback function which takes two arguments, cbprob and cbdata, and has noreturn value. This function is called after the current node has been found to be infeasible.
The problem passed to the callback function, infnode.
The user-defined data passed as data when setting up the callback with
XPRSaddcbinfnode.
A user-defined data to be passed to the callback function, infnode.
An integer that determines the order in which multiple user infeasible node callbacks will
be invoked. The callback added with a higher priority will be called before a callback witha lower priority. Set to 0 if not required.

The following notifies the user whenever an infeasible node is found during the global search:
XPRSaddcbinfnode(prob,nodeInfeasible,NULL,0);
XPRSmipoptimize(prob,"");
The callback function may resemble:
void XPRS_CC nodeInfeasible(XPRSprob prob, void ⁎data){
int node;
XPRSgetintattrib(prob, XPRS_CURRENTNODE, &node);
printf("Node %d infeasible\n", node);}
See the example depthfirst.c in the examples/optimizer/c folder.

Related topics
XPRSremovecbinfnode, XPRSaddcboptnode, XPRSaddcbintsol, XPRSaddcbnodecutoff.

Fair Isaac Corporation Proprietary Information

104

Chapter 7: Console and Library Functions

XPRSaddcbintsol
Purpose

Synopsis

Declares a user integer solution callback function, called every time an integer solution is found byheuristics or during the Branch and Bound search. This callback function will be called in addition to any
callbacks already added by XPRSaddcbintsol.
int XPRS_CC XPRSaddcbintsol(XPRSprob prob, void (XPRS_CC ⁎intsol)(XPRSprob
cbprob, void ⁎cbdata), void ⁎data, int priority);

Arguments
prob
intsolcbprobcbdatadata
priority

ExampleThe current problem.
The callback function which takes two arguments, cbprob and cbdata, and has noreturn value. This function is called if the current node is found to have an integer feasible
solution, i.e. every time an integer feasible solution is found.
The problem passed to the callback function, intsol.
The user-defined data passed as data when setting up the callback with
XPRSaddcbintsol.
A user-defined data to be passed to the callback function, intsol.
An integer that determines the order in which multiple integer solution callbacks will be
invoked. The callback added with a higher priority will be called before a callback with alower priority. Set to 0 if not required.

The following example prints integer solutions as they are discovered in the global search:
XPRSaddcbintsol(prob,printsol,NULL,0);
XPRSmipoptimize(prob,"");
The callback function might resemble:
void XPRS_CC printsol(XPRSprob cbprob, void ⁎data){
int i, cols;
double objval, ⁎x;
XPRSgetintattrib(cbprob, XPRS_ORIGINALCOLS, &cols);
XPRSgetdblattrib(cbprob, XPRS_LPOBJVAL, &objval);
x = malloc(cols ⁎ sizeof(double));if (!x) return;
XPRSgetlpsol(cbprob, x, NULL, NULL, NULL);}

printf("\nInteger solution found: %f\n", objval);for(i=0;i<cols;i++) printf(" x[%d] = %d\n", i, x[i]);free(x);Fair Isaac Corporation Proprietary Information

105

Chapter 7: Console and Library Functions

Further information
1. This callback is useful if the user wants to retrieve the integer solution when it is found.
2. To retrieve the integer solution, use either XPRSgetlpsol or XPRSgetpresolvesol.
XPRSgetmipsol always returns the last integer solution found and, if called from the intsol callback,it will not necessarily return the solution that caused the invocation of the callback (for example, it ispossible that when solving with multiple MP threads, another thread finds a new integer solution before
the user calls XPRSgetmipsol).
3. This callback is called after a new integer solution was found by the Optimizer. Use a callback set by
XPRSaddcbpreintsol in order to be notified before a new integer solution is accepted by the
Optimizer, which allows for the new solution to be rejected.
Related topics
XPRSremovecbintsol, XPRSaddcbpreintsol.

Fair Isaac Corporation Proprietary Information

106

Chapter 7: Console and Library Functions

XPRSaddcblplog
Purpose

Synopsis

Declares a simplex log callback function which is called after every LPLOG iterations of the simplex
algorithm. This callback function will be called in addition to any callbacks already added by
XPRSaddcblplog.
int XPRS_CC XPRSaddcblplog(XPRSprob prob, int (XPRS_CC ⁎lplog)(XPRSprob
cbprob, void⁎ cbdata), void⁎ data, int priority);

Arguments
prob
lplog

cbprobcbdatadata
priority

Related controls
Integer
LPLOG
ExampleThe current problem.
The callback function which takes two arguments, cbprob and cbdata, and has aninteger return value. This function is called every LPLOG simplex iterations including
iteration 0 and the final iteration.
The problem passed to the callback function, lplog.
The user-defined data passed as data when setting up the callback with
XPRSaddcblplog.
A user-defined data to be passed to the callback function, lplog.
An integer that determines the order in which multiple lplog callbacks 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.

Frequency and type of simplex algorithm log.

The following code sets a callback function, lpLog, to be called every 10 iterations of the optimization:
XPRSsetintcontrol(prob,XPRS_LPLOG,10);
XPRSaddcblplog(prob,lpLog,NULL,0);
XPRSreadprob(prob,"problem","");XPRSmipoptimize(prob,"");
The callback function may resemble:
int XPRS_CC lpLog(XPRSprob cbprob, void ⁎data){
int iter; double obj;}

XPRSgetintattrib(cbprob, XPRS_SIMPLEXITER, &iter);
XPRSgetdblattrib(cbprob, XPRS_LPOBJVAL, &obj);
printf("At iteration %d objval is %g\n", iter, obj);
return 0;

Further information
If the callback function returns a nonzero value the solution process will be interrupted.
Related topics
XPRSremovecblplog, XPRSaddcbbarlog, XPRSaddcbgloballog, XPRSaddcbmessage.

Fair Isaac Corporation Proprietary Information

107

Chapter 7: Console and Library Functions

XPRSaddcbmessage
Purpose

Synopsis

Declares an output callback function, called every time a text line relating to the given XPRSprob is output
by the Optimizer. This callback function will be called in addition to any callbacks already added by
XPRSaddcbmessage. Note that Optimizer messages passed to the callback do not end with a newline
character; the user callback is expected to append such required newline characters itself.
int XPRS_CC XPRSaddcbmessage(XPRSprob prob, void (XPRS_CC⁎message)(XPRSprob cbprob, void ⁎cbdata, const char ⁎msg, int msglen,
int msgtype), void ⁎data, int priority);

Arguments
prob
message
cbprobcbdatamsg
msglenmsgtypedata
priority

Related controls
Integer
OUTPUTLOG
ExampleThe current problem.
The callback function which takes five arguments, cbprob, cbdata, msg, msglen andmsgtype, and has no return value. Use a NULL value to cancel a callback function.
The problem passed to the callback function.
The user-defined data passed as data when setting up the callback with
XPRSaddcbmessage.
A null terminated character array (string) containing the message, which may simply be a
new line.
The length of the message string, excluding the null terminator.
Indicates the type of output message:
1
information messages;
2(not used);3
warning messages;
4
error messages.
A negative value indicates that the Optimizer is about to finish and the buffers should beflushed at this time if the output is being redirected to a file.
A user-defined data to be passed to the callback function.
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.

All messages are disabled if set to zero.

The following example simply sends all output to the screen (stdout):
XPRSaddcbmessage(prob,Message,NULL,0);
The callback function might resemble:
void XPRS_CC Message(XPRSprob cbprob, void⁎ data,
const char ⁎msg, int msglen, int msgtype){switch(msgtype){case 4: /⁎ error ⁎/case 3: /⁎ warning ⁎/case 2: /⁎ not used ⁎/case 1: /⁎ information ⁎/Fair Isaac Corporation Proprietary Information

108

Chapter 7: Console and Library Functions}}

printf("%s\n", msg);
break;
default: /⁎ exiting - buffers need flushing ⁎/fflush(stdout);
break;

Further information
1. Screen output is automatically created by the Optimizer Console only. To produce output when using the
Optimizer library, it is necessary to define this callback function and use it to print the messages to thescreen (stdout).
2. This function offers one method of handling the messages which describe any warnings and errors that
may occur during execution. Other methods are to check the return values of functions and then get theerror code using the ERRORCODE attribute, obtain the last error message directly using
XPRSgetlasterror, or send messages direct to a log file using XPRSsetlogfile.
3. Visual Basic users must use the alternative function XPRSaddcbmessageVB to define the callback; thisis required because of the different way VB handles strings.
Related topics
XPRSremovecbmessage, XPRSaddcbbarlog, XPRSaddcbgloballog, XPRSaddcblplog,
XPRSsetlogfile.

Fair Isaac Corporation Proprietary Information

109

Chapter 7: Console and Library Functions

XPRSaddcbmipthread
Purpose

Synopsis

Declares a MIP thread callback function, called every time a MIP worker problem is created by the parallel
MIP code. This callback function will be called in addition to any callbacks already added by
XPRSaddcbmipthread.
int XPRS_CC XPRSaddcbmipthread(XPRSprob prob, void (XPRS_CC⁎mipthread)(XPRSprob cbprob, void ⁎cbdata, XPRSprob threadprob), void
⁎data, int priority);

Arguments
prob
mipthread

The current problem.
The callback function which takes three arguments, cbprob, cbdata andthreadprob, and has no return value.
cbprob
The problem passed to the callback function.
cbdataThe user-defined data passed to the callback function.
threadprob The problem pointer for the MIP threaddata
A user-defined data to be passed to the callback function.
priority
An integer that determines the order in which multiple callbacks of this type will be
invoked. The callback added with a higher priority will be called before a callback with alower priority. Set to 0 if not required.

Related controls
Integer
MIPTHREADS
ExampleNumber of MIP threads to create.

The following example clears the message callback for each of the MIP threads:
XPRSaddcbmipthread(prob,mipthread,NULL, 0);
void XPRS_CC mipthread(XPRSprob cbprob, void⁎ cbdata,
XPRSprob mipthread){/⁎ clear the message callback⁎/
XPRSremovecbmessage(cbprob, mipthread, NULL);}

Further information
This function will be called when a new MIP worker problem is created. Each worker problem receives aunique identifier that can be obtained through the MIPTHREADID attribute. Worker problems can bematched with different system threads at different points of a solve, so the system thread that is
responsible for executing the callback is not necessarily the same thread used for all subsequentcallbacks for the same worker problem. On the other hand, worker problems are always assigned to asingle thread at a time and the same nodes are always solved on the same worker problem in repeatedruns of a deterministic MIP solve. A worker problem therefore acts as a virtual thread through the node
solves.
Related topics
XPRSremovecbmipthread,XPRSaddcbdestroymt, MIPTHREADS, MAXMIPTASKS.

Fair Isaac Corporation Proprietary Information

110Chapter 7: Console and Library Functions

XPRSaddcbnewnode
Purpose

Synopsis

Declares a callback function that will be called every time a new node is created during the branch andbound search. This callback function will be called in addition to any callbacks already added by
XPRSaddcbnewnode.
int XPRS_CC XPRSaddcbnewnode(XPRSprob prob, void (XPRS_CC⁎newnode)(XPRSprob cbprob, void⁎ cbdata, int parentnode, int newnode,
int branch), void⁎ data, int priority);

Arguments
prob
newnodeThe current problem.
The callback function, which takes five arguments: myprob, cbdata, parentnode,
newnode and branch. This function is called every time a new node is created throughbranching.
cbprob
The problem passed to the callback function, newnode.
cbdataThe user-defined data passed as data when setting up the callback with
XPRSaddcbnewnode.
parentnode Unique identifier for the parent of the new node.
newnodeUnique identifier assigned to the new node.
branchThe sequence number of the new node amongst the child nodes of parentnode. For
regular branches on a global entity this will be either 0 or 1.
data
A user-defined data to be passed to the callback function.
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.

Further information
1. For regular branches on a global entity, branch will be either zero or one, depending on whether the newnode corresponds to branching the global entity up or down.
2. When branching on an XPRSbranchobject, branch refers to the given branch index of the data.
3. For new nodes created using the XPRSaddcbestimate/XPRSaddcbsepnode callback functions,branch is identical to the ifup argument of the XPRSaddcbsepnode callback function.
Related topics
XPRSremovecbnewnode, XPRSaddcbchgnode.

Fair Isaac Corporation Proprietary Information

111

Chapter 7: Console and Library Functions

XPRSaddcbnodecutoff
Purpose

Synopsis

Declares a user node cutoff callback function, called every time a node is cut off as a result of an
improved integer solution being found during the branch and bound search. This callback function will becalled in addition to any callbacks already added by XPRSaddcbnodecutoff.
int XPRS_CC XPRSaddcbnodecutoff(XPRSprob prob, void (XPRS_CC⁎nodecutoff)(XPRSprob cbprob, void ⁎cbdata, int node), void ⁎data,
int priority);

Arguments
prob
The current problem.
nodecutoff The callback function, which takes three arguments, cbprob, cbdata and node, andhas no return value. This function is called every time a node is cut off as the result of an
improved integer solution being found.
cbprob
The problem passed to the callback function, nodecutoff.
cbdataThe user-defined data passed as data when setting up the callback with
XPRSaddcbnodecutoff.
node
The number of the node that is cut off.
data
A user-defined data to be passed to the callback function, nodecutoff.
priority
An integer that determines the order in which multiple node-optimal callbacks will be
invoked. The callback added with a higher priority will be called before a callback with alower priority. Set to 0 if not required.
ExampleThe following notifies the user whenever a node is cutoff during the global search:
XPRSaddcbnodecutoff(prob,Cutoff,NULL,0);
XPRSmipoptimize(prob,"");
The callback function might resemble:
void XPRS_CC Cutoff(XPRSprob prob, void ⁎data, int node){printf("Node %d cutoff\n", node);}
See the example depthfirst.c in the examples/optimizer/c folder.

Further information
This function allows the user to keep track of the eligible nodes. Note that the LP solution will not be
available from this callback.
Related topics
XPRSremovecbnodecutoff, XPRSaddcboptnode, XPRSaddcbinfnode, XPRSaddcbintsol.

Fair Isaac Corporation Proprietary Information

112

Chapter 7: Console and Library Functions

XPRSaddcboptnode
Purpose

Synopsis

Declares an optimal node callback function, called during the branch and bound search, after the LP
relaxation has been solved for the current node, and after any internal cuts and heuristics have been
applied, but before the Optimizer checks if the current node should be branched. This callback function
will be called in addition to any callbacks already added by XPRSaddcboptnode.
int XPRS_CC XPRSaddcboptnode(XPRSprob prob, void (XPRS_CC⁎optnode)(XPRSprob cbprob, void ⁎cbdata, int ⁎p_infeasible), void
⁎data, int priority);

Arguments
prob
optnodeThe current problem.
The callback function which takes three arguments, cbprob, cbdata andp_infeasible, and has no return value.
cbprob
The problem passed to the callback function, optnode.
cbdataThe user-defined data passed as data when setting up the callback with
XPRSaddcboptnode.
p_infeasible The feasibility status. If set to a nonzero value by the user, the current node will bedeclared infeasible.
data
A user-defined data to be passed to the callback function, optnode.
priority
An integer that determines the order in which multiple node-optimal callbacks will be
invoked. The callback added with a higher priority will be called before a callback with alower priority. Set to 0 if not required.

ExampleThe following prints the optimal objective value of the node LP relaxations:
XPRSaddcboptnode(prob,nodeOptimal,NULL,0);
XPRSmipoptimize(prob,"");
The callback function might resemble:
void XPRS_CC nodeOptimal(XPRSprob prob, void ⁎data, int ⁎p_infeasible){
int node;
double objval;}

XPRSgetintattrib(prob, XPRS_CURRENTNODE, &node);
printf("NodeOptimal: node number %d\n", node);
XPRSgetdblattrib(prob, XPRS_LPOBJVAL, &objval);printf("\tObjective function value = %f\n", objval);

See the example depthfirst.c in the examples/optimizer/c folder.
Related topics
XPRSremovecboptnode, XPRSaddcbinfnode, XPRSaddcbintsol, XPRSaddcbnodecutoff,
CALLBACKCOUNT_OPTNODE.

Fair Isaac Corporation Proprietary Information

113

Chapter 7: Console and Library Functions

XPRSaddcbpreintsol
Purpose

Synopsis

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 function
will be called in addition to any integer solution callbacks already added by XPRSaddcbpreintsol.
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
preintsol

cbprobcbdatasoltypep_reject
p_cutoff

data
priority

The current problem.
The callback function which takes five 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.
The problem passed to the callback function, preintsol.
The user-defined data passed as data when setting up the callback with
XPRSaddcbpreintsol.
The type of MIP solution that has been found: Set to 1 if the solution was found using aheuristic. Otherwise, it will be the global feasible solution to the current node of the global
search.
0
The continuous relaxation solution to the current node of the global search,which has been found to be global feasible.
1
A MIP solution found by a heuristic.
2
A MIP solution provided by the user.
3
A solution resulting from refinement of primal or dual violations of a previous
MIP solution.
Set this to 1 if the solution should be rejected.
The new cutoff value that the Optimizer will use if the solution is accepted. If the userchanges p_cutoff, the new value will be used instead. The cutoff value will not be
updated if the solution is rejected.
A user-defined data to be passed to the callback function, preintsol.
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
MIPABSCUTOFF

Branch and Bound: If the user knows that they are interested only in values of theobjective function which are better than some value, this can be assigned to
MIPABSCUTOFF. This allows the Optimizer to ignore solving any nodes which may
yield worse objective values, saving solution time. When a MIP solution is found a
new cut off value is calculated and the value can be obtained from the
CURRMIPCUTOFF attribute. The value of CURRMIPCUTOFF is calculated using the
MIPRELCUTOFF and MIPADDCUTOFF controls.

Fair Isaac Corporation Proprietary Information

114

Chapter 7: Console and Library Functions

Further information
1. If a solution is rejected, the Optimizer will drop the found solution without updating any attributes,
including the cutoff value. To change the cutoff value when rejecting a solution, the control
MIPABSCUTOFF should be set instead.
2. When a node solution (soltype = 0) is rejected, the node itself will be dropped without further
branching.
3. To retrieve the integer solution, use either XPRSgetlpsol or XPRSgetpresolvesol.
XPRSgetmipsol will not return the newly found solution because it has not been saved at this point.
Related topics
XPRSremovecbpreintsol, XPRSaddcbintsol.

Fair Isaac Corporation Proprietary Information

115

Chapter 7: Console and Library Functions

XPRSaddcbprenode
Purpose

Synopsis

Declares a preprocess node callback function, called before the LP relaxation of a node has been
optimized, so the solution at the node will not be available. This callback function will be called inaddition to any callbacks already added by XPRSaddcbprenode.
int XPRS_CC XPRSaddcbprenode(XPRSprob prob, void (XPRS_CC⁎prenode)(XPRSprob cbprob, void ⁎cbdata, int ⁎p_infeasible), void
⁎data, int priority);

Arguments
prob
prenodeThe current problem.
The callback function, which takes three arguments, cbprob, cbdata andp_infeasible, and has no return value. This function is called before a node isreoptimized and the node may be made infeasible by setting ⁎p_infeasible to 1.
cbprob
The problem passed to the callback function, prenode.
cbdataThe user-defined data passed as data when setting up the callback with
XPRSaddcbprenode.
p_infeasible The feasibility status. If set to a nonzero value by the user, the current node will bedeclared infeasible by the Optimizer.
data
A user-defined data to be passed to the callback function, prenode.
priority
An integer that determines the order in which multiple preprocess node callbacks will be
invoked. The callback added with a higher priority will be called before a callback with alower priority. Set to 0 if not required.

ExampleThe following example notifies the user before each node is processed:
XPRSaddcbprenode(prob, preNode, NULL, 0);
XPRSmipoptimize(prob,"");
The callback function might resemble:
void XPRS_CC preNode(XPRSprob prob, void⁎ data, int ⁎p_infeasible){⁎p_infeasible = 0; /⁎ set to 1 if node is infeasible ⁎/}Related topics
XPRSremovecbprenode, XPRSaddcbchgnode, XPRSaddcbinfnode, XPRSaddcbintsol,
XPRSaddcbnodecutoff, XPRSaddcboptnode.

Fair Isaac Corporation Proprietary Information

116

Chapter 7: Console and Library Functions

XPRSaddcbsepnode
PurposeThis subroutine is deprecated and will be removed in a future release. Please use branching objects
instead, see XPRSaddcbchgbranchobject.
Declares a separate callback function to specify how to branch on a node in the branch and bound treeusing a global data. A node can be branched by applying either cuts or bounds to each node. These arestored in the cut pool. This callback function will be called in addition to any callbacks already added by
XPRSaddcbsepnode.
Synopsis

int XPRS_CC XPRSaddcbsepnode(XPRSprob prob, int (XPRS_CC ⁎sepnode)(XPRSprob
cbprob, void ⁎cbdata, int branch, int entity, int up, double
current), void ⁎data, int priority);

Arguments
prob
sepnodecbprobcbdatabranchentityup
current
data
priority

ExampleThe current problem.
The callback function, which takes six arguments, cbprob, cbdata, branch, entity,
up and current, and has an integer return value.
The problem passed to the callback function, sepnode.
The user-defined data passed as data when setting up the callback with
XPRSaddcbsepnode.
The branch number.
The global entity number.
The direction of branch on the global entity (same as branch).
Current value of the global entity.
A user-defined data to be passed to the callback function, sepnode .
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.

This example solves a MIP, using a separation callback function to branch on fractional integer variables.
It assumes the presence of an estimation callback function (not shown), defined by
XPRSaddcbestimate, to identify a fractional integer variable.
XPRSaddcbsepnode(prob,nodeSep,NULL,0);
XPRSmipoptimize(prob,"");
where the function nodeSep may be defined as follows:
int nodeSep(XPRSprob cbprob, void ⁎cbdata, int branch,
int entity, int up, double current){
XPRScut index;
double dbd;
if( up ){dbd = floor(xval);
XPRSstorebounds(cbprob, 1, &entity, "U", &dbd, &index);
}
else
{

Fair Isaac Corporation Proprietary Information

117

Chapter 7: Console and Library Functions

dbd = ceil(xval);
XPRSstorebounds(cbprob, 1, &entity, "L", &dbd, &index);}}
XPRSsetbranchbounds(prob, index);
return 0;

Further information
1. The return value of the sepnode callback function is currently ignored.
2. Consider using the more flexible branching objects, as described for the XPRS_bo_create function.
3. The user separate routine is called nbr times where nbr is returned by the estimate callback function,
XPRSaddcbestimate. This allows multi-way branching to be performed.
4. The bounds and/or cuts to be applied at a node must be specified in the user separate routine by calling
XPRSsetbranchbounds and/or XPRSsetbranchcuts.
Related topics
XPRSremovecbsepnode, XPRSsetbranchbounds, XPRSsetbranchcuts, XPRSaddcbestimate,
XPRSstorebounds, XPRSstorecuts.

Fair Isaac Corporation Proprietary Information

118

Chapter 7: Console and Library Functions

XPRSaddcbusersolnotify
Purpose

Synopsis

Declares a callback function to be called each time a solution added by XPRSaddmipsol has beenprocessed. This callback function will be called in addition to any callbacks already added by
XPRSaddcbusersolnotify.
int XPRS_CC XPRSaddcbusersolnotify(XPRSprob prob, void (XPRS_CC⁎usersolnotify)(XPRSprob cbprob, void⁎ cbdata, const char⁎ solname,int status), void⁎ data, int priority);

Arguments
prob
The current problem.
usersolnotify The callback function which takes four arguments, cbprob, cbdata, solname andstatus and has no return value.
cbprob
The problem passed to the callback function, usersolnotify.
cbdataThe user-defined data passed as data when setting up the callback with
XPRSaddcbusersolnotify.
solnameThe string name assigned to the solution when it was loaded into the Optimizer using
XPRSaddmipsol.
statusOne of the following status values:
0
An error occurred while processing the solution.
1
Solution is feasible.
2
Solution is feasible after reoptimizing with fixed globals.
3
A local search heuristic was applied and a feasible solution discovered.
4
A local search heuristic was applied but a feasible solution was not found.
5
Solution is infeasible and a local search could not be applied.
6
Solution is partial and a local search could not be applied.
7
Failed to reoptimize the problem with globals fixed to the provided solution.
Likely because a time or iteration limit was reached.
Solution is dropped. This can happen if the MIP problem is changed or solved to8completion before the solution could be processed.
data
A user-defined data to be passed to the callback function, usersolnotify.
priority
An integer that determines the order in which multiple callbacks 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.
Further information
If presolve is turned on, any solution added with XPRSaddmipsol will first be presolved before it can bechecked. The value returned in status refers to the presolved solution, which might have had values
adjusted due to bound changes, fixing of variables, etc.
Related topics
XPRSremovecbusersolnotify, XPRSaddmipsol.

Fair Isaac Corporation Proprietary Information

119Chapter 7: Console and Library Functions

XPRSaddcols, XPRSaddcols64
Purpose
Synopsis

Allows columns to be added to the matrix after passing it to the Optimizer using the input routines.
int XPRS_CC XPRSaddcols(XPRSprob prob, int ncols, int ncoefs, const double
objcoef[], const int start[], const int rowind[], const double
rowcoef[], const double lb[], const double ub[]);int XPRS_CC XPRSaddcols64(XPRSprob prob, int ncols, XPRSint64 ncoefs, const
double objcoef[], const XPRSint64 start[], const int rowind[], const
double rowcoef[], const double lb[], const double ub[]);Arguments
prob
ncols
ncoefsobjcoefstartrowindrowcoeflbub

The current problem.
Number of new columns.
Number of new nonzeros in the added columns.
Double array of length ncols containing the objective function coefficients of the newcolumns.
Integer array of length ncols containing the offsets in the rowind and rowcoef arraysof the start of the elements for each column.
Integer array of length ncoefs containing the row indices for the elements in eachcolumn.
Double array of length ncoefs containing the element values.
Double array of length ncols containing the lower bounds on the added columns.
Double array of length ncols containing the upper bounds on the added columns.

Related controls
Integer
EXTRACOLS
EXTRAELEMSEXTRAMIPENTS
DoubleMATRIXTOLExampleNumber of extra columns to be allowed for.
Number of extra matrix elements to be allowed for.
Number of extra global entities to be allowed for.
Tolerance on matrix elements.

In this example, we consider the two problems:(a)maximize:

2x + y(b)subject to:x + 4y≤24

maximize:

2x + y + 3z

subject to:x + 4y + 2z

≤

24

y

≤

5

y+z

≤

5

3x + y≤20

3x + y

≤

20

x+y

≤

9

x + y + 3z

≤

9

z

≤

12

Using XPRSaddcols, the following transforms (a) into (b) and then names the new variable using
XPRSaddnames:
obj[0] = 3;start[] = {0};rowind[] = {0, 1, 3};

Fair Isaac Corporation Proprietary Information

120

Chapter 7: Console and Library Functions

matval[] = {2.0, 1.0, 3.0};lb[0] = XPRS_MINUSINFINITY; ub[0] = 12.0;...
XPRSaddcols(prob,1,3,obj,start,rowind,matval,lb,ub);
XPRSaddnames(prob,2,"z",2,2);
Further information
1. The double constants XPRS_PLUSINFINITY and XPRS_MINUSINFINITY defined in the library header
file can be used to represent plus and minus infinity respectively in the bound arrays.
2. If the columns are added to a MIP problem then they will be continuous variables. Use
XPRSchgcoltype to impose integrality conditions on such new columns.
Related topics
XPRSaddnames, XPRSaddrows, XPRSdelcols, XPRSchgcoltype.

Fair Isaac Corporation Proprietary Information

121

Chapter 7: Console and Library Functions

XPRSaddcuts, XPRSaddcuts64
Purpose

Synopsis

Adds cuts directly to the matrix at the current node. Any cuts added to the matrix at the current node andnot deleted at the current node will be automatically added to the cut pool. The cuts added to the cut pool
will be automatically restored at descendant nodes.
int XPRS_CC XPRSaddcuts(XPRSprob prob, int ncuts, const int cuttype[],const char rowtype[], const double rhs[], const int start[], const
int colind[], const double cutcoef[]);int XPRS_CC XPRSaddcuts64(XPRSprob prob, int ncuts, const int cuttype[],const char rowtype[], const double rhs[], const XPRSint64 start[],const int colind[], const double cutcoef[]);Arguments
prob
ncuts
cuttyperowtyperhs
startcolindcutcoef

The current problem.
Number of cuts to add.
Integer array of length ncuts containing the user assigned cut types. The cut types canbe any integer chosen by the user, and are used to identify the cuts in other cut manager
routines using user supplied parameters. The cut type can be interpreted as an integer ora bitmap - see XPRSdelcuts.
Character array of length ncuts containing the row types:
Lindicates a ≤ row;G
indicates a ≥ row;E
indicates an = row.
Double array of length ncuts containing the right hand side elements for the cuts.
Integer array containing offset into the colind and cutcoef arrays indicating the startof each cut. This array is of length ncuts+1 with the last element, start[ncuts], being
where cut ncuts+1 would start.
Integer array of length start[ncuts] containing the column indices in the cuts.
Double array of length start[ncuts] containing the matrix values for the cuts.

Further information
1. The columns and elements of the cuts must be stored contiguously in the colind and cutcoef arrays
passed to XPRSaddcuts. The starting point of each cut must be stored in the start array. To
determine the length of the final cut, the start array must be of length ncuts+1 with the last element of
this array containing the position in colind and cutcoef where the cut ncuts+1 would start.
start[ncuts] denotes the number of nonzeros in the added cuts.
2. The cuts added to the matrix are always added at the end of the matrix and the number of rows is always
set to the original number of cuts added. If ncuts have been added, then the rows 0,...,ROWS-ncuts-1
are the original rows, whilst the rows ROWS-ncuts,...,ROWS-1 are the added cuts. The number of cuts canbe found by consulting the CUTS problem attribute.
3. This function should be called only from within callback functions set by either XPRSaddcboptnode or
XPRSaddcbcutmgr.
Related topics
XPRSaddrows, XPRSdelcpcuts, XPRSdelcuts, XPRSgetcpcutlist, XPRSgetcutlist,
XPRSloadcuts, XPRSstorecuts, Section 5.9.

Fair Isaac Corporation Proprietary Information

122

Chapter 7: Console and Library Functions

XPRSaddgencons, XPRSaddgencons64
Purpose

Synopsis

Adds one or more general constraints to the problem. Each general constraint y = f(x1, ..., xn,
c1, ..., cn) consists of one or more (input) columns xi, zero or more constant values ci and a
resultant (output column) y, different from all xi. General constraints include maximum and minimum(arbitrary number of input columns of any type and arbitrary number of input values, at least one total),
and and or (at least one binary input column, no constant values, binary resultant) and absolutevalue (exactly one input column of arbitrary type, no constant values).
int XPRS_CC XPRSaddgencons(XPRSprob prob, int ncons, int ncols, int nvals,
const int contype[], const int resultant[], const int colstart[],const int colind[], const int valstart[], const double val[]);int XPRS_CC XPRSaddgencons64(XPRSprob prob, int ncons, XPRSint64 ncols,
XPRSint64 nvals, const int contype[], const int resultant[], const
XPRSint64 colstart[], const int colind[], const XPRSint64 valstart[],const double val[]);Arguments
prob
ncons
ncols
nvals
contyperesultantcolstart
colindvalstart
val
ExampleThe current problem.
The number of general constraints to add.
The total number of input variables in general constraints that should be added.
The total number of constant values in general constraints that should be added.
Integer array of length ncons containing the types of the general constraints:
XPRS_GENCONS_MAX (0)indicates a maximum constraint;
XPRS_GENCONS_MIN (1)indicates a minimum constraint;
XPRS_GENCONS_AND (2)indicates an and constraint.
XPRS_GENCONS_OR (3)indicates an or constraint;
XPRS_GENCONS_ABS (4)indicates an absolute value constraint.
Integer array of length ncons containing the indices of the output variables of thegeneral constraints.
Integer array of length ncons containing the start index of each general constraint
in the colind array.
Integer array of length ncols containing the input variables in all general
constraints.
Integer array of length ncons containing the start index of each general constraint
in the val array (may be NULL if ncoefs = 0).
Double array of length nvals containing the constant values in all general
constraints (may be NULL if ncoefs = 0).

This adds two new general constraints x2 = max(x0, x1, 5) and x3 = |x1|:
int contype[] = {XPRS_GENCONS_MAX, XPRS_GENCONS_ABS};
int resultant[] = {2, 3};
int colstart[] = {0, 2};
int colind[] = {0, 1, 1};
int valstart[] = {0, 1};
double val[] = {5.0};...
XPRSaddgencons(prob, 2, 3, 1, contype, resultant, colstart, colind, valstart, v

Fair Isaac Corporation Proprietary Information

123Chapter 7: Console and Library Functions

XPRSmipoptimize(prob,"");
Further information
General constraints must be set up before solving the problem. They are converted to additional binary
variables, indicator and linear constraints with the exact formulation and number of added entities
depending on the performed presolving.
Note that using non-binary variables in and/or constraints or adding constant values to them orabsolute value constraints will give an error at solve time.
Related controls
Integer
GENCONSDUALREDUCTIONS Controls whether dual reductions may be applied to reduce the number ofadded variables and constraints.
Related topics
XPRSgetgencons, XPRSdelgencons.

Fair Isaac Corporation Proprietary Information

124

Chapter 7: Console and Library Functions

XPRSaddmipsol
Purpose
Synopsis

Adds a new feasible, infeasible or partial MIP solution for the problem to the Optimizer.
int XPRS_CC XPRSaddmipsol(XPRSprob prob, int length, const double solval[],const int colind[], const char⁎ name);

Arguments
prob
lengthsolvalcolindname

The current problem.
Number of columns for which a value is provided.
Double array of length length containing solution values.
Optional integer array of length length containing the column indices for the solution
values provided in solval. Should be NULL when length is equal to COLS, in whichcase it is assumed that solval provides a complete solution vector.
An optional name to associate with the solution. Can be NULL.

Further information
1. The function returns immediately after passing the solution to the Optimizer. The solution is placed in apool until the Optimizer is able to analyze the solution during a MIP solve.
2. If the provided solution is found to be infeasible, a limited local search heuristic will be run in an attempt
to find a close feasible integer solution.
3. If a partial solution is provided, global columns will be fixed to any provided values and a limited local
search will be run in an attempt to find integer feasible values for the remaining unspecified columns.
Values provided for continuous column in partial solutions are currently ignored.
4. The XPRSaddcbusersolnotify callback function can be used to discover the outcome of a loadedsolution. The optional name provided as name will be returned in the callback function.
5. If one or more solutions are loaded during the XPRSaddcboptnode callback, the Optimizer will process
all loaded solutions and fire the callback again. This will be repeated as long as new solutions are loaded
during the callback. You can check the CALLBACKCOUNT_OPTNODE attribute if you only want to run once.
Related controls
Integer
CALLBACKCOUNT_OPTNODE Counts the number of times the XPRSaddcboptnode callback has beencalled, in particular after rerunning due to XPRSaddmipsol.
USERSOLHEURISTIC Controls the local search heuristic for an infeasible or partial solution.
Related topics
XPRSaddcbusersolnotify, XPRSaddcboptnode.

Fair Isaac Corporation Proprietary Information

125

Chapter 7: Console and Library Functions

XPRSaddnames
Purpose

Synopsis

When a model is loaded, the rows, columns, sets, piecewise linear and general constraints of the model
may not have names associated with them. This may not be important as the rows, columns, sets,piecewise linear and general constraints can be referred to by their sequence numbers. However, if you
wish row, column, set, piecewise linear and general constraint names to appear in the ASCII solutions
files, the names for a range of rows/columns/... can be added with XPRSaddnames.
int XPRS_CC XPRSaddnames(XPRSprob prob, int type, const char names[], int
first, int last);

Arguments
prob
type

names
first
last
ExampleThe current problem.
1
for row names;2
for column names.
3
for set names.
4for piecewise linear constraint names.
5for general constraint names.
Character buffer containing the null-terminated string names.
Start of the range of rows, columns, sets, piecewise linear or general constraints.
End of the range of rows, columns, sets, piecewise linear of general constraints.

Add variable names (a and b), and constraint names (first, second, and third) to a problem:
char rnames[] = "first\0second\0third"
char cnames[] = "a\0b";...
XPRSaddnames(prob,1,rnames,0,nrow-1);
XPRSaddnames(prob,2,cnames,0,ncol-1);

Related topics
XPRSaddcols, XPRSaddrows, XPRSgetnames.

Fair Isaac Corporation Proprietary Information

126Chapter 7: Console and Library Functions

XPRSaddpwlcons, XPRSaddpwlcons64
Purpose

Synopsis

Adds one or more piecewise linear constraints to the problem. Each piecewise linear constraint y =f(x) consists of an (input) column x, a (different) resultant (output column) y and a piecewise linear
function f. The piecewise linear function f is described by at least two breakpoints, which are given as
combinations of x- and y-values. Discontinuous piecewise linear functions are supported, in this caseboth the left and right limit at a given point need to be entered as breakpoints. To differentiate between
left and right limit, the breakpoints need to be given as a list with non-decreasing x-values.
int XPRS_CC XPRSaddpwlcons(XPRSprob prob, int npwls, int npoints, const int
colind[], const int resultant[], const int start[], const double
xval[], const double yval[]);int XPRS_CC XPRSaddpwlcons64(XPRSprob prob, int npwls, XPRSint64 npoints,
const int colind[], const int resultant[], const XPRSint64 start[],const double xval[], const double yval[]);Arguments
prob
npwls
npoints
colindresultant
start
xval
yval
ExampleThe current problem.
The number of piecewise linear constraints to add.
The total number of breakpoints of all piecewise linear constraints that should be added.
Integer array of length npwls containing the indices of the input variables x of thepiecewise linear functions.
Integer array of length npwls containing the indices of the output variables y of thepiecewise linear functions.
Integer array of length npwls containing the start index of each piecewise linear
constraint in the xval and yval arrays.
Double array of length npoints containing the x-values of the breakpoints.
Double array of length npoints containing the y-values of the breakpoints.

The following example adds a new piecewise linear constraint y = f(x), wheref(x) = -x

if x < 0f(x) = 1

if 0 <= x <= 2

f(x) = 2x-3

if x > 2

This function can be defined using the breakpoints (x = -1, y = 1), (0,0), (0,1), (2,1),(3,3) (note that the first breakpoint could also be replaced, e.g., by (x = -2, y = 2), similarly forthe last):
int colind[] = {0};int resultant[] = {1};int start[] = {0};double xval[] = {-1,0,0,2,3};
double yval[] = {1,0,1,1,3};...
XPRSaddpwlcons(prob,1,5,colind,resultant,start,xval,yval);
XPRSmipoptimize(prob,"");
Further information
Piecewise linear constraints must be set up before solving the problem. They are converted to additional
linear constraints, continuous variables and SOS2 constraints, with the exact formulation and number ofFair Isaac Corporation Proprietary Information

127

Chapter 7: Console and Library Functions

added entities depending on the convexity of the piecewise linear function and some presolving steps
that are applied.
Related controls
IntegerPWLDUALREDUCTIONS Controls whether dual reductions may be applied to reduce the number ofadded variables and constraints.
Related topics
XPRSgetpwlcons, XPRSdelpwlcons.

Fair Isaac Corporation Proprietary Information

128

Chapter 7: Console and Library Functions

XPRSaddqmatrix, XPRSaddqmatrix64
Purpose
Synopsis

Adds a new quadratic matrix into a row defined by triplets.
int XPRS_CC XPRSaddqmatrix(XPRSprob prob, int row, int ncoefs, const int
rowqcol1[], const int rowqcol2[], const double rowqcoef[]);int XPRS_CC XPRSaddqmatrix64(XPRSprob prob, int row, XPRSint64 ncoefs,
const int rowqcol1[], const int rowqcol2[], const double rowqcoef[]);Arguments
prob
row
ncoefsrowqcol1
rowqcol2
rowqcoef

The current problem.
Index of the row where the quadratic matrix is to be added.
Number of triplets used to define the quadratic matrix. This may be less than the numberof coefficients in the quadratic matrix, since off diagonals and their transposed pairs aredefined by one triplet.
First index in the triplets.
Second index in the triplets.
Coefficients in the triplets.

Further information
1. The triplets should be filled to define the upper-triangular part of the quadratic expression. This meansthat to add [x2 + 6 xy] the rowqcoef array shall contain the coefficients 1 and 3, respectively.
2. The matrix defined by rowqcol1, rowqcol2 and rowqcoef should be positive semi-definite for <= andnegative semi-definite for >= rows.
3. The row must not be an equality or a ranged row.
Related topics
XPRSloadqcqp, XPRSgetqrowcoeff, XPRSchgqrowcoeff, XPRSgetqrowqmatrix,
XPRSgetqrowqmatrixtriplets, XPRSgetqrows, XPRSchgqobj, XPRSchgmqobj, XPRSgetqobj.

Fair Isaac Corporation Proprietary Information

129

Chapter 7: Console and Library Functions

XPRSaddrows, XPRSaddrows64
Purpose
Synopsis

Allows rows to be added to the matrix after passing it to the Optimizer using the input routines.
int XPRS_CC XPRSaddrows(XPRSprob prob, int nrows, int ncoefs, const charrowtype[], const double rhs[], const double rng[], const int start[],const int colind[], const double rowcoef[]);int XPRS_CC XPRSaddrows64(XPRSprob prob, int nrows, XPRSint64 ncoefs, const
char rowtype[], const double rhs[], const double rng[], const
XPRSint64 start[], const int colind[], const double rowcoef[]);Arguments
prob
nrows
ncoefsrowtype

rhs
rng

start
colindrowcoef
Related controls
Integer
EXTRAELEMSEXTRAROWS
DoubleMATRIXTOLExampleThe current problem.
Number of new rows.
Number of new nonzeros in the added rows.
Character array of length nrows containing the row types:
Lindicates a ≤ row;G
indicates ≥ row;E
indicates an = row.
R
indicates a range constraint;N
indicates a nonbinding constraint.
Double array of length nrows containing the right hand side elements.
Double array of length nrows containing the row range elements. This may be NULL if
there are no ranged constraints. The values in the rng array will only be read for R typerows. The entries for other type rows will be ignored.
Integer array of length nrows containing the offsets in the colind and rowcoef arraysof the start of the elements for each row.
Integer array of length ncoefs containing the (contiguous) column indices for theelements in each row.
Double array of length ncoefs containing the (contiguous) element values.

Number of extra matrix elements to be allowed for.
Number of extra rows to be allowed for.
Tolerance on matrix elements.

Suppose the current problem is:
maximize:

2x + y + 3z

subject to:x + 4y + 2z

≤

24

y+z

≤

5

3x + y≤20

x + y + 3z≤

9Then the following adds the row 8x + 9y + 10z ≤ 25 to the problem and names it NewRow:
rowtype[0] = 'L';

Fair Isaac Corporation Proprietary Information

130Chapter 7: Console and Library Functions

rhs[0] = 25.0;
start[] = {0};colind[] = {0, 1, 2};
rowcoef[] = {8.0, 9.0, 10.0};...
XPRSaddrows(prob,1,3,rowtype,rhs,NULL,start,colind, rowcoef);
XPRSaddnames(prob,1,"NewRow",4,4);
Further information
Range rows are automatically converted to type L, with an upper bound in the slack. This must be taken
into consideration, when retrieving row type, right–hand side values or range information for rows.
Related topics
XPRSaddcols, XPRSaddcuts, XPRSaddnames, XPRSdelrows.

Fair Isaac Corporation Proprietary Information

131

Chapter 7: Console and Library Functions

XPRSaddsets, XPRSaddsets64
Purpose
Synopsis

Allows sets to be added to the problem after passing it to the Optimizer using the input routines.
int XPRS_CC XPRSaddsets(XPRSprob prob, int nsets, int nelems, const char
settype[], const int start[], const int colind[], const double
refval[]);int XPRS_CC XPRSaddsets64(XPRSprob prob, int nsets, XPRSint64 nelems, const
char settype[], const XPRSint64 start[], const int colind[], const
double refval[]);Arguments
prob
nsets
nelemssettypestartcolindrefvalThe current problem.
Number of new sets.
Number of new nonzeros in the added sets.
Character array of length nsets containing the set types:
1
indicates a SOS1;
2
indicates a SOS2;
Integer array of length nsets containing the offsets in the colind and refval arrays ofthe start of the elements for each set.
Integer array of length nelems containing the (contiguous) column indices for theelements in each set.
Double array of length nelems containing the (contiguous) reference values. These
define the order for SOS2 constraints and may be used in branching for both types.

Related topics
XPRSdelsets.

Fair Isaac Corporation Proprietary Information

132

Chapter 7: Console and Library Functions

XPRSaddsetnames
Purpose

Synopsis

When a model with global entities is loaded, any special ordered sets may not have names associatedwith them. If you wish names to appear in the ASCII solutions files, the names for a range of sets can be
added with this function.
int XPRS_CC XPRSaddsetnames(XPRSprob prob, const char names[], int first,
int last);

Arguments
prob
names
first
last
ExampleThe current problem.
Character buffer containing the null-terminated string names.
Start of the range of sets.
End of the range of sets.

Add set names (set1 and set2) to a problem:
char snames[] = "set1\0set2"...
XPRSaddsetnames(prob,snames,0,1);

Related topics
XPRSaddnames, XPRSloadglobal, XPRSloadqglobal.

Fair Isaac Corporation Proprietary Information

133

Chapter 7: Console and Library Functions

XPRSalter
Purpose
Synopsis

ALTER

Alters or changes matrix elements, right hand sides and constraint senses in the current problem.
int XPRS_CC XPRSalter(XPRSprob prob, const char ⁎filename);
ALTER [filename]Arguments
prob
filename
Related controls
Integer
EXTRAELEMS
DoubleMATRIXTOLThe current problem.
A string of up to MAXPROBNAMELENGTH characters specifying the file to be read. If
omitted, the default problem_name is used with a .alt extension.

Number of extra matrix elements to be allowed for.
Tolerance on matrix elements.

Example 1 (Library)
Since the following call does not specify a filename, the file problem_name.alt is read in, from which
commands are taken to alter the current matrix.
XPRSalter(prob,"");
Example 2 (Console)
The following example reads in the file fred.alt, from which instructions are taken to alter the current
matrix:ALTER fred
Further information
1. The file filename.alt is read. It is an ASCII file containing matrix revision statements in the format
described in Section A.7. The MODIFY format of the MPS REVISE data is also supported.
2. It is not possible to alter a problem that is in a presolved state. Call XPRSpostsolve to bring the
problem back to its original state.
3. If the problem was read from an .lp file, the name to use for the right-hand side is the one given by theattribute RHSNAME which by default is set to RHS00001.
Related topics
Section A.7.

Fair Isaac Corporation Proprietary Information

134

Chapter 7: Console and Library Functions

XPRSbasiscondition

BASISCONDITION

PurposeThis subroutine is deprecated and will be removed in a future release. Please use the
XPRSbasisstability function instead.
Calculates the condition number of the current basis after solving the LP relaxation.
Synopsis

int XPRS_CC XPRSbasiscondition(XPRSprob prob, double ⁎p_cond, double⁎p_scaledcond);
BASISCONDITION

Arguments
prob
The current problem.
p_condThe returned condition number of the current basis.
p_scaledcond The returned condition number of the current basis for the scaled problem.
Example 1 (Library)
Get the condition number after optimizing a problem.
XPRSlpoptimize(prob," ");XPRSbasiscondition(prob,&cond,&scaledcond);
printf("Condition no's are %g %g\n",cond,scaledcond);
Example 2 (Console)
Print the condition number after optimizing a problem.
READPROB problem.mps
LPOPTIMIZEBASISCONDITION
Further information
1. The condition number of an invertible matrix is the norm of the matrix multiplied with the norm of its
inverse. This number is an indication of how accurate the solution can be calculated and how sensitive it
is to small changes in the data. The larger the condition number is, the less accurate the solution is likely
to become.
2. When using the BASISCONDITION command in the Console Optimizer, the condition number is shown
both for the scaled problem and in parenthesis for the original problem.

Fair Isaac Corporation Proprietary Information

135

Chapter 7: Console and Library Functions

XPRSbasisstability
Purpose
Synopsis

BASISSTABILITY

Calculates various measures for the stability of the current basis, including the basis condition number.
int XPRS_CC XPRSbasisstability(XPRSprob prob, int type, int norm, int
scaled, double ⁎p_value);
BASISSTABILITY [-flags]

Arguments
prob
type

norm
scaledp_valueflags

The current problem.
0
Condition number of the basis.
1
Stability measure for the solution relative to the current basis.
2
Stability measure for the duals relative to the current basis.
3
Stability measure for the right hand side relative to the current basis.
Stability measure for the basic part of the objective relative to the current basis.
40
Use the infinity norm.
1
Use the 1 norm.
2
Use the Euclidian norm for vectors, and the Frobenius norm for matrices.
If the stability values are to be calculated in the scaled, or the unscaled matrix.
Pointer to a double, where the calculated value is to be returned.
xStability measure for the solution and right–hand side values relative to thecurrent basis.
dStability measure for the duals and the basic part of the objective relative to thecurrent basis.
c
Condition number of the basis (default).
i
Use the infinity norm (default).
o
Use the one norm.
e
Use the Euclidian norm for vectors, and the Frobenius norm for matrices.
u
Calculate values in the unscaled matrix.

Further information
1. The Console Optimizer command BASISSTABILITY uses 0 as the default value for type and norm, andcalculates the values in the scaled matrix.
2. The condition number (type = 0) of an invertible matrix is the norm of the matrix multiplied with thenorm of its inverse. This number is an indication of how accurate the solution can be calculated and how
sensitive it is to small changes in the data. The larger the condition number is, the less accurate thesolution is likely to become.
3. The stability measures (type = 1...4) are using the original matrix and the basis to recalculate thevarious vectors related to the solution and the duals. The returned stability measure is the norm of thedifference of the recalculated vector to the original one.

Fair Isaac Corporation Proprietary Information

136

Chapter 7: Console and Library Functions

XPRSbndsa
Purpose

Synopsis

Returns upper and lower sensitivity ranges for specified variables’ lower and upper bounds. If the bounds
are varied within these ranges the current basis remains optimal and feasible.
int XPRS_CC XPRSbndsa(XPRSprob prob, int ncols, const int colind[], double
lblower[], double lbupper[], double ublower[], double ubupper[]);Arguments
prob
ncols
colindlblowerlbupper
ublower
ubupper

The current problem.
Number of variables whose sensitivity is sought.
Integer array of length ncols containing the indices of the columns whose bounds’
ranges are required.
Double array of length ncols where the variable lower bound lower range values are to be
returned.
Double array of length ncols where the variable lower bound upper range values are to
be returned.
Double array of length ncols where the variable upper bound lower range values are to
be returned.
Double array of length ncols where the variable upper bound upper range values are to
be returned.

Further information
XPRSbndsa can only be called when an optimal solution to the current LP has been found. It cannot be
used when the problem is MIP presolved.
Related topics
XPRSrhssa, XPRSobjsa.

Fair Isaac Corporation Proprietary Information

137

Chapter 7: Console and Library Functions

XPRSbtran
Purpose
Synopsis

Post-multiplies a (row) vector provided by the user by the inverse of the current basis.
int XPRS_CC XPRSbtran(XPRSprob prob, double vec[]);Arguments
prob
vec

The current problem.
Double array of length ROWS containing the values by which the basis inverse is to be
multiplied. The transformed values will also be returned in this array.

Related controls
DoubleETATOL
ExampleTolerance on eta elements.

Get the (unscaled) tableau row z of constraint number irow, assuming that all arrays have been
dimensioned.
/⁎ Minimum size of arrays:⁎ y: nrow + ncol;⁎ mstart: 2;⁎ mrowind, dmatval: nrow.
⁎//⁎ set up the unit vector y to pick out row irow ⁎/for(i = 0; i < nrow; i++) y[i] = 0.0;y[irow] = 1.0;
rc = XPRSbtran(prob,y);/⁎ y = e⁎B^{-1} ⁎//⁎ Form z = y ⁎ A ⁎/for(j = 0; j < ncol, j++) {rc = XPRSgetcols(prob, mstart, mrowind, dmatval,
nrow, &nelt, j, j);for(d = 0.0, ielt = 0, ielt < nelt; ielt++)
d += y[mrowind[ielt]] ⁎ dmatval[ielt];y[nrow + j] = d;}Further information
If the matrix is in a presolved state, XPRSbtran works with the basis for the presolved problem.
Related topics
XPRSftran.

Fair Isaac Corporation Proprietary Information

138

Chapter 7: Console and Library Functions

XPRScalcobjective
Purpose
SynopsisCalculates the objective value of a given solution.
int XPRS_CC XPRScalcobjective(XPRSprob prob, const double solution[],double⁎ p_objval);

Arguments
prob
solution
p_objval

The current problem.
Double array of length COLS that holds the solution.
Pointer to a double in which the calculated objective value is returned.

Further information
The calculations are always carried out in the original problem, even if the problem is currently presolved.
Related topics
XPRScalcslacks, XPRScalcsolinfo, XPRScalcreducedcosts.

Fair Isaac Corporation Proprietary Information

139

Chapter 7: Console and Library Functions

XPRScalcreducedcosts
Purpose
SynopsisCalculates the reduced cost values for a given (row) dual solution.
int XPRS_CC XPRScalcreducedcosts(XPRSprob prob, const double duals[], const
double solution[], double djs[]);Arguments
prob
duals
solution
djs

The current problem.
Double array of length ROWS that holds the dual solution to calculate the reduced costsfor.
Optional double array of length COLS that holds the primal solution. This is necessary for
quadratic problems.
Double array of length COLS in which the calculated reduced costs are returned.

Further information
1. The calculations are always carried out in the original problem, even if the problem is currently presolved.
2. If using the function during a solve (e.g. from a callback), use ORIGINALCOLS and ORIGINALROWS toretrieve the non-presolved dimensions of the problem.
Related topics
XPRScalcslacks, XPRScalcsolinfo, XPRScalcobjective.

Fair Isaac Corporation Proprietary Information

140

Chapter 7: Console and Library Functions

XPRScalcslacks
Purpose
SynopsisCalculates the row slack values for a given solution.
int XPRS_CC XPRScalcslacks(XPRSprob prob, const double solution[], double
slacks[]);Arguments
prob
solutionslacks

The current problem.
Double array of length COLS that holds the solution to calculate the slacks for.
Double array of length ROWS in which the calculated row slacks are returned.

Further information
1. The calculations are always carried out in the original problem, even if the problem is currently presolved.
2. If using the function during a solve (e.g. from a callback), use ORIGINALCOLS and ORIGINALROWS toretrieve the non-presolved dimensions of the problem.
Related topics
XPRScalcreducedcosts, XPRScalcsolinfo, XPRScalcobjective.

Fair Isaac Corporation Proprietary Information

141

Chapter 7: Console and Library Functions

XPRScalcsolinfo
Purpose

SynopsisCalculates the required property of a solution, like maximum infeasibility of a given primal and dual
solution.
int XPRS_CC XPRScalcsolinfo(XPRSprob prob, const double solution[], const
double duals[], int property, double⁎ p_value);

Arguments
prob
solution
duals
property

p_value

The current problem.
Double array of length COLS that holds the solution. May be NULL when asking for dual
infeasibility.
Double array of length ROWS that holds the dual solution. May be NULL when asking forprimal/MIP infeasibility.
Defined the property to be calculated.
XPRS_SOLINFO_ABSPRIMALINFEAS
the calculated maximum absolute primal
infeasibility is returned.
XPRS_SOLINFO_RELPRIMALINFEAS
the calculated maximum relative primal
infeasibility is returned.
XPRS_SOLINFO_ABSDUALINFEAS
the calculated maximum absolute dual
infeasibility is returned.
XPRS_SOLINFO_RELDUALINFEAS
the calculated maximum relative dual
infeasibility is returned.
XPRS_SOLINFO_MAXMIPFRACTIONAL the calculated maximum absolute MIP
fractionality or SOS infeasibility.
XPRS_SOLINFO_ABSMIPINFEAS
the calculated maximum absolute MIP
infeasibility (including delayed rows,
indicators, general and piecewise linear
constraints) is returned.
XPRS_SOLINFO_RELMIPINFEAS
the calculated maximum relative MIP
infeasibility (including delayed rows,
indicators, general and piecewise linear
constraints) is returned.
Pointer to a double where the calculated value is returned.

Further information
The calculations are always carried out in the original problem, even if the problem is currently presolved.
Related topics
XPRScalcslacks, XPRScalcobjective, XPRScalcreducedcosts.

Fair Isaac Corporation Proprietary Information

142

Chapter 7: Console and Library Functions

CHECKCONVEXITY
Purpose

SynopsisChecks if the loaded problem is convex. Applies to quadratic, mixed integer quadratic and quadraticallyconstrained problems. Checking convexity takes some time, thus for problems that are known to beconvex it might be reasonable to switch the checking off. Returns an error if the problem is not convex.
CHECKCONVEXITY

Further information
This console function checks the positive semi-definiteness of all quadratic matrices in the problem.
Note, that when optimizing a problem, for quadratic programming and mixed integer quadratic problems,
the checking of the objective function is performed after presolve, thus it is possible that an otherwise
indefinite quadratic matrix will be found positive semi-definite (the indefinite part might have been fixedand dropped by presolve).
Related topics
XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE), IFCHECKCONVEXITY,EIGENVALUETOL.

Fair Isaac Corporation Proprietary Information

143

Chapter 7: Console and Library Functions

XPRSchgbounds
Purpose
Synopsis

Used to change the bounds on columns in the matrix.
int XPRS_CC XPRSchgbounds(XPRSprob prob, int nbounds, const int colind[],const char bndtype[], const double bndval[]);Arguments
prob
nbounds
colindbndtypebndvalExampleThe current problem.
Number of bounds to change.
Integer array of size nbounds containing the indices of the columns on which the bounds
will change.
Character array of length nbounds indicating the type of bound to change:
U
indicates change the upper bound;L
indicates change the lower bound;B
indicates change both bounds, i.e. fix the column.
Double array of length nbounds giving the new bound values.

The following changes column 0 of the current problem to have an upper bound of 0.5:
colind[0] = 0;
bndtype[0] = 'U';
bndval[0] = 0.5;
XPRSchgbounds(prob,1,colind,bndtype,bndval);

Further information
1. A column index may appear twice in the colind array so it is possible to change both the upper andlower bounds on a variable in one go.
2. XPRSchgbounds may be applied to the problem in a presolved state, in which case it expects references
to the presolved problem.
3. The double constants XPRS_PLUSINFINITY and XPRS_MINUSINFINITY defined in the library header
file can be used to represent plus and minus infinity respectively in the bound (bndval) array.
4. If the upper bound on a binary variable is changed to be greater than 1 or the lower bound is changed tobe less than 0 then the variable will become an integer variable.
Related topics
XPRSgetlb, XPRSgetub, XPRSstorebounds.

Fair Isaac Corporation Proprietary Information

144

Chapter 7: Console and Library Functions

XPRSchgcoef
Purpose

Synopsis

Used to change a single coefficient in the matrix. If the coefficient does not already exist, a newcoefficient will be added to the matrix. If many coefficients are being added to a row of the matrix, it may
be more efficient to delete the old row of the matrix and add a new row.
int XPRS_CC XPRSchgcoef(XPRSprob prob, int row, int col, double coef);

Arguments
prob
row
col
coef

The current problem.
Row index for the coefficient.
Column index for the coefficient.
New value for the coefficient. If coef is zero, any existing coefficient will be deleted.

Related controls
DoubleMATRIXTOLExampleTolerance on matrix elements.

In the following, the element in row 2, column 1 of the matrix is changed to 0.33:
XPRSchgcoef(prob,2,1,0.33);

Further information
XPRSchgmcoef is more efficient than multiple calls to XPRSchgcoef and should be used in its place insuch circumstances.
Related topics
XPRSaddcols, XPRSaddrows, XPRSchgmcoef, XPRSchgmqobj, XPRSchgobj, XPRSchgqobj,
XPRSchgrhs, XPRSgetcols, XPRSgetrows.

Fair Isaac Corporation Proprietary Information

145

Chapter 7: Console and Library Functions

XPRSchgcoltype
Purpose
Synopsis

Used to change the type of a column in the matrix.
int XPRS_CC XPRSchgcoltype(XPRSprob prob, int ncols, const int colind[],const char coltype[]);Arguments
prob
ncols
colindcoltype

ExampleThe current problem.
Number of columns to change.
Integer array of length ncols containing the indices of the columns.
Character array of length ncols giving the new column types:
C
indicates a continuous column;
Bindicates a binary column;
I
indicates an integer column.
indicates a semi–continuous column. The semi–continuous lower bound will beS
set to 1.0.
R
indicates a semi–integer column. The semi–integer lower bound will be set to
1.0.
P
indicates a partial integer column. The partial integer bound will be set to 1.0.

The following changes columns 3 and 5 of the matrix to be integer and binary respectively:
colind[0] = 3; colind[1] = 5;coltype[0] = 'I'; coltype[1] = 'B';
XPRSchgcoltype(prob,2,colind,coltype);

Further information
1. The column types can only be changed before the global search is started.
2. Calling XPRSchgcoltype to change any variable into a binary variable causes the bounds previously
defined for the variable to be deleted and replaced by bounds of 0 and 1.
3. Calling XPRSchgcoltype to change a continuous variable into an integer variable cause its lower boundto be rounded up to the nearest integer value and its upper bound to be rounded down to the nearest
integer value.
Related topics
XPRSaddcols, XPRSchgrowtype, XPRSdelcols, XPRSgetcoltype.

Fair Isaac Corporation Proprietary Information

146

Chapter 7: Console and Library Functions

XPRSchgglblimit
Purpose
Synopsis

Used to change semi-continuous or semi-integer lower bounds, or upper limits on partial integers.
int XPRS_CC XPRSchgglblimit(XPRSprob prob, int ncols, const int colind[],const double limit[]);Arguments
prob
ncols
colindlimit

The current problem.
Number of column limits to change.
Integer array of size ncols containing the indices of the semi-continuous, semi-integer orpartial integer columns that should have their limits changed.
Double array of length ncols giving the new limit values.

Further information
1. The new limits are not allowed to be negative.
2. Partial integer limits can be at most 2ˆ28.
Related topics
XPRSchgcoltype, XPRSgetglobal.

Fair Isaac Corporation Proprietary Information

147

Chapter 7: Console and Library Functions

XPRSchgmcoef, XPRSchgmcoef64
Purpose

Synopsis

Used to change multiple coefficients in the matrix. If any coefficient does not already exist, it will be
added to the matrix. If many coefficients are being added to a row of the matrix, it may be more efficient
to delete the old row of the matrix and add a new one.
int XPRS_CC XPRSchgmcoef(XPRSprob prob, int ncoefs, const int rowind[],const int colind[], const double rowcoef[]);int XPRS_CC XPRSchgmcoef64(XPRSprob prob, XPRSint64 ncoefs, const int
rowind[], const int colind[], const double rowcoef[]);Arguments
prob
ncoefsrowindcolindrowcoef
Related controls
DoubleMATRIXTOLThe current problem.
Number of new coefficients.
Integer array of length ncoefs containing the row indices of the coefficients to bechanged.
Integer array of length ncoefs containing the column indices of the coefficients to bechanged.
Double array of length ncoefs containing the new coefficient values. If an element ofrowcoef is zero, the coefficient will be deleted.

Tolerance on matrix elements.

Examplerowind[0] = 0; rowind[1] = 3;
colind[0] = 1; colind[1] = 5;
rowcoef[0] = 2.0; rowcoef[1] = 0.0;
XPRSchgmcoef(prob,2,rowind,colind,rowcoef);
This changes two elements to values 2.0 and 0.0.
Further information
XPRSchgmcoef is more efficient than repeated calls to XPRSchgcoef and should be used in its place ifmany coefficients are to be changed.
Related topics
XPRSchgcoef, XPRSchgmqobj, XPRSchgobj, XPRSchgqobj, XPRSchgrhs, XPRSgetcols,
XPRSgetrhs.

Fair Isaac Corporation Proprietary Information

148

Chapter 7: Console and Library Functions

XPRSchgmqobj, XPRSchgmqobj64
Purpose

Synopsis

Used to change multiple quadratic coefficients in the objective function. If any of the coefficients does
not exist already, new coefficients will be added to the objective function.
int XPRS_CC XPRSchgmqobj(XPRSprob prob, int ncoefs, const int objqcol1[],
const int objqcol2[], const double objqcoef[]);int XPRS_CC XPRSchgmqobj64(XPRSprob prob, XPRSint64 ncoefs, const int
objqcol1[], const int objqcol2[], const double objqcoef[]);Arguments
prob
ncoefsobjqcol1
objqcol2
objqcoef
ExampleThe current problem.
The number of coefficients to change.
Integer array of size ncol containing the column index of the first variable in eachquadratic term.
Integer array of size ncol containing the column index of the second variable in eachquadratic term.
New values for the coefficients. If an entry in objqcoef is 0, the corresponding entry will
be deleted. These are the coefficients of the quadratic Hessian matrix.

The following code results in an objective function with terms: [6x12 + 3x1 x2 + 3x2 x1 ]/2
objqcol1[0] = 0; objqcol2[0] = 0; objqcoef[0] = 6.0;
objqcol1[1] = 1; objqcol2[1] = 0; objqcoef[1] = 3.0;
XPRSchgmqobj(prob,2,objqcol1,objqcol2,objqcoef);

Further information
1. The columns in the arrays objqcol1 and objqcol2 must already exist in the matrix. If the columns do
not exist, they must be added with XPRSaddcols.
2. XPRSchgmqobj is more efficient than repeated calls to XPRSchgqobj and should be used in its placewhen several coefficients are to be changed.
Related topics
XPRSchgcoef, XPRSchgmcoef, XPRSchgobj, XPRSchgqobj, XPRSgetqobj.

Fair Isaac Corporation Proprietary Information

149

Chapter 7: Console and Library Functions

XPRSchgobj
Purpose
Synopsis

Used to change the objective function coefficients.
int XPRS_CC XPRSchgobj(XPRSprob prob, int ncols, const int colind[], const
double objcoef[]);Arguments
prob
ncols
colindobjcoef
ExampleThe current problem.
Number of objective function coefficient elements to change.
Integer array of length ncols containing the indices of the columns on which the range
elements will change. An index of -1 indicates that the fixed part of the objective function
on the right hand side should change.
Double array of length ncols giving the new objective function coefficients.

Changing three coefficients of the objective function with XPRSchgobj :colind[0] = 0; colind[1] = 2; colind[2] = 5;
objcoef[0] = 25.0; objcoef[1] = 5.3; objcoef[2] = 0.0;
XPRSchgobj(prob,3,colind,objcoef);

Further information
The value of the fixed part of the objective function can be obtained using the OBJRHS problem attribute.
Related topics
XPRSchgcoef, XPRSchgmcoef, XPRSchgmqobj, XPRSchgqobj, XPRSgetobj.

Fair Isaac Corporation Proprietary Information

150

Chapter 7: Console and Library Functions

XPRSchgobjsense
Purpose
SynopsisCHGOBJSENSE

Changes the problem’s objective function sense to minimize or maximize.
int XPRS_CC XPRSchgobjsense(XPRSprob prob, int objsense);
CHGOBJSENSE [ min | max ]Arguments
prob
objsense

The current problem.
XPRS_OBJ_MINIMIZE to change into a minimization, or XPRS_OBJ_MAXIMIZE tochange into maximization problem.

Related topics
XPRSlpoptimize, XPRSmipoptimize.

Fair Isaac Corporation Proprietary Information

151

Chapter 7: Console and Library Functions

XPRSchgqobj
Purpose

Synopsis

Used to change a single quadratic coefficient in the objective function corresponding to the variable pair(objqcol1,objqcol2) of the Hessian matrix.
int XPRS_CC XPRSchgqobj(XPRSprob prob, int objqcol1, int objqcol2, double
objqcoef);

Arguments
prob
objqcol1
objqcol2
objqcoef
ExampleThe current problem.
Column index for the first variable in the quadratic term.
Column index for the second variable in the quadratic term.
New value for the coefficient in the quadratic Hessian matrix. If an entry in objqcoef is0, the corresponding entry will be deleted.

The following code adds the terms [15x12 + 7x1 x2 ]/2 to the objective function:
XPRSchgqobj(prob, 0, 0, 15);
XPRSchgqobj(prob, 0, 1, 3.5);

Further information
1. The columns objqcol1 and objqcol2 must already exist in the matrix. If the columns do not exist,
they must be added with the routine XPRSaddcols.
2. If objqcol1 is not equal to objqcol2, then both the matrix elements (objqcol1, objqcol2) and(objqcol2, objqcol1) are changed to leave the Hessian symmetric.
Related topics
XPRSchgcoef, XPRSchgmcoef, XPRSchgmqobj, XPRSchgobj, XPRSgetqobj.

Fair Isaac Corporation Proprietary Information

152

Chapter 7: Console and Library Functions

XPRSchgqrowcoeff
Purpose
Synopsis

Changes a single quadratic coefficient in a row.
int XPRS_CC XPRSchgqrowcoeff(XPRSprob prob, int row, int rowqol1, int
rowqcol2, double rowqcoef);

Argumentsprob
row
rowqcol1
rowqcol2
rowqcoef

The current problem.
Index of the row where the quadratic matrix is to be changed.
First index of the coefficient to be changed.
Second index of the coefficient to be changed.
The new coefficient.

Further information
1. This function may be used to add new nonzero coefficients, or even to define the whole quadratic
expression with it. Doing that, however, is significantly less efficient than adding the whole expression
with XPRSaddqmatrix.
2. The row must not be an equality or a ranged row.
Related topics
XPRSloadqcqp, XPRSgetqrowcoeff, XPRSaddqmatrix, XPRSchgqrowcoeff,
XPRSgetqrowqmatrix, XPRSgetqrowqmatrixtriplets, XPRSgetqrows, XPRSchgqobj,
XPRSchgmqobj, XPRSgetqobj.

Fair Isaac Corporation Proprietary Information

153

Chapter 7: Console and Library Functions

XPRSchgrhs
Purpose
Synopsis

Used to change right–hand side values of the problem.
int XPRS_CC XPRSchgrhs(XPRSprob prob, int nrows, const int rowind[], const
double rhs[]);Arguments
prob
nrows
rowindrhs
ExampleThe current problem.
Number of right hand side values to change.
Integer array of length nrows containing the indices of the rows on which the right handside values will change.
Double array of length nrows giving the right hand side values.

Here we change the three right hand sides in rows 2, 6, and 8 to new values:
rowind[0] = 2; rowind[1] = 8; rowind[2] = 6;
rhs[0] = 5.0; rhs[1] = 3.8; rhs[2] = 5.7;
XPRSchgrhs(prob,3,rowind,rhs);

Related topics
XPRSchgcoef, XPRSchgmcoef, XPRSchgrhsrange, XPRSgetrhs, XPRSgetrhsrange.

Fair Isaac Corporation Proprietary Information

154

Chapter 7: Console and Library Functions

XPRSchgrhsrange
Purpose
Synopsis

Used to change the range for a row of the problem matrix.
int XPRS_CC XPRSchgrhsrange(XPRSprob prob, int nrows, const int rowind[],const double rng[]);Arguments
prob
nrows
rowindThe current problem.
Number of range elements to change.
Integer array of length nrows containing the indices of the rows on which the range
elements will change.
Double array of length nrows giving the range values.

rng
ExampleHere, the constraint x + y ≤ 10 (with row index 5) in the problem is changed to 8 ≤ x + y ≤ 10:
rowind[0] = 5; rng[0] = 2.0;
XPRSchgrhsrange(prob,1,rowind,rng);

Further information
If the range specified on the row is r, what happens depends on the row type and value of r. It is possible
to convert non-range rows using this routine.
Value of r

Row type

Effectr≥0= b, ≤ b

r≥0

≥b

r<0

= b, ≤ b

r<0

≥b

P
b – r ≤ aj xj ≤ b
Pb ≤ aj xj ≤ b + rPb ≤ aj xj ≤ b – rP
b+r ≤aj xj ≤ b

Related topics
XPRSchgcoef, XPRSchgmcoef, XPRSchgrhs, XPRSgetrhsrange.

Fair Isaac Corporation Proprietary Information

155

Chapter 7: Console and Library Functions

XPRSchgrowtype
Purpose
Synopsis

Used to change the type of a row in the matrix.
int XPRS_CC XPRSchgrowtype(XPRSprob prob, int nrows, const int rowind[],const char rowtype[]);Arguments
prob
nrows
rowindrowtype

ExampleThe current problem.
Number of rows to change.
Integer array of length nrows containing the indices of the rows.
Character array of length nrows giving the new row types:
Lindicates a ≤ row;E
indicates an = row;G
indicates a ≥ row;R
indicates a range row;N
indicates a free row.

Here row 4 is changed to an equality row:rowind[0] = 4; rowtype[0] = 'E';
XPRSchgrowtype(prob,1,rowind,rowtype);

Further information
A row can be changed to a range type row by first changing the row to an R or L type row and thenchanging the range on the row using XPRSchgrhsrange.
Related topics
XPRSaddrows, XPRSchgcoltype, XPRSchgrhs, XPRSchgrhsrange, XPRSdelrows,
XPRSgetrowtype.

Fair Isaac Corporation Proprietary Information

156

Chapter 7: Console and Library Functions

XPRScopycallbacks
Purpose
Synopsis

Copies callback functions defined for one problem to another.
int XPRS_CC XPRScopycallbacks(XPRSprob dest, XPRSprob src);

Arguments
dest
src
ExampleThe problem to which the callbacks are copied.
The problem from which the callbacks are copied.

The following sets up a message callback function callback for problem prob1 and then copies this tothe problem prob2.
XPRScreateprob(&prob1);
XPRSaddcbmessage(prob1,callback,NULL,0);
XPRScreateprob(&prob2);
XPRScopycallbacks(prob2,prob1);

Related topics
XPRScopycontrols, XPRScopyprob.

Fair Isaac Corporation Proprietary Information

157

Chapter 7: Console and Library Functions

XPRSclearrowflags
Purpose
Synopsis

Clears extra information attached to a range of rows.
int XPRS_CC XPRSclearrowflags(XPRSprob prob, const int flags[], int first,
int last);

Arguments
prob
flags
first
last

The current problem
Int array of length last-first+1 including type of extra information to remove (seebelow)First row index to be checked
Last row index to be checked

Further information
The flags array consists of a bitvector for each row defining types of information to remove:

ExampleXPRS_ROWFLAG_QUADRATIC

Remove all quadratic coefficients.

XPRS_ROWFLAG_DELAYEDThe row will not be a delayed row.

XPRS_ROWFLAG_MODELCUT

The row will not be a model cut.

XPRS_ROWFLAG_INDICATOR

Remove indicators associated to the row.

XPRS_ROWFLAG_NONLINEAR

Remove any nonlinear coefficients.

The following makes sure that the second and third rows are not indicators and removes any quadratic
matrix from the second row.
int flags[2];int flags[2];flags[0] = XPRS_ROWFLAG_QUADRATIC+XPRS_ROWFLAG_INDICATOR;
flags[1] = XPRS_ROWFLAG_INDICATOR;
XPRSclearrowflags(prob,1,2,flags);

Related topics
XPRSgetrowflags

Fair Isaac Corporation Proprietary Information

158

Chapter 7: Console and Library Functions

XPRScopycontrols
Purpose
Synopsis

Copies controls defined for one problem to another.
int XPRS_CC XPRScopycontrols(XPRSprob dest, XPRSprob src);

Arguments
dest
src
ExampleThe problem to which the controls are copied.
The problem from which the controls are copied.

The following turns off Presolve for problem prob1 and then copies this and other control values to the
problem prob2 :XPRScreateprob(&prob1);
XPRSsetintcontrol(prob1,XPRS_PRESOLVE,0);
XPRScreateprob(&prob2);
XPRScopycontrols(prob2,prob1);

Related topics
XPRScopycallbacks, XPRScopyprob.

Fair Isaac Corporation Proprietary Information

159

Chapter 7: Console and Library Functions

XPRScopyprob
Purpose
Synopsis

Copies information defined for one problem to another.
int XPRS_CC XPRScopyprob(XPRSprob dest, XPRSprob src, const char ⁎name);

Arguments
dest
src
name

ExampleThe new problem pointer to which information is copied.
The old problem pointer from which information is copied.
A string of up to 1024 characters (including NULL terminator) containing the name for the
problem copy. This must be unique when file writing is to be expected, and particularly for
global problems.

The following copies the problem, its controls and it callbacks from prob1 to prob2:
XPRSprob prob1, prob2;...
XPRScreateprob(&prob2);
XPRScopyprob(prob2,prob1,"MyProb");
XPRScopycontrols(prob2,prob1);
XPRScopycallbacks(prob2,prob1);

Further information
XPRScopyprob copies only the problem and does not copy the callbacks or controls associated to a
problem. These must be copied separately using XPRScopycallbacks and XPRScopycontrols,
respectively.
Related topics
XPRScopycallbacks, XPRScopycontrols, XPRScreateprob.

Fair Isaac Corporation Proprietary Information

160

Chapter 7: Console and Library Functions

XPRScreateprob
Purpose
Synopsis

Sets up a new problem within the Optimizer.
int XPRS_CC XPRScreateprob(XPRSprob ⁎p_prob);

Argument
p_probExamplePointer to a variable holding the new problem.

The following creates a problem which will contain myprob:
XPRSprob prob;
XPRSinit(NULL);
XPRScreateprob(&prob);
XPRSreadprob(prob,"myprob","");

Further information
1. XPRScreateprob must be called after XPRSinit and before using the other Optimizer routines.
2. Any number of problems may be created in this way, depending on your license details. All problems
should be removed using XPRSdestroyprob once you have finished working with them.
3. If XPRScreateprob cannot complete successfully, a nonzero value is returned and ⁎p_prob is set to
NULL (as a consequence, it is not possible to retrieve further error information using e.g.
XPRSgetlasterror).
Related topics
XPRSdestroyprob, XPRScopyprob, XPRSinit.

Fair Isaac Corporation Proprietary Information

161

Chapter 7: Console and Library Functions

XPRScrossoverlpsol
Purpose

Synopsis

Provides a basic optimal solution for a given solution of an LP problem. This function behaves like thecrossover after the barrier algorithm.
int XPRS_CC XPRScrossoverlpsol(XPRSprob prob, int ⁎p_status);

Arguments
prob
p_status

The current problem.
Pointer to an int where the status will be returned. The status is one of:0
The crossover is successful.
1
The crossover is not performed because the problem has no solution.

Related controls
Integer
ALGAFTERCROSSOVER Specifies which algorithm to use for cleaning up the solution.
PREPROTECTDUAL Whether or not to protect the given dual solution during presolve.
ExampleThis example loads a problem, loads a solution for the problem and then uses XPRScrossoverlpsol
to find a basic optimal solution.
XPRSreadprob(prob, "problem", "");
XPRSloadlpsol(prob, x, NULL, dual, NULL, &status);
XPRScrossoverlpsol(prob, &status);
A solution can also be loaded from an ASCII solution file using XPRSreadslxsol.

Further information
1. The crossover contains two phases: a crossover phase for finding a basic solution and a clean-up phasefor finding a basic optimal solution. Setting ALGAFTERCROSSOVER to 0 will allow the crossover to skip
the clean-up phase.
2. The given solution is expected to be feasible or nearly feasible, otherwise the crossover may take a longtime to find a basic feasible solution. More importantly, the given solution is expected to have a small
duality gap. A small duality gap indicates that the given solution is close to the optimal solution. If thegiven solution is far away from the optimal solution, the clean-up phase may need many simplex
iterations to move to a basic optimal solution.
Related topics
XPRSloadlpsol, XPRSreadslxsol, Section 4.2.1.

Fair Isaac Corporation Proprietary Information

162

Chapter 7: Console and Library Functions

XPRSdelcols
Purpose
Synopsis

Delete columns from a matrix.
int XPRS_CC XPRSdelcols(XPRSprob prob, int ncols, const int colind[]);Arguments
prob
ncols
colindExampleThe current problem.
Number of columns to delete.
Integer array of length ncols containing the columns to delete.

In this example, column 3 is deleted from the matrix:
colind[0] = 3;
XPRSdelcols(prob,1,colind);

Further information
1. After columns have been deleted from a problem, the numbers of the remaining columns are moved
down so that the columns are always numbered from 0 to COLS-1 where COLS is the problem attributecontaining the number of non-deleted columns in the matrix.
2. If the problem has already been optimized, or an advanced basis has been loaded, and you delete a basis
column the current basis will no longer be valid - the basis is "lost".
If you go on to re-optimize the problem, a warning message is displayed (140 ) and the Optimizer
automatically generates a corrected basis.
You can avoid losing the basis by only deleting non-basic columns (see XPRSgetbasis), taking a basic
column out of the basis first if necessary (see XPRSgetpivots and XPRSpivot).
Related topics
XPRSaddcols, XPRSdelrows.

Fair Isaac Corporation Proprietary Information

163

Chapter 7: Console and Library Functions

XPRSdelcpcuts
Purpose

Synopsis

During the branch and bound search, cuts are stored in the cut pool to be applied at descendant nodes.
These cuts may be removed from a given node using XPRSdelcuts, but if this is to be applied in a large
number of cases, it may be preferable to remove the cut completely from the cut pool. This is achieved
using XPRSdelcpcuts.
int XPRS_CC XPRSdelcpcuts(XPRSprob prob, int cuttype, int interp, int ncuts,
const XPRScut cutind[]);Arguments
prob
cuttypeinterpncuts
cutindThe current problem.
User defined cut type to match against.
Way in which the cut cuttype is interpreted:-1
match all cut types;
1treat cut types as numbers;
2
treat cut types as bit maps - delete if any bit matches any bit set in cuttype;3
treat cut types as bit maps - delete if all bits match those set in cuttype.
The number of cuts to delete. A value of -1 indicates delete all cuts.
Array containing pointers to the cuts which are to be deleted. This array may be NULL if
ncuts is -1, otherwise it has length ncuts.

Related topics
XPRSaddcuts, XPRSdelcuts, XPRSloadcuts, Section 5.9.

Fair Isaac Corporation Proprietary Information

164

Chapter 7: Console and Library Functions

XPRSdelcuts
Purpose

Synopsis

Deletes cuts from the matrix at the current node. Cuts from the parent node which have been
automatically restored may be deleted as well as cuts added to the current node using XPRSaddcuts or
XPRSloadcuts. The cuts to be deleted can be specified in a number of ways. If a cut is ruled out by any
one of the criteria it will not be deleted.
int XPRS_CC XPRSdelcuts(XPRSprob prob, int basis, int cuttype, int interp,
double delta, int ncuts, const XPRScut cutind[]);Arguments
prob
basis
cuttypeinterpdelta
ncuts
cutindThe current problem.
Ensures the basis will be valid if set to 1. If set to 0, cuts with non-basic slacks may bedeleted.
User defined type of the cut to be deleted.
Way in which the cut cuttype is interpreted:-1
match all cut types;
1treat cut types as numbers;
2
treat cut types as bit maps - delete if any bit matches any bit set in cuttype;3
treat cut types as bit maps - delete if all bits match those set in cuttype.
Only delete cuts with an absolute slack value greater than delta. To delete all the cuts,
this argument should be set to XPRS_MINUSINFINITY.
Number of cuts to drop if a list of cuts is provided. A value of -1 indicates all cuts.
Array containing pointers to the cuts which are to be deleted. This array may be NULL if
ncuts is set to -1 otherwise it has length ncuts.

Further information
1. It is usually best to drop only those cuts with basic slacks, otherwise the basis will no longer be valid andit may take many iterations to recover an optimal basis. If the basis parameter is set to 1, this will
ensure that cuts with non-basic slacks will not be deleted even if the other parameters specify that thesecuts should be deleted. It is highly recommended that the basis parameter is always set to 1.
2. The cuts to be deleted can also be specified by the size of the slack variable for the cut. Only those cutswith a slack value greater than the delta parameter will be deleted.
3. A list of indices of the cuts to be deleted can also be provided. The list of active cuts at a node can beobtained with the XPRSgetcutlist command.
4. This function should be called only from within callback functions set by either XPRSaddcboptnode or
XPRSaddcbcutmgr.
Related topics
XPRSaddcuts, XPRSdelcpcuts, XPRSgetcutlist, XPRSloadcuts, Section 5.9.

Fair Isaac Corporation Proprietary Information

165

Chapter 7: Console and Library Functions

XPRSdelgencons
Purpose
Synopsis

Delete general constraints from a problem.
int XPRS_CC XPRSdelgencons(XPRSprob prob, int ncons, const int conind[]);Arguments
prob
ncons
conindExampleThe current problem.
Number of general constraints to delete.
An integer array of length ncons containing the general constraints to delete.

In this example, general constraints 0 and 2 are deleted from the problem:
conind[0] = 0; conind[1] = 2;
XPRSdelgencons(prob,2,conind);

Further information
After general constraints have been deleted from a problem, the indices of the remaining constraints are
reduced down so that the general constraints are always numbered from 0 to GENCONS-1 where
GENCONS is the problem attribute containing the number of non-deleted general constraints in the
problem.
Related topics
XPRSaddgencons, XPRSgetgencons.

Fair Isaac Corporation Proprietary Information

166

Chapter 7: Console and Library Functions

XPRSdelindicators
Purpose

Synopsis

Delete indicator constraints. This turns the specified rows into normal rows (not controlled by indicatorvariables).
int XPRS_CC XPRSdelindicators(XPRSprob prob, int first, int last);

Arguments
prob
first
last
ExampleThe current problem.
First row in the range.
Last row in the range (inclusive).

In this example, if any of the first two rows of the matrix is an indicator constraint, they are turned into
normal rows:
XPRSdelindicators(prob,0,1);

Further information
This function has no effect on rows that are not indicator constraints.
Related topics
XPRSgetindicators, XPRSsetindicators.

Fair Isaac Corporation Proprietary Information

167

Chapter 7: Console and Library Functions

XPRSdelpwlcons
Purpose
Synopsis

Delete piecewise linear constraints from a problem.
int XPRS_CC XPRSdelpwlcons(XPRSprob prob, int npwls, const int pwlind[]);Arguments
prob
npwls
pwlindExampleThe current problem.
Number of piecewise linear constraints to delete.
An integer array of length npwls containing the piecewise linear constraints to delete.

In this example, piecewise linear constraints 0 and 2 are deleted from the problem:
pwlind[0] = 0; pwlind[1] = 2;
XPRSdelpwlcons(prob,2,pwlind);

Further information
After piecewise linear constraints have been deleted from a problem, the indices of the remaining
constraints are reduced so that the piecewise linear constraints are always numbered from 0 to
PWLCONS-1 where PWLCONS is the problem attribute containing the number of non-deleted piecewise
linear constraints in the problem.
Related topics
XPRSaddpwlcons, XPRSgetpwlcons.

Fair Isaac Corporation Proprietary Information

168

Chapter 7: Console and Library Functions

XPRSdelqmatrix
Purpose
Synopsis

Deletes the quadratic part of a row or of the objective function.
int XPRS_CC XPRSdelqmatrix(XPRSprob prob, int row);

Argumentsprobrow

The current problem.
Index of row from which the quadratic part is to be deleted.

Further information
If a row index of -1 is used, the function deletes the quadratic coefficients from the objective function.
Related topics
XPRSaddrows, XPRSdelcols, XPRSdelrows.

Fair Isaac Corporation Proprietary Information

169

Chapter 7: Console and Library Functions

XPRSdelrows
Purpose
Synopsis

Delete rows from a matrix.
int XPRS_CC XPRSdelrows(XPRSprob prob, int nrows, const int rowind[]);Arguments
prob
nrows
rowindExampleThe current problem.
Number of rows to delete.
An integer array of length nrows containing the rows to delete.

In this example, rows 0 and 10 are deleted from the matrix:
rowind[0] = 0; rowind[1] = 10;
XPRSdelrows(prob,2,rowind);

Further information
1. After rows have been deleted from a problem, the numbers of the remaining rows are moved down sothat the rows are always numbered from 0 to ROWS-1 where ROWS is the problem attribute containing thenumber of non-deleted rows in the matrix.
2. If the problem has already been optimized, or an advanced basis has been loaded, and you delete a row
for which the slack column is non-basic, the current basis will no longer be valid - the basis is "lost".
If you go on to re-optimize the problem, a warning message is displayed (140 ) and the Optimizer
automatically generates a corrected basis.
You can avoid losing the basis by only deleting basic rows (see XPRSgetbasis), bringing a non-basic
row into the basis first if necessary (see XPRSgetpivots and XPRSpivot).
Related topics
XPRSaddrows, XPRSdelcols, XPRSgetbasis, XPRSgetpivots, XPRSpivot.

Fair Isaac Corporation Proprietary Information

170

Chapter 7: Console and Library Functions

XPRSdelsets
Purpose
Synopsis

Delete sets from a problem.
int XPRS_CC XPRSdelsets(XPRSprob prob, int nsets, const int setind[]);Arguments
prob
nsets
setindExampleThe current problem.
Number of sets to delete.
An integer array of length nsets containing the sets to delete.

In this example, sets 0 and 2 are deleted from the problem:
setind[0] = 0; setind[1] = 2;
XPRSdelsets(prob,2,setind);

Further information
After sets have been deleted from a problem, the numbers of the remaining sets are moved down so thatthe sets are always numbered from 0 to SETS-1 where SETS is the problem attribute containing thenumber of non-deleted sets in the problem.
Related topics
XPRSaddsets.

Fair Isaac Corporation Proprietary Information

171

Chapter 7: Console and Library Functions

XPRSdestroyprob
Purpose

Synopsis

Removes a given problem and frees any memory associated with it following manipulation andoptimization.
int XPRS_CC XPRSdestroyprob(XPRSprob prob);

Argument
prob
ExampleThe problem to be destroyed.

The following creates, loads and solves a problem called myprob, before subsequently freeing any
resources allocated to it:
XPRScreateprob(&prob);
XPRSreadprob(prob,"myprob","");
XPRSlpoptimize(prob,"");XPRSdestroyprob(prob);

Further information
After work is finished, all problems must be destroyed. If a NULL problem pointer is passed to
XPRSdestroyprob, no error will result.
Related topics
XPRScreateprob, XPRSfree, XPRSinit.

Fair Isaac Corporation Proprietary Information

172

Chapter 7: Console and Library Functions

XPRSdumpcontrols
Purpose

Synopsis

DUMPCONTROLS

Displays the list of controls and their current value for those controls that have been set to a non default
value.
int XPRS_CC XPRSdumpcontrols(XPRSprob prob);
DUMPCONTROLS

Argumentprob

The problem for which controls are dumped.

Related topics
SETDEFAULTS, SETDEFAULTCONTROL

Fair Isaac Corporation Proprietary Information

173

Chapter 7: Console and Library Functions

EXIT
Purpose
Synopsis
ExampleTerminates the Console Optimizer, returning a zero exit code to the operating system. Alias of QUIT.
EXIT
The command is called simply as:
EXIT

Further information
1. Fatal error conditions return nonzero exit values which may be of use to the host operating system.
These are described in Chapter 10.
2. If you wish to return an exit code reflecting the final solution status, then use the STOP command instead.
Related topics
STOP, QUIT, XPRSsave (SAVE).

Fair Isaac Corporation Proprietary Information

174

Chapter 7: Console and Library Functions

XPRSestimaterowdualranges
Purpose

Synopsis

Performs a dual side range sensitivity analysis, i.e. calculates estimates for the possible ranges for dual
values.
int XPRS_CC XPRSestimaterowdualranges(XPRSprob prob, const int nrows, const
int rowind[], const int iterlim, double mindual[], double maxdual[]);Arguments
prob
nrows
rowinditerlimmindualmaxdualThe current problem.
The number of rows to analyze.
Row indices to analyze.
Effort limit expressed as simplex iterations per row.
Estimated lower bounds on the possible dual ranges.
Estimated upper bounds on the possible dual ranges.

Further information
This function may provide better results for individual row dual ranges when called for a larger number ofrows.
Related topics
XPRSlpoptimize, XPRSstrongbranch

Fair Isaac Corporation Proprietary Information

175

Chapter 7: Console and Library Functions

XPRSfeaturequery
Purpose
SynopsisChecks if the provided feature is available in the current license used by the optimizer.
int XPRS_CC XPRSfeaturequery(const char ⁎feature, int ⁎p_status);

Arguments
featurep_status

The feature string to be checked in the license.
Return status of the check, a value of 1 indicates the feature is available.

Fair Isaac Corporation Proprietary Information

176

Chapter 7: Console and Library Functions

XPRSfixglobals
Purpose

SynopsisFIXGLOBALS

Fixes all the global entities to the values of the last found MIP solution. This is useful for finding the
reduced costs for the continuous variables after the global variables have been fixed to their optimalvalues.
int XPRS_CC XPRSfixglobals(XPRSprob prob, int options);
FIXGLOBALS [-flags]

Arguments
prob
optionsflags

The current problem.
Options how to fix the globals.
Bit
Meaning0
If all global entities should be rounded to the nearest discrete value in the solution
before being fixed.
If piecewise linear and general constraints should be kept in the problem with only the1
non-convex decisions (i.e. which part of a non-convex piecewise linear function or
which variable attains a maximum) fixed. Otherwise all variables appearing inpiecewise linear or general constraints will be fixed.
Flags to pass to FIXGLOBALS:r
round all global entities to the nearest feasible value in the solution before being
fixed;tkeep piecewise linear and general constraints and only fix their non-convex
decisions;

Example 1 (Library)This example performs a global search on problem myprob and then uses XPRSfixglobals before
solving the remaining linear problem:
XPRSreadprob(prob,"myprob","");XPRSmipoptimize(prob," ");XPRSfixglobals(prob, 1);
XPRSlpoptimize(prob," ");XPRSwriteprtsol(prob);
Example 2 (Console)
A similar set of commands at the console would be as follows:
READPROBMIPOPTIMIZEFIXGLOBALS -r
LPOPTIMIZEPRINTSOL
Further information
1. Because of tolerances, it is possible for e.g. a binary variable to be slightly fractional in the MIP solution,
where it might have the value 0.999999 instead of being at exactly 1.0. With ifround = 0, such abinary will be fixed at 0.999999, but with ifround = 1, it will be fixed at 1.0.
2. This command is useful for inspecting the reduced costs of the continuous variables in a matrix after the
global entities have been fixed. Sensitivity analysis can also be performed on the continuous variables ina MIP problem using XPRSrhssa, XPRSobjsa or XPRSbndsa after calling XPRSfixglobals(FIXGLOBALS).

Fair Isaac Corporation Proprietary Information

177

Chapter 7: Console and Library Functions

Related topics
XPRSmipoptimize (MIPOPTIMIZE).

Fair Isaac Corporation Proprietary Information

178

Chapter 7: Console and Library Functions

XPRSfreePurpose
Synopsis
ExampleFrees any allocated memory and closes all open files.
int XPRS_CC XPRSfree(void);
The following frees resources allocated to the problem prob and then tidies up before exiting:
XPRSdestroyprob(prob);
XPRSfree();return 0;

Further information
After a call to XPRSfree no library functions may be used without first calling XPRSinit again.
Related topics
XPRSdestroyprob, XPRSinit.

Fair Isaac Corporation Proprietary Information

179

Chapter 7: Console and Library Functions

XPRSftran
Purpose
SynopsisPre-multiplies a (column) vector provided by the user by the inverse of the current matrix.
int XPRS_CC XPRSftran(XPRSprob prob, double vec[]);Arguments
prob
vec

The current problem.
Double array of length ROWS containing the values which are to be multiplied by the basis
inverse. The transformed values appear in the array.

Related controls
DoubleETATOL
ExampleTolerance on eta elements.

To get the (unscaled) tableau column of structural variable number jcol, assuming that all arrays havebeen dimensioned, do the following:/⁎ Min size of arrays: mstart: 2; mrowind, dmatval & y: nrow. ⁎//⁎ Get column as loaded originally, in sparse format ⁎/rc = XPRSgetcols(prob, mstart, mrowind, dmatval, nrow, &nelt,
jcol, jcol);/⁎ Unpack into the zeroed array ⁎/for(i = 0; i < nrow; i++)y[i] = 0.0;
for(ielt = 0; ielt < nelt; ielt++)y[mrowind[ielt]] = dmatval[ielt];
rc = XPRSftran(prob,y);
Get the (unscaled) tableau column of the slack variable for row number irow, assuming that all arrays
have been dimensioned.
/⁎ Min size of arrays: y: nrow ⁎//⁎ Set up the original slack column in full format ⁎/for(i = 0; i < nrow; i++)y[i] = 0.0;y[irow] = 1.0;
rc = XPRSftran(prob,y);Further information
If the matrix is in a presolved state, the function will work with the basis for the presolved problem.
Related topics
XPRSbtran.

Fair Isaac Corporation Proprietary Information

180

Chapter 7: Console and Library Functions

XPRSgetattribinfo
PurposeAccesses the id number and the type information of an attribute given its name. An attribute name may
be for example XPRS_ROWS. Names are case-insensitive and may or may not have the XPRS_ prefix. The
id number is the constant used to identify the attribute for calls to functions such as
XPRSgetintattrib. The type information returned will be one of the below integer constants definedin the xprs.h header file.
The function will return an id number of 0 and a type value of XPRS_TYPE_NOTDEFINED if the name is
not recognized as an attribute name. Note that this will occur if the name is a control name and not an
attribute name.

Synopsis

int XPRS_CC XPRSgetattribinfo(XPRSprob prob, const char⁎ name, int⁎ p_id,
int⁎ iTypeinfo);

Arguments
prob
name

p_id
p_typeExampleThe current problem.
The name of the attribute to be queried. Names are case-insensitive and may or may nothave the XPRS_ prefix. A full list of all attributes may be found in Chapter 8, or from thelist in the xprs.h header file.
Pointer to an integer where the id number will be returned.
Pointer to an integer where the type id will be returned. The value will be one of thefollowing constants from xprs.h:
XPRS_TYPE_NOTDEFINED The name was not recognized.
XPRS_TYPE_INT
32 bit integer.
XPRS_TYPE_INT64
64 bit integer.
XPRS_TYPE_DOUBLE
Double precision floating point.
XPRS_TYPE_STRING
String.

The following code example obtains the id number and the type id of the control or attribute with namegiven by name. Note that the name happens to be a control name in this example:
const char ⁎name = "presolve";
int id, type;...
if(XPRSgetattribinfo(prob, name, &id,
&type) || id==0) {if(XPRSgetcontrolinfo(prob, name, &id,
&type) || id==0) {printf("Unrecognized name: %s\n", name);}}

Related topics
XPRSgetcontrolinfo.

Fair Isaac Corporation Proprietary Information

181

Chapter 7: Console and Library Functions

XPRSgetbanner
Purpose
Synopsis

Returns the banner and copyright message.
int XPRS_CC XPRSgetbanner(char ⁎banner);

ArgumentbannerExampleA buffer of at least XPRS_MAXBUFFERLENGTH characters in which the null terminatedbanner string will be returned.

The following calls XPRSgetbanner to return banner information at the start of the program:char banner[XPRS_MAXBUFFERLENGTH];...
if(XPRSinit(NULL)){/⁎ The error message when XPRSinit fails is written to the banner. ⁎/XPRSgetbanner(banner);
printf("%s\n", banner);
return 1;}
XPRSgetbanner(banner);
printf("%s\n", banner);

Further information
This function can most usefully be employed to return extra information if a problem occurs with
XPRSinit.
Related topics
XPRSinit.

Fair Isaac Corporation Proprietary Information

182

Chapter 7: Console and Library Functions

XPRSgetbasis
Purpose
Synopsis

Returns the current basis into the user’s data arrays.
int XPRS_CC XPRSgetbasis(XPRSprob prob, int rowstat[], int colstat[]);Arguments
prob
rowstatcolstat

ExampleThe current problem.
Integer array of length ROWS to the basis status of the slack, surplus or artificial variableassociated with each row. The status will be one of:0
slack, surplus or artificial is non-basic at lower bound;1
slack, surplus or artificial is basic;2
slack or surplus is non-basic at upper bound.
3
slack or surplus is super-basic.
May be NULL if not required.
Integer array of length COLS to hold the basis status of the columns in the constraint
matrix. The status will be one of:variable is non-basic at lower bound, or superbasic at zero if the variable has no0
lower bound;1
variable is basic;
2
variable is non-basic at upper bound;3
variable is super-basic.
May be NULL if not required.

The following example minimizes a problem before saving the basis for later:
int rows, cols, ⁎rowstat, ⁎colstat;...
XPRSgetintattrib(prob,XPRS_ROWS,&rows);
XPRSgetintattrib(prob,XPRS_COLS,&cols);
rowstat = (int ⁎) malloc(sizeof(int)⁎rows);
colstat = (int ⁎) malloc(sizeof(int)⁎cols);
XPRSlpoptimize(prob,"");XPRSgetbasis(prob,rowstat,colstat);

Related topics
XPRSgetpresolvebasis, XPRSloadbasis, XPRSloadpresolvebasis.

Fair Isaac Corporation Proprietary Information

183

Chapter 7: Console and Library Functions

XPRSgetbasisval
Purpose
Synopsis

Returns the current basis status for a specific column or row.
int XPRS_CC XPRSgetbasisval(XPRSprob prob, int row, int col, int ⁎p_rowstat,int ⁎p_colstat);Arguments
prob
row
col
p_rowstatp_colstat

The current problem.
Row index to get the row basis status for.
Column index to get the column basis status for.
Integer pointer where the value of the row basis status will be returned. May be NULL if
not required.
Integer pointer where the value of the column basis status will be returned. May be NULL
if not required.

Related topics
XPRSgetbasis, XPRSgetpresolvebasis, XPRSloadbasis, XPRSloadpresolvebasis.

Fair Isaac Corporation Proprietary Information

184

Chapter 7: Console and Library Functions

XPRSgetcheckedmodePurpose

Synopsis

You can use this function to interrogate whether checking and validation of all Optimizer function calls is
enabled for the current process. Checking and validation is enabled by default but can be disabled by
XPRSsetcheckedmode.
int XPRS_CC XPRSgetcheckedmode(int⁎ p_checkedmode);

Argument
p_checkedmode Variable that is set to 0 if checking and validation of Optimizer function calls is
disabled for the current process, non-zero otherwise.
Related topics
XPRSsetcheckedmode.

Fair Isaac Corporation Proprietary Information

185

Chapter 7: Console and Library Functions

XPRSgetcoef
Purpose
Synopsis

Returns a single coefficient in the constraint matrix.
int XPRS_CC XPRSgetcoef(XPRSprob prob, int row, int col, double ⁎p_coef);

Arguments
prob
row
col
p_coef

The current problem.
Row of the constraint matrix.
Column of the constraint matrix.
Pointer to a double where the coefficient will be returned.

Further information
It is quite inefficient to get several coefficients with the XPRSgetcoef function. It is better to use
XPRSgetcols or XPRSgetrows.
Related topics
XPRSgetcols, XPRSgetrows.

Fair Isaac Corporation Proprietary Information

186

Chapter 7: Console and Library Functions

XPRSgetcols, XPRSgetcols64
Purpose
Synopsis

Returns the nonzeros in the constraint matrix for the columns in a given range.
int XPRS_CC XPRSgetcols(XPRSprob prob, int start[], int rowind[], double
rowcoef[], int maxcoefs, int ⁎p_ncoefs, int first, int last);
int XPRS_CC XPRSgetcols64(XPRSprob prob, XPRSint64 start[], int rowind[],double rowcoef[], XPRSint64 maxcoefs, XPRSint64 ⁎p_ncoefs, int first,
int last);

Arguments
prob
start

rowindrowcoef
maxcoefs
p_ncoefs

first
last
ExampleThe current problem.
Integer array which will be filled with the indices indicating the starting offsets in therowind and rowcoef arrays for each requested column. It must be of length at least
last-first+2. Column i starts at position start[i] in the rowind and rowcoef
arrays, and has start[i+1]-start[i] elements in it. May be NULL if not required.
Integer array of length maxcoefs which will be filled with the row indices of the nonzero
coefficents for each column. May be NULL if not required.
Double array of length maxcoefs which will be filled with the nonzero coefficient values.
May be NULL if not required.
The size of the rowind and rowcoef arrays. This is the maximum number of nonzero
coefficients that the Optimizer is allowed to return.
Pointer to an integer where the number of nonzero coefficients in the selected columns
will be returned. If p_ncoefs exceeds maxcoefs, only the maxcoefs first nonzero
coefficients will be returned.
First column in the range.
Last column in the range.

The following examples retrieves the number of nonzero coefficients in all columns of the problem:
int ncoefs, cols, first = 0, last;...
XPRSgetintattrib(prob,XPRS_COLS,&cols);
last = cols-1;
XPRSgetcols(prob,NULL,NULL,NULL,0,&ncoefs,first,last);

Further information
It is possible to obtain just the number of elements in the range of columns by replacing start, rowind
and rowcoef by NULL, as in the example. In this case, maxcoefs must be set to 0 to indicate that thelength of arrays passed is zero. This is demonstrated in the example above.
Related topics
XPRSgetrows.

Fair Isaac Corporation Proprietary Information

187

Chapter 7: Console and Library Functions

XPRSgetcoltype
Purpose
Synopsis

Returns the column types for the columns in a given range.
int XPRS_CC XPRSgetcoltype(XPRSprob prob, char coltype[], int first, intlast);

Arguments
prob
coltype

first
last
ExampleThe current problem.
Character array of length last-first+1 where the column types will be returned:
C
indicates a continuous variable;I
indicates an integer variable;
B
indicates a binary variable;
S
indicates a semi-continuous variable;R
indicates a semi-continuous integer variable;P
indicates a partial integer variable.
First column in the range.
Last column in the range.

This example finds the types for all columns in the matrix and prints them to the console:
int cols, i;char ⁎types;...
XPRSgetintattrib(prob,XPRS_COLS,&cols);
types = (char ⁎)malloc(sizeof(char)⁎cols);
XPRSgetcoltype(prob,types,0,cols-1);
for(i=0;i<cols;i++) printf("%c\n",types[i]);Related topics
XPRSchgcoltype, XPRSgetrowtype.

Fair Isaac Corporation Proprietary Information

188

Chapter 7: Console and Library Functions

XPRSgetcontrolinfo
PurposeAccesses the id number and the type information of a control given its name. A control name may be forexample XPRS_PRESOLVE. Names are case-insensitive and may or may not have the XPRS_ prefix. The
id number is the constant used to identify the control for calls to functions such as
XPRSgetintcontrol.
The function will return an id number of 0 and a type value of XPRS_TYPE_NOTDEFINED if the name is
not recognized as a control name. Note that this will occur if the name is an attribute name and not acontrol name.

Synopsis

int XPRS_CC XPRSgetcontrolinfo(XPRSprob prob, const char⁎ name, int⁎ p_id,
int⁎ iTypeinfo);

Arguments
prob
name

p_id
p_typeExampleThe current problem.
The name of the control to be queried. Names are case-insensitive and may or may nothave the XPRS_ prefix. A full list of all controls may be found in 8, or from the list in the
xprs.h header file.
Pointer to an integer where the id number will be returned.
Pointer to an integer where the type information will be returned. The returned value will
be one of the following constants from xprs.h:
XPRS_TYPE_NOTDEFINED The name was not recognized.
XPRS_TYPE_INT
32 bit integer.
XPRS_TYPE_INT64
64 bit integer.
XPRS_TYPE_DOUBLE
Double precision floating point.
XPRS_TYPE_STRING
String.

The following code example obtains the id number and the type information of the control or attributewith name given by name. Note that the name happens to be a control name in this example:
const char ⁎name = "presolve";
int id, type;...
if(XPRSgetattribinfo(prob, name, &id,
&type) || id==0) {if(XPRSgetcontrolinfo(prob, name, &id,
&type) || id==0) {printf("Unrecognized name: %s\n", name);}}

Related topics
XPRSgetattribinfo.

Fair Isaac Corporation Proprietary Information

189

Chapter 7: Console and Library Functions

XPRSgetcpcutlist
Purpose
Synopsis

Returns a list of cut indices from the cut pool.
int XPRS_CC XPRSgetcpcutlist(XPRSprob prob, int cuttype, int interp, doubledelta, int ⁎p_ncuts, int maxcuts, XPRScut cutind[], double viol[]);Arguments
prob
cuttypeinterpdelta
p_ncuts
maxcuts
cutindviol

The current problem.
The user defined type of the cuts to be returned.
Way in which the cut type is interpreted:-1
get all cuts;
1
treat cut types as numbers;
2
treat cut types as bit maps - get cut if any bit matches any bit set in
cuttype;3
treat cut types as bit maps - get cut if all bits match those set in cuttype.
Only those cuts with a signed violation greater than delta will be returned.
Pointer to the integer where the number of cuts of type cuttype in the cut pool will be
returned.
Maximum number of cuts to be returned.
Array of length maxcuts where the pointers to the cuts will be returned.
Double array of length maxcuts where the values of the signed violations of the cuts will
be returned.

Further information
1. The violated cuts can be obtained by setting the delta parameter to the size of the (signed) violation
required. If unviolated cuts are required as well, delta may be set to XPRS_MINUSINFINITY which isdefined in the library header file.
2. If the number of active cuts is greater than maxcuts, only maxcuts cuts will be returned and p_ncuts
will be set to the number of active cuts. If p_ncuts is less than maxcuts, then only p_ncuts positions
will be filled in cutind.
3. In case of a cut of type ’L’, the violation equals the negative of the slack associated with the row of thecut. In case of a cut of type ’G’, the violation equals the slack associated with the row of the cut. For cutsof type ’E’, the violation equals the absolute value of the slack.
4. Please note that the violations returned are absolute violations, while feasibility is checked by the
Optimizer in the scaled problem.
Related topics
XPRSdelcpcuts, XPRSgetcpcuts, XPRSgetcutlist, XPRSloadcuts, XPRSgetcutmap,
XPRSgetcutslack, Section 5.9.

Fair Isaac Corporation Proprietary Information

190

Chapter 7: Console and Library Functions

XPRSgetcpcuts, XPRSgetcpcuts64
Purpose

Synopsis

Returns cuts from the cut pool. A list of cut pointers in the array rowind must be passed to the routine.
The columns and elements of the cut will be returned in the regions pointed to by the colind andcutcoef parameters. The columns and elements will be stored contiguously and the starting point ofeach cut will be returned in the region pointed to by the start parameter.
int XPRS_CC XPRSgetcpcuts(XPRSprob prob, const XPRScut rowind[], int ncuts,
int maxcoefs, int cuttype[], char rowtype[], int start[], int
colind[], double cutcoef[], double rhs[]);int XPRS_CC XPRSgetcpcuts64(XPRSprob prob, const XPRScut rowind[], int
ncuts, XPRSint64 maxcoefs, int cuttype[], char rowtype[], XPRSint64
start[], int colind[], double cutcoef[], double rhs[]);Arguments
prob
rowindncuts
maxcoefs
cuttyperowtypestartcolindcutcoefrhs
ExampleThe current problem.
Array of length ncuts containing the pointers to the cuts.
Number of cuts to be returned.
Maximum number of column indices of the cuts to be returned.
Integer array of length at least ncuts where the cut types will be returned. May be NULL if
not required.
Character array of length at least ncuts where the sense of the cuts (L, G, or E) will be
returned. May be NULL if not required.
Integer array of length at least ncuts+1 containing the offsets into the colind andcutcoef arrays. The last element indicates where cut ncuts+1 would start. May be
NULL if not required.
Integer array of length maxcoefs where the column indices of the cuts will be returned.
May be NULL if not required.
Double array of length maxcoefs where the matrix values will be returned. May be NULL
if not required.
Double array of length at least ncuts where the right hand side elements for the cuts will
be returned. May be NULL if not required.

The following example gets the first two cuts:
int cuttype[2], start[3];int ⁎colind;
int rowind[] = { 0, 1 };double rhs[2];double ⁎cutcoef;char ⁎ rowtype;...
XPRSgetcpcuts(prob,rowind,2,0,NULL,NULL,start,NULL,NULL,NULL);
colind = (int⁎) malloc(start[2]⁎sizeof(int));
cutcoef = (double⁎) malloc(start[2]⁎sizeof(double));XPRSgetcpcuts(prob,rowind,2,0,cuttype,rowtype,start,colind,cutcoef,rhs);

Further information
It is possible to obtain just the number of nonzeros in the range of queried cuts by calling the functions
with all output arays except for start equaling NULL and checking the value of start[ncuts]. In thisFair Isaac Corporation Proprietary Information

191

Chapter 7: Console and Library Functions

case, maxcoefs must be set to 0 to indicate that the length of arrays passed is 0.
Related topics
XPRSgetcpcutlist, XPRSgetcutlist, 5.9.

Fair Isaac Corporation Proprietary Information

192

Chapter 7: Console and Library Functions

XPRSgetcutlist
Purpose
Synopsis

Retrieves a list of cut pointers for the cuts active at the current node.
int XPRS_CC XPRSgetcutlist(XPRSprob prob, int cuttype, int interp, int⁎p_ncuts, int maxcuts, XPRScut cutind[]);Arguments
prob
cuttypeinterpp_ncuts
maxcuts
cutindThe current problem.
User defined type of the cuts to be returned. A value of -1 indicates return all active cuts.
Way in which the cut type is interpreted:-1
get all cuts;
1
treat cut types as numbers;
2
treat cut types as bit maps - get cut if any bit matches any bit set in
cuttype;3
treat cut types as bit maps - get cut if all bits match those set in cuttype.
Pointer to the integer where the number of active cuts of type cuttype will be returned.
Maximum number of cuts to be retrieved.
Array of length maxcuts where the pointers to the cuts will be returned.

Further information
If the number of active cuts is greater than maxcuts, then maxcuts cuts will be returned and p_ncuts
will be set to the number of active cuts. If p_ncuts is less than maxcuts, then only p_ncuts positions
will be filled in cutind.
Related topics
XPRSgetcpcutlist, XPRSgetcpcuts, Section 5.9.

Fair Isaac Corporation Proprietary Information

193

Chapter 7: Console and Library Functions

XPRSgetcutmap
Purpose

Synopsis

Used to return in which rows a list of cuts are currently loaded into the Optimizer. This is useful for
example to retrieve the duals associated with active cuts.
int XPRS_CC XPRSgetcutmap(XPRSprob prob, int ncuts, const XPRScut cutind[],int cutmap[]);Arguments
prob
ncuts
cutindcutmap

The current problem.
Number of cuts in the cutind array.
Pointer array to the cuts for which the row index is requested.
Integer array of length ncuts, where the row indices are returned.

Further information
For cuts currently not loaded into the problem, a row index of -1 is returned.
Related topics
XPRSgetcpcutlist, XPRSdelcpcuts, XPRSgetcutlist, XPRSloadcuts, XPRSgetcutslack,
XPRSgetcpcuts, Section 5.9.

Fair Isaac Corporation Proprietary Information

194

Chapter 7: Console and Library Functions

XPRSgetcutslack
Purpose

Synopsis

Used to calculate the slack value of a cut with respect to the current LP relaxation solution. The slack is
calculated from the cut itself, and might be requested for any cut (even if it is not currently loaded into the
problem).
int XPRS_CC XPRSgetcutslack(XPRSprob prob, XPRScut cut, double⁎ p_slack);

Arguments
prob
cutindp_slack

The current problem.
Pointer of the cut for which the slack is to be calculated.
Double pointer where the value of the slack is returned.

Related topics
XPRSgetcpcutlist, XPRSdelcpcuts, XPRSgetcutlist, XPRSloadcuts, XPRSgetcutmap,
XPRSgetcpcuts, Section 5.9.

Fair Isaac Corporation Proprietary Information

195

Chapter 7: Console and Library Functions

XPRSgetdaysleft
Purpose
Synopsis

Returns the number of days left until the license expires.
int XPRS_CC XPRSgetdaysleft(int ⁎p_daysleft);

Argument
p_daysleft Pointer to an integer where the number of days is to be returned. For a permanent
license, the return value will be XPRS_MAXINT
ExampleThe following calls XPRSgetdaysleft to print information about the license:
int daysleft;...
XPRSinit(NULL);
if(XPRSgetdaysleft(&daysleft) != 0) {printf("An error occurred\n");} else if (daysleft==XPRS_MAXINT) {printf("License will never expire\n");} else {printf("License expires in %d days\n", daysleft);}

Related topics
XPRSgetbanner.

Fair Isaac Corporation Proprietary Information

196

Chapter 7: Console and Library Functions

XPRSgetdblattrib
Purpose

Synopsis

Enables users to retrieve the values of various double problem attributes. Problem attributes are set
during loading and optimization of a problem.
int XPRS_CC XPRSgetdblattrib(XPRSprob prob, int attrib, double ⁎p_value);

Arguments
prob
attribp_value
ExampleThe current problem.
Problem attribute whose value is to be returned. A full list of all available problem
attributes may be found in Chapter 9, or from the list in the xprs.h header file.
Pointer to a double where the value of the problem attribute will be returned.

The following obtains the optimal value of the objective function and displays it to the console:
double lpobjval;...
XPRSlpoptimize(prob,"");XPRSgetdblattrib(prob,XPRS_LPOBJVAL,&lpobjval);printf("The maximum profit is %f\n",lpobjval);

Related topics
XPRSgetintattrib, XPRSgetstrattrib.

Fair Isaac Corporation Proprietary Information

197

Chapter 7: Console and Library Functions

XPRSgetdblcontrol
Purpose
Synopsis

Retrieves the value of a given double control parameter.
int XPRS_CC XPRSgetdblcontrol(XPRSprob prob, int control, double ⁎p_value);

Arguments
prob
control
p_value
ExampleThe current problem.
Control parameter whose value is to be returned. A full list of all controls may be found in
Chapter 8, or from the list in the xprs.h header file.
Pointer to the location where the control value will be returned.

The following returns the integer feasibility tolerance:
XPRSgetdblcontrol(prob,XPRS_MIPTOL,&miptol);Related topics
XPRSsetdblcontrol, XPRSgetintcontrol, XPRSgetstrcontrol.

Fair Isaac Corporation Proprietary Information

198

Chapter 7: Console and Library Functions

XPRSgetdirs
Purpose

Synopsis

Used to return the directives that have been loaded into a matrix. Priorities, forced branching directions
and pseudo costs can be returned. If called after presolve, XPRSgetdirs will get the directives for thepresolved problem.
int XPRS_CC XPRSgetdirs(XPRSprob prob, int ⁎p_ndir, int indices[], int
prios[], char branchdirs[], double uppseudo[], double downpseudo[]);Arguments
prob
p_ndirindices

The current problem.
Pointer to an integer where the number of directives will be returned.
Integer array of length p_ndir containing the column numbers (0, 1, 2,...) or negativevalues corresponding to special ordered sets (the first set numbered -1, the second
numbered -2,...). May be NULL if not required.
prios
Integer array of length p_ndir containing the priorities for the columns and sets, wherecolumns/sets with smallest priority will be branched on first. May be NULL if not required.
branchdirs Character array of length p_ndir specifying the branching direction for each column orset:U
the entity is to be forced up;
Dthe entity is to be forced down;N
not specified.
May be NULL if not required.
uppseudo
Double array of length p_ndir containing the up pseudo costs for the columns and sets.
May be NULL if not required.
downpseudo Double array of length p_ndir containing the down pseudo costs for the columns andsets. May be NULL if not required.

Further information
The value p_ndir denotes the number of directives, at most MIPENTS, obtainable with
XPRSgetintattrib(prob,XPRS_MIPENTS,& mipents);.
Related topics
XPRSloaddirs, XPRSloadpresolvedirs.

Fair Isaac Corporation Proprietary Information

199

Chapter 7: Console and Library Functions

XPRSgetdualray
Purpose

Synopsis

Retrieves a dual ray (dual unbounded direction) for the current problem, if the problem is found to be
infeasible.
int XPRS_CC XPRSgetdualray(XPRSprob prob, double ray[], int ⁎p_hasray);

Arguments
prob
rayp_hasray
ExampleThe current problem.
Double array of length ROWS to hold the ray. May be NULL if not required.
This variable will be set to 1 if the Optimizer is able to return a dual ray, 0 otherwise.

The following code tries to retrieve a dual ray:int rows;
double ⁎dualRay;
int hasray;...
XPRSgetintattrib(prob, XPRS_ROWS, &rows);
dualRay = malloc(rows⁎sizeof(double));XPRSgetdualray(prob, dualRay, &hasray);if(!hasray) printf("Could not retrieve a dual ray\n");Further information
1. It is possible to retrieve a dual ray only when, after solving an LP problem, the final status (LPSTATUS) is
XPRS_LP_INFEAS.
2. Dual rays are not post-solved. If the problem is in a presolved state, the dual ray that is returned will be forthe presolved problem. If the problem was solved with presolve on and has been restored to the originalstate (the default behavior), this function will not be able to return a ray. To ensure that a dual ray can beobtained, it is recommended to solve a problem with presolve turned off (PRESOLVE = 0).
Related topics
XPRSgetprimalray.

Fair Isaac Corporation Proprietary Information

200

Chapter 7: Console and Library Functions

XPRSgetgencons, XPRSgetgencons64
Purpose
Synopsis

Returns the general constraints y = f(x1, ..., xn, c1, ..., cm) in a given range.
int XPRS_CC XPRSgetgencons(XPRSprob prob, int contype[], int resultant[],
int colstart[], int colind[], int maxcols, int ⁎p_ncols, int
valstart[], double val[], int maxvals, int ⁎p_nvals, int first, intlast);
int XPRS_CC XPRSgetgencons64(XPRSprob prob, int contype[], int resultant[],
XPRSint64 colstart[], int colind[], XPRSint64 maxcols, XPRSint64⁎p_ncols, XPRSint64 valstart[], double val[], XPRSint64 maxvals,
XPRSint64 ⁎p_nvals, int first, int last);

Arguments
prob
contyperesultantcolstart
colindmaxcols
p_ncols

valstartval
maxvalsp_nvals

first
last
ExampleThe current problem.
NULL if not required or an integer array of length at least last-first+1 which
will be filled with the types of the general constraints:
XPRS_GENCONS_MAX (0)indicates a maximum constraint;
XPRS_GENCONS_MIN (1)indicates a minimum constraint;
XPRS_GENCONS_AND (2)indicates an and constraint.
XPRS_GENCONS_OR (3)indicates an or constraint;
XPRS_GENCONS_ABS (4)indicates an absolute value constraint.
Integer array which will be filled with the indices of the output variables y. It must
be of length at least last-first+1. May be NULL if not required.
Integer array of length at least last-first+2 which will be filled with the startindex of each general constraint in the colind array. May be NULL if not required.
Integer array which will be filled with the indices of the input variables xi. May be
NULL if not required.
Maximum number of input columns to be retrieved.
Pointer to return the number of input columns in the colind array. If the numberof input columns is greater than maxcols, then only maxcols elements will be
returned. May be NULL if not required.
Integer array of length at least last-first+2 which will be filled with the startindex of each general constraint in the val array. May be NULL if not required.
Integer array which will be filled with the constant values ci. May be NULL if not
required.
Maximum number of constant values to be retrieved.
Pointer to return the number of constant values in the val array. If the number of
constant values is greater than maxvals, then only maxvals elements will be
returned.May be NULL if not required.
First general constraint in the range.
Last general constraint in the range.

The following example retrieves all general constraints:
int ngencons;
int ⁎contype;int ⁎resultant;int ⁎colstart;

Fair Isaac Corporation Proprietary Information

201

Chapter 7: Console and Library Functionsint ⁎colind;
int maxcols;
int ncols;int ⁎valstart;
int ⁎val;
int maxvals;
int nvals;...
XPRSgetdblattrib(prob, XPRS_GENCONS, &ngencons);
XPRSgetgencons(prob, NULL, NULL, NULL, NULL, 0, &maxcols, NULL, NULL, 0, &maxva
contype = (int⁎) malloc(ngencons⁎sizeof(int));
resultant = (int⁎) malloc(ngencons⁎sizeof(int));
colstart = (int⁎) malloc((ngencons+1)⁎sizeof(int));
colind = (int⁎) malloc(maxcols⁎sizeof(int));
valstart = (int⁎) malloc((ngencons+1)⁎sizeof(int));
val = (double⁎) malloc(maxvals⁎sizeof(double));XPRSgetgencons(prob, contype, resultant, colstart, colind, maxcols, &ncols, val...
Further information
1. It is possible to obtain just the number of input columns and/or constant values in the range of general
constraints by calling this function with maxcols and maxvals set to 0, in which case the required sizefor the arrays will be returned in p_ncols and p_nvals (one of them may be NULL if only the other isrequired).
2. Since general constraints get transformed and replaced during presolve, this should not be called on thepresolved problem.
Related topics
XPRSaddgencons, XPRSdelgencons.

Fair Isaac Corporation Proprietary Information

202

Chapter 7: Console and Library Functions

XPRSgetglobal, XPRSgetglobal64
Purpose

Synopsis

Retrieves global information about a problem. It must be called before XPRSmipoptimize if thepresolve option is used.
int XPRS_CC XPRSgetglobal(XPRSprob prob, int ⁎p_nentities, int ⁎p_nsets,char coltype[], int colind[], double limit[], char settype[], int
start[], int setcols[], double refval[]);int XPRS_CC XPRSgetglobal64(XPRSprob prob, int ⁎p_nentities, int ⁎p_nsets,char coltype[], int colind[], double limit[], char settype[],
XPRSint64 start[], int setcols[], double refval[]);Arguments
prob
The current problem.
p_nentities Pointer to the integer where the number of binary, integer, semi-continuous,semi-continuous integer and partial integer entities will be returned. This is equal to the
problem attribute MIPENTS.
Pointer to the integer where the number of SOS1 and SOS2 sets will be returned. It can be
p_nsets
retrieved from the problem attribute SETS.
coltype
Character array of length p_nentities where the entity types will be returned. The
types will be one of:B
binary variables;I
integer variables;P
partial integer variables;Ssemi-continuous variables;Rsemi-continuous integer variables.
colindInteger array of length p_nentities where the column indices of the global entities will
be returned.
Double array of length p_nentities where the limits for the partial integer variables andlimitlower bounds for the semi-continuous and semi-continuous integer variables will be
returned (any entries in the positions corresponding to binary and integer variables will bemeaningless).
Character array of length p_nsets where the set types will be returned. The set types will
settypebe one of:1
SOS1 type sets;
2
SOS2 type sets.
Integer array where the offsets into the setcols and refval arrays indicating the start
startof the sets will be returned. This array must be of length p_nsets+1, the final element
will contain the offset where set p_nsets+1 would start and equals the length of thesetcols and refval arrays, SETMEMBERS.
setcols
Integer array of length SETMEMBERS where the columns in each set will be returned.
refvalDouble array of length SETMEMBERS where the reference row entries for each member ofthe sets will be returned. These define the order for SOS2 constraints and may be used inbranching for both types.
ExampleThe following obtains the global variables and their types in the arrays colind and qrtype:
int nentities, nsets, ⁎colind;char ⁎coltype;...

Fair Isaac Corporation Proprietary Information

203

Chapter 7: Console and Library Functions

XPRSgetglobal(prob,&nentities,&nsets,NULL,NULL,NULL,NULL,
NULL,NULL,NULL);
colind = malloc(nentities⁎sizeof(int));
coltype = malloc(nentities⁎sizeof(char));
XPRSgetglobal(prob,&nentities,&nsets,coltype,ngcols,NULL,
NULL,NULL,NULL,NULL);
Further information
Any of the arguments except prob, p_nentities and p_nsets may be NULL if not required.
Related topics
XPRSloadglobal, XPRSloadqglobal.

Fair Isaac Corporation Proprietary Information

204

Chapter 7: Console and Library Functions

XPRSgetiisdata
Purpose

Synopsis

Returns information for an Irreducible Infeasible Set: size, variables (row and column vectors) andconflicting sides of the variables, duals and reduced costs.
int XPRS_CC XPRSgetiisdata(XPRSprob prob, int iis, int ⁎p_nrows, int⁎p_ncols, int rowind[], int colind[], char contype[], char bndtype[],double duals[], double djs[], char isolationrows[], charisolationcols[]);Arguments
prob
iis
p_nrows
p_ncols
rowindcolindcontype

The current problem.
The ordinal number of the IIS to get data for.
Pointer to an integer where the number of rows in the IIS will be returned.
Pointer to an integer where the number of bounds in the IIS will be returned.
Indices of rows in the IIS. Can be NULL if not required.
Indices of bounds (columns) in the IIS. Can be NULL if not required.
Sense of rows in the IIS:L
for less or equal row;G
for greater or equal row.
E
for an equality row (for a non LP IIS);
1
for a SOS1 row;2
for a SOS2 row;W
for a piecewise linear constraint;X
for a general constraint;Ifor an indicator row.
Can be NULL if not required.
bndtypeSense of bound in the IIS:
U
for upper bound;L
for lower bound.
F
for fixed columns (for a non LP IIS);
B
for a binary column;
I
for an integer column;
P
for a partial integer columns;
S
for a semi-continuous column;R
for a semi-continuous integer column.
Can be NULL if not required.
duals
The dual multipliers associated with the rows. Can be NULL if not required.
djs
The dual multipliers (reduced costs) associated with the bounds. Can be NULL if not
required.
isolationrows The isolation status of the rows:-1
if isolation information is not available for row (run iis isolations);0
if row is not in isolation;1
if row is in isolation.
Can be NULL if not required.
isolationcols The isolation status of the bounds:-1
if isolation information is not available for column (run iis isolations);0
if column is not in isolation;1
if column is in isolation.
Can be NULL if not required.

Fair Isaac Corporation Proprietary Information

205

Chapter 7: Console and Library Functions

ExampleThis example first retrieves the size of IIS 1, then gets the detailed information for the IIS.
XPRSgetiisdata(myprob, 1, &nrow, &ncol, NULL, NULL, NULL, NULL,
NULL,NULL,NULL,NULL);
rows = malloc(nrow⁎sizeof(int));
cols = malloc(ncol⁎sizeof(int));
contype = malloc(nrow);bndtype = malloc(ncol);duals = malloc(nrow⁎sizeof(double));djs = malloc(ncol⁎sizeof(double));isolationrows = malloc(nrow);isolationcols = malloc(ncol);XPRSgetiisdata(myprob, 1, &nrow, &ncol, rows, cols, contype,bndtype, duals, djs, isolationrows, isolationcols);

Further information
1. Calling IIS from the console automatically prints most of the above IIS information to the screen. Extra
information can be printed with the IIS -p command.
2. IISs are numbered from 1 to NUMIIS. Index number 0 refers to the IIS approximation.
3. If rowind and colind both are NULL, only the p_nrows and p_ncols are returned.
4. The arrays may be NULL if not required. However, arrays contype, duals and isolationrows are
only returned if rowind is not NULL. Similarly, arrays bndtype, djs and isolationcols are only
returned if colind is not NULL.
5. All the non NULL arrays should be of length p_nrows or p_ncols, respectively.
6. For the initial IIS approximation (iis = 0) the number of rows and columns with a nonzero Lagrange
multiplier (dual/reduced cost respectively) are returned. Please note that, in such cases, it might benecessary to call XPRSiisstatus to retrieve the necessary size of the return arrays.
7. If there are Special Ordered Sets in the IIS, their number is included in the rowind array.
8. For non LP IISs, some column indices may appear more than once in the colind array, for example an
integrality and a bound restriction for the same column.
9. Duals, reduced cost and isolation information is not available for nonlinear IIS problems, and for those
the arrays are filled with zero values in case they are provided.
Related topics
XPRSiisall, XPRSiisclear, XPRSiisfirst, XPRSiisisolations, XPRSiisnext,
XPRSiisstatus, XPRSiiswrite, IIS, Section A.6.

Fair Isaac Corporation Proprietary Information

206

Chapter 7: Console and Library Functions

XPRSgetindex
Purpose
Synopsis

Returns the index for a specified row or column name.
int XPRS_CC XPRSgetindex(XPRSprob prob, int type, const char ⁎name, int⁎p_index);

Arguments
prob
type
name
p_index
ExampleThe current problem.
1
if a row index is required;2
if a column index is required.
Null terminated string.
Pointer of the integer where the row or column index number will be returned. A value of-1 will be returned if the row or column does not exist.

The following example loads problem and checks to see if "n 0203" is the name of a row or column:
int seqr, seqc;...
XPRSreadprob(prob,"problem","");XPRSgetindex(prob,1,"n0203", &seqr);
XPRSgetindex(prob,2,"n0203", &seqc);
if(seqr==-1 && seqc ==-1) printf("n0203 not there\n");if(seqr!= -1) printf("n0203 is row %d\n",seqr);
if(seqc!= -1) printf"n0203 is column %d\n",seqc);

Related topics
XPRSaddnames.

Fair Isaac Corporation Proprietary Information

207

Chapter 7: Console and Library Functions

XPRSgetindicators
Purpose

Synopsis

Returns the indicator constraint condition (indicator variable and complement flag) associated to therows in a given range.
int XPRS_CC XPRSgetindicators(XPRSprob prob, int colind[], int complement[],
int first, int last);

Arguments
prob
colindThe current problem.
Integer array of length last-first+1 where the column indices of the indicatorvariables are to be placed.
complement Integer array of length last-first+1 where the indicator complement flags will be
returned:0
not an indicator constraint (in this case the corresponding entry in the colind
array is ignored);1
for indicator constraints with condition "bin = 1";-1
for indicator constraints with condition "bin = 0";
firstFirst row in the range.
last
Last row in the range (inclusive).

ExampleThe following example retrieves information about all indicator constraints in the matrix and prints a listof their indices.
int i, rows;
double ⁎colind, ⁎complement;...
XPRSgetintattrib(prob,XPRS_ROWS,&rows);
colind = malloc(rows⁎(sizeof(int)));complement = malloc(rows⁎(sizeof(int)));
XPRSgetindicators(prob,colind,complement,0,rows-1);
printf("Indicator rows:");for(i=0; i<rows; i++) if(complement[i]!=0) printf(" %d", i);printf("\n");Related topics
XPRSsetindicators, XPRSdelindicators.

Fair Isaac Corporation Proprietary Information

208

Chapter 7: Console and Library Functions

XPRSgetinfeas
Purpose
Synopsis

Returns a list of infeasible primal and dual variables.
int XPRS_CC XPRSgetinfeas(XPRSprob prob, int ⁎p_nprimalcols, int⁎p_nprimalrows, int ⁎p_ndualrows, int ⁎p_ndualcols, int x[], int
slack[], int duals[], int djs[]);Arguments
prob
The current problem.
p_nprimalcols Pointer to an integer where the number of primal infeasible variables is returned.
p_nprimalrows Pointer to an integer where the number of primal infeasible rows is returned.
p_ndualrows Pointer to an integer where the number of dual infeasible rows is returned.
p_ndualcols Pointer to an integer where the number of dual infeasible variables is returned.
xInteger array of length p_nprimalcols where the primal infeasible variables will be
returned. May be NULL if not required.
Integer array of length p_nprimalrows where the primal infeasible rows will be returned.
slack
May be NULL if not required.
duals
Integer array of length p_ndualrows where the dual infeasible rows will be returned.
May be NULL if not required.
djs
Integer array of length p_ndualcols where the dual infeasible variables will be returned.
May be NULL if not required.
Error values
91
422

A current problem is not available.
A solution is not available.

Related controls
DoubleFEASTOL
OPTIMALITYTOL
ExampleTolerance on RHS.
Reduced cost tolerance.

In this example, XPRSgetinfeas is first called with nulled integer arrays to get the number of infeasible
entries. Then space is allocated for the arrays and the function is again called to fill them in:
int nprimalcols, nprimalrows, ndualrows, ndualcols, ⁎x, ⁎slack, ⁎duals, ⁎djs;...
XPRSgetinfeas(prob, &nprimalcols, &nprimalrows, &ndualrows, &ndualcols,
NULL, NULL, NULL, NULL);
x = malloc(nprimalcols ⁎ sizeof(⁎x));
slack = malloc(nprimalrows ⁎ sizeof(⁎slack));duals = malloc(ndualrows ⁎ sizeof(⁎duals));
djs = malloc(ndualcols ⁎ sizeof(⁎djs));
XPRSgetinfeas(prob, &nprimalcols, &nprimalrows, &ndualrows, &ndualcols,x, slack, duals, djs);

Further information
1. To find the infeasibilities in a previously saved solution, the solution must first be loaded into memory
with the XPRSreadbinsol (READBINSOL) function.
2. If any of the last four arguments are set to NULL, the corresponding number of infeasibilities is still
returned.

Fair Isaac Corporation Proprietary Information

209

Chapter 7: Console and Library Functions

Related topics
XPRSgetscaledinfeas, XPRSgetiisdata, XPRSiisall, XPRSiisclear, XPRSiisfirst,
XPRSiisisolations, XPRSiisnext, XPRSiisstatus, XPRSiiswrite, IIS.

Fair Isaac Corporation Proprietary Information

210

Chapter 7: Console and Library Functions

XPRSgetintattrib, XPRSgetintattrib64
Purpose

Synopsis

Enables users to recover the values of various integer problem attributes. Problem attributes are set
during loading and optimization of a problem.
int XPRS_CC XPRSgetintattrib(XPRSprob prob, int attrib, int ⁎p_value);
int XPRS_CC XPRSgetintattrib64(XPRSprob prob, int attrib, XPRSint64⁎p_value);

Arguments
prob
attribp_value
ExampleThe current problem.
Problem attribute whose value is to be returned. A full list of all problem attributes may befound in Chapter 9, or from the list in the xprs.h header file.
Pointer to an integer where the value of the problem attribute will be returned.

The following obtains the number of columns in the matrix and allocates space to obtain lower bounds
for each column:
int cols;
double ⁎lb;...
XPRSgetintattrib(prob,XPRS_COLS,&cols);
lb = (double ⁎) malloc(sizeof(double)⁎cols);
XPRSgetlb(prob,lb,0,cols-1);

Related topics
XPRSgetdblattrib, XPRSgetstrattrib.

Fair Isaac Corporation Proprietary Information

211

Chapter 7: Console and Library Functions

XPRSgetintcontrol, XPRSgetintcontrol64
Purpose
Synopsis

Enables users to recover the values of various integer control parameters
int XPRS_CC XPRSgetintcontrol(XPRSprob prob, int control, int ⁎p_value);
int XPRS_CC XPRSgetintcontrol64(XPRSprob prob, int control, XPRSint64⁎p_value);

Arguments
prob
control
p_value
ExampleThe current problem.
Control parameter whose value is to be returned. A full list of all controls may be found in
Chapter 8, or from the list in the xprs.h header file.
Pointer to an integer where the value of the control will be returned.

The following obtains the value of DEFAULTALG and outputs it to screen:
int defaultalg;...
XPRSlpoptimize(prob,"");XPRSgetintcontrol(prob,XPRS_DEFAULTALG,&defaultalg);
printf("DEFAULTALG is %d\n",defaultalg);

Further information
Some control parameters, such as SCALING, are bitmaps. Each bit controls a different behavior. If set, bit
0 has value 1, bit 1 has value 2, bit 2 has value 4, and so on.
Related topics
XPRSsetintcontrol, XPRSgetdblcontrol, XPRSgetstrcontrol.

Fair Isaac Corporation Proprietary Information212

Chapter 7: Console and Library Functions

XPRSgetlastbarsol
Purpose
Synopsis

Used to obtain the last barrier solution values following optimization that used the barrier solver.
int XPRS_CC XPRSgetastbarsol(XPRSprob prob, double x[], double slack[],
double duals[], double djs[], int ⁎p_status);

Arguments
prob
x
slack
duals
djs
p_status

The current problem.
Double array of length ORIGINALCOLS where the values of the primal variables will be
returned. May be NULL if not required.
Double array of length ORIGINALROWS where the values of the slack variables will be
returned. May be NULL if not required.
Double array of length ORIGINALROWS where the values of the dual variables (cTB B–1 ) will
be returned. May be NULL if not required.
Double array of length ORIGINALCOLS where the reduced cost for each variable(cT – cTB B–1 A) will be returned. May be NULL if not required.
Status of the last barrier solve. Value matches that of XPRS_LPSTATUS should the solve
have been stopped immediately after the barrier.

Further information
1. If the barrier solver has not been used, p_status will return XPRS_LP_UNSOLVED.
2. The barrier solution or the solution candidate is always available if the status is not
XPRS_LP_UNSOLVED.
3. The last barrier solution is available until the next solve, and is not invalidated by otherwise working withthe problem.
Related topics
XPRSgetlpsol

Fair Isaac Corporation Proprietary Information

213

Chapter 7: Console and Library Functions

XPRSgetlasterror
Purpose
Synopsis

Returns the error message corresponding to the last error encountered by a library function.
int XPRS_CC XPRSgetlasterror(XPRSprob prob, char ⁎errmsg);

Arguments
prob
errmsgExampleThe current problem.
A 512 character buffer where the last error message will be returned. If the message islonger than 512 characters then it will be truncated. The message will always beterminated by a NUL character.

The following shows how this function might be used in error-checking:void error(XPRSprob myprob, char ⁎function){
char errmsg[512];
XPRSgetlasterror(myprob,errmsg);
printf("Function %s did not execute correctly: %s\n",function, errmsg);
XPRSdestroyprob(myprob);
XPRSfree();exit(1);}
where the main function might contain lines such as:
XPRSprob prob;...
if(XPRSreadprob(prob,"myprob",""))
error(prob,"XPRSreadprob");

Related topics
ERRORCODE, XPRSaddcbmessage, XPRSsetlogfile, Chapter 10.

Fair Isaac Corporation Proprietary Information

214

Chapter 7: Console and Library Functions

XPRSgetlb
Purpose
Synopsis

Returns the lower bounds for the columns in a given range.
int XPRS_CC XPRSgetlb(XPRSprob prob, double lb[], int first, int last);

Arguments
prob
lb
first
last
ExampleThe current problem.
Double array of length last-first+1 where the lower bounds are to be placed.
First column in the range.
Last column in the range.

The following example retrieves the lower bounds for the columns of the current problem:
int cols;
double ⁎lb;...
XPRSgetintattrib(prob,XPRS_COLS,&cols);
lb = (double ⁎) malloc(sizeof(double)⁎cols);
XPRSgetlb(prob,lb,0,cols-1);

Further information
Values greater than or equal to XPRS_PLUSINFINITY should be interpreted as infinite; values less thanor equal to XPRS_MINUSINFINITY should be interpreted as infinite and negative.
Related topics
XPRSchgbounds, XPRSgetub.

Fair Isaac Corporation Proprietary Information

215

Chapter 7: Console and Library Functions

XPRSgetlicerrmsg
Purpose
Synopsis

Retrieves an error message describing the last licensing error, if any occurred.
int XPRS_CC XPRSgetlicerrmsg(char ⁎buffer, int maxbytes);

Arguments
buffermaxbytes
ExampleBuffer long enough to hold the error message (including a null terminator).
Length of the buffer.

The following calls XPRSgetlicerrmsg to find out why XPRSinit failed:char message[512];...
if(XPRSinit(NULL)){XPRSgetlicerrmsg(message,512);
printf("%s\n", message);}

Further information
1. The error message includes an error code, which in case the user wishes to use it is also returned by thefunction. If there was no licensing error the function returns 0.
2. It’s recommended that you pass a buffer of at least 2048 bytes as licensing errors can be qute long. If theerror message is too large to fit in the buffer, the first maxbytes-1 characters will be returned.
Related topics
XPRSinit.

Fair Isaac Corporation Proprietary Information

216

Chapter 7: Console and Library Functions

XPRSgetlpsol
Purpose
Synopsis

Used to obtain the LP solution values following optimization.
int XPRS_CC XPRSgetlpsol(XPRSprob prob, double x[], double slack[], double
duals[], double djs[]);Arguments
probx

The current problem.
Double array of length ORIGINALCOLS where the values of the primal variables will be
returned. May be NULL if not required.
Double array of length ORIGINALROWS where the values of the slack variables will be
returned. May be NULL if not required.
Double array of length ORIGINALROWS where the values of the dual variables (cTB B–1 ) will
be returned. May be NULL if not required.
Double array of length ORIGINALCOLS where the reduced cost for each variable(cT – cTB B–1 A) will be returned. May be NULL if not required.

slack
duals
djs
ExampleThe following sequence of commands will get the LP solution (x) at the top node of a MIP and the
optimal MIP solution (y):int cols;
double ⁎x, ⁎y;...
XPRSmipoptimize(prob,"l");XPRSgetintattrib(prob,XPRS_ORIGINALCOLS,&cols);
x = malloc(cols⁎sizeof(double));XPRSgetlpsol(prob,x,NULL,NULL,NULL);
XPRSmipoptimize(prob,"");
y = malloc(cols⁎sizeof(double));XPRSgetmipsol(prob,y,NULL);

Further information
1. The function always returns data in the original space, even if the problem is currently in presolved state.
Use XPRSgetpresolvesol if you need the solution in terms of the presolved model.
2. If called during a global callback the solution of the current node will be returned.
3. When an integer solution is found during a global search, it is always set up as a solution to the current
node; therefore the integer solution is available as the current node solution and can be retrieved with
XPRSgetlpsol and XPRSgetpresolvesol.
4. If the matrix is modified after calling XPRSlpoptimize, then the solution will no longer be available.
5. If the problem has been presolved, then XPRSgetlpsol returns the solution to the original problem. The
only way to obtain the presolved solution is to call the related function, XPRSgetpresolvesol.
Related topics
XPRSgetlpsolval, XPRSgetpresolvesol, XPRSgetmipsol, XPRSwriteprtsol,
XPRSwritesol.

Fair Isaac Corporation Proprietary Information

217

Chapter 7: Console and Library Functions

XPRSgetlpsolval
Purpose
Synopsis

Used to obtain a single LP solution value following optimization.
int XPRS_CC XPRSgetlpsolval(XPRSprob prob, int col, int row, double ⁎p_x,
double ⁎p_slack, double ⁎p_dual, double ⁎p_dj);

Arguments
prob
col
row
p_x
p_slack
p_dualp_dj

The current problem.
Column index of the variable for which to return the solution value.
Row index of the constraint for which to return the solution value.
Double pointer where the value of the primal variable will be returned. May be NULL if not
required.
Double pointer where the value of the slack variable will be returned. May be NULL if not
required.
Double pointer where the value of the dual variable (cTB B–1 ) will be returned. May be NULL
if not required.
Double pointer where the reduced cost for the variable (cT – cTB B–1 A) will be returned. May
be NULL if not required.

Further information
This function is currently not supported if the problem is in a presolved state.
Related topics
XPRSgetlpsol, XPRSgetpresolvesol, XPRSgetmipsol, XPRSwriteprtsol, XPRSwritesol.

Fair Isaac Corporation Proprietary Information

218

Chapter 7: Console and Library Functions

XPRSgetmessagestatus
Purpose
Synopsis

Retrieves the current suppression status of a message.
int XPRS_CC XPRSgetmessagestatus(XPRSprob prob, int msgcode, int⁎p_status);

Arguments
prob
msgcodep_status

The problem to check for the suppression status of the message error code. Use NULL tocheck for the global suppression status of the message msgcode.
The id number of the message. Refer to Chapter 10 for a list of possible message
numbers.
Non-zero if the message is not suppressed; 0 otherwise.

Further information
If a message is suppressed globally then the message will always have p_status return zero from
XPRSgetmessagestatus when prob is non-NULL.
Related topics
XPRSsetmessagestatus.

Fair Isaac Corporation Proprietary Information219

Chapter 7: Console and Library Functions

XPRSgetmipsol
Purpose
Synopsis

Used to obtain the solution values of the last MIP solution that was found.
int XPRS_CC XPRSgetmipsol(XPRSprob prob, double x[], double slack[]);Arguments
probx

The current problem.
Double array of length ORIGINALCOLS where the values of the primal variables will be
returned. May be NULL if not required.
Double array of length ORIGINALROWS where the values of the slack variables will be
returned. May be NULL if not required.

slack
ExampleThe following sequence of commands will get the solution (x) of the last MIP solution for a problem:
int cols;
double ⁎x;...
XPRSmipoptimize(prob,"");XPRSgetintattrib(prob,XPRS_ORIGINALCOLS,&cols);
x = malloc(cols⁎sizeof(double));XPRSgetmipsol(prob,x,NULL);

Further information
1. Warning: If allocating space for the MIP solution the row and column sizes must be obtained for theoriginal problem and not for the presolve problem. They can be obtained before optimizing or after calling
XPRSpostsolve for the case where the global search has not completed.
2. During a global intsol or preintsol callback, in order to retrieve the corresponding integer solution,use either XPRSgetlpsol or XPRSgetpresolvesol, not XPRSgetmipsol (see the documentation ofthese callbacks for an explanation).
Related topics
XPRSgetmipsolval, XPRSgetpresolvesol, XPRSwriteprtsol, XPRSwritesol.

Fair Isaac Corporation Proprietary Information

220

Chapter 7: Console and Library Functions

XPRSgetmipsolval
Purpose
Synopsis

Used to obtain a single solution value of the last MIP solution that was found.
int XPRS_CC XPRSgetmipsolval(XPRSprob prob, int col, int row, double ⁎p_x,
double ⁎p_slack);

Arguments
prob
col
row
p_x
p_slack

The current problem.
Column index of the variable for which to return the solution value.
Row index of the constraint for which to return the solution value.
Double pointer where the value of the primal variable will be returned. May be NULL if not
required.
Double pointer where the value of the slack variable will be returned. May be NULL if not
required.

Related topics
XPRSgetmipsol, XPRSgetpresolvesol, XPRSwriteprtsol, XPRSwritesol.

Fair Isaac Corporation Proprietary Information

221

Chapter 7: Console and Library Functions

XPRSgetmqobj, XPRSgetmqobj64
Purpose

Synopsis

Returns the nonzeros in the quadratic objective coefficients matrix for the columns in a given range. To
achieve maximum efficiency, XPRSgetmqobj returns the lower triangular part of this matrix only.
int XPRS_CC XPRSgetmqobj (XPRSprob prob, int start[], int colind[], double
objqcoef[], int maxcoefs, int ⁎p_ncoefs, int first, int last);
int XPRS_CC XPRSgetmqobj64 (XPRSprob prob, XPRSint64 start[], int colind[],double objqcoef[], XPRSint64 maxcoefs, XPRSint64 ⁎p_ncoefs, int
first, int last);

Arguments
prob
start

colindobjqcoef
maxcoefs
p_ncoefs

first
last

The current problem.
Integer array which will be filled with indices indicating the starting offsets in the colind
and objqcoef arrays for each requested column. It must be length of at least
last-first+2. Column i starts at position start[i] in the mrwind and dmatvalarrays, and has start[i+1]-start[i] elements in it. May be NULL if maxcoefs is 0.
Integer array of length maxcoefs which will be filled with the column indices of thenonzero elements in the lower triangular part of Q. May be NULL if maxcoefs is 0.
Double array of length maxcoefs which will be filled with the nonzero element values.
May be NULL if maxcoefs is 0.
The maximum number of elements to be returned (size of the arrays).
Pointer to an integer where the number of nonzero quadratic objective coefficients will be
returned. If the number of nonzero coefficients is greater than maxcoefs, then only
maxcoefs elements will be returned. If p_ncoefs is smaller than maxcoefs, then only
p_ncoefs will be returned.
First column in the range.
Last column in the range.

Further information
The objective function is of the form cT x+0.5xT Qx where Q is positive semi-definite for minimization
problems and negative semi-definite for maximization problems. If this is not the case the optimization
algorithms may converge to a local optimum or may not converge at all. Note that only the upper or lower
triangular part of the Q matrix is returned.
Related topics
XPRSchgmqobj, XPRSchgqobj, XPRSgetqobj.

Fair Isaac Corporation Proprietary Information

222

Chapter 7: Console and Library Functions

XPRSgetnamelist
Purpose

Synopsis

Returns the names for the rows, columns, sets, piecewise linear of general constraints in a given range.
The names will be returned in a character buffer, with no trailing whitespace and with each name being
separated by a NULL character.
int XPRS_CC XPRSgetnamelist(XPRSprob prob, int type, char names[], int
maxbytes, int ⁎ p_nbytes, int first, int last);

Arguments
prob
type

names
maxbytes
p_nbytes
first
last
ExampleThe current problem.
1
if row names are required;2
if column names are required.
3
if set names are required.
4
if piecewise linear constraint names are required.
5
if general constraint names are required.
A buffer into which the names will be returned as a sequence of null-terminated strings.
The buffer should be of length maxbytes bytes. May be NULL if maxbytes is 0.
The maximum number of bytes that may be written to the buffer names.
A pointer to a variable into which will be written the number of bytes required to containthe names in the specified range. May be NULL if not required.
First row, column, set, piecewise linear or general constraint in the range.
Last row, column, set, piecewise linear or general constraint in the range.

The following example retrieves and outputs the row and column names for the current problem.
int i, o, cols, rows, cnames_len, rnames_len;char ⁎cnames, ⁎rnames;...
/⁎ Get problem size ⁎/XPRSgetintattrib(prob,XPRS_COLS,&cols);
XPRSgetintattrib(prob,XPRS_ROWS,&rows);/⁎ Request number of bytes required to retrieve the names ⁎/XPRSgetnamelist(prob,1,NULL,0,&rnames_len,0,rows-1);
XPRSgetnamelist(prob,2,NULL,0,&cnames_len,0,cols-1);/⁎ Now allocate buffers big enough then fetch the names ⁎/cnames = (char ⁎) malloc(sizeof(char)⁎cnames_len);rnames = (char ⁎) malloc(sizeof(char)⁎rnames_len);
XPRSgetnamelist(prob,1,rnames,rnames_len,NULL,0,rows-1);
XPRSgetnamelist(prob,2,cnames,cnames_len,NULL,0,cols-1);/⁎ Output row names ⁎/o=0;
for (i=0;i<rows;i++) {printf("Row #%d: %s\n", i, rnames+o);o += strlen(rnames+o)+1;}/⁎ Output column names ⁎/o=0;
for (i=0;i<cols;i++) {printf("Column #%d: %s\n", i, cnames+o);Fair Isaac Corporation Proprietary Information

223

Chapter 7: Console and Library Functions}o += strlen(cnames+o)+1;

Related topics
XPRSaddnames.

Fair Isaac Corporation Proprietary Information

224

Chapter 7: Console and Library Functions

XPRSgetnamelistobject
Purpose

Synopsis

Returns the XPRSnamelist object for the rows, columns or sets of a problem. The names stored in thisobject can be queried using the XPRS_nml_ functions.
int XPRS_CC XPRSgetnamelistobject(XPRSprob prob, int type, XPRSnamelist⁎p_nml);Arguments
prob
type

p_nml

The current problem.
1
if the row name list is required;2
if the column name list is required;3
if the set name list is required.
4
if piecewise linear constraint name list is required.
5
if general constraint name list is required.
Pointer to a variable holding the name list contained by the problem.

Further information
The XPRSnamelist object is a map of names to and from indices.
Related topics
None.

Fair Isaac Corporation Proprietary Information

225

Chapter 7: Console and Library Functions

XPRSgetnames
Purpose

Synopsis

Returns the names for the rows, columns, sets, piecewise linear or general constraints in a given range.
The names will be returned in a character buffer, each name being separated by a null character.
int XPRS_CC XPRSgetnames(XPRSprob prob, int type, char names[], int first,
int last);

Arguments
prob
type

names

first
last
ExampleThe current problem.
1
if row names are required;2
if column names are required.
3
if set names are required.
4
if piecewise linear constraint names are required.
5
if general constraint names are required.
Buffer long enough to hold the names. Since each name is 8⁎NAMELENGTH characterslong (plus a null terminator), the array, names, would be required to be at least as long as(first-last+1)*(8⁎NAMELENGTH+1) characters. The names of the row/column/set
first+i will be written into the names buffer starting at position i⁎8⁎NAMELENGTH+i.
First row, column, set, piecewise linear or general constraint in the range.
Last row, column, set, piecewise linear or general constraint in the range.

The following example retrieves the row and column names of the current problem:
int cols, rows, nl;...
XPRSgetintattrib(prob,XPRS_COLS,&cols);
XPRSgetintattrib(prob,XPRS_ROWS,&rows);
XPRSgetintattrib(prob,XPRS_NAMELENGTH,&nl);
cnames = (char ⁎) malloc(sizeof(char)⁎(8⁎nl+1)⁎cols);
rnames = (char ⁎) malloc(sizeof(char)⁎(8⁎nl+1)⁎rows);
XPRSgetnames(prob,1,rnames,0,rows-1);
XPRSgetnames(prob,2,cnames,0,cols-1);
To display names[i], use
int namelength;...
XPRSgetintattrib(prob,XPRS_NAMELENGTH,&namelength);printf("%s",names + i⁎(8⁎namelength+1));

Related topics
XPRSaddnames, XPRSgetnamelist.

Fair Isaac Corporation Proprietary Information

226

Chapter 7: Console and Library Functions

XPRSgetobj
Purpose
Synopsis

Returns the objective function coefficients for the columns in a given range.
int XPRS_CC XPRSgetobj(XPRSprob prob, double objcoef[], int first, intlast);

Arguments
prob
objcoef
first
last
ExampleThe current problem.
Double array of length last-first+1 where the objective function coefficients are to beplaced.
First column in the range.
Last column in the range.

The following example retrieves the objective function coefficients of the current problem:
int cols;
double ⁎objcoef;...
XPRSgetintattrib(prob,XPRS_COLS,&cols);
objcoef = (double ⁎) malloc(sizeof(double)⁎cols);
XPRSgetobj(prob, objcoef, 0, cols-1);

Related topics
XPRSchgobj.

Fair Isaac Corporation Proprietary Information

227

Chapter 7: Console and Library Functions

XPRSgetobjecttypename
Purpose

Synopsis

Function to access the type name of an object referenced using the generic Optimizer object pointer
XPRSobject.
int XPRS_CC XPRSgetobjecttypename(XPRSobject object, const char ⁎⁎p_name);

Arguments
xprsobjp_nameThe object for which the type name will be retrieved.
Pointer to a char pointer returning a reference to the null terminated string containing theobject’s type name. For example, if the object is of type XPRSprob then the returned
pointer points to the string "XPRSprob".

Further information
This function is intended to be used typically from within the message callback function registered with
the XPRS_ge_addcbmsghandler function. In such cases the user will need to identify the type ofobject sending the message since the message callback is passed only a generic pointer to the Optimizer
object (XPRSobject) sending the message.
Related topics
XPRS_ge_addcbmsghandler.

Fair Isaac Corporation Proprietary Information

228

Chapter 7: Console and Library Functions

XPRSgetpivotorderPurpose
Synopsis

Returns the pivot order of the basic variables.
int XPRS_CC XPRSgetpivotorder(XPRSprob prob, int pivotorder[]);Arguments
prob
The current problem.
pivotorder Integer array of length ROWS where the pivot order will be returned.
ExampleThe following returns the pivot order of the variables into an array pPivot :XPRSgetintattrib(prob,XPRS_ROWS,&rows);
pPivot = malloc(rows⁎(sizeof(int)));
XPRSgetpivotorder(prob,pPivot);

Further information
Row indices are in the range 0 to ROWS-1, whilst columns are in the range ROWS+SPAREROWS to
ROWS+SPAREROWS+COLS-1.
Related topics
XPRSgetpivots, XPRSpivot.

Fair Isaac Corporation Proprietary Information229

Chapter 7: Console and Library Functions

XPRSgetpivots
Purpose
Synopsis

Returns a list of potential leaving variables if a specified variable enters the basis.
int XPRS_CC XPRSgetpivots(XPRSprob prob, int enter, int outlist[], double
x[], double ⁎p_objval, int ⁎p_npivots, int maxpivots);

Arguments
prob
enter
outlistxp_objval
p_npivots
maxpivots
Error value
425
ExampleThe current problem.
Index of the specified row or column to enter basis.
Integer array of length at least maxpivots to hold list of potential leaving variables. May
be NULL if not required.
Double array of length ROWS+SPAREROWS+COLS to hold the values of all the variables
that would result if enter entered the basis. May be NULL if not required.
Pointer to a double where the objective function value that would result if enter entered
the basis will be returned.
Pointer to an integer where the actual number of potential leaving variables will be
returned.
Maximum number of potential leaving variables to return.

Indicates enter is invalid (out of range or already basic).

The following retrieves a list of up to 5 potential leaving variables if variable 6 enters the basis:
int npivots, outlist[5];double objective;...
XPRSgetpivots(prob,6,outlist,NULL,&objective,&npivots,5);

Further information
1. If the variable enter enters the basis and the problem is degenerate then several basic variables are
candidates for leaving the basis, and the number of potential candidates is returned enter p_npivots. A
list of at most maxpivots of these candidates is returned enter outlist which must be at least
maxpivots long. If variable enter were to be pivoted enter, then because the problem is degenerate,
the resulting values of the objective function and all the variables do not depend on which of thecandidates from outlist is chosen to leave the basis. The value of the objective is returned in
p_objval and the values of the variables into x.
2. Row indices are in the range 0 to ROWS-1, whilst columns are in the range ROWS+SPAREROWS to
ROWS+SPAREROWS+COLS-1.
Related topics
XPRSgetpivotorder, XPRSpivot.

Fair Isaac Corporation Proprietary Information

230

Chapter 7: Console and Library Functions

XPRSgetpresolvebasis
Purpose

Synopsis

Returns the current basis from memory into the user’s data areas. If the problem is presolved, thepresolved basis will be returned. Otherwise the original basis will be returned.
int XPRS_CC XPRSgetpresolvebasis(XPRSprob prob, int rowstat[], int
colstat[]);Arguments
prob
rowstatcolstat

ExampleThe current problem.
Integer array of length ROWS to the basis status of the stack, surplus or artificial variableassociated with each row. The status will be one of:0
slack, surplus or artificial is non-basic at lower bound;1
slack, surplus or artificial is basic;2
slack or surplus is non-basic at upper bound.
May be NULL if not required.
Integer array of length COLS to hold the basis status of the columns in the constraint
matrix. The status will be one of:variable is non-basic at lower bound, or superbasic at zero if the variable has no0
lower bound;1
variable is basic;
2
variable is at upper bound;3
variable is super-basic.
May be NULL if not required.

The following obtains and outputs basis information on a presolved problem prior to the global search:
XPRSprob prob;
int i, cols, ⁎colstat;...
XPRSreadprob(prob,"myglobalprob","");XPRSmipoptimize(prob,"l");XPRSgetintattrib(prob,XPRS_COLS,&cols);
colstat = malloc(cols⁎sizeof(int));
XPRSgetpresolvebasis(prob,NULL,colstat);for(i=0;i<cols;i++)printf("Column %d: %d\n", i, colstat[i]);XPRSmipoptimize(prob);

Related topics
XPRSgetbasis, XPRSloadbasis, XPRSloadpresolvebasis.

Fair Isaac Corporation Proprietary Information

231

Chapter 7: Console and Library Functions

XPRSgetpresolvemap
Purpose

Synopsis

Returns the mapping of the row and column numbers from the presolve problem back to the original
problem.
int XPRS_CC XPRSgetpresolvemap(XPRSprob prob, int rowmap[], int colmap[]);Arguments
prob
rowmapcolmapExampleThe current problem.
Integer array of length ROWS where the row maps will be returned.
Integer array of length COLS where the column maps will be returned.

The following reads in a (Mixed) Integer Programming problem and gets the mapping for the rows andcolumns back to the original problem following optimization of the linear relaxation. The elimination
operations of the presolve are turned off so that a one-to-one mapping between the presolve problem andthe original problem.
XPRSreadprob(prob,"MyProb","");XPRSsetintcontrol(prob,XPRS_PRESOLVEOPS,255);
XPRSmipoptimize(prob,"l");XPRSgetintattrib(prob,XPRS_COLS,&cols);
colmap = malloc(cols⁎sizeof(int));
XPRSgetintattrib(prob,XPRS_ROWS,&rows);
rowmap = malloc(rows⁎sizeof(int));
XPRSgetpresolvemap(prob,rowmap,colmap);

Further information
The presolved problem can contain rows or columns that do not map to anything in the original problem.
An example of this are cuts created during the MIP solve and temporarily added to the presolved problem.
It is also possible that the presolver will introduce new rows or columns. For any row or column that does
not have a mapping to a row or column in the original problem, the corresponding entry in the returnedrowmap and colmap arrays will be -1.
Related topics
5.3.

Fair Isaac Corporation Proprietary Information

232Chapter 7: Console and Library Functions

XPRSgetpresolvesol
Purpose
Synopsis

Returns the solution for the presolved problem from memory.
int XPRS_CC XPRSgetpresolvesol(XPRSprob prob, double x[], double slack[],
double duals[], double djs[]);Arguments
probx

The current problem.
Double array of length COLS where the values of the primal variables will be returned. May
be NULL if not required.
Double array of length ROWS where the values of the slack variables will be returned. May
be NULL if not required.
Double array of length ROWS where the values of the dual variables will be returned. May
be NULL if not required.
Double array of length COLS where the reduced cost for each variable will be returned.
May be NULL if not required.

slack
duals
djs
ExampleThe following reads in a (Mixed) Integer Programming problem and displays the solution to the presolved
problem following optimization of the linear relaxation:
XPRSreadprob(prob,"MyProb","");XPRSmipoptimize(prob,"l");XPRSgetintattrib(prob,XPRS_COLS,&cols);
x = malloc(cols⁎sizeof(double));XPRSgetpresolvesol(prob,x,NULL,NULL,NULL);
for(i=0;i<cols;i++)printf("Presolved x(%d) = %g\n",i,x[i]);XPRSmipoptimize(prob,"");

Further information
1. If the problem has not been presolved, the solution in memory will be returned.
2. The solution to the original problem should be returned using the related function XPRSgetlpsol.
3. If called during a global callback the solution of the current node will be returned.
4. When an integer solution is found during a global search, it is always set up as a solution to the current
node; therefore the integer solution is available as the current node solution and can be retrieved with
XPRSgetlpsol and XPRSgetpresolvesol.
Related topics
XPRSgetlpsol, 5.3.

Fair Isaac Corporation Proprietary Information

233

Chapter 7: Console and Library Functions

XPRSgetprimalray
Purpose

Synopsis

Retrieves a primal ray (primal unbounded direction) for the current problem, if the problem is found to be
unbounded.
int XPRS_CC XPRSgetprimalray(XPRSprob prob, double ray[], int ⁎p_hasray);

Arguments
prob
rayp_hasray
ExampleThe current problem.
Double array of length COLS to hold the ray. May be NULL if not required.
This variable will be set to 1 if the Optimizer is able to return a primal ray, 0 otherwise.

The following code tries to retrieve a primal ray:int cols;
double ⁎primalRay;
int hasray;...
XPRSgetintattrib(prob, XPRS_COLS, &cols);
primalRay = malloc(cols⁎sizeof(double));XPRSgetprimalray(prob, primalRay, &hasray);if(!hasray) printf("Could not retrieve a primal ray\n");Further information
1. It is possible to retrieve a primal ray only when, after solving an LP problem, the final status (LPSTATUS)
is XPRS_LP_UNBOUNDED.
2. Primal rays are not post-solved. If the problem is in a presolved state, the primal ray that is returned will
be for the presolved problem. If the problem was solved with presolve on and has been restored to theoriginal state (the default behavior), this function will not be able to return a ray. To ensure that a primal
ray can be obtained, it is recommended to solve a problem with presolve turned off (PRESOLVE = 0).
Related topics
XPRSgetdualray.

Fair Isaac Corporation Proprietary Information

234

Chapter 7: Console and Library Functions

XPRSgetprobname
Purpose
Synopsis

Returns the current problem name.
int XPRS_CC XPRSgetprobname(XPRSprob prob, char ⁎name);

Arguments
prob
name

The current problem.
A string of up to MAXPROBNAMELENGTH characters to contain the current problem name.

Related topics
XPRSsetprobname, MAXPROBNAMELENGTH.

Fair Isaac Corporation Proprietary Information

235

Chapter 7: Console and Library Functions

XPRSgetpwlcons, XPRSgetpwlcons64
Purpose
Synopsis

Returns the piecewise linear constraints y = f(x) in a given range.
int XPRS_CC XPRSgetpwlcons(XPRSprob prob, int colind[], int resultant[],
int start[], double xval[], double yval[], int maxpoints, int⁎p_npoints, int first, int last);
int XPRS_CC XPRSgetpwlcons64(XPRSprob prob, int colind[], int resultant[],
XPRSint64 start[], double xval[], double yval[], XPRSint64 maxpoints,
XPRSint64 ⁎p_npoints, int first, int last);

Arguments
prob
colindresultant
start

xval
yval
maxpoints
p_npoints

first
last
ExampleThe current problem.
Integer array which will be filled with the indices of the input variables x. It must be oflength at least last-first+1. May be NULL if not required.
Integer array which will be filled with the indices of the output variables y. It must be oflength at least last-first+1. May be NULL if not required.
Integer array which will be filled with the start indices of the different constraints in the
breakpoint arrays. It must be of length at least last-first+2. The x-values of the
breakpoints of piecewise linear constraint i < last will be given in xval[start[i]]to xval[start[i+1]]. May be NULL if not required.
Double array of length maxpoints which will be filled with the x-values of the
breakpoints. May be NULL if not required.
Double array of length maxpoints which will be filled with the y-values of the
breakpoints. May be NULL if not required.
Maximum number of breakpoints to be retrieved.
Pointer to return the number of breakpoints in the selected constraints. If the number ofbreakpoints is greater than maxpoints, then only maxpoints elements will be returnedin the xval and yval arrays. May be NULL if not required.
First piecewise linear constraint in the range.
Last piecewise linear constraint in the range.

The following example retrieves all variables and breakpoints in the first two piecewise linear constraints:

int ⁎colind;int ⁎resultant;int ⁎start;
double ⁎xval;
double ⁎yval;
int maxpoints;
int npoints;...
XPRSgetpwlcons(prob, NULL, NULL, NULL, NULL, NULL, 0, &maxpoints, 0, 1);
colind = (int⁎) malloc(2⁎sizeof(int));
resultant = (int⁎) malloc(2⁎sizeof(int));
start = (int⁎) malloc(3⁎sizeof(int));
xval = (double⁎) malloc(maxpoints⁎sizeof(double);yval = (double⁎) malloc(maxpoints⁎sizeof(double);
XPRSgetpwlcons(prob, colind, resultant, start, xval, yval, maxpoints, &npoints,

Fair Isaac Corporation Proprietary Information

236

Chapter 7: Console and Library Functions...
Further information
1. It is possible to obtain just the number of breakpoints in the range of piecewise linear constraints bycalling this function with maxpoints set to 0, in which case the required size for the breakpoint arrays
will be returned in p_npoints.
2. Since piecewise linear constraints get transformed and replaced during presolve, this should not becalled on the presolved problem.
Related topics
XPRSaddpwlcons, XPRSdelpwlcons.

Fair Isaac Corporation Proprietary Information

237

Chapter 7: Console and Library Functions

XPRSgetqobj
Purpose

Synopsis

Returns a single quadratic objective function coefficient corresponding to the variable pair (objqcol1,
objqcol2) of the Hessian matrix.
int XPRS_CC XPRSgetqobj(XPRSprob prob, int objqcol1, int objqcol2, double⁎p_objqcoef);

Arguments
prob
The current problem.
objqcol1
Column index for the first variable in the quadratic term.
objqcol2
Column index for the second variable in the quadratic term.
p_objqcoef Pointer to a double value where the objective function coefficient is to be placed.
ExampleThe following returns the coefficient of the x0 2 term in the objective function, placing it in the variablevalue :
double value;...
XPRSgetqobj(prob,0,0,&value);

Further information
p_objqcoef is the coefficient in the quadratic Hessian matrix. For example, if the objective function has
the term [3x1 x2 + 3x2 x1 ]/2 the value retrieved by XPRSgetqobj is 3.0 and if the objective function has
the term [6x1 2 ]/2 the value retrieved by XPRSgetqobj is 6.0.
Related topics
XPRSgetmqobj, XPRSchgqobj, XPRSchgmqobj.

Fair Isaac Corporation Proprietary Information

238

Chapter 7: Console and Library Functions

XPRSgetqrowcoeff
Purpose

Synopsis

Returns a single quadratic constraint coefficient corresponding to the variable pair (rowqcol1,
rowqcol2) of the Hessian of a given constraint.
int XPRS_CC XPRSgetqrowcoeff (XPRSprob prob, int row, int rowqcol1, int
rowqcol2, double ⁎p_rowqcoef);

Arguments
prob
The current problem.
row
The quadratic row where the coefficient is to be looked up.
rowqcol1
Column index for the first variable in the quadratic term.
rowqcol2
Column index for the second variable in the quadratic term.
p_rowqcoef Pointer to a double value where the objective function coefficient is to be placed.
ExampleThe following returns the coefficient of the x0 2 term in the second row, placing it in the variable value :double value;...
XPRSgetqrowcoeff(prob,1,0,0,&value);

Further information
The coefficient returned corresponds to the Hessian of the constraint. That means the for constraint x +[xˆ2 + 6 xy] <= 10 XPRSgetqrowcoeff would return 1 as the coefficient of xˆ2 and 3 as thecoefficient of xy.
Related topics
XPRSloadqcqp, XPRSaddqmatrix, XPRSchgqrowcoeff, XPRSgetqrowqmatrix,
XPRSgetqrowqmatrixtriplets, XPRSgetqrows, XPRSchgqobj, XPRSchgmqobj, XPRSgetqobj.

Fair Isaac Corporation Proprietary Information

239

Chapter 7: Console and Library Functions

XPRSgetqrowqmatrix
Purpose

Synopsis

Returns the nonzeros in a quadratic constraint coefficients matrix for the columns in a given range. To
achieve maximum efficiency, XPRSgetqrowqmatrix returns the lower triangular part of this matrix only.
int XPRS_CC XPRSgetqrowqmatrix(XPRSprob prob, int row, int start[], int
colind[], double rowqcoef[], int maxcoefs, int ⁎ p_ncoefs, int first,
int last);

Arguments
prob
row
start

colindrowqcoef
maxcoefs
p_ncoefs

first
last

The current problem.
Index of the row for which the quadratic coefficients are to be returned.
Integer array which will be filled with indices indicating the starting offsets in the colind
and dobjval arrays for each requested column. It must be length of at least
last-first+2. Column i starts at position start[i] in the mrwind and dmatvalarrays, and has start[i+1]-start[i] elements in it. May be NULL if maxcoefs is 0.
Integer array of length maxcoefs which will be filled with the column indices of thenonzero elements in the lower triangular part of Q. May be NULL if maxcoefs is 0.
Double array of length maxcoefs which will be filled with the nonzero element values. May
be NULL if maxcoefs is 0.
Number of elements to be saved in colind and rowqcoef. If maxcoefs < ⁎p_ncoefs,
only maxcoefs elements are written.
Pointer to the integer where the number of nonzero elements in the queried columns will
be returned. If the number of nonzero elements is greater than maxcoefs, then only
maxcoefs elements will be returned. If p_ncoefs is smaller than maxcoefs, then only
p_ncoefs will be returned.
First column in the range.
Last column in the range.

Related topics
XPRSloadqcqp, XPRSgetqrowcoeff, XPRSaddqmatrix, XPRSchgqrowcoeff,
XPRSgetqrowqmatrixtriplets, XPRSgetqrows, XPRSchgqobj, XPRSchgmqobj, XPRSgetqobj.

Fair Isaac Corporation Proprietary Information

240

Chapter 7: Console and Library Functions

XPRSgetqrowqmatrixtriplets
Purpose

Synopsis

Returns the nonzeros in a quadratic constraint coefficients matrix as triplets (index pairs withcoefficients). To achieve maximum efficiency, XPRSgetqrowqmatrixtriplets returns the lower
triangular part of this matrix only.
int XPRS_CC XPRSgetqrowqmatrixtriplets(XPRSprob prob, int row, int ⁎p_ncoefs, int rowqcol1[], int rowqcol2[], double rowqcoef[]);Arguments
prob
row
p_ncoefs
rowqcol1
rowqcol2
rowqcoef

The current problem.
Index of the row for which the quadratic coefficients are to be returned.
Argument used to return the number of quadratic coefficients in the row.
First index in the triplets. May be NULL if not required.
Second index in the triplets. May be NULL if not required.
Coefficients in the triplets. May be NULL if not required.

Further information
If a row index of -1 is used, the function returns the quadratic coefficients for the objective function.
Related topics
XPRSloadqcqp, XPRSgetqrowcoeff, XPRSaddqmatrix, XPRSchgqrowcoeff,
XPRSgetqrowqmatrix, XPRSgetqrows, XPRSchgqobj, XPRSchgmqobj, XPRSgetqobj.

Fair Isaac Corporation Proprietary Information

241

Chapter 7: Console and Library Functions

XPRSgetqrows
Purpose
Synopsis

Returns the list indices of the rows that have quadratic coefficients.
int XPRS_CC XPRSgetqrows(XPRSprob prob, int ⁎ p_nrows, int rowind[]);Arguments
prob
p_nrows
rowindThe current problem.
Used to return the number of quadratic constraints in the matrix.
Array of length ⁎p_nrows used to return the indices of rows with quadratic coefficients inthem. May be NULL if not required.

Related topics
XPRSloadqcqp, XPRSgetqrowcoeff, XPRSaddqmatrix, XPRSchgqrowcoeff,
XPRSgetqrowqmatrix, XPRSgetqrowqmatrixtriplets, XPRSchgqobj, XPRSchgmqobj,
XPRSgetqobj.

Fair Isaac Corporation Proprietary Information

242

Chapter 7: Console and Library Functions

XPRSgetrhs
Purpose
Synopsis

Returns the right hand side elements for the rows in a given range.
int XPRS_CC XPRSgetrhs(XPRSprob prob, double rhs[], int first, int last);

Arguments
prob
rhs
first
last
ExampleThe current problem.
Double array of length last-first+1 where the right hand side elements are to beplaced.
First row in the range.
Last row in the range.

The following example retrieves the right hand side values of the problem:
int rows;
double ⁎rhs;...
XPRSgetintattrib(prob,XPRS_ROWS,&rows);
rhs = (double ⁎) malloc(sizeof(double)⁎rows);
XPRSgetrhs(prob,rhs,0,rows-1);

Related topics
XPRSchgrhs, XPRSchgrhsrange, XPRSgetrhsrange.

Fair Isaac Corporation Proprietary Information

243Chapter 7: Console and Library Functions

XPRSgetrhsrange
Purpose
Synopsis

Returns the right hand side range values for the rows in a given range.
int XPRS_CC XPRSgetrhsrange(XPRSprob prob, double rng[], int first, intlast);

Arguments
prob
rng
first
last
ExampleThe current problem.
Double array of length last-first+1 where the right hand side range values are to beplaced.
First row in the range.
Last row in the range.

The following returns right hand side range values for all rows in the matrix:
int rows;
double ⁎rng;...
XPRSgetintattrib(prob,XPRS_ROWS,&rows);
rng = malloc(rows⁎sizeof(double));XPRSgetrhsrange(prob,rng,0,rows);

Related topics
XPRSchgrhs, XPRSchgrhsrange, XPRSgetrhs.

Fair Isaac Corporation Proprietary Information244

Chapter 7: Console and Library Functions

XPRSgetrowflags
Purpose
Synopsis

Retrieve if a range of rows have been set up as special rows.
int XPRS_CC XPRSgetrowflags(XPRSprob prob, int flags[], int first, intlast);

Arguments
prob
flags
first
last

The current problem
Int array of length last-first+1 where type of information (see below) will be returnedFirst row index to be checked
Last row index to be checked

Further information
The flags array returns a bitvector for each row defining all the information that is currently attached tothat row:

ExampleXPRS_ROWFLAG_QUADRATIC

The row has quadratic coefficients.

XPRS_ROWFLAG_DELAYEDThe row is marked as a delayed row.

XPRS_ROWFLAG_MODELCUT

The row is marked as a model cut.

XPRS_ROWFLAG_INDICATOR

The row is used as an indicator.

XPRS_ROWFLAG_NONLINEAR

The row has nonlinear coefficients.

The following example will print all three messages if the row at index 1 of the problem is an indicator
constraint involving a quadratic matrix:

int flags[2];...
XPRSgetrowflags(prob,1,2,flags);
if (flags[0] & (XPRS_ROWFLAG_QUADRATIC)) { printf("the second row is quadratic"
if (flags[0] & (XPRS_ROWFLAG_INDICATOR)) { printf("the second row is an indicat
if (flags[0] & (XPRS_ROWFLAG_QUADRATIC+XPRS_ROWFLAG_INDICATOR)) { printf("the sRelated topics
XPRSclearrowflags

Fair Isaac Corporation Proprietary Information

245

Chapter 7: Console and Library Functions

XPRSgetrows, XPRSgetrows64
Purpose
Synopsis

Returns the nonzeros in the constraint matrix for the rows in a given range.
int XPRS_CC XPRSgetrows(XPRSprob prob, int start[], int mclind[], double
colcoef[], int maxcoefs, int ⁎p_ncoefs, int first, int last);
int XPRS_CC XPRSgetrows64(XPRSprob prob, XPRSint64 start[], int mclind[],double colcoef[], XPRSint64 maxcoefs, XPRSint64 ⁎p_ncoefs, int first,
int last);

Arguments
prob
start

colindcolcoef
maxcoefs
p_ncoefs

first
last
ExampleThe current problem.
Integer array which will be filled with the indices indicating the starting offsets in thecolind and colcoef arrays for each requested row. It must be of length at least
last-first+2. Row i starts at position start[i] in the colind and colcoef arrays,and has start[i+1]-start[i] elements in it. May be NULL if not required.
Integer arrays of length maxcoefs which will be filled with the column indices of thenonzero elements for each row. May be NULL if not required.
Double array of length maxcoefs which will be filled with the nonzero element values.
May be NULL if not required.
Maximum number of elements to be retrieved.
Pointer to the integer where the number of nonzero elements in the selected rows will be
returned. If the number of nonzero elements is greater than maxcoefs, then only
maxcoefs elements will be returned. If p_ncoefs is smaller than maxcoefs, then only
p_ncoefs will be returned.
First row in the range.
Last row in the range.

The following example returns and displays at most six nonzero matrix entries in the first two rows:
int maxcoefs=6, ncoefs, nreturnedels, start[3], colind[6];double colcoef[6];...
XPRSgetrows(prob,start,colind,colcoef,maxcoefs,&ncoefs,0,1);
nreturnedels = ncoefs > maxcoefs ? maxcoefs : ncoefs;for(i=0;i<nreturnedels;i++) printf("\t%2.1f\n",dmtval[i]);Further information
It is possible to obtain just the number of elements in the range of columns by replacing start, colind
and colcoef by NULL. In this case, maxcoefs must be set to 0 to indicate that the length of arrays
passed is 0.
Related topics
XPRSgetcols, XPRSgetrowtype.

Fair Isaac Corporation Proprietary Information

246

Chapter 7: Console and Library Functions

XPRSgetrowtype
Purpose
Synopsis

Returns the row types for the rows in a given range.
int XPRS_CC XPRSgetrowtype(XPRSprob prob, char rowtype[], int first, intlast);

Arguments
prob
rowtype

first
last
ExampleThe current problem.
Character array of length last-first+1 characters where the row types will be returned:
Nindicates a free constraint;Lindicates a ≤ constraint;E
indicates an = constraint;G
indicates a ≥ constraint;R
indicates a range constraint.
First row in the range.
Last row in the range.

The following example retrieves row types into an array rowtype :int rows;
char ⁎rowtype;...
XPRSgetintattrib(prob,XPRS_ROWS,&rows);
rowtype = (char ⁎) malloc(sizeof(char)⁎rows);
XPRSgetrowtype(prob,rowtype,0,rows-1);

Related topics
XPRSchgrowtype, XPRSgetrows.

Fair Isaac Corporation Proprietary Information

247

Chapter 7: Console and Library Functions

XPRSgetscale
Purpose
Synopsis

Returns the the current scaling of the matrix.
int XPRS_CC XPRSgetscale(XPRSprob prob, int rowscale[], int colscale[]);Arguments
prob
rowscalecolscale

The current problem.
Integer array of size ROWS that will contain the powers of 2 with which the rows are
currently scaled.
Integer array of size COLS that will contain the powers of 2 with which the columns are
currently scaled.

Related topics
XPRSscale (SCALE).

Fair Isaac Corporation Proprietary Information

248

Chapter 7: Console and Library Functions

XPRSgetscaledinfeas
Purpose

Synopsis

Returns a list of scaled infeasible primal and dual variables for the original problem. If the problem iscurrently presolved, it is postsolved before the function returns.
int XPRS_CC XPRSgetscaledinfeas(XPRSprob prob, int ⁎p_nprimalcols, int⁎p_nprimalrows, int ⁎p_ndualrows, int ⁎p_ndualcols, int x[], int
slack[], int duals[], int djs[]);Arguments
prob
The current problem.
p_nprimalcols Number of primal infeasible variables.
p_nprimalrows Number of primal infeasible rows.
p_ndualrows Number of dual infeasible rows.
p_ndualcols Number of dual infeasible variables.
x
Integer array of length p_nprimalcols where the primal infeasible variables will be
returned. May be NULL if not required.
slack
Integer array of length p_nprimalrows where the primal infeasible rows will be returned.
May be NULL if not required.
duals
Integer array of length p_ndualrows where the dual infeasible rows will be returned.
May be NULL if not required.
djs
Integer array of length p_ndualcols where the dual infeasible variables will be returned.
May be NULL if not required.
Error value422

A solution is not available.

Related controls
DoubleFEASTOL
OPTIMALITYTOL
ExampleTolerance on RHS.
Reduced cost tolerance.

In this example, XPRSgetscaledinfeas is first called with nulled integer arrays to get the number of
infeasible entries. Then space is allocated for the arrays and the function is again called to fill them in.
int ⁎x, ⁎slack, ⁎duals, ⁎djs, nprimalcols, nprimalrows, ndualrows, ndualcols;...
XPRSgetscaledinfeas(prob, &nprimalcols, &nprimalrows, &ndualrows, &ndualcols,
NULL, NULL, NULL, NULL);
x = malloc(nprimalcols ⁎ sizeof(int));
slack = malloc(nprimalrows ⁎ sizeof(int));
duals = malloc(ndualrows ⁎ sizeof(int));
djs = malloc(ndualcols ⁎ sizeof(int));
XPRSgetscaledinfeas(prob, &nprimalcols, &nprimalrows, &ndualrows, &ndualcols,x, slack, duals, djs);

Further information
If any of the last four arguments are set to NULL, the corresponding number of infeasibilities is still
returned.

Fair Isaac Corporation Proprietary Information249

Chapter 7: Console and Library Functions

Related topics
XPRSgetinfeas, XPRSgetiisdata, XPRSiisall, XPRSiisclear, XPRSiisfirst,
XPRSiisisolations, XPRSiisnext, XPRSiisstatus, XPRSiiswrite, IIS.

Fair Isaac Corporation Proprietary Information

250

Chapter 7: Console and Library Functions

XPRSgetstrattrib, XPRSgetstringattrib
Purpose

Synopsis

Enables users to recover the values of various string problem attributes. Problem attributes are set duringloading and optimization of a problem.
int XPRS_CC XPRSgetstrattrib(XPRSprob prob, int attrib, char ⁎value);
int XPRS_CC XPRSgetstringattrib(XPRSprob prob, int attrib, char ⁎cgval, int
maxbytes, int⁎ p_nbytes);

Arguments
prob
attribvalue
maxbytes
p_nbytes

The current problem.
Problem attribute whose value is to be returned. A full list of all problem attributes may befound in 9, or from the list in the xprs.h header file.
Pointer to a string where the value of the attribute (plus null terminator) will be returned.
Maximum number of bytes to be written into the cgval argument.
Returns the length of the string control including the null terminator.

Related topics
XPRSgetdblattrib, XPRSgetintattrib.

Fair Isaac Corporation Proprietary Information

251

Chapter 7: Console and Library Functions

XPRSgetstrcontrol, XPRSgetstringcontrol
Purpose
Synopsis

Returns the value of a given string control parameters.
int XPRS_CC XPRSgetstrcontrol(XPRSprob prob, int control, char ⁎value);
int XPRS_CC XPRSgetstringcontrol(XPRSprob prob, int control, char ⁎value,
int maxbytes, int⁎ p_nbytes);

Arguments
prob
controlvalue
maxbytes
p_nbytes

The current problem.
Control parameter whose value is to be returned. A full list of all controls may be found in
8, or from the list in the xprs.h header file.
Pointer to a string where the value of the control (plus null terminator) will be returned.
Maximum number of bytes to be written into the value argument.
Returns the length of the string control including the null terminator.

Related topics
XPRSgetdblcontrol, XPRSgetintcontrol, XPRSsetstrcontrol.

Fair Isaac Corporation Proprietary Information

252

Chapter 7: Console and Library Functions

XPRSgetub
Purpose
Synopsis

Returns the upper bounds for the columns in a given range.
int XPRS_CC XPRSgetub(XPRSprob prob, double ub[], int first, int last);

Arguments
prob
ub
first
last
ExampleThe current problem.
Double array of length last-first+1 where the upper bounds are to be placed.
First column in the range.
Last column in the range.

The following example retrieves the upper bounds for the columns of the current problem:
int cols;
double ⁎ub;...
XPRSgetintattrib(prob, XPRS_COLS, &cols);
ub = (double ⁎) malloc(sizeof(double)⁎ncol);XPRSgetub(prob, ub, 0, ncol-1);

Further information
Values greater than or equal to XPRS_PLUSINFINITY should be interpreted as infinite; values less thanor equal to XPRS_MINUSINFINITY should be interpreted as infinite and negative.
Related topics
XPRSchgbounds, XPRSgetlb.

Fair Isaac Corporation Proprietary Information

253

Chapter 7: Console and Library Functions

XPRSgetunbvec
Purpose

Synopsis

Returns the index vector which causes the primal simplex or dual simplex algorithm to determine that amatrix is primal or dual unbounded respectively.
int XPRS_CC XPRSgetunbvec(XPRSprob prob, int ⁎p_seq);

Arguments
prob
p_seq

Error value
91

The current problem.
Pointer to an integer where the vector causing the problem to be detected as being primalor dual unbounded will be returned. In the dual simplex case, the vector is the leaving row
for which the dual simplex detected dual unboundedness. In the primal simplex case, thevector is the entering row p_seq (if p_seq is in the range 0 to ROWS-1) or column(variable) p_seq-ROWS-SPAREROWS (if p_seq is between ROWS+SPAREROWS and
ROWS+SPAREROWS+COLS-1) for which the primal simplex detected primal
unboundedness.
A current problem is not available.

Further information
When solving using the dual simplex method, if the problem is primal infeasible then
XPRSgetunbvec returns the pivot row where dual unboundedness was detected. Also note that whensolving using the dual simplex method, if the problem is primal unbounded then XPRSgetunbvec
returns -1 since the problem is dual infeasible and not dual unbounded.
Related topics
XPRSgetinfeas, XPRSlpoptimize.

Fair Isaac Corporation Proprietary Information

254

Chapter 7: Console and Library Functions

XPRSgetversion
Purpose

Synopsis

Returns the full Optimizer version number in the form 15.10.03, where 15 is the major release, 10 is theminor release, and 03 is the build number.
int XPRS_CC XPRSgetversion(char ⁎version);Argument
versionRelated controls
Integer
VERSION
ExampleBuffer long enough to hold the version string (plus a null terminator). This should be atleast 16 characters.

The Optimizer version number

The following calls XPRSgetversion to return version information at the start of the program:char version[16];XPRSgetversion(version);
printf("Xpress Optimizer version %s\n",version);
XPRSinit(NULL);

Further information
This function supersedes the VERSION control, which only returns the first two parts of the version
number. Release 2004 versions of the Optimizer have a three-part version number.
Related topics
XPRSinit.

Fair Isaac Corporation Proprietary Information

255

Chapter 7: Console and Library Functions

XPRSglobal

GLOBAL

PurposeThis subroutine is deprecated and will be removed in a future release. XPRSmipoptimize should be usedinstead.
Starts the global search for an integer solution after solving the LP relaxation with XPRSmaxim (MAXIM)
or XPRSminim (MINIM) or continues a global search if it has been interrupted.
Synopsis

int XPRS_CC XPRSglobal(XPRSprob prob);
GLOBAL

Argumentprob

The current problem.

Related controls
Integer
BACKTRACKBRANCHCHOICE
BREADTHFIRSTCOVERCUTS
CPUTIME
CUTDEPTHCUTFREQ
CUTSTRATEGYDEFAULTALG
GOMCUTSMAXMIPSOLMAXNODEMAXTIMEMIPLOGMIPPRESOLVEMIPTHREADSNODESELECTIONREFACTORSBBEST
SBITERLIMITSBSELECTTREECOVERCUTSTREEGOMCUTSVARSELECTION
DoubleMIPABSCUTOFFMIPABSSTOPMIPADDCUTOFF
MIPRELCUTOFF
MIPRELSTOP
MIPTOL

Node selection criterion.
Once a global entity has been selected for branching, this control determines
whether the branch with the minimum or maximum estimate is followed first.
Limit for node selection criterion.
Number of rounds of lifted cover inequalities at top node.
1 for CPU time; 0 for elapsed time.
Maximum depth in the tree at which cuts are generated.
Frequency at which cuts are generated in the tree search.
Specifies the cut strategy.
Algorithm to use with the tree search.
Number of rounds of Gomory cuts at the top node.
Maximum number of MIP solutions to find.
Maximum number of nodes in Branch and Bound search.
Maximum time allowed.
Global print flag.
Type of integer preprocessing to be performed.
Number of threads used for parallel MIP search.
Node selection control.
Indicates whether to re-factorize the optimal basis.
Number of infeasible global entities on which to perform strong branching.
Number of dual iterations to perform strong branching.
The size of the candidate list of global entities for strong branching.
Number of rounds of lifted cover inequalities in the tree.
Number of rounds of Gomory cuts in the tree.
Node selection degradator estimate control.
Cutoff set after an LP Optimizer command.
Absolute optimality stopping criterion.
Amount added to objective function to give new cutoff.
Percentage cutoff.
Relative optimality stopping criterion.
Integer feasibility tolerance.

Fair Isaac Corporation Proprietary Information

256Chapter 7: Console and Library Functions

PSEUDOCOSTDefault pseudo cost in node degradation estimation.

Example 1 (Library)
The following example inputs a problem fred.mat, solves the LP and the global problem before printing
the solution to file.
XPRSreadprob(prob,"fred","");XPRSmaxim(prob,"");XPRSglobal(prob);
XPRSwriteprtsol(prob);
Example 2 (Console)
The equivalent set of commands for the Console Optimizer are:
READPROB fred
MAXIM
GLOBAL
WRITEPRTSOL
Further information
1. When an optimal LP solution has been found with XPRSmaxim (MAXIM) or XPRSminim (MINIM), thesearch for an integer solution is started using XPRSglobal (GLOBAL). In many cases XPRSglobal(GLOBAL) is to be called directly after XPRSmaxim (MAXIM)/XPRSminim (MINIM). In suchcircumstances this can be achieved slightly more efficiently using the g flag to XPRSmaxim(MAXIM)/XPRSminim (MINIM).
2. If a global search is interrupted and XPRSglobal (GLOBAL) is subsequently called again, the search willcontinue where it left off. To restart the search at the top node you need to call either XPRSinitglobal
or XPRSpostsolve (POSTSOLVE).
3. The controls described for XPRSmaxim (MAXIM) and XPRSminim (MINIM) can also be used to control
the XPRSglobal (GLOBAL) algorithm.
4. (Console) The global search may be interrupted by typing CTRL-C as long as the user has not alreadytyped ahead.
5. A summary log of six columns of information is output every n nodes, where -n is the value of MIPLOG(see A.9).
6. Optimizer library users can check the final status of the global search using the MIPSTATUS problem
attribute.
7. The Optimizer may create global files (used for storing parts of the tree when there is insufficientavailable memory) in excess of 2 GigaBytes. If your filing system does not support files this large, you can
instruct the Optimizer to spread the data over multiple files by setting the MAXGLOBALFILESIZE control.
Related topics
XPRSfixglobals (FIXGLOBALS), XPRSinitglobal, XPRSmaxim (MAXIM)/XPRSminim (MINIM),
A.9.

Fair Isaac Corporation Proprietary Information

257

Chapter 7: Console and Library Functions

HELP
Purpose
Synopsis

ExampleProvides quick reference help for console users of the Optimizer.
HELP
HELP commands
HELP controls
HELP attributes
HELP [command-name]
HELP [control-name]
HELP [attribute-name]
This command is used by calling it at the Console Optimizer command line:
HELP MAXTIME

Related topics
None.

Fair Isaac Corporation Proprietary Information

258

Chapter 7: Console and Library Functions

IIS
Purpose
Synopsis

Provides the Irreducible Infeasible Set (IIS) functionality for the console.
IIS [-flags]

Arguments
IIS
IIS -aIIS -cIIS -e [numIIS -f
IIS -i num
IIS -n
IIS -p [numIIS -sIIS -w [numFinds an IIS.
Performs an automated search for a set of independent IISs.
Resets the search for IISs (deletes already found ones).
fn] Writes a CSV file named fn containing the IIS data of IIS num.
Generate an approximation of an IIS only.
Performs the isolation identification for IIS with ordinal number num.
Finds another (independent) IIS if any.
] Prints the IIS with ordinal number num to the screen.
Returns statistics on the IISs found.
fn type] Writes an LP or MPS file named fn containing the IIS subproblem of IIS
num depending on the type flags.

Example 1 (Console)
This example reads in an infeasible problem, executes an automated search for the IISs, prints the IIS to
the screen and then displays a summary on the results.
READPROB PROB.LP
IIS -a -s
Example 2 (Console)
This example reads in an infeasible problem, identifies an IIS and its isolations, then writes the IIS as an
LP for easier viewing and as a CSV file to contain the supplementary information.
READPROB PROB.LP
IIS
IIS -i -p 1
IIS -w 1 "IIS.LP" lp
IIS -e 1 "IIS.CSV"

Fair Isaac Corporation Proprietary Information259

Chapter 7: Console and Library Functions

Further information
1. The IISs are numbered from 1 to NUMIIS. If no IIS number is provided, the functions take the last IIS
identified as default. When applicable, IIS 0 refers to the initial infeasible IIS (the IIS approximation).
2. A model may have several infeasibilities. Repairing a single IIS may not make the model feasible. For thisreason the Optimizer attempts to find an IIS for each of the infeasibilities in a model. You may call the
IIS -n function repeatedly, or use the IIS -a function to retrieve all IIS at once.
3. An IIS isolation is a special constraint or bound in an IIS. Removing an IIS isolation constraint or boundwill remove all infeasibilities in the IIS without increasing the infeasibilities in any row or column outside
the IIS, thus in any other IISs. The IIS isolations thus indicate the likely cause of each independent
infeasibility and give an indication of which constraint or bound to drop or modify. It is not always
possible to find IIS isolations. IIS isolations are only available for linear problems.
4. Generally, one should first look for rows or columns in the IIS which are both in isolation, and have a highdual multiplier relative to the others.
5. Initial infeasible subproblem: The subproblem identified after the sensitivity filter is referred to as initial
infeasible subproblem. Its size is crucial to the running time of the deletion filter and it contains all theinfeasibilities of the first phase simplex, thus if the corresponding rows and bounds are removed the
problem becomes feasible
6. IIS -f performs the initial sensitivity analysis on rows and columns to reduce the problem size, and sets
up the initial infeasible subproblem. This subproblem significantly speeds up the generation of IISs,
however in itself it may serve as an approximation of an IIS, since its identification typically takes only afraction of time compared to the identification of an IIS.
7. The num parameter cannot be zero for IIS -i: the concept of isolations is meaningless for the initial
infeasible subproblem.
8. If IIS -n [num] is called, the return status is 1 if less than num IISs have been found and zerootherwise. The total number of IISs found is stored in NUMIIS.
9. The type flags passed to IIS -w are directly passed to the WRITEPROB command.
10. The LP or MPS files created by IIS -w corresponding to an IIS contain no objective function, since
infeasibility is independent from the objective.
11. Please note that there are problems on the boundary of being infeasible or not. For such problems,
feasibility or infeasibility often depends on tolerances or even on scaling. This phenomenon makes it
possible that after writing an IIS out as an LP file and reading it back, it may report feasibility. As a firstcheck it is advised to consider the following options:(a) Turn presolve off (e.g. in console presolve = 0) since the nature of an IIS makes it necessarythat during their identification the presolve is turned off.
(b) Use the primal simplex method to solve the problem (e.g. in console lpoptimize -p).
12. Note that the original sense of the original objective function plays no role in an IIS.
13. The supplementary information provided in the CSV file created by IIS -e is identical to that returned by
the XPRSgetiisdata function.
14. The IIS approximation and the IISs generated so far are always available.
Related topics
XPRSgetiisdata, XPRSiisall, XPRSiisclear, XPRSiisfirst, XPRSiisisolations,
XPRSiisnext, XPRSiisstatus, XPRSiiswrite.

Fair Isaac Corporation Proprietary Information

260

Chapter 7: Console and Library Functions

XPRSiisall
Purpose
Synopsis

Performs an automated search for independent Irreducible Infeasible Sets (IIS) in an infeasible problem.
int XPRS_CC XPRSiisall(XPRSprob prob);

Argumentprob

The current problem.

Related controls
Integer
MAXIIS
ExampleNumber of Irreducible Infeasible Sets to be found.

This example searches for IISs and then questions the problem attribute NUMIIS to determine how many
were found:
int iis;...
XPRSiisall(prob);
XPRSgetintattrib(prob, XPRS_NUMIIS, &iis);
printf("number of IISs = %d\n", iis);

Further information
1. Calling IIS -a from the console has the same effect as this function.
2. A model may have several infeasibilities. Repairing a single IIS may not make the model feasible. For thisreason the Optimizer can find an IIS for each of the infeasibilities in a model. If the control MAXIIS is set
to a positive integer value then the XPRSiisall command will stop if MAXIIS IISs have been found. By
default the control MAXIIS is set to -1, in which case an IIS is found for each of the infeasibilities in themodel.
3. The problem attribute NUMIIS allows the user to recover the number of IISs found in a particular search.
Alternatively, the XPRSiisstatus function may be used to retrieve the number of IISs found by
XPRSiisfirst (IIS), XPRSiisnext (IIS -n) or XPRSiisall (IIS -a) functions.
Related topics
XPRSgetiisdata, XPRSiisclear, XPRSiisfirst, XPRSiisisolations, XPRSiisnext,
XPRSiisstatus, XPRSiiswrite, IIS.

Fair Isaac Corporation Proprietary Information

261

Chapter 7: Console and Library Functions

XPRSiisclear
Purpose
Synopsis

Resets the search for Irreducible Infeasible Sets (IIS).
int XPRS_CC XPRSiisclear(XPRSprob prob);

Argumentprob

The current problem.

ExampleXPRSiisclear(prob);
Further information
1. Calling IIS -c from the console has the same effect as this function.
2. The information stored internally about the IISs identified by XPRSiisfirst, XPRSiisnext or
XPRSiisall are cleared. Functions XPRSgetiisdata, XPRSiisstatus, XPRSiiswrite and
XPRSiisisolations cannot be called until the IIS identification procedure is started again.
3. This function is automatically called by XPRSiisfirst and XPRSiisall
Related topics
XPRSgetiisdata, XPRSiisall, XPRSiisfirst, XPRSiisisolations, XPRSiisnext,
XPRSiisstatus, XPRSiiswrite, IIS.

Fair Isaac Corporation Proprietary Information

262

Chapter 7: Console and Library Functions

XPRSiisfirst
Purpose
Synopsis

Initiates a search for an Irreducible Infeasible Set (IIS) in an infeasible problem.
int XPRS_CC XPRSiisfirst(XPRSprob prob, int mode, int ⁎p_status);

Arguments
prob
mode

p_status

ExampleThe current problem.
The IIS search mode:0
stops after finding the initial infeasible subproblem;
1
find an IIS, emphasizing simplicity of the IIS;
2
find an IIS, emphasizing a quick result.
The status after the search:
0
success;
1
if problem is feasible;
2
error;
3
timeout.

This looks for the first IIS.
XPRSiisfirst(myprob,1,&status);

Further information
1. Calling IIS from the console has the same effect as this function.
2. A model may have several infeasibilities. Repairing a single IIS may not make the model feasible. For thisreason the Optimizer can find an IIS for each of the infeasibilities in a model. For the generation ofseveral independent IISs use functions XPRSiisnext (IIS -n) or XPRSiisall (IIS -a).
3. IIS sensitivity filter: after an optimal but infeasible first phase primal simplex, it is possible to identify asubproblem containing all the infeasibilities (corresponding to the given basis) to reduce the size of the
IIS working problem dramatically, i.e., rows with zero duals (thus with artificials of zero reduced cost) andcolumns that have zero reduced costs may be deleted. Moreover, for rows and columns with nonzero
costs, the sign of the cost is used to relax equality rows either to less than or greater than equal rows, andto drop either possible upper or lower bounds on columns.
4. Initial infeasible subproblem: The subproblem identified after the sensitivity filter is referred to as initial
infeasible subproblem. Its size is crucial to the running time of the deletion filter and it contains all theinfeasibilities of the first phase simplex, thus if the corresponding rows and bounds are removed the
problem becomes feasible.
5. XPRSiisfirst performs the initial sensitivity analysis on rows and columns to reduce the problem size,and sets up the initial infeasible subproblem. This subproblem significantly speeds up the generation of
IISs, however in itself it may serve as an approximation of an IIS, since its identification typically takes
only a fraction of time compared to the identification of an IIS.
6. The IIS approximation and the IISs generated so far are always available.
Related topics
XPRSgetiisdata, XPRSiisall, XPRSiisclear, XPRSiisisolations, XPRSiisnext,
XPRSiisstatus, XPRSiiswrite, IIS.

Fair Isaac Corporation Proprietary Information

263

Chapter 7: Console and Library Functions

XPRSiisisolations
Purpose
Synopsis

Performs the isolation identification procedure for an Irreducible Infeasible Set (IIS).
int XPRS_CC XPRSiisisolations(XPRSprob prob, int iis);

Arguments
prob
iis
ExampleThe current problem.
The number of the IIS identified by either XPRSiisfirst (IIS), XPRSiisnext (IIS -n)
or XPRSiisall (IIS -a) in which the isolations should be identified.

This example finds the first IIS and searches for the isolations in that IIS.
XPRSiisfirst(prob,1,&status);
XPRSiisisolations (prob,1);

Further information
1. Calling IIS -i [iis] from the console has the same effect as this function.
2. An IIS isolation is a special constraint or bound in an IIS. Removing an IIS isolation constraint or boundwill remove all infeasibilities in the IIS without increasing the infeasibilities in any row or column outside
the IIS, thus in any other IISs. The IIS isolations thus indicate the likely cause of each independent
infeasibility and give an indication of which constraint or bound to drop or modify. It is not always
possible to find IIS isolations.
3. Generally, one should first look for rows or columns in the IIS which are both in isolation, and have a highdual multiplier relative to the others.
4. The iis parameter cannot be zero: the concept of isolations is meaningless for the initial infeasible
subproblem.
Related topics
XPRSgetiisdata, XPRSiisall, XPRSiisclear, XPRSiisfirst, XPRSiisnext, XPRSiisstatus,
XPRSiiswrite, IIS.

Fair Isaac Corporation Proprietary Information

264

Chapter 7: Console and Library Functions

XPRSiisnext
Purpose

Synopsis

Continues the search for further Irreducible Infeasible Sets (IIS), or calls XPRSiisfirst (IIS) if no IIS
has been identified yet.
int XPRS_CC XPRSiisnext(XPRSprob prob, int ⁎p_status);

Arguments
prob
p_status

ExampleThe current problem.
The status after the search:
0
success;
no more IIS could be found, or problem is feasible if no XPRSiisfirst call1
preceded;2
on error (when the function returns nonzero).

This looks for a further IIS.
XPRSiisnext(prob,&status);

Further information
1. Calling IIS -n from the console has the same effect as this function.
2. A model may have several infeasibilities. Repairing a single IIS may not make the model feasible. For thisreason the Optimizer attempts to find an IIS for each of the infeasibilities in a model. You may call the
XPRSiisnext function repeatedly, or use the XPRSiisall (IIS -a) function to retrieve all IIS at once.
3. This function is not affected by the control MAXIIS.
4. If the problem has been modified since the last call to XPRSiisfirst or XPRSiisnext, the generation
process has to be started from scratch.
Related topics
XPRSgetiisdata, XPRSiisall, XPRSiisclear, XPRSiisfirst, XPRSiisisolations,
XPRSiisstatus, XPRSiiswrite, IIS.

Fair Isaac Corporation Proprietary Information

265

Chapter 7: Console and Library Functions

XPRSiisstatus
Purpose

Synopsis

Returns statistics on the Irreducible Infeasible Sets (IIS) found so far by XPRSiisfirst (IIS),XPRSiisnext (IIS -n) or XPRSiisall (IIS -a).
int XPRS_CC XPRSiisstatus(XPRSprob prob, int ⁎p_niis, int nrows[], int
ncols[], double suminfeas[], int numinfeas[]);Arguments
prob
p_niisnrows
ncols
suminfeas
numinfeas
ExampleThe current problem.
The number of IISs found so far.
Number of rows in the IISs.
Number of bounds in the IISs.
The sum of infeasibilities in the IISs after the first phase simplex.
The number of infeasible variables in the IISs after the first phase simplex.

This example first retrieves the number of IISs found so far, and then retrieves their main properties. Notethat the arrays have size count+1, since the first index is reserved for the initial infeasible subset.
XPRSiisstatus(myprob,&count,NULL,NULL,NULL,NULL);
nrows = malloc((count+1)⁎sizeof(int));
ncols = malloc((count+1)⁎sizeof(int));
suminfeas = malloc((count+1)⁎sizeof(double));numinfeas = malloc((count+1)⁎sizeof(int));
XPRSiisstatus(myprob,&count,nrows,ncols,suminfeas,numinfeas);

Further information
1. Calling IIS -s from the console has the same effect as this function.
2. All arrays should be of dimension p_niis+1. The arrays are 0 based, index 0 corresponding to the initial
infeasible subproblem.
3. The arrays may be NULL if not required.
4. For the initial infeasible problem (at position 0) the subproblem size is returned (which may be different
from the number of bounds), while for the IISs the number of bounds is returned (usually much smaller
than the number of columns in the IIS).
5. Note that the values in suminfeas and numinfeas heavily depend on the actual basis where thesimplex has stopped.
6. p_niis is set to -1 if the search for IISs has not yet started.
Related topics
XPRSgetiisdata, XPRSiisall, XPRSiisclear, XPRSiisfirst, XPRSiisisolations,
XPRSiisnext, XPRSiiswrite, IIS.

Fair Isaac Corporation Proprietary Information

266

Chapter 7: Console and Library Functions

XPRSiiswrite
Purpose

SynopsisWrites an LP/MPS/CSV file containing a given Irreducible Infeasible Set (IIS). If 0 is passed as the IIS
number parameter, the initial infeasible subproblem is written.
int XPRS_CC XPRSiiswrite(XPRSprob prob, int iis, const char ⁎filename, int
filetype, const char ⁎flags);

Arguments
prob
iis
filename
filetype

flags
ExampleThe current problem.
The ordinal number of the IIS to be written.
The name of the file to be created.
Type of file to be created:0
creates an lp/mps file containing the IIS as a linear programming problem;
1
creates a comma separated (csv) file containing the description andsupplementary information on the given IIS.
Flags passed to the XPRSwriteprob function.

This writes the first IIS (if one exists and is already found) as an lp file.
XPRSiiswrite(prob,1,"iis.lp",0,"l")Further information
1. Calling IIS -w [iis] filename and IIS -e [iis] filename from the console have the same
effect as this function.
2. Please note that there are problems on the boundary of being infeasible or not. For such problems,
feasibility or infeasibility often depends on tolerances or even on scaling. This phenomenon makes it
possible that after writing an IIS out as an LP file and reading it back, it may report feasibility. As a firstcheck it is advised to consider the following options:
1. turn presolve off (e.g. in console presolve = 0) since the nature of an IIS makes it necessary thatduring their identification the presolve is turned off.
2. use the primal simplex method to solve the problem (e.g. in console LPOPTIMIZE -p).
3. Note that the original sense of the original objective function plays no role in an IIS.
4. Even though an attempt is made to identify the most infeasible IISs first by the XPRSiisfirst (IIS),XPRSiisnext (IIS -n) and XPRSiisall (IIS -a) functions, it is also possible that an IIS becomes
just infeasible in problems that are otherwise highly infeasible. In such cases, you may try to deal with themore stable IISs first, and consider to use the infeasibility breaker tool if only slight infeasibilities remain.
5. The LP or MPS files created by XPRSiiswrite corresponding to an IIS contain no objective function,
since infeasibility is independent from the objective.
Related topics
XPRSgetiisdata, XPRSiisall, XPRSiisclear, XPRSiisfirst, XPRSiisisolations,
XPRSiisnext, XPRSiisstatus, IIS.

Fair Isaac Corporation Proprietary Information

267

Chapter 7: Console and Library Functions

XPRSinit
Purpose
Synopsis

Initializes the Optimizer library. This must be called before any other library routines.
int XPRS_CC XPRSinit(const char ⁎path);Argumentpath

ExampleThe directory where the FICO Xpress license file is located. Users should employ a valueof NULL unless otherwise advised, allowing the standard initialization directories to bechecked.

The following is the usual way of calling XPRSinit :if(XPRSinit(NULL)) printf("Problem with XPRSinit\n");Further information
1. Whilst error checking should always be used on all library function calls, it is especially important to do sowith the initialization functions, since a majority of errors encountered by users are caused at theinitialization stage. Any nonzero return code indicates that no license could be found. In suchcircumstances the application should be made to exit. It is possible to retrieve a message describing theerror by calling XPRSgetlicerrmsg.
2. In multi-threaded applications where all threads are equal, XPRSinit may be called by each thread prior
to using the library. Whilst the process of initialization will be carried out only once, this guarantees thatthe library functions will be available to each thread as necessary. In applications with a clear masterthread, spawning other Optimizer threads, initialization need only be called by the master thread.
Related topics
XPRScreateprob, XPRSfree, XPRSgetlicerrmsg.

Fair Isaac Corporation Proprietary Information

268

Chapter 7: Console and Library Functions

XPRSinitglobal
PurposeThis subroutine is deprecated and will be removed in a future release. XPRSpostsolve should be usedinstead.
Reinitializes the global tree search. By default if a global search is interrupted and called again the global
search will continue from where it left off. If XPRSinitglobal is called after the first call to
XPRSmipoptimize, the global search will start from the top node when XPRSmipoptimize is calledagain.
Synopsis

int XPRS_CC XPRSinitglobal(XPRSprob prob);

Argument
prob
ExampleThe current problem.

The following initializes the global search before attempting to solve the problem again:
XPRSinitglobal(prob);
XPRSmipoptimize(prob,"");

Related topics
XPRSmipoptimize (MIPOPTIMIZE).

Fair Isaac Corporation Proprietary Information

269

Chapter 7: Console and Library Functions

XPRSinterrupt
Purpose
SynopsisInterrupts the Optimizer algorithms.
int XPRS_CC XPRSinterrupt(XPRSprob prob, int reason);Arguments
prob
reasonThe current problem.
The reason for stopping. Possible reasons are:
XPRS_STOP_NONE do not stop;
XPRS_STOP_TIMELIMIT time limit hit;
XPRS_STOP_CTRLC control C hit;
XPRS_STOP_NODELIMIT node limit hit;
XPRS_STOP_ITERLIMIT iteration limit hit;
XPRS_STOP_MIPGAP MIP gap is sufficiently small;
XPRS_STOP_SOLLIMIT solution limit hit;
XPRS_STOP_USER user interrupt;>= 1000 user defined value.

Further information
1. The XPRSinterrupt command can be called from any callback.
2. The range of values below 1000 is reserved for future extension. The behavior of the function is
undefined if reason is smaller than 1000 and not one of the values listed above.
Related topics
None.

Fair Isaac Corporation Proprietary Information

270

Chapter 7: Console and Library Functions

XPRSloadbasis
Purpose
Synopsis

Loads a basis from the user’s areas.
int XPRS_CC XPRSloadbasis(XPRSprob prob, const int rowstat[], const int
colstat[]);Arguments
prob
rowstatcolstat

ExampleThe current problem.
Integer array of length ROWS containing the basis status of the slack, surplus or artificial
variable associated with each row. The status must be one of:0
slack, surplus or artificial is non-basic at lower bound;1
slack, surplus or artificial is basic;2
slack or surplus is non-basic at upper bound.
3
slack or surplus is super-basic.
Integer array of length COLS containing the basis status of each of the columns in theconstraint matrix. The status must be one of:0variable is non-basic at lower bound or superbasic at zero if the variable has nolower bound;1
variable is basic;
2
variable is at upper bound;3
variable is super-basic.

This example loads a problem and then reloads a (previously optimized) basis from a similar problem tospeed up the optimization:
XPRSreadprob(prob,"problem","");
XPRSloadbasis(prob,rowstat,colstat);
XPRSlpoptimize(prob,"");

Further information
If the problem has been altered since saving an advanced basis, you may want to alter the basis asfollows before loading it:■ Make new variables non-basic at their lower bound (colstat[icol]=0), unless a variable has an

infinite lower bound and a finite upper bound, in which case make the variable non-basic at its upperbound (colstat[icol]=2);■ Make new constraints basic (rowstat[jrow]=1);■ Try not to delete basic variables, or non-basic constraints.

Related topics
XPRSgetbasis, XPRSgetpresolvebasis, XPRSloadpresolvebasis.

Fair Isaac Corporation Proprietary Information

271

Chapter 7: Console and Library Functions

XPRSloadbranchdirs
Purpose

Synopsis

Loads directives into the current problem to specify which global entities the Optimizer should continue
to branch on when a node solution is global feasible.
int XPRS_CC XPRSloadbranchdirs(XPRSprob prob, int ncols, const int colind[],const int dir[]);Arguments
prob
ncols
colinddir

The current problem.
Number of directives.
Integer array of length ncols containing the column numbers. A negative value indicatesa set number (the first set being -1, the second -2, and so on).
Integer array of length ncols containing either 0 or 1 for the entities given in colind.
Entities for which dir is set to 1 will be branched on until fixed before a global feasible
solution is returned. If dir is NULL, the branching directive will be set for all entities incolind.

Related topics
XPRSloaddirs, XPRSreaddirs, A.5.

Fair Isaac Corporation Proprietary Information

272

Chapter 7: Console and Library Functions

XPRSloadcuts
Purpose

Synopsis

Loads cuts from the cut pool into the matrix. Without calling XPRSloadcuts the cuts will remain in thecut pool but will not be active at the node. Cuts loaded at a node remain active at all descendant nodes
unless they are deleted using XPRSdelcuts.
int XPRS_CC XPRSloadcuts(XPRSprob prob, int coltype, int interp, int ncuts,
const XPRScut cutind[]);Arguments
prob
coltypeinterpncuts
cutindThe current problem.
Cut type.
The way in which the cut type is interpreted:-1load all cuts;
1
treat cut types as numbers;
2
treat cut types as bit maps - load cut if any bit matches any bit set incoltype;3
treat cut types as bit maps - 0 load cut if all bits match those set incoltype.
Number of cuts to load.
Array of length ncuts containing pointers to the cuts to be loaded into the matrix. Theseare pointers returned by either XPRSstorecuts or XPRSgetcpcutlist.

Further information
This function should be called only from within callback functions set by either XPRSaddcboptnode or
XPRSaddcbcutmgr.
Related topics
XPRSaddcuts, XPRSdelcpcuts, XPRSdelcuts, XPRSgetcpcutlist, 5.9.

Fair Isaac Corporation Proprietary Information

273

Chapter 7: Console and Library Functions

XPRSloaddelayedrows
Purpose

Synopsis

Specifies that a set of rows in the matrix will be treated as delayed rows during a global search. These arerows that must be satisfied for any integer solution, but will not be loaded into the active set of
constraints until required.
int XPRS_CC XPRSloaddelayedrows(XPRSprob prob, int nrows, const int
rowind[]);Arguments
prob
nrows
rowindExampleThe current problem.
The number of delayed rows.
An array of row indices to treat as delayed rows.

This sets the first six matrix rows as delayed rows in the global problem prob.
int rowind[] = {0,1,2,3,4,5}...
XPRSloaddelayedrows(prob,6,rowind);
XPRSmipoptimize(prob,"");

Further information
Delayed rows must be set up before solving the problem. Any delayed rows will be removed from thematrix after presolve and added to a special pool. A delayed row will be added back into the active matrix
only when such a row is violated by an integer solution found by the Optimizer.
Related topics
XPRSloadmodelcuts.

Fair Isaac Corporation Proprietary Information274

Chapter 7: Console and Library Functions

XPRSloaddirs
Purpose
Synopsis

Loads directives into the matrix.
int XPRS_CC XPRSloaddirs(XPRSprob prob, int ndirs, const int colind[],const int priority[], const char dir[], const double uppseudo[],const double downpseudo[]);Arguments
prob
ndirs
colindThe current problem.
Number of directives.
Integer array of length ndirs containing the column numbers. A negative value indicatesa set number (the first set being -1, the second -2, and so on).
priority
Integer array of length ndirs containing the priorities for the columns or sets. Priorities
must be between 0 and 1000, where columns/sets with smallest priority will be branchedon first. May be NULL if not required.
dir
Character array of length ndirs specifying the branching direction for each column or set:U
the entity is to be forced up;
Dthe entity is to be forced down;N
not specified.
May be NULL if not required.
uppseudo
Double array of length ndirs containing the up pseudo costs for the columns or sets.
May be NULL if not required.
downpseudo Double array of length ndirs containing the down pseudo costs for the columns or sets.
May be NULL if not required.

Related topics
XPRSgetdirs, XPRSloadpresolvedirs, XPRSreaddirs.

Fair Isaac Corporation Proprietary Information

275

Chapter 7: Console and Library Functions

XPRSloadglobal, XPRSloadglobal64
Purpose

Synopsis

Used to load a global problem in to the Optimizer data structures. Integer, binary, partial integer,semi-continuous and semi-continuous integer variables can be defined, together with sets of type 1 and 2.
The reference row values for the set members are passed as an array rather than specifying a referencerow.
int XPRS_CC XPRSloadglobal(XPRSprob prob, const char ⁎probname, int ncols,
int nrows, const char rowtype[], const double rhs[], const double
rng[], const double objcoef[], const int start[], const int collen[],const int rowind[], const double rowcoef[], const double lb[], const
double ub[], int nentities, int nsets, const char coltype[], const
int entind[], const double limit[], const char settype[], const int
setstart[], const int setind[], const double refval[]);int XPRS_CC XPRSloadglobal64(XPRSprob prob, const char ⁎probname, int ncols,
int nrows, const char rowtype[], const double rhs[], const double
rng[], const double objcoef[], const XPRSint64 start[], const int
collen[], const int rowind[], const double rowcoef[], const double
lb[], const double ub[], int nentities, int nsets, const charcoltype[], const int entind[], const double limit[], const char
settype[], const XPRSint64 setstart[], const int setind[], const
double refval[]);Arguments
prob
probname
ncols
nrows

rowtyperhs
rng

objcoefstartcollenThe current problem.
A string of up to MAXPROBNAMELENGTH characters containing a name for the problem.
Number of structural columns in the matrix.
Number of rows in the matrix not (including the objective row). Objective coefficients
must be supplied in the objcoef array, and the objective function should not be included
in any of the other arrays.
Character array of length nrows containing the row types:
Lindicates a ≤ constraint;E
indicates an = constraint;G
indicates a ≥ constraint;R
indicates a range constraint;N
indicates a nonbinding constraint.
Double array of length nrows containing the right hand side coefficients. The right handside value for a range row gives the upper bound on the row.
Double array of length nrows containing the range values for range rows. Values for allother rows will be ignored. May be NULL if not required. The lower bound on a range row
is the right hand side value minus the range value. The sign of the range value is ignored the absolute value is used in all cases.
Double array of length ncols containing the objective function coefficients.
Integer array containing the offsets in the rowind and rowcoef arrays of the start of theelements for each column. This array is of length ncols or, if collen is NULL, length
ncols+1. If collen is NULL, the extra entry of start, start[ncols], contains the
position in the rowind and rowcoef arrays at which an extra column would start, if itwere present. In C, this value is also the length of the rowind and rowcoef arrays.
Integer array of length ncols containing the number of nonzero elements in each column.
May be NULL if not required. This array is not required if the non-zero coefficients in the

Fair Isaac Corporation Proprietary Information276

Chapter 7: Console and Library Functions

rowindrowcoeflb
ub
nentities
nsets
coltypeentindlimit

settypesetstart

setindrefvalrowind and rowcoef arrays are continuous, and the start array has ncols+1 entries
as described above. It may be NULL if not required.
Integer arrays containing the row indices for the nonzero elements in each column. If theindices are input contiguously, with the columns in ascending order, then the length ofrowind is start[ncols-1]+collen[ncols-1] or, if collen is NULL,
start[ncols].
Double array containing the nonzero element values length as for rowind.
Double array of length ncols containing the lower bounds on the columns. Use
XPRS_MINUSINFINITY to represent a lower bound of minus infinity.
Double array of length ncols containing the upper bounds on the columns. Use
XPRS_PLUSINFINITY to represent an upper bound of plus infinity.
Number of binary, integer, semi-continuous, semi-continuous integer and partial integer
entities.
Number of SOS1 and SOS2 sets.
Character array of length nentities containing the entity types:
Bbinary variables;I
integer variables;P
partial integer variables;Ssemi-continuous variables;Rsemi-continuous integer variables.
Integer array of length nentities containing the column indices of the global entities.
Double array of length nentities containing the integer limits for the partial integer
variables and lower bounds for semi-continuous and semi-continuous integer variables(any entries in the positions corresponding to binary and integer variables will be ignored).
May be NULL if not required.
Character array of length nsets containing the set types:
1
SOS1 type sets;
2
SOS2 type sets.
May be NULL if not required.
Integer array containing the offsets in the setind and refval arrays indicating the startof the sets. This array is of length nsets+1, the last member containing the offset where
set nsets+1 would start. May be NULL if not required.
Integer array of length setstart[nsets]-1 containing the columns in each set. May
be NULL if not required.
Double array of length setstart[nsets]-1 containing the reference row entries foreach member of the sets. These define the order for SOS2 constraints and may be usedin branching for both types. May be NULL if not required.

Related controls
Integer
EXTRACOLS
EXTRAELEMSEXTRAMIPENTSEXTRAPRESOLVEEXTRAROWSKEEPNROWSSCALING
DoubleMATRIXTOLSOSREFTOL

Number of extra columns to be allowed for.
Number of extra matrix elements to be allowed for.
Number of extra global entities to be allowed for.
Number of extra elements to allow for in presolve.
Number of extra rows to be allowed for.
Status for nonbinding rows.
Type of scaling.
Tolerance on matrix elements.
Minimum gap between reference row entries.

Fair Isaac Corporation Proprietary Information

277

Chapter 7: Console and Library Functions

ExampleThe following specifies an integer problem, globalEx, corresponding to:minimize:x + 2ysubject to:

3x + 2y≤400

x + 3y≤200

with both x and y integral:char probname[]= "globalEx";
int ncols = 2, nrows = 2;char rowtype[]= {'L','L'};
double rhs[]= {400.0, 200.0};
int start[]= {0, 2, 4};
int rowind[]= {0, 1, 0, 1};
double rowcoef[] = {3.0, 1.0, 2.0, 3.0};
double objcoefs[] = {1.0, 2.0};
double lb[]
= {0.0, 0.0};
double ub[]
= {200.0, 200.0};
int nentities = 2;
int nsets = 0;char coltype[] = {"I","I"};int entind[] = {0,1};...
XPRSloadglobal(prob, probname, ncols, nrows, rowtype, rhs, NULL,
objcoefs, start, NULL, rowind,rowcoef, lb, ub, nentities, nsets, coltype, entind,
NULL, NULL, NULL, NULL, NULL);
Further information
1. The row and column indices follow the usual C convention of going from 0 to nrows-1 and 0 toncols-1 respectively.
2. The double constants XPRS_PLUSINFINITY and XPRS_MINUSINFINITY are defined in the Optimizer
library header file.
3. Semi-continuous lower bounds are taken from the limit array. If this is NULL then they are given adefault value of 1.0. If a semi-continuous variable has a positive lower bound then this will be used as
the semi-continuous lower bound and the lower bound on the variable will be set to zero.
Related topics
XPRSaddsetnames, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.

Fair Isaac Corporation Proprietary Information

278

Chapter 7: Console and Library Functions

XPRSloadlp, XPRSloadlp64
Purpose
Synopsis

Enables the user to pass a matrix directly to the Optimizer, rather than reading the matrix from a file.
int XPRS_CC XPRSloadlp(XPRSprob prob, const char ⁎probname, int ncols, int
nrows, const char rowtype[], const double rhs[], const double rng[],
const double objcoef[], const int start[], const int collen[], const
int rowind[], const double rowcoef[], const double lb[], const doubleub[]);
int XPRS_CC XPRSloadlp64(XPRSprob prob, const char ⁎probname, int ncols,
int nrows, const char rowtype[], const double rhs[], const double
rng[], const double objcoef[], const XPRSint64 start[], const int
collen[], const int rowind[], const double rowcoef[], const double
lb[], const double ub[]);Arguments
prob
probname
ncols
nrows

rowtyperhs
rng

objcoefstartcollenrowindrowcoef

The current problem.
A string of up to MAXPROBNAMELENGTH characters containing a names for the problem.
Number of structural columns in the matrix.
Number of rows in the matrix (not including the objective). Objective coefficients must be
supplied in the objcoef array, and the objective function should not be included in any of
the other arrays.
Character array of length nrows containing the row types:
Lindicates a ≤ constraint;E
indicates an = constraint;G
indicates a ≥ constraint;R
indicates a range constraint;N
indicates a nonbinding constraint.
Double array of length nrows containing the right hand side coefficients of the rows. The
right hand side value for a range row gives the upper bound on the row.
Double array of length nrows containing the range values for range rows. Values for allother rows will be ignored. May be NULL if not required. The lower bound on a range row
is the right hand side value minus the range value. The sign of the range value is ignored the absolute value is used in all cases.
Double array of length ncols containing the objective function coefficients.
Integer array containing the offsets in the rowind and rowcoef arrays of the start of theelements for each column. This array is of length ncols or, if collen is NULL, length
ncols+1. If collen is NULL, the extra entry of start, start[ncols], contains the
position in the rowind and rowcoef arrays at which an extra column would start, if itwere present. In C, this value is also the length of the rowind and rowcoef arrays.
Integer array of length ncols containing the number of nonzero elements in each column.
May be NULL if not required. This array is not required if the non-zero coefficients in therowind and rowcoef arrays are continuous, and the start array has ncols+1 entries
as described above.
Integer array containing the row indices for the nonzero elements in each column. If theindices are input contiguously, with the columns in ascending order, the length of therowind is start[ncols-1]+collen[ncols-1] or, if collen is NULL,
start[ncols].
Double array containing the nonzero element values; length as for rowind.

Fair Isaac Corporation Proprietary Information279

Chapter 7: Console and Library Functionslb

Double array of length ncols containing the lower bounds on the columns. Use
XPRS_MINUSINFINITY to represent a lower bound of minus infinity.
Double array of length ncols containing the upper bounds on the columns. Use
XPRS_PLUSINFINITY to represent an upper bound of plus infinity.

ub

Related controls
Integer
EXTRACOLS
EXTRAELEMSEXTRAPRESOLVEEXTRAROWSKEEPNROWSSCALING
DoubleMATRIXTOLExampleNumber of extra columns to be allowed for.
Number of extra matrix elements to be allowed for.
Number of extra elements to allow for in presolve.
Number of extra rows to be allowed for.
Status for nonbinding rows.
Type of scaling.
Tolerance on matrix elements.

Given an LP problem:
minimize:x+ysubject to:

2x

≥

3

x + 2y

≥

3

x+y

≥

1

the following shows how this may be loaded into the Optimizer using XPRSloadlp:
char probname[] = "small";int ncols = 2, nrows = 3;char rowtype[]= {'G','G','G'};
double rhs[]= { 3 , 3 , 1 };double objcoef[]= { 1 , 1 };int start[]= { 0 , 3 , 5 };int rowind[]= { 0 , 1 , 2 , 1 , 2 };double rowcoef[] = { 2 , 1 , 1 , 2 , 1 };double lb[]
= { 0 , 0 };double ub[]
= {XPRS_PLUSINFINITY,XPRS_PLUSINFINITY};
XPRSloadlp(prob, probname, ncols, nrows, rowtype, rhs, NULL,
objcoef, start, NULL, rowind, rowcoef, lb, ub)
Further information
1. The row and column indices follow the usual C convention of going from 0 to nrows-1 and 0 toncols-1 respectively.
2. The double constants XPRS_PLUSINFINITY and XPRS_MINUSINFINITY are defined in the Optimizer
library header file.
3. For a range constraint, the value in the rhs array specifies the upper bound on the constraint, while thevalue in the rng array specifies the range on the constraint. So a range constraint j is interpreted as:X
rhsj – |rngj | ≤aij xi ≤ rhsj
iRelated topics
XPRSloadglobal, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.

Fair Isaac Corporation Proprietary Information

280

Chapter 7: Console and Library Functions

XPRSloadlpsol
Purpose
Synopsis

Loads an LP solution for the problem into the Optimizer.
int XPRS_CC XPRSloadlpsol(XPRSprob prob, const double x[], const double
slack[], const double duals[], const double djs[], int ⁎p_status);

Arguments
prob
x
slack
duals
djs
p_status

ExampleThe current problem.
Optional: Double array of length COLS (for the original problem and not the presolve
problem) containing the values of the variables.
Optional: double array of length ROWS containing the values of slack variables.
Optional: double array of length ROWS containing the values of dual variables.
Optional: double array of length COLS containing the values of reduced costs.
Pointer to an int where the status will be returned. The status is one of:0
Solution is loaded.
1
Solution is not loaded because the problem is in presolved status.

This example loads a problem, loads a solution for the problem and then uses XPRScrossoverlpsol
to find a basic optimal solution.
XPRSreadprob(prob, "problem", "");
XPRSloadlpsol(prob, x, NULL, duals, NULL, &status);
XPRScrossoverlpsol(prob, &status);

Further information
1. At least one of variables x and dual variables duals must be provided.
2. When variables x is NULL, the variables will be set to their bounds.
3. When slack variables slack is NULL, it will be computed from variables x. If slacks are provided,variables cannot be omitted.
4. When dual variables duals is NULL, both dual variables and reduced costs will be set to zero.
5. When reduced costs djs is NULL, it will be computed from dual variables duals. If reduced costs areprovided, dual variables cannot be omitted.
Related topics
XPRSgetlpsol, XPRScrossoverlpsol.

Fair Isaac Corporation Proprietary Information

281

Chapter 7: Console and Library Functions

XPRSloadmipsol
Purpose
Synopsis

Loads a starting MIP solution for the problem into the Optimizer.
int XPRS_CC XPRSloadmipsol(XPRSprob prob, const double x[], int ⁎p_status);

Arguments
probxp_status

ExampleThe current problem.
Double array of length COLS (for the original problem and not the presolve problem)
containing the values of the variables.
Pointer to an int where the status will be returned. The status is one of:-1
Solution rejected because an error occurred;
Solution accepted. When loading a solution before a MIP solve, the solution0is always accepted. See Further Information below.
1
Solution rejected because it is infeasible;
2
Solution rejected because it is cut off;3
Solution rejected because the LP reoptimization was interrupted.

This example loads a problem and then loads a solution found previously for the problem to help speed
up the MIP search:
XPRSreadprob(prob,"problem","");
XPRSloadmipsol(prob,x,&status);
XPRSmipoptimize(prob,"");

Further information
1. When a solution is loaded before a MIP solve, the solution is placed in temporary storage until the MIP
solve is started. Only after the MIP solve has commenced and any presolve has been applied, will the
loaded solution be checked and possibly accepted as a new incumbent integer solution. There are nochecks performed on the solution before the MIP solve and the returned status in XPRSloadmipsol will
always be 0 for accepted.
2. Loaded solution values will automatically be adjusted to fit within the current problem bounds.
3. It is recommended to use XPRSaddmipsol instead of XPRSloadmipsol. XPRSaddmipsol can becalled both before a solve, to load a starting solution, and during a MIP solve, to load new solutions withincallbacks. XPRSaddmipsol also allows for loading of infeasible or partial solutions and comes with acallback to check the status of loaded solutions.
Related topics
XPRSaddmipsol, XPRSgetmipsol.

Fair Isaac Corporation Proprietary Information

282

Chapter 7: Console and Library Functions

XPRSloadmodelcuts
Purpose
Synopsis

Specifies that a set of rows in the matrix will be treated as model cuts.
int XPRS_CC XPRSloadmodelcuts(XPRSprob prob, int nrows, const int
rowind[]);Arguments
prob
nrows
rowindError value
268
ExampleThe current problem.
The number of model cuts.
An array of row indices to be treated as cuts.
Cannot perform operation on presolved matrix.

This sets the first six matrix rows as model cuts in the global problem myprob.
int rowind[] = {0,1,2,3,4,5}...
XPRSloadmodelcuts(prob,6,rowind);
XPRSmipoptimize(prob,"");

Further information
1. During presolve the model cuts are removed from the matrix and added to an internal cut pool. During the
global search, the Optimizer will regularly check this cut pool for any violated model cuts and add thosethat cuts off a node LP solution.
2. The model cuts must be "true" model cuts, in the sense that they are redundant at the optimal MIP
solution. The Optimizer does not guarantee to add all violated model cuts, so they must not be required
to define the optimal MIP solution.
Related topics
5.9.

Fair Isaac Corporation Proprietary Information

283

Chapter 7: Console and Library Functions

XPRSloadpresolvebasis
Purpose
Synopsis

Loads a presolved basis from the user’s areas.
int XPRS_CC XPRSloadpresolvebasis(XPRSprob prob, const int rowstat[], const
int colstat[]);Arguments
prob
rowstatcolstat

ExampleThe current problem.
Integer array of length ROWS containing the basis status of the slack, surplus or artificial
variable associated with each row. The status must be one of:0
slack, surplus or artificial is non-basic at lower bound;1
slack, surplus or artificial is basic;2
slack or surplus is non-basic at upper bound.
Integer array of length COLS containing the basis status of each of the columns in thematrix. The status must be one of:0variable is non-basic at lower bound or superbasic at zero if the variable has nolower bound;1
variable is basic;
2
variable is at upper bound;3
variable is super-basic.

The following example saves the presolved basis for one problem, loading it into another:
int rows, cols, ⁎rowstat, ⁎colstat;...
XPRSreadprob(prob,"myprob","");XPRSmipoptimize(prob,"l");XPRSgetintattrib(prob,XPRS_ROWS,&rows);
XPRSgetintattrib(prob,XPRS_COLS,&cols);
rowstat = malloc(rows⁎sizeof(int));
colstat = malloc(cols⁎sizeof(int));
XPRSgetpresolvebasis(prob,rowstat,colstat);
XPRSreadprob(prob2,"myotherprob","");XPRSmipoptimize(prob2,"l");XPRSloadpresolvebasis(prob2,rowstat,colstat);

Related topics
XPRSgetbasis, XPRSgetpresolvebasis, XPRSloadbasis.

Fair Isaac Corporation Proprietary Information284

Chapter 7: Console and Library Functions

XPRSloadpresolvedirs
Purpose
Synopsis

Loads directives into the presolved matrix.
int XPRS_CC XPRSloadpresolvedirs(XPRSprob prob, int ndirs, const int
colind[], const int priority[], const char dir[], const double
uppseudo[], const double downpseudo[]);Arguments
prob
ndirs
colindThe current problem.
Number of directives.
Integer array of length ndirs containing the column numbers. A negative value indicatesa set number (-1 being the first set, -2 the second, and so on).
priority
Integer array of length ndirs containing the priorities for the columns or sets. May be
NULL if not required.
dir
Character array of length ndirs specifying the branching direction for each column or set:U
the entity is to be forced up;
Dthe entity is to be forced down;N
not specified.
May be NULL if not required.
uppseudo
Double array of length ndirs containing the up pseudo costs for the columns or sets.
May be NULL if not required.
downpseudo Double array of length ndirs containing the down pseudo costs for the columns or sets.
May be NULL if not required.

ExampleThe following loads priority directives for column 0 in the matrix:
int colind[] = {0}, priority[] = {1};...
XPRSmipoptimize(prob,"l");XPRSloadpresolvedirs(prob,1,colind,priority,NULL,NULL,NULL);
XPRSmipoptimize(prob,"");

Related topics
XPRSgetdirs, XPRSloaddirs.

Fair Isaac Corporation Proprietary Information

285

Chapter 7: Console and Library Functions

XPRSloadqcqp, XPRSloadqcqp64
Purpose

Synopsis

Used to load a quadratic problem with quadratic side constraints into the Optimizer data structure. Sucha problem may have quadratic terms in its objective function as well as in its constraints.
int XPRS_CC XPRSloadqcqp(XPRSprob prob, const char ⁎ probname, int ncols,
int nrows, const char qrtypes[], const double rhs[], const double
rng[], const double objcoef[], const int start[], const int collen[],const int rowind[], const double rowcoef[], const double lb[], const
double ub[], int nobjqcoefs, const int mqcol1[], const int mqcol2[],
const double objqcoef[], int nqrows, const int qrowind[], const int
nrowqcoef[], const int rowqcol1[], const int rowqcol2[], const double
rowqcoef[]);int XPRS_CC XPRSloadqcqp64(XPRSprob prob, const char ⁎ probname, int ncols,
int nrows, const char qrtypes[], const double rhs[], const double
rng[], const double objcoef[], const XPRSint64 start[], const int
collen[], const int rowind[], const double rowcoef[], const double
lb[], const double ub[], XPRSint64 nobjqcoefs, const int mqcol1[],
const int mqcol2[], const double objqcoef[], int nqrows, const int
qrowind[], const XPRSint64 nrowqcoef[], const int rowqcol1[], const
int rowqcol2[], const double rowqcoef[]);Arguments
prob
probname
ncols
nrows

rowtyperhs
rng

objcoefstartcollenThe current problem.
A string of up to MAXPROBNAMELENGTH characters containing a name for the problem.
Number of structural columns in the matrix.
Number of rows in the matrix (not including the objective row). Objective coefficients
must be supplied in the objcoef array, and the objective function should not be included
in any of the other arrays.
Character array of length nrows containing the row types:
Lindicates a <= constraint (use this one for quadratic constraints as well);E
indicates an = constraint;G
indicates a >= constraint;R
indicates a range constraint;N
indicates a nonbinding constraint.
Double array of length nrows containing the right hand side coefficients of the rows. The
right hand side value for a range row gives the upper bound on the row.
Double array of length nrows containing the range values for range rows. Values for allother rows will be ignored. May be NULL if there are no ranged constraints. The lower
bound on a range row is the right hand side value minus the range value. The sign of therange value is ignored - the absolute value is used in all cases.
Double array of length ncols containing the objective function coefficients.
Integer array containing the offsets in the rowind and rowcoef arrays of the start of theelements for each column. This array is of length ncols or, if collen is NULL, length
ncols+1. If collen is NULL the extra entry of start, start[ncols], contains the
position in the rowind and rowcoef arrays at which an extra column would start, if itwere present. In C, this value is also the length of the rowind and rowcoef arrays.
Integer array of length ncols containing the number of nonzero elements in each column.
May be NULL if all elements are contiguous and start[ncols] contains the offset
where the elements for column ncols+1 would start. This array is not required if the

Fair Isaac Corporation Proprietary Information

286

Chapter 7: Console and Library Functions

non-zero coefficients in the rowind and rowcoef arrays are continuous, and the startarray has ncols+1 entries as described above. It may be NULL if not required.
rowindInteger array containing the row indices for the nonzero elements in each column. If theindices are input contiguously, with the columns in ascending order, the length of therowind is start[ncols-1]+collen[ncols-1] or, if collen is NULL,
start[ncols].
rowcoef
Double array containing the nonzero element values; length as for rowind.
lb
Double array of length ncols containing the lower bounds on the columns. Use
XPRS_MINUSINFINITY to represent a lower bound of minus infinity.
ub
Double array of length ncols containing the upper bounds on the columns. Use
XPRS_PLUSINFINITY to represent an upper bound of plus infinity.
nobjqcoefs Number of quadratic terms.
objqcol1
Integer array of size nobjqcoefs containing the column index of the first variable ineach quadratic term.
objqcol2
Integer array of size nobjqcoefs containing the column index of the second variable ineach quadratic term.
objqcoef
Double array of size nobjqcoefs containing the quadratic coefficients.
nqrowsNumber of rows containing quadratic matrices.
qrowindInteger array of size nqrows, containing the indices of rows with quadratic matrices inthem. Note that the rows are expected to be defined in rowtype as type L.
nrowqcoef Integer array of size nqrows, containing the number of nonzeros in each quadratic
constraint matrix.
rowqcol1
Integer array of size nqcelem, where nqcelem equals the sum of the elements innrowqcoef (i.e. the total number of quadratic matrix elements in all the constraints). It
contains the first column indices of the quadratic matrices. Indices for the first matrix are
listed from 0 to nrowqcoef[0]-1, for the second matrix from nrowqcoef[0] to
nrowqcoef[0]+ nrowqcoef[1]-1, etc.
rowqcol2
Integer array of size nqcelem, containing the second index for the quadratic constraint
matrices.
rowqcoef
Integer array of size nqcelem, containing the coefficients for the quadratic constraint
matrices.
Related controls
Integer
EXTRACOLS
Number of extra columns to be allowed for.
EXTRAELEMS
Number of extra matrix elements to be allowed for.
EXTRAMIPENTS
Number of extra global entities to be allowed for.
EXTRAPRESOLVE Number of extra elements to allow for in presolve.
EXTRAQCELEMENTS Number of extra qcqp elements to be allowed for.
EXTRAQCROWS
Number of extra qcqp matrices to be allowed for.
EXTRAROWS
Number of extra rows to be allowed for.
KEEPNROWS
Status for nonbinding rows.
SCALING
Type of scaling.
DoubleMATRIXTOLExampleTolerance on matrix elements.

To load the following problem presented in LP format:
minimize [ x^2 ]s.t.

Fair Isaac Corporation Proprietary Information

287

Chapter 7: Console and Library Functions

4 x + y <= 4x + y + [z^2] <= 5
[ x^2 + 2 x⁎y + y^2 + 4 y⁎z + z^2 ] <= 10
x + 2 y >= 8
[ 3 y^2 ] <= 20
end
the following code may be used:{

int ncols = 3;
int nrows = 5;char rowtypes[] = {'L','L','L','G','L'};
double rhs[] = {4,5,10,8,20};
double rng[] = {0,0,0,0,0};
double objcoef[] = {0,0,0,0,0};
int start[] = {0,3,6,6};
int⁎ collen = NULL;
int mrind[] = {0,1,3,0,1,3};
double rowcoef[] = {4,1,1,1,1,2};
double lb[] = {0,0,0};
double ub[] = {XPRS_PLUSINFINITY,XPRS_PLUSINFINITY,
XPRS_PLUSINFINITY};
int nobjqcoefs = 1;
int objqcol1[] = {0};int objqcol2[] = {0};double objqcoef[] = {1};}int nqrows = 3;
int qrowind[] = {1,2,4};
int nrowqcoef[] = {1,5,1};
int qcmcol1[] = {2,0,0,1,1,2,1};
int qcmcol2[] = {2,0,1,1,2,2,1};// ! to have 2xy define 1xy (1yx will be assumed to be implicitly present)
double rowqcoef[] = {1,9,1,8,2,7,3};

XPRSloadqcqp(xprob,"qcqp",ncols,nrows,rowtypes,rhs,rng,objcoef,start,collen,mrind,rowcoef,lb,ub,nobjqcoefs,objqcol1,objqcol2,objqcoef,nqrows,qrowind
qcmcol1,qcmcol2,rowqcoef);}

Fair Isaac Corporation Proprietary Information

288

Chapter 7: Console and Library Functions

Further information
1. The objective function is of the form cT x+ 0.5 xT Qx where Q is positive semi-definite for minimization
problems and negative semi-definite for maximization problems. If this is not the case the optimization
algorithms may converge to a local optimum or may not converge at all. Note that only the upper or lower
triangular part of the Q matrix is specified.
2. All Q matrices in the constraints must be positive semi-definite. Note that only the upper or lower
triangular part of the Q matrix is specified for constraints as well.
3. The row and column indices follow the usual C convention of going from 0 to nrows-1 and 0 toncols-1 respectively.
4. The double constants XPRS_PLUSINFINITY and XPRS_MINUSINFINITY are defined in the Optimizer
library header file.
Related topics
XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.

Fair Isaac Corporation Proprietary Information289

Chapter 7: Console and Library Functions

XPRSloadqcqpglobal, XPRSloadqcqpglobal64
Purpose

Synopsis

Used to load a global, quadratic problem with quadratic side constraints into the Optimizer data structure.
Such a problem may have quadratic terms in its objective function as well as in its constraints. Integer,
binary, partial integer, semi-continuous and semi-continuous integer variables can be defined, together
with sets of type 1 and 2. The reference row values for the set members are passed as an array rather
than specifying a reference row.
int XPRS_CC XPRSloadqcqpglobal(XPRSprob prob, const char ⁎ probname, int
ncols, int nrows, const char qrtypes[], const double rhs[], const
double rng[], const double objcoef[], const int start[], const int
collen[], const int rowind[], const double rowcoef[], const double
lb[], const double ub[], int nobjqcoefs, const int mqcol1[], const
int mqcol2[], const double objqcoef[], int nqrows, const int
qrowind[], const int nrowqcoefs[], const int rowqcol1[], const int
rowqcol2[], const double rowqcoef[], const int nentities, const int
nsets, const char coltype[], const int entind[], const double
limit[], const char settype[], const int setstart[], const int
setind[], const double refval[]);int XPRS_CC XPRSloadqcqpglobal64(XPRSprob prob, const char ⁎ probname, int
ncols, int nrows, const char qrtypes[], const double rhs[], const
double rng[], const double objcoef[], const XPRSint64 start[], const
int collen[], const int rowind[], const double rowcoef[], const
double lb[], const double ub[], XPRSint64 nobjqcoefs, const int
mqcol1[], const int mqcol2[], const double objqcoef[], int nqrows,
const int qrowind[], const XPRSint64 nrowqcoefs[], const int
rowqcol1[], const int rowqcol2[], const double rowqcoef[], const int
nentities, const int nsets, const char coltype[], const int entind[],const double limit[], const char settype[], const XPRSint64
setstart[], const int setind[], const double refval[]);Arguments
prob
probname
ncols
nrows

rowtyperhs
rng

objcoef

The current problem.
A string of up to MAXPROBNAMELENGTH characters containing a name for the problem.
Number of structural columns in the matrix.
Number of rows in the matrix (not including the objective row). Objective coefficients
must be supplied in the objcoef array, and the objective function should not be included
in any of the other arrays.
Character array of length nrows containing the row types:
Lindicates a <= constraint (use this one for quadratic constraints as well);E
indicates an = constraint;G
indicates a >= constraint;R
indicates a range constraint;N
indicates a nonbinding constraint.
Double array of length nrows containing the right hand side coefficients of the rows. The
right hand side value for a range row gives the upper bound on the row.
Double array of length nrows containing the range values for range rows. Values for allother rows will be ignored. May be NULL if there are no ranged constraints. The lower
bound on a range row is the right hand side value minus the range value. The sign of therange value is ignored - the absolute value is used in all cases.
Double array of length ncols containing the objective function coefficients.

Fair Isaac Corporation Proprietary Information

290

Chapter 7: Console and Library Functions

start

Integer array containing the offsets in the rowind and rowcoef arrays of the start of theelements for each column. This array is of length ncols or, if collen is NULL, length
ncols+1. If collen is NULL the extra entry of start, start[ncols], contains the
position in the rowind and rowcoef arrays at which an extra column would start, if itwere present. In C, this value is also the length of the rowind and rowcoef arrays.
collenInteger array of length ncols containing the number of nonzero elements in each column.
May be NULL if all elements are contiguous and start[ncols] contains the offset
where the elements for column ncols+1 would start. This array is not required if the
non-zero coefficients in the rowind and rowcoef arrays are continuous, and the startarray has ncols+1 entries as described above. It may be NULL if not required.
rowindInteger array containing the row indices for the nonzero elements in each column. If theindices are input contiguously, with the columns in ascending order, the length of therowind is start[ncols-1]+collen[ncols-1] or, if collen is NULL,
start[ncols].
rowcoef
Double array containing the nonzero element values; length as for rowind.
lb
Double array of length ncols containing the lower bounds on the columns. Use
XPRS_MINUSINFINITY to represent a lower bound of minus infinity.
ub
Double array of length ncols containing the upper bounds on the columns. Use
XPRS_PLUSINFINITY to represent an upper bound of plus infinity.
nobjqcoefs Number of quadratic terms.
objqcol1
Integer array of size nobjqcoefs containing the column index of the first variable ineach quadratic term.
objqcol2
Integer array of size nobjqcoefs containing the column index of the second variable ineach quadratic term.
objqcoef
Double array of size nobjqcoefs containing the quadratic coefficients.
nqrowsNumber of rows containing quadratic matrices.
qrowindInteger array of size nqrows, containing the indices of rows with quadratic matrices inthem. Note that the rows are expected to be defined in rowtype as type L.
nrowqcoefs Integer array of size nqrows, containing the number of nonzeros in each quadratic
constraint matrix.
rowqcol1
Integer array of size nqcelem, where nqcelem equals the sum of the elements innrowqcoefs (i.e. the total number of quadratic matrix elements in all the constraints). It
contains the first column indices of the quadratic matrices. Indices for the first matrix are
listed from 0 to nrowqcoefs[0]-1, for the second matrix from nrowqcoefs[0] to
nrowqcoefs[0]+ nrowqcoefs[1]-1, etc.
rowqcol2
Integer array of size nqcelem, containing the second index for the quadratic constraint
matrices.
rowqcoef
Integer array of size nqcelem, containing the coefficients for the quadratic constraint
matrices.
nentities Number of binary, integer, semi-continuous, semi-continuous integer and partial integer
entities.
nsets
Number of SOS1 and SOS2 sets.
coltype
Character array of length nentities containing the entity types:
Bbinary variables;I
integer variables;P
partial integer variables;Ssemi-continuous variables;Rsemi-continuous integer variables.
entindInteger array of length nentities containing the column indices of the global entities.
limit
Double array of length nentities containing the integer limits for the partial integer

Fair Isaac Corporation Proprietary Information

291

Chapter 7: Console and Library Functions

settypesetstart

setindrefvalvariables and lower bounds for semi-continuous and semi-continuous integer variables(any entries in the positions corresponding to binary and integer variables will be ignored).
May be NULL if not required.
Character array of length nsets containing the set types:
1
SOS1 type sets;
2
SOS2 type sets.
May be NULL if not required.
Integer array containing the offsets in the setind and refval arrays indicating the startof the sets. This array is of length nsets+1, the last member containing the offset where
set nsets+1 would start. May be NULL if not required.
Integer array of length setstart[nsets]-1 containing the columns in each set. May
be NULL if not required.
Double array of length setstart[nsets]-1 containing the reference row entries foreach member of the sets. These define the order for SOS2 constraints and may be usedin branching for both types. May be NULL if not required.

Related controls
Integer
EXTRACOLS
Number of extra columns to be allowed for.
EXTRAELEMS
Number of extra matrix elements to be allowed for.
EXTRAMIPENTS
Number of extra global entities to be allowed for.
EXTRAPRESOLVE Number of extra elements to allow for in presolve.
EXTRAQCELEMENTS Number of extra qcqp elements to be allowed for.
EXTRAQCROWS
Number of extra qcqp matrices to be allowed for.
EXTRAROWS
Number of extra rows to be allowed for.
KEEPNROWS
Status for nonbinding rows.
SCALING
Type of scaling.
DoubleMATRIXTOL

Tolerance on matrix elements.

Further information
1. The objective function is of the form cT x+ 0.5 xT Qx where Q is positive semi-definite for minimization
problems and negative semi-definite for maximization problems. If this is not the case the optimization
algorithms may converge to a local optimum or may not converge at all. Note that only the upper or lower
triangular part of the Q matrix is specified.
2. All Q matrices in the constraints must be positive semi-definite. Note that only the upper or lower
triangular part of the Q matrix is specified for constraints as well.
3. The row and column indices follow the usual C convention of going from 0 to nrows-1 and 0 toncols-1 respectively.
4. The double constants XPRS_PLUSINFINITY and XPRS_MINUSINFINITY are defined in the Optimizer
library header file.
5. The row and column indices follow the usual C convention of going from 0 to nrows-1 and 0 toncols-1 respectively.
6. The double constants XPRS_PLUSINFINITY and XPRS_MINUSINFINITY are defined in the Optimizer
library header file.
7. Semi-continuous lower bounds are taken from the limit array. If this is NULL then they are given a default
value of 1.0. If a semi-continuous variable has a positive lower bound then this will be used as thesemi-continuous lower bound and the lower bound on the variable will be set to zero.

Fair Isaac Corporation Proprietary Information

292

Chapter 7: Console and Library Functions

Related topics
XPRSloadglobal, XPRSloadlp, XPRSloadqcqp, XPRSloadqglobal, XPRSloadqp,
XPRSreadprob.

Fair Isaac Corporation Proprietary Information

293

Chapter 7: Console and Library Functions

XPRSloadqglobal, XPRSloadqglobal64
Purpose

Synopsis

Used to load a global problem with quadratic objective coefficients in to the Optimizer data structures.
Integer, binary, partial integer, semi-continuous and semi-continuous integer variables can be defined,
together with sets of type 1 and 2. The reference row values for the set members are passed as an arrayrather than specifying a reference row.
int XPRS_CC XPRSloadqglobal(XPRSprob prob, const char ⁎probname, int ncols,
int nrows, const char rowtype[], const double rhs[], const double
rng[], const double objcoef[], const int start[], const int collen[],const int rowind[], const double rowcoef[], const double lb[], const
double ub[], int nobjqcoefs, const int objqcol1[], const int
objqcol2[], const double objqcoef[], const int nentities, const int
nsets, const char coltype[], const int entind[], const double
limit[], const char settype[], const int setstart[], const int
setind[], const double refval[]);int XPRS_CC XPRSloadqglobal64(XPRSprob prob, const char ⁎probname, int
ncols, int nrows, const char rowtype[], const double rhs[], const
double rng[], const double objcoef[], const XPRSint64 start[], const
int collen[], const int rowind[], const double rowcoef[], const
double lb[], const double ub[], XPRSint64 nobjqcoefs, const int
objqcol1[], const int objqcol2[], const double objqcoef[], const int
nentities, const int nsets, const char coltype[], const int entind[],const double limit[], const char settype[], const XPRSint64
setstart[], const int setind[], const double refval[]);Arguments
prob
probname
ncols
nrows

rowtyperhs
rng

objcoefstart

The current problem.
A string of up to MAXPROBNAMELENGTH characters containing a name for the problem.
Number of structural columns in the matrix.
Number of rows in the matrix (not including the objective). Objective coefficients must be
supplied in the objcoef array, and the objective function should not be included in any of
the other arrays.
Character array of length nrows containing the row type:L
indicates a ≤ constraint;E
indicates an = constraint;G
indicates a ≥ constraint;R
indicates a range constraint;N
indicates a nonbinding constraint.
Double array of length nrows containing the right hand side coefficients. The right handside value for a range row gives the upper bound on the row.
Double array of length nrows containing the range values for range rows. The values in
the range array will only be read for R type rows. The entries for other type rows will beignored. May be NULL if not required. The lower bound on a range row is the right handside value minus the range value. The sign of the range value is ignored - the absolutevalue is used in all cases.
Double array of length ncols containing the objective function coefficients.
Integer array containing the offsets in the rowind and rowcoef arrays of the start of theelements for each column. This array is of length ncols or, if collen is NULL, length
ncols+1.

Fair Isaac Corporation Proprietary Information

294

Chapter 7: Console and Library Functions

collenInteger array of length ncols containing the number of nonzero elements in each column.
May be NULL if not required. This array is not required if the non-zero coefficients in therowind and rowcoef arrays are continuous, and the start array has ncols+1 entries
as described above. It may be NULL if not required.
Integer arrays containing the row indices for the nonzero elements in each column. If therowindindices are input contiguously, with the columns in ascending order, then the length ofrowind is start[ncols-1]+collen[ncols-1] or, if collen is NULL,
start[ncols].
rowcoef
Double array containing the nonzero element values length as for rowind.
lb
Double array of length ncols containing the lower bounds on the columns. Use
XPRS_MINUSINFINITY to represent a lower bound of minus infinity.
ub
Double array of length ncols containing the upper bounds on the columns. Use
XPRS_PLUSINFINITY to represent an upper bound of plus infinity.
nobjqcoefs Number of quadratic terms.
objqcol1
Integer array of size nobjqcoefs containing the column index of the first variable ineach quadratic term.
objqcol2
Integer array of size nobjqcoefs containing the column index of the second variable ineach quadratic term.
objqcoef
Double array of size nobjqcoefs containing the quadratic coefficients.
nentities Number of binary, integer, semi-continuous, semi-continuous integer and partial integer
entities.
nsets
Number of SOS1 and SOS2 sets.
coltype
Character array of length nentities containing the entity types:
Bbinary variables;I
integer variables;P
partial integer variables;Ssemi-continuous variables;Rsemi-continuous integers.
entindInteger array of length nentities containing the column indices of the global entities.
limit
Double array of length nentities containing the integer limits for the partial integer
variables and lower bounds for semi-continuous and semi-continuous integer variables(any entries in the positions corresponding to binary and integer variables will be ignored).
May be NULL if not required.
settype
Character array of length nsets containing:
1
SOS1 type sets;
2
SOS2 type sets.
May be NULL if not required.
setstart
Integer array containing the offsets in the setind and refval arrays indicating the startof the sets. This array is of length nsets+1, the last member containing the offset where
set nsets+1 would start. May be NULL if not required.
setindInteger array of length setstart[nsets]-1 containing the columns in each set. May
be NULL if not required.
refvalDouble array of length setstart[nsets]-1 containing the reference row entries foreach member of the sets. These define the order for SOS2 constraints and may be usedin branching for both types. May be NULL if not required.
Related controls
Integer
EXTRACOLS
EXTRAELEMSEXTRAMIPENTS

Number of extra columns to be allowed for.
Number of extra matrix elements to be allowed for.
Number of extra global entities to be allowed for.

Fair Isaac Corporation Proprietary Information

295

Chapter 7: Console and Library Functions

EXTRAPRESOLVEEXTRAROWSKEEPNROWSSCALING
DoubleMATRIXTOLSOSREFTOL
ExampleNumber of extra elements to allow for in presolve.
Number of extra rows to be allowed for.
Status for nonbinding rows.
Type of scaling.
Tolerance on matrix elements.
Minimum gap between reference row entries.

Minimize -6x1 + 2x1 2 - 2x1 x2 + 2x2 2 subject to x1 + x2 ≤ 1.9, where x1 must be an integer:
int nrows = 1, ncols = 2, nquad = 3;
int start[] = {0, 1, 2};
int rowind[] = {0, 0};
double rowcoef[] = {1, 1};
double rhs[] = {1.9};
char rowtype[] = {'L'};
double lbound[] = {0, 0};
double ubound[] = {XPRS_PLUSINFINITY, XPRS_PLUSINFINITY};
double objcoef[] = {-6, 0};
int objqcol1[] = {0, 0, 1};
int objqcol2[] = {0, 1, 1};
double dquad[] = {4, -2, 4};
int nentities = 1, nsets = 0;
int entind[] = {0};char coltype[]={'I'};
double ⁎primal, ⁎dual;
primal = malloc(ncols⁎sizeof(double));dual = malloc(nrows⁎sizeof(double));...
XPRSloadqglobal(prob, "myprob", ncols, nrows, rowtype, rhs,
NULL, objcoef, start, NULL, rowind,rowcoef, lbound, ubound, nquad, objqcol1, objqcol2,
dquad, nentities, nsets, coltype, entind, NULL,
NULL, NULL, NULL, NULL)

Further information
1. The objective function is of the form c’x+ 0.5 x’Qx where Q is positive semi-definite for minimization
problems and negative semi-definite for maximization problems. If this is not the case the optimization
algorithms may converge to a local optimum or may not converge at all. Note that only the upper or lower
triangular part of the Q matrix is specified.
2. The row and column indices follow the usual C convention of going from 0 to nrows-1 and 0 toncols-1 respectively.
3. The double constants XPRS_PLUSINFINITY and XPRS_MINUSINFINITY are defined in the Optimizer
library header file.
Related topics
XPRSaddsetnames, XPRSloadglobal, XPRSloadlp, XPRSloadqp, XPRSreadprob.

Fair Isaac Corporation Proprietary Information

296

Chapter 7: Console and Library Functions

XPRSloadqp, XPRSloadqp64
Purpose

Synopsis

Used to load a quadratic problem into the Optimizer data structure. Such a problem may have quadratic
terms in its objective function, although not in its constraints.
int XPRS_CC XPRSloadqp(XPRSprob prob, const char ⁎probname, int ncols, int
nrows, const char rowtype[], const double rhs[], const double rng[],
const double objcoef[], const int start[], const int collen[], const
int rowind[], const double rowcoef[], const double lb[], const double
ub[], int nobjqcoefs, const int objqcol1[], const int objqcol2[],
const double objqcoef[]);int XPRS_CC XPRSloadqp64(XPRSprob prob, const char ⁎probname, int ncols,
int nrows, const char rowtype[], const double rhs[], const double
rng[], const double objcoef[], const XPRSint64 start[], const int
collen[], const int rowind[], const double rowcoef[], const double
lb[], const double ub[], XPRSint64 nobjqcoefs, const int objqcol1[],
const int objqcol2[], const double objqcoef[]);Arguments
prob
probname
ncols
nrows

rowtyperhs
rng

objcoefstartcollenrowindThe current problem.
A string of up to MAXPROBNAMELENGTH characters containing a names for the problem.
Number of structural columns in the matrix.
Number of rows in the matrix (not including the objective row). Objective coefficients
must be supplied in the objcoef array, and the objective function should not be included
in any of the other arrays.
Character array of length nrows containing the row types:
Lindicates a ≤ constraint;E
indicates an = constraint;G
indicates a ≥ constraint;R
indicates a range constraint;N
indicates a nonbinding constraint.
Double array of length nrows containing the right hand side coefficients of the rows. The
right hand side value for a range row gives the upper bound on the row.
Double array of length nrows containing the range values for range rows. Values for allother rows will be ignored. May be NULL if there are no ranged constraints. The lower
bound on a range row is the right hand side value minus the range value. The sign of therange value is ignored - the absolute value is used in all cases.
Double array of length ncols containing the objective function coefficients.
Integer array containing the offsets in the rowind and rowcoef arrays of the start of theelements for each column. This array is of length ncols or, if collen is NULL, length
ncols+1. If collen is NULL the extra entry of start, start[ncols], contains the
position in the rowind and rowcoef arrays at which an extra column would start, if itwere present. In C, this value is also the length of the rowind and rowcoef arrays.
Integer array of length ncols containing the number of nonzero elements in each column.
May be NULL if all elements are contiguous and start[ncols] contains the offset
where the elements for column ncols+1 would start. This array is not required if the
non-zero coefficients in the rowind and rowcoef arrays are continuous, and the startarray has ncols+1 entries as described above. It may be NULL if not required.
Integer array containing the row indices for the nonzero elements in each column. If theindices are input contiguously, with the columns in ascending order, the length of the

Fair Isaac Corporation Proprietary Information

297

Chapter 7: Console and Library Functions

rowind is start[ncols-1]+collen[ncols-1] or, if collen is NULL,
start[ncols].
rowcoef
Double array containing the nonzero element values; length as for rowind.
lb
Double array of length ncols containing the lower bounds on the columns. Use
XPRS_MINUSINFINITY to represent a lower bound of minus infinity.
ub
Double array of length ncols containing the upper bounds on the columns. Use
XPRS_PLUSINFINITY to represent an upper bound of plus infinity.
nobjqcoefs Number of quadratic terms.
objqcol1
Integer array of size nobjqcoefs containing the column index of the first variable ineach quadratic term.
objqcol2
Integer array of size nobjqcoefs containing the column index of the second variable ineach quadratic term.
objqcoef
Double array of size nobjqcoefs containing the quadratic coefficients.
Related controls
Integer
EXTRACOLS
EXTRAELEMSEXTRAPRESOLVEEXTRAROWSKEEPNROWSSCALING
DoubleMATRIXTOLExampleNumber of extra columns to be allowed for.
Number of extra matrix elements to be allowed for.
Number of extra elements to allow for in presolve.
Number of extra rows to be allowed for.
Status for nonbinding rows.
Type of scaling.
Tolerance on matrix elements.

Minimize -6x1 + 2x1 2 - 2x1 x2 + 2x2 2 subject to x1 + x2 ≤ 1.9:
int nrows = 1, ncols = 2, nquad = 3;
int start[] = {0, 1, 2};
int rowind[] = {0, 0};
double rowcoef[] = {1, 1};
double rhs[] = {1.9};
char rowtype[] = {'L'};
double lbound[] = {0, 0};
double ubound[] = {XPRS_PLUSINFINITY,XPRS_PLUSINFINITY};
double objcoef[] = {-6, 0};
int objqcol1[] = {0, 0, 1};
int objqcol2[] = {0, 1, 1};
double dquad[] = {4, -2, 4};double ⁎primal, ⁎dual;
primal = malloc(ncols⁎sizeof(double));dual = malloc(nrows⁎sizeof(double));...
XPRSloadqp(prob, "example", ncols, nrows, rowtype, rhs,
NULL, objcoef, start, NULL, rowind, rowcoef,
lbound, ubound, nquad, objqcol1, objqcol2, dquad)

Fair Isaac Corporation Proprietary Information

298

Chapter 7: Console and Library Functions

Further information
1. The objective function is of the form c’x+ 0.5 x’Qx where Q is positive semi-definite for minimization
problems and negative semi-definite for maximization problems. If this is not the case the optimization
algorithms may converge to a local optimum or may not converge at all. Note that only the upper or lower
triangular part of the Q matrix is specified.
2. The row and column indices follow the usual C convention of going from 0 to nrows-1 and 0 toncols-1 respectively.
3. The double constants XPRS_PLUSINFINITY and XPRS_MINUSINFINITY are defined in the Optimizer
library header file.
Related topics
XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSreadprob.

Fair Isaac Corporation Proprietary Information

299

Chapter 7: Console and Library Functions

XPRSloadsecurevecs
Purpose

Synopsis

Allows the user to mark rows and columns in order to prevent the presolve removing these rows andcolumns from the matrix.
int XPRS_CC XPRSloadsecurevecs(XPRSprob prob, int nrows, int ncols, const
int rowind[], const int colind[]);Arguments
prob
nrows
ncols
rowindcolindExampleThe current problem.
Number of rows to be marked.
Number of columns to be marked.
Integer array of length nrows containing the rows to be marked. May be NULL if not
required.
Integer array of length ncols containing the columns to be marked. May be NULL if not
required.

This sets the first six rows and the first four columns to not be removed during presolve.
int rowind[] = {0,1,2,3,4,5};
int colind[] = {0,1,2,3};...
XPRSreadprob(prob,"myprob","");
XPRSloadsecurevecs(prob,6,4,rowind,colind);
XPRSmipoptimize(prob,"");

Related topics
5.3.

Fair Isaac Corporation Proprietary Information

300

Chapter 7: Console and Library Functions

XPRSlpoptimize
Purpose

Synopsis

LPOPTIMIZE

This function begins a search for the optimal continuous (LP) solution. The direction of optimization is
given by OBJSENSE. The status of the problem when the function completes can be checked using
LPSTATUS. Any global entities in the problem will be ignored.
int XPRS_CC XPRSlpoptimize(XPRSprob prob, const char ⁎flags);
LPOPTIMIZE [-flags]

Arguments
prob
flags

The current problem.
Flags to pass to XPRSlpoptimize (LPOPTIMIZE). The default is "" or NULL, in whichcase the algorithm used is determined by the DEFAULTALG control. If the argument
includes:b
the model will be solved using the Newton barrier method;p
the model will be solved using the primal simplex algorithm;dthe model will be solved using the dual simplex algorithm;(lower case N), the network part of the model will be identified and solved usingn
the network simplex algorithm;

Further information
1. The algorithm used to optimize is determined by the DEFAULTALG control if no flags are provided. By
default, the dual simplex is used for linear problems and the barrier is used for non-linear problems.
2. The d and p flags can be used with the n flag to complete the solution of the model with either the dual or
primal algorithms once the network algorithm has solved the network part of the model.
3. The b flag cannot be used with the n flag.
Related topics
XPRSmipoptimize (MIPOPTIMIZE), 4.

Fair Isaac Corporation Proprietary Information

301

Chapter 7: Console and Library Functions

XPRSmaxim, XPRSminim

MAXIM, MINIM

PurposeThis subroutine is deprecated and will be removed in a future release. XPRSlpoptimize or
XPRSmipoptimize should be used instead.
Begins a search for the optimal LP solution.
Synopsis

int XPRS_CC XPRSmaxim(XPRSprob prob, const char ⁎flags);
int XPRS_CC XPRSminim(XPRSprob prob, const char ⁎flags);
MAXIM [-flags]
MINIM [-flags]

Arguments
prob
flags

The current problem.
Flags to pass to XPRSmaxim (MAXIM) or XPRSminim (MINIM). The default is "" or NULL,
in which case the algorithm used is determined by the DEFAULTALG control. If theargument includes:b
the model will be solved using the Newton barrier method;p
the model will be solved using the primal simplex algorithm;dthe model will be solved using the dual simplex algorithm;l(lower case L), the model will be solved as a linear model ignoring thediscreteness of global variables;n(lower case N), the network part of the model will be identified and solved using
the network simplex algorithm;g
the global model will be solved, calling XPRSglobal (GLOBAL).
Certain combinations of options may be used where this makes sense so, for example, pg
will solve the LP with the primal algorithm and then go on to perform the global search.

Related controls
Integer
AUTOPERTURB
Whether automatic perturbation is performed.
BARITERLIMIT
Maximum number of Newton Barrier iterations.
BARORDER
Ordering algorithm for the Cholesky factorization.
BARORDERTHREADS Maximum number of theads for the ordering algorithm.
BAROUTPUT
Newton barrier: level of solution output.
BARTHREADS
Max number of threads to run.
BIGMMETHOD
Specifies "Big M" method, or phaseI/phaseII.
CACHESIZE
Cache size in Kbytes for the Newton barrier.
CPUTIME
1 for CPU time; 0 for elapsed time.
CRASH
Type of crash.
CROSSOVER
Newton barrier crossover control.
DEFAULTALG
Algorithm to use with the tree search.
DENSECOLLIMIT Columns with this many elements are considered dense.
DUALGRADIENT
Pricing method for the dual algorithm.
INVERTFREQ
Invert frequency.
INVERTMIN
Minimum number of iterations between inverts.
KEEPBASIS
Whether to use previously loaded basis.
LPITERLIMIT
Iteration limit for the simplex algorithm.
LPLOG
Frequency and type of simplex algorithm log.
MAXTIME
Maximum time allowed.

Fair Isaac Corporation Proprietary Information

302

Chapter 7: Console and Library Functions

PRESOLVEPRESOLVEOPSPRICINGALGREFACTOR
TRACE

Degree of presolving to perform.
Specifies the operations performed during presolve.
Type of pricing to be used.
Indicates whether to re-factorize the optimal basis.
Control of the infeasibility diagnosis during presolve.

DoubleBARDUALSTOPBARGAPSTOPBARPRIMALSTOPBARSTEPSTOPBIGMCHOLESKYTOL
ELIMTOL
ETATOL
FEASTOLMARKOWITZTOLMIPABSCUTOFFOPTIMALITYTOLPENALTYPERTURB
PIVOTTOLPPFACTORRELPIVOTTOL

Newton barrier tolerance for dual infeasibilities.
Newton barrier tolerance for relative duality gap.
Newton barrier tolerance for primal infeasibilities.
Newton barrier minimal step size.
Infeasibility penalty.
Tolerance in the Cholesky decomposition.
Markowitz tolerance for elimination phase of presolve.
Tolerance on eta elements.
Tolerance on RHS.
Markowitz tolerance for the factorization.
Cutoff set after an LP Optimizer command. (Dual only)
Reduced cost tolerance.
Maximum absolute penalty variable coefficient.
Perturbation value.
Pivot tolerance.
Partial pricing candidate list sizing parameter.
Relative pivot tolerance.

Example 1 (Library)
XPRSmaxim(prob,"b");This maximizes the current problem using the Newton barrier method.
Example 2 (Console)
MINIM -g
This minimizes the current problem and commences the global search.
Further information
1. The algorithm used to optimize is determined by the DEFAULTALG control. By default, the dual simplex isused for LP and MIP problems and the barrier is used for QP problems.
2. The d and p flags can be used with the n flag to complete the solution of the model with either the dual or
primal algorithms once the network algorithm has solved the network part of the model.
3. The b flag cannot be used with the n flag.
4. The dual simplex algorithm is a two phase algorithm which can remove dual infeasibilities.
5. (Console) If the user prematurely terminates the solution process by typing CTRL-C, the iterative
procedure will terminate at the first "safe" point.
Related topics
XPRSglobal (GLOBAL), XPRSreadbasis (READBASIS), 4, A.7.

Fair Isaac Corporation Proprietary Information

303

Chapter 7: Console and Library Functions

XPRSmipoptimize
Purpose

Synopsis

MIPOPTIMIZE

This function begins a global search for the optimal MIP solution. The direction of optimization is given by
OBJSENSE. The status of the problem when the function completes can be checked using MIPSTATUS.
int XPRS_CC XPRSmipoptimize(XPRSprob prob, const char ⁎flags);
MIPOPTIMIZE [-flags]

Arguments
prob
flags

The current problem.
Flags to pass to XPRSmipoptimize (MIPOPTIMIZE), which specifies how to solve theinitial continuous problem where the global entities are relaxed. If the argument includes:b
the initial continuous relaxation will be solved using the Newton barrier method;p
the initial continuous relaxation will be solved using the primal simplex
algorithm;
the initial continuous relaxation will be solved using the dual simplex algorithm;dn
the network part of the initial continuous relaxation will be identified and solved
using the network simplex algorithm;
lstop after having solved the initial continous relaxation.

Further information
1. If the l flag is used, the Optimizer will stop immediately after solving the initial continuous relaxation. The
status of the continuous solve can be checked with LPSTATUS and standard LP results are available,
such as the objective value (LPOBJVAL) and solution (use XPRSgetlpsol), depending on LPSTATUS.
2. It is possible for the Optimizer to find integer solutions before solving the initial continuous relaxation,either through heuristics or by having the user load an initial integer solution. This can potentially result in
the global search finishing before solving the continuous relaxation to optimality.
3. If the function returns without having completed the search for an optimal solution, the search can beresumed from where it stopped by calling XPRSmipoptimize again.
4. The algorithm used to reoptimize the continuous relaxations during the global search is given by
DEFAULTALG. The default is to use the dual simplex algorithm.
Related topics
XPRSlpoptimize (LPOPTIMIZE), 4.

Fair Isaac Corporation Proprietary Information

304

Chapter 7: Console and Library Functions

XPRSobjsa
Purpose

Synopsis

Returns upper and lower sensitivity ranges for specified objective function coefficients. If the objective
coefficients are varied within these ranges the current basis remains optimal and the reduced costs
remain valid.
int XPRS_CC XPRSobjsa(XPRSprob prob, int ncols, const int colind[], double
lower[], double upper[]);Arguments
prob
ncols
colindlower
upper
ExampleThe current problem.
Number of objective function coefficients whose sensitivity is sought.
Integer array of length ncols containing the indices of the columns whose objectivefunction coefficients sensitivity ranges are required.
Double array of length ncols where the objective function lower range values are to be
returned.
Double array of length ncols where the objective function upper range values are to be
returned.

Here we obtain the objective function ranges for the three columns: 2, 6 and 8:
colind[0] = 2; colind[1] = 8; colind[2] = 6;
XPRSobjsa(prob,3,colind,lower,upper);After which lower and upper contain:
lower[0] = 5.0; upper[0] = 7.0;
lower[1] = 3.8; upper[1] = 5.2;
lower[2] = 5.7; upper[2] = 1e+20;
Meaning that the current basis remains optimal when 5.0 ≤ C2 ≤ 7.0, 3.8 ≤ C8 ≤ 5.2 and 5.7 ≤ C6 , Ci
being the objective coefficient of column i.

Further information
XPRSobjsa can only be called when an optimal solution to the current LP has been found. It cannot be
used when the problem is MIP presolved.
Related topics
XPRSrhssa, XPRSbndsa.

Fair Isaac Corporation Proprietary Information

305

Chapter 7: Console and Library Functions

XPRSpivot
Purpose
Synopsis

Performs a simplex pivot by bringing variable enter into the basis and removing leave.
int XPRS_CC XPRSpivot(XPRSprob prob, int enter, int leave);Arguments
prob
enter
leave
Error values
425
426

The current problem.
Index of row or column to enter basis.
Index of row or column to leave basis.
enter is invalid (leave of range or already basic).
leave is invalid (leave of range or not eligible, e.g. nonbasic, zero pivot, etc.).

Related controls
Double
PIVOTTOLRELPIVOTTOL
ExamplePivot tolerance.
Relative pivot tolerance.

The following brings the 7th variable into the basis and removes the 5th:
XPRSpivot(prob,6,4)

Further information
Row indices are in the range 0 to ROWS-1, whilst columns are in the range ROWS+SPAREROWS to
ROWS+SPAREROWS+COLS-1.
Related topics
XPRSgetpivotorder, XPRSgetpivots.

Fair Isaac Corporation Proprietary Information

306

Chapter 7: Console and Library Functions

XPRSpostsolve
Purpose
Synopsis

POSTSOLVE

Postsolve the current matrix when it is in a presolved state.
int XPRS_CC XPRSpostsolve(XPRSprob prob);
POSTSOLVE

Argumentprob

The current problem.

Further information
A problem is left in a presolved state whenever a LP or MIP optimization does not complete. In thesecases XPRSpostsolve (POSTSOLVE) can be called to get the problem back into its original state.
Related topics
XPRSlpoptimize, XPRSmipoptimize

Fair Isaac Corporation Proprietary Information

307

Chapter 7: Console and Library Functions

XPRSpresolverow
Purpose

Synopsis

Presolves a row formulated in terms of the original variables such that it can be added to a presolved
matrix.
int XPRS_CC XPRSpresolverow(XPRSprob prob, char rowtype, int norigcoefs,
const int origcolind[], const double origrowcoef[], double origrhs,
int maxcoefs, int ⁎ p_ncoefs, int colind[], double rowcoef[], double⁎ p_rhs, int ⁎ p_status);

Arguments
prob
rowtype

The current problem.
The type of the row:L
indicates a ≤ row;G
indicates a ≥ row.
norigcoefs Number of elements in the origcolind and origrowcoef arrays.
origcolind Integer array of length norigcoefs containing the column indices of the row topresolve.
origrowcoef Double array of length norigcoefs containing the non-zero coefficients of the row topresolve.
origrhs
The right-hand side constant of the row to presolve.
maxcoefs
Maximum number of elements to return in the colind and rowcoef arrays.
p_ncoefs
Pointer to the integer where the number of elements in the colind and rowcoef arrays
will be returned.
colindInteger array which will be filled with the column indices of the presolved row. It must be
allocated to hold at least COLS elements.
rowcoef
Double array which will be filled with the coefficients of the presolved row. It must be
allocated to hold at least COLS elements.
p_rhs
Pointer to the double where the presolved right-hand side will be returned.
p_status
Status of the presolved row:
-3
Failed to presolve the row due to presolve dual reductions;-2
Failed to presolve the row due to presolve duplicate column reductions;-1
Failed to presolve the row due to an error. Check the Optimizer error code for thecause;
0
The row was successfully presolved;
1
The row was presolved, but may be relaxed.

Related controls
Integer
PRESOLVEPRESOLVEOPS
ExampleTurns presolve on or off.
Selects the presolve operations.

Suppose we want to add the row 2x1 + x2 ≤ 1 to our presolved matrix. This could be done in the following
way:
int mindo[] = { 1, 2 };int origrowcoef[] = { 2.0, 1.0 };char rowtype = 'L';
double origrhs = 1.0;
int ncoefs, status, mtype, mstart[2], ⁎mindp;double rhs, ⁎rowcoef;

Fair Isaac Corporation Proprietary Information

308

Chapter 7: Console and Library Functions...
XPRSgetintattrib(prob, XPRS_COLS, &ncols);
mindp = (int⁎) malloc(ncols⁎sizeof(int));
rowcoef = (double⁎) malloc(ncols⁎sizeof(double));XPRSpresolverow(prob, rowtype, 2, mindo, origrowcoef, origrhs, ncols,&ncoefs, mindp, rowcoef, &rhs, &status);
if (status >= 0) {mtype = 0;
mstart[0] = 0; mstart[1] = ncoefs;
XPRSaddcuts(prob, 1, &mtype, &rowtype, &rhs, mstart, mindp,rowcoef);}
Further information
1. There are certain presolve operations that can prevent a row from being presolved exactly. If the row
contains a coefficient for a column that was eliminated due to duplicate column reductions or singleton
column reductions, the row might have to be relaxed to remain valid for the presolved problem. The
relaxation will be done automatically by the XPRSpresolverow function, but a return status of +1 will
be returned. If it is not possible to relax the row, a status of -2 will be returned instead. Likewise, it ispossible that certain dual reductions prevents the row from being presolved. In such a case a status of-3 will be returned instead.
2. If XPRSpresolverow will be used for presolving e.g. branching bounds or constraints, then dual
reductions and duplicate column reductions should be disabled, by clearing the corresponding bits of
PRESOLVEOPS. By clearing these bits, the default value for PRESOLVEOPS changes to 471.
3. If the user knows in advance which columns will have non-zero coefficients in rows that will be presolved,
it is possible to protect these individual columns through the XPRSloadsecurevecs function. This way
the Optimizer is left free to apply all possible reductions to the remaining columns.
Related topics
XPRSaddcuts, XPRSloadsecurevecs, XPRSsetbranchcuts, XPRSstorecuts.

Fair Isaac Corporation Proprietary Information309

Chapter 7: Console and Library Functions

PRINTSOL
Purpose
SynopsisWrites the current solution to the screen.
PRINTSOL [-flags]

Argumentflags

Flags to pass to PRINTSOL:s
include classical sensitivity analysis.

Related controls
Integer
MAXPAGELINES
DoubleOUTPUTTOL

Number of lines between page breaks.
Tolerance on print values.

Further information
See WRITEPRTSOL for more information.
Related topics
XPRSgetlpsol, XPRSgetmipsol, XPRSwriteprtsol.

Fair Isaac Corporation Proprietary Information

310

Chapter 7: Console and Library Functions

QUIT
Purpose
Synopsis
ExampleTerminates the Console Optimizer, returning a zero exit code to the operating system. Alias for EXIT.
QUIT
The command is called simply as:
QUIT

Further information
1. Fatal error conditions return nonzero exit values which may be of use to the host operating system.
These are described in 10.
2. If you wish to return an exit code reflecting the final solution status, then use the STOP command instead.
Related topics
STOP, XPRSsave (SAVE).

Fair Isaac Corporation Proprietary Information

311

Chapter 7: Console and Library Functions

XPRSreadbasis
Purpose
SynopsisREADBASIS

Instructs the Optimizer to read in a previously saved basis from a file.
int XPRS_CC XPRSreadbasis(XPRSprob prob, const char ⁎filename, const char⁎flags);READBASIS [-flags] [filename]Arguments
prob
filenameflags

The current problem.
A string of up to MAXPROBNAMELENGTH characters containing the file name from which
the basis is to be read. If omitted, the default problem_name is used with a .bss
extension.
Flags to pass to XPRSreadbasis (READBASIS):t
input a compact advanced form of the basis;v
use the provided filename verbatim, without appending the .bss extension;z
read a compressed input file.

Example 1 (Library)
If an advanced basis is available for the current problem the Optimizer input might be:
XPRSreadprob(prob,"filename","");
XPRSreadbasis(prob,"","");XPRSmipoptimize(prob,"");
This reads in a matrix file, inputs an advanced starting basis and maximizes the MIP.
Example 2 (Console)An equivalent set of commands for the Console user may look like:
READPROBREADBASISMIPOPTIMIZE
Further information
1. The only check done when reading compact basis is that the number of rows and columns in the basis
agrees with the current number of rows and columns.
2. XPRSreadbasis (READBASIS) will read the basis for the original problem even if the matrix has beenpresolved. The Optimizer will read the basis, checking that it is valid, and will display error messages if it
detects inconsistencies.
Related topics
XPRSloadbasis, XPRSwritebasis (WRITEBASIS).

Fair Isaac Corporation Proprietary Information

312Chapter 7: Console and Library Functions

XPRSreadbinsol
Purpose
SynopsisREADBINSOL

Reads a solution from a binary solution file.
int XPRS_CC XPRSreadbinsol(XPRSprob prob, const char ⁎filename, const char⁎flags);READBINSOL [-flags] [filename]Arguments
prob
filenameflags

The current problem.
A string of up to MAXPROBNAMELENGTH characters containing the file name from which
the solution is to be read. If omitted, the default problem_name is used with a .sol
extension.
Flags to pass to XPRSreadbinsol (READBINSOL):mload the solution as a solution for the MIP;xload the solution as a solution for the LP;v
use the provided filename verbatim, without appending the .sol extension;z
read a compressed input file.

Example 1 (Library)
A previously saved solution can be loaded into memory and a print file created from it with the following
commands:
XPRSreadprob(prob, "myprob", "");
XPRSreadbinsol(prob, "", "");XPRSwriteprtsol(prob, "", "");
Example 2 (Console)An equivalent set of commands to the above for console users would be:
READPROBREADBINSOLWRITEPRTSOL
Related topics
XPRSgetlpsol, XPRSgetmipsol, XPRSwritebinsol (WRITEBINSOL), XPRSwritesol(WRITESOL), XPRSwriteprtsol (WRITEPRTSOL).

Fair Isaac Corporation Proprietary Information

313

Chapter 7: Console and Library Functions

XPRSreaddirs
Purpose
Synopsis

READDIRS

Reads a directives file to help direct the global search.
int XPRS_CC XPRSreaddirs(XPRSprob prob, const char ⁎filename);
READDIRS [filename]Arguments
prob
filename

Related controls
DoublePSEUDOCOSTThe current problem.
A string of up to MAXPROBNAMELENGTH characters containing the file name from which
the directives are to be read. If omitted (or NULL), the default problem_name is used witha .dir extension.

Default pseudo cost in node degradation estimation.

Example 1 (Library)
The following example reads in directives from the file sue.dir for use with the problem, steve:
XPRSreadprob(prob,"steve","");
XPRSreaddirs(prob,"sue");
XPRSmipoptimize(prob,"");
Example 2 (Console)
READPROBREADDIRSMIPOPTIMIZE
This is the most usual form at the console. It will attempt to read in a directives file with the current
problem name and an extension of .dir.

Fair Isaac Corporation Proprietary Information314

Chapter 7: Console and Library Functions

Further information
1. Directives cannot be read in after a model has been presolved, so unless presolve has been disabled by
setting PRESOLVE to 0, this command must be issued before XPRSmipoptimize (MIPOPTIMIZE).
2. Directives can be given relating to priorities, forced branching directions, pseudo costs and model cuts.
There is a priority value associated with each global entity. The lower the number, the more likely theentity is to be selected for branching; the higher, the less likely. By default, all global entities have a priority
value of 500 which can be altered with a priority entry in the directives file. In general, it is advantageous
for the entity’s priority to reflect its relative importance in the model. Priority entries with values in excess
of 1000 are illegal and are ignored. A full description of the directives file format may be found in A.5.
3. By default, XPRSmipoptimize (MIPOPTIMIZE) will explore the branch expected to yield the best
integer solution from each node, irrespective of whether this forces the global entity up or down. This canbe overridden with an UP or DN entry in the directives file, which forces XPRSmipoptimize(MIPOPTIMIZE) to branch up first or down first on the specified entity.
4. Pseudo-costs are estimates of the unit cost of forcing an entity up or down. By default
XPRSmipoptimize (MIPOPTIMIZE) uses dual information to calculate estimates of the unit up anddown costs and these are added to the default pseudo costs which are set to the PSEUDOCOST control.
The default pseudo costs can be overridden by a PU or PD entry in the directives file.
5. If model cuts are used, then the specified constraints are removed from the matrix and added to the
Optimizer cut pool, and only put back in the matrix when they are violated by an LP solution at one of thenodes in the global search.
6. If creating a directives file by hand, wild cards can be used to specify several vectors at once, for example
PR x1⁎ 2 will give all global entities whose names start with x1 a priority of 2.
Related topics
XPRSloaddirs, A.5.

Fair Isaac Corporation Proprietary Information

315

Chapter 7: Console and Library Functions

XPRSreadprob
Purpose
Synopsis

READPROB

Reads an (X)MPS or LP format matrix from file.
int XPRS_CC XPRSreadprob(XPRSprob prob, const char ⁎filename, const char⁎flags);READPROB [-flags] [filename]Arguments
prob
filenameflags

The current problem.
The path and file name from which the problem is to be read. Limited to
MAXPROBNAMELENGTH characters. If omitted (console users only), the default
problem_name is used with various extensions - see below.
Flags to be passed:lonly filename.lp is searched for;v
use the provided filename verbatim, without appending the .mps, .mat or .lp
extension;z
read a compressed input file.

Related controls
Integer
EXTRACOLS
EXTRAELEMSEXTRAMIPENTSEXTRAPRESOLVEEXTRAROWSKEEPNROWSMPSECHOMPSFORMATSCALING

Number of extra columns to be allowed for.
Number of extra matrix elements to be allowed for.
Number of extra global entities to be allowed for.
Number of extra elements to allow for in presolve.
Number of extra rows to be allowed for.
Status for nonbinding rows.
Whether MPS comments are to be echoed.
Specifies format of MPS files.
Type of scaling.

DoubleMATRIXTOLSOSREFTOL

Tolerance on matrix elements.
Minimum gap between reference row entries.

StringMPSBOUNDNAMEMPSOBJNAMEMPSRANGENAME
MPSRHSNAME

The active bound name.
Name of objective function row.
Name of range.
Name of right hand side.

Example 1 (Library)
XPRSreadprob(prob,"myprob","");
This instructs the Optimizer to read an MPS format matrix from the first file found out of myprob.mat,
myprob.mps or (in LP format) myprob.lp.
Example 2 (Console)
READPROB -l
This instructs the Optimizer to read an LP format matrix from the file problem_name .lp.

Fair Isaac Corporation Proprietary Information

316

Chapter 7: Console and Library Functions

Further information
1. If no flags are given, file types are searched for in the order: .mps, .mat, .lp. Matrix files are assumed
to be in XMPS or MPS format unless their file extension is .lp in which case they must be LP files. Fileswith compressed extensions are also searched for, e.g., .mps.gz.
2. The Optimizer can read matrix files that have been compressed using one of the following formats, aslong as the command-line tool necessary to decompress the file can be located in the path: bzip2, xz,lzma, Z, zip, tar, tgz. The Optimizer has built-in support for the gz format: no external tools arenecessary to read gzipped matrix files.
3. If filename has been specified, the problem name is changed to filename, ignoring any extension.
4. XPRSreadprob (READPROB) will take as the objective function the first N type row in the matrix, unlessthe string parameter MPSOBJNAME has been set, in which case the objective row sought will be the one
named by MPSOBJNAME. Similarly, if non-blank, the string parameters MPSRHSNAME, MPSBOUNDNAME
and MPSRANGENAME specify the right hand side, bound and range sets to be taken. For example:
MPSOBJNAME="Cost"
MPSRHSNAME="RHS 1"
READPROB
The treatment of N type rows other than the objective function depends on the KEEPNROWS control. If
KEEPNROWS is 1 the rows and their elements are kept in memory; if it is 0 the rows are retained, but theirelements are removed; and if it is -1 the rows are deleted entirely. The performance impact of retaining
such N type rows will be small unless the presolve has been disabled by setting PRESOLVE to 0 prior to
optimization.
5. The Optimizer checks that the matrix file is in a legal format and displays error messages if it detects
errors. When the Optimizer has read and verified the problem, it will display summary problem statistics.
6. By default, the MPSFORMAT control is set to -1 and XPRSreadprob (READPROB) determines
automatically whether the MPS files are in free or fixed format. If MPSFORMAT is set to 0, fixed format isassumed and if it is set to 1, free format is assumed. Fields in free format MPS files are delimited by one
or more blank characters. The keywords NAME, ROWS, COLUMNS, QUADOBJ / QMATRIX, QCMATRIX,
DELAYEDROWS, MODELCUTS, SETS, RHS, RANGES, BOUNDS and ENDATAmust start in column one andno vector name may contain blanks. If a special ordered set is specified with a reference row, its namemay not be the same as that of a column. Note that numeric values which contain embedded spaces (forexample after unary minus sign) will not be read correctly unless MPSFORMAT is set to 0.
7. If the problem is not to be scaled automatically, set the parameter SCALING to 0 before issuing the
XPRSreadprob (READPROB) command.
Related topics
XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSwriteprob.

Fair Isaac Corporation Proprietary Information

317

Chapter 7: Console and Library Functions

XPRSreadslxsol
Purpose
SynopsisREADSLXSOL

Reads an ASCII solution file (.slx) created by the XPRSwriteslxsol function.
int XPRS_CC XPRSreadslxsol(XPRSprob prob, const char ⁎filename, const char⁎flags);READSLXSOL -[flags] [filename]Arguments
prob
filenameflags

The current problem.
A string of up to MAXPROBNAMELENGTH characters containing the file name to which thesolution is to be read. If omitted, the default problem_name is used with a .slx extension.
Flags to pass to XPRSwriteslxsol (WRITESLXSOL):lread the solution as an LP solution in case of a MIP problem;mread the solution as a solution for the MIP problem;aread multiple MIP solutions from the .slx file and add them to the MIP problem;v
use the provided filename verbatim, without appending the .slx extension;z
read a compressed input file.

Example 1 (Library)
XPRSreadslxsol(prob,"lpsolution","");
This loads the solution to the MIP problem if the problem contains global entities, or otherwise loads it as
an LP (barrier in case of quadratic problems) solution into the problem.
Example 2 (Console)
READSLXSOL lpsolution
Which is equivalent to the library example above.
Further information
1. When XPRSreadslxsol is called before a MIP solve, the loaded solutions will not be checked before
calling XPRSmipoptimize. By default, only the last MIP solution read from the .slx file will be stored.
Use the a flag to store all MIP solutions read from the file.
2. When using the a flag, read solutions will be queued similarly to the user of the XPRSaddmipsol
function. Each name string given by the NAME field in the .slx file will be associated with thecorresponding solution. Any registered usersolnotify callback will be fired when the solution has
been checked, and will include the read name string as one of its arguments.
3. Refer to the Appendix on Log and File Formats for a description of the ASCII Solution (.slx) File format
A.4.4.
Related topics
XPRSreadbinsol (READBINSOL), XPRSwriteslxsol (WRITESLXSOL), XPRSwritebinsol
WRITEBINSOL, XPRSreadbinsol (READBINSOL), XPRSaddmipsol, XPRSaddcbusersolnotify.

Fair Isaac Corporation Proprietary Information

318

Chapter 7: Console and Library Functions

XPRSrefinemipsol

REFINEMIPSOL

PurposeThis subroutine is deprecated and will be removed in a future release. Please use REFINEOPS instead.
Executes the MIP solution refiner.
Synopsis

int XPRS_CC XPRSrefinemipsol(XPRSprob prob, int options, const char⁎ flags,
const double solution[], double refined[], int⁎ p_status);
REFINEMIPSOL

Arguments
prob
optionsflags
solutionrefinedp_status

The current problem.
Refinement options:
Reducing MIP fractionality is priority (If bit 10 of REFINEOPS is set, will switch to0other mode if unsuccessful).
1
Reducing LP infeasibility is priority.
Flags passed to any optimization calls during refinement.
The MIP solution to refine. Must be a valid MIP solution.
The refined MIP solution in case of success
Refinement results:
0
An error has occurred1
The solution has been refined2
Current solution meets target criteria
3
Solution cannot be refined5
The solution has been refined, but MIP fractionality could not be reduced.

Further information
The function provides a mechanism to refine the MIP solution by attempting to round any fractional
global entity and by attempting to reduce LP infeasibility.
Related topics
REFINEOPS.

Fair Isaac Corporation Proprietary Information319

Chapter 7: Console and Library Functions

XPRSremovecbbariteration
Purpose

Synopsis

Removes a barrier iteration callback function previously added by XPRSaddcbbariteration. The
specified callback function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecbbariteration(XPRSprob prob, void (XPRS_CC⁎bariteration)(XPRSprob prob, void⁎ vContext, int⁎ barrier_action),void⁎ data);

Arguments
prob
The current problem.
bariteration The callback function to remove. If NULL then all bariteration callback functions
added with the given user-defined data value will be removed.
data
The data value that the callback was added with. If NULL, then the data value will not bechecked and all barrier iteration callbacks with the function pointer bariteration will
be removed.
Related topics
XPRSaddcbbariteration.

Fair Isaac Corporation Proprietary Information320

Chapter 7: Console and Library Functions

XPRSremovecbcomputerestartPurpose

Synopsis

Removes a computerestart callback function previously added by XPRSaddcbcomputerestart. The
specified callback function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecbpcomputerestart(XPRSprob prob, void (XPRS_CC⁎f_computerestart)(XPRSprob prob, void⁎ vContext), void⁎ data);

Arguments
prob
The current problem.
computerestart The callback function to remove. If NULL then all computerestart callback
functions added with the given user-defined data value will be removed.
data
The data value that the callback was added with. If NULL, then the data value will not bechecked and all computerestart callbacks with the function pointer f_computerestart
will be removed.
Related topics
XPRSaddcbcomputerestart.

Fair Isaac Corporation Proprietary Information

321

Chapter 7: Console and Library Functions

XPRSremovecbpresolve
Purpose

Synopsis

Removes a presolve callback function previously added by XPRSaddcbpresolve. The specified
callback function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecbpresolve(XPRSprob prob, void (XPRS_CC⁎presolve)(XPRSprob prob, void⁎ vContext), void⁎ data);

Arguments
prob
presolvedata

The current problem.
The callback function to remove. If NULL then all presolve callback functions added withthe given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and presolve callbacks with the function pointer presolve will be removed.

Related topics
XPRSaddcbpresolve.

Fair Isaac Corporation Proprietary Information322

Chapter 7: Console and Library Functions

XPRSremovecbbarlog
Purpose

Synopsis

Removes a Newton barrier log callback function previously added by XPRSaddcbbarlog. The specified
callback function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecbbarlog(XPRSprob prob, int (XPRS_CC⁎barlog)(XPRSprob prob, void⁎ data), void⁎ data);

Argumentsprobbarlogdata

The current problem.
The callback function to remove. If NULL then all barrier log callback functions added withthe given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all barrier log callbacks with the function pointer barlog will be removed.

Related topics
XPRSaddcbbarlog.

Fair Isaac Corporation Proprietary Information

323

Chapter 7: Console and Library Functions

XPRSremovecbchgbranch
PurposeThis subroutine is deprecated and will be removed in a future release. Please use
XPRSremovecbchgbranchobject instead.
Removes a variable branching callback function previously added by XPRSaddcbchgbranch. The
specified callback function will no longer be called after it has been removed.
Synopsis

int XPRS_CC XPRSremovecbchgbranch(XPRSprob prob, void (XPRS_CC⁎chgbranch)(XPRSprob prob, void⁎ vContext, int⁎ entity, int⁎ up,
double⁎ estdeg), void⁎ data);

Arguments
prob
chgbranchdata

The current problem.
The callback function to remove. If NULL then all variable branching callback functions
added with the given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all variable branching callbacks with the function pointer chgbranch will be
removed.

Related topics
XPRSaddcbchgbranch.

Fair Isaac Corporation Proprietary Information324

Chapter 7: Console and Library Functions

XPRSremovecbchgbranchobject
Purpose

Synopsis

Removes a callback function previously added by XPRSaddcbchgbranchobject. The specified
callback function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecbchgbranchobject(XPRSprob prob, void (XPRS_CC⁎chgbranchobject)(XPRSprob my_prob, void⁎ my_object, XPRSbranchobject
obranch, XPRSbranchobject⁎ p_newobject), void⁎ data);

Arguments
prob
The current problem.
chgbranchobject The callback function to remove. If NULL then all branch data callback functions
added with the given user-defined data value will be removed.
data
The data value that the callback was added with. If NULL, then the data value will not bechecked and all branch data callbacks with the function pointer chgbranchobject will
be removed.
Related topics
XPRSaddcbchgbranchobject

Fair Isaac Corporation Proprietary Information

325

Chapter 7: Console and Library Functions

XPRSremovecbchecktime
Purpose

Synopsis

Removes a callback function previously added by XPRSaddcbchecktime. The specified callback
function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecbchecktime(XPRSprob prob, int (XPRS_CC⁎checktime)(XPRSprob prob, void⁎ data), void⁎ data);

Arguments
prob
checktimedata

The current problem.
The callback function to remove. If NULL then all checktime callback functions addedwith the given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all checktime callbacks with the function pointer checktime will be
removed.

Related topics
XPRSaddcbchecktime

Fair Isaac Corporation Proprietary Information326

Chapter 7: Console and Library Functions

XPRSremovecbchgnodePurposeThis subroutine is deprecated and will be removed in a future release. Please use branching objects instead.
Removes a node selection callback function previously added by XPRSaddcbchgnode. The specified
callback function will no longer be called after it has been removed.
Synopsis

int XPRS_CC XPRSremovecbchgnode(XPRSprob prob, void (XPRS_CC⁎chgnode)(XPRSprob prob, void⁎ data, int⁎ nodnum), void⁎ data);

Arguments
prob
chgnodedata

The current problem.
The callback function to remove. If NULL then all node selection callback functions addedwith the given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all node selection callbacks with the function pointer chgnode will be
removed.

Related topics
XPRSaddcbchgnode

Fair Isaac Corporation Proprietary Information

327

Chapter 7: Console and Library Functions

XPRSremovecbcutlog
Purpose

Synopsis

Removes a cut log callback function previously added by XPRSaddcbcutlog. The specified callback
function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecbcutlog(XPRSprob prob, int (XPRS_CC⁎cutlog)(XPRSprob prob, void⁎ data), void⁎ data);

Arguments
prob
cutlogdata

The current problem.
The callback function to remove. If NULL then all cut log callback functions added withthe given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all cut log callbacks with the function pointer cutlog will be removed.

Related topics
XPRSaddcbcutlog

Fair Isaac Corporation Proprietary Information

328

Chapter 7: Console and Library Functions

XPRSremovecbcutmgr
PurposeThis subroutine is deprecated and will be removed in a future release. Please use
XPRSremovecboptnode instead.
Removes a cut manager callback function previously added by XPRSaddcbcutmgr. The specified
callback function will no longer be called after it has been removed.
Synopsis

int XPRS_CC XPRSremovecbcutmgr(XPRSprob prob, int (XPRS_CC⁎cutmgr)(XPRSprob prob, void⁎ data), void⁎ data);

Arguments
prob
cutmgrdata

The current problem.
The callback function to remove. If NULL then all cut manager callback functions addedwith the given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all cut manager callbacks with the function pointer cutmgr will be removed.

Related topics
XPRSaddcbcutmgr

Fair Isaac Corporation Proprietary Information329

Chapter 7: Console and Library Functions

XPRSremovecbdestroymt
Purpose

Synopsis

Removes a slave thread destruction callback function previously added by XPRSaddcbdestroymt. The
specified callback function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecbdestroymt(XPRSprob prob, void (XPRS_CC⁎destroymt)(XPRSprob prob, void⁎ vContext), void⁎ data);

Arguments
prob
destroymt
data

The current problem.
The callback function to remove. If NULL then all thread destruction callback functions
added with the given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all thread destruction callbacks with the function pointer destroymt will be
removed.

Related topics
XPRSaddcbdestroymt

Fair Isaac Corporation Proprietary Information

330

Chapter 7: Console and Library Functions

XPRSremovecbestimate
PurposeThis subroutine is deprecated and will be removed in a future release. Please use branching objects
instead, see XPRSaddcbchgbranchobject.
Removes an estimate callback function previously added by XPRSaddcbestimate. The specified
callback function will no longer be called after it has been removed.
Synopsis

int XPRS_CC XPRSremovecbestimate(XPRSprob prob, int (XPRS_CC⁎estimate)(XPRSprob prob, void⁎ vContext, int⁎ iglsel, int⁎ iprio,
double⁎ degbest, double⁎ degworst, double⁎ curval, int⁎ ifupx, int⁎
nglinf, double⁎ degsum, int⁎ nbr), void⁎ data);

Argumentsprob
estimatedata

The current problem.
The callback function to remove. If NULL then all integer solution callback functions
added with the given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all estimate callbacks with the function pointer estimate will be removed.

Related topics
XPRSaddcbestimate

Fair Isaac Corporation Proprietary Information

331

Chapter 7: Console and Library Functions

XPRSremovecbgapnotify
Purpose

Synopsis

Removes a callback function previously added by XPRSaddcbgapnotify. The specified callback
function will no longer be removed after it has been returned.
int XPRS_CC XPRSremovecbgapnotify(XPRSprob prob, void (XPRS_CC⁎gapnotify)(XPRSprob prob, void⁎ vContext, double⁎
newRelGapNotifyTarget, double⁎ newAbsGapNotifyTarget, double⁎
newAbsGapNotifyObjTarget, double⁎ newAbsGapNotifyBoundTarget), void⁎data);

Arguments
prob
gapnotifydata

The current problem.
The callback function to remove. If NULL then all gapnotify callback functions addedwith the given user-defined pointer value will be removed.
The user-defined pointer value that the callback was added with. If NULL then the pointervalue will not be checked and all the gapnotify callbacks with the function pointergapnotify will be removed.

Related topics
XPRSaddcbgapnotify.

Fair Isaac Corporation Proprietary Information

332

Chapter 7: Console and Library Functions

XPRSremovecbgloballog
Purpose

Synopsis

Removes a global log callback function previously added by XPRSaddcbgloballog. The specified
callback function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecbgloballog(XPRSprob prob, int (XPRS_CC⁎globallog)(XPRSprob prob, void⁎ vContext), void⁎ data);

Arguments
prob
globallog
data

ExampleThe current problem.
The callback function to remove. If NULL then all global log callback functions added withthe given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all global log callbacks with the function pointer globallog will be
removed.

The following code sets and removes a callback function:
XPRSsetintcontrol(prob, XPRS_MIPLOG, 3);
XPRSaddcbgloballog(prob, globalLog, NULL, 0);
XPRSmipoptimize(prob,"");
XPRSremovecbgloballog(prob,globalLog,NULL);}

Related topics
XPRSaddcbgloballog

Fair Isaac Corporation Proprietary Information

333

Chapter 7: Console and Library Functions

XPRSremovecbinfnode
Purpose

Synopsis

Removes a user infeasible node callback function previously added by XPRSaddcbinfnode. The
specified callback function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecbinfnode(XPRSprob prob, void (XPRS_CC⁎infnode)(XPRSprob prob, void⁎ data), void⁎ data);

Arguments
prob
infnodedata

The current problem.
The callback function to remove. If NULL then all user infeasible node callback functions
added with the given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all user infeasible node callbacks with the function pointer infnode will be
removed.

Related topics
XPRSaddcbinfnode

Fair Isaac Corporation Proprietary Information

334

Chapter 7: Console and Library Functions

XPRSremovecbintsol
Purpose

Synopsis

Removes an integer solution callback function previously added by XPRSaddcbintsol. The specified
callback function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecbintsol(XPRSprob prob, void (XPRS_CC⁎intsol)(XPRSprob prob, void⁎ my_object), void⁎ data);

Arguments
prob
intsoldata

The current problem.
The callback function to remove. If NULL then all integer solution callback functions
added with the given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all integer solution callbacks with the function pointer intsol will be
removed.

Related topics
XPRSaddcbintsol

Fair Isaac Corporation Proprietary Information

335

Chapter 7: Console and Library Functions

XPRSremovecblplog
Purpose

Synopsis

Removes a simplex log callback function previously added by XPRSaddcblplog. The specified callback
function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecblplog(XPRSprob prob, int (XPRS_CC ⁎lplog)(XPRSprob
prob, void⁎ data), void⁎ data);

Arguments
prob
lplog
data
ExampleThe current problem.
The callback function to remove. If NULL then all lplog callback functions added with thegiven user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all lplog callbacks with the function pointer lplog will be removed.

The following code sets and removes a callback function:
XPRSsetintcontrol(prob,XPRS_LPLOG,10);
XPRSaddcblplog(prob,lpLog,NULL,0);
XPRSreadprob(prob,"problem","");
XPRSlpoptimize(prob,"");
XPRSremovecblplog(prob,lpLog,NULL);}

Related topics
XPRSaddcblplog

Fair Isaac Corporation Proprietary Information

336

Chapter 7: Console and Library Functions

XPRSremovecbmessage
Purpose

Synopsis

Removes a message callback function previously added by XPRSaddcbmessage. The specified callback
function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecbmessage(XPRSprob prob, void (XPRS_CC⁎message)(XPRSprob prob, void⁎ vContext, const char⁎ msg, int len,int msgtype), void⁎ data);

Arguments
prob
messagedata

The current problem.
The callback function to remove. If NULL then all message callback functions added withthe given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all message callbacks with the function pointer message will be removed.

Related topics
XPRSaddcbmessage

Fair Isaac Corporation Proprietary Information

337

Chapter 7: Console and Library Functions

XPRSremovecbmipthread
Purpose

Synopsis

Removes a callback function previously added by XPRSaddcbmipthread. The specified callback
function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecbmipthread(XPRSprob prob, void (XPRS_CC⁎mipthread)(XPRSprob master_prob, void⁎ vContext, XPRSprob prob),
void⁎ data);

Arguments
prob
mipthreaddata

The current problem.
The callback function to remove. If NULL then all variable branching callback functions
added with the given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all variable branching callbacks with the function pointer mipthread will be
removed.

Related topics
XPRSaddcbmipthread

Fair Isaac Corporation Proprietary Information

338

Chapter 7: Console and Library Functions

XPRSremovecbnewnode
Purpose

Synopsis

Removes a new-node callback function previously added by XPRSaddcbnewnode. The specified
callback function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecbnewnode(XPRSprob prob, void (XPRS_CC⁎newnode)(XPRSprob my_prob, void⁎ my_object, int parentnode, int
newnode, int branch), void⁎ data);

Arguments
prob
newnodedata

The current problem.
The callback function to remove. If NULL then all separation callback functions addedwith the given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all separation callbacks with the function pointer newnode will be removed.

Related topics
XPRSaddcbnewnode

Fair Isaac Corporation Proprietary Information

339

Chapter 7: Console and Library Functions

XPRSremovecbnodecutoff
Purpose

Synopsis

Removes a node-cutoff callback function previously added by XPRSaddcbnodecutoff. The specified
callback function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecbnodecutoff(XPRSprob prob, void (XPRS_CC⁎nodecutoff)(XPRSprob my_prob, void ⁎my_object, int nodnum), void⁎data);

Arguments
prob
The current problem.
nodecutoff The callback function to remove. If NULL then all node-cutoff callback functions addedwith the given user-defined data value will be removed.
data
The data value that the callback was added with. If NULL, then the data value will not bechecked and all node-cutoff callbacks with the function pointer nodecutoff will be
removed.
Related topics
XPRSaddcbnodecutoff

Fair Isaac Corporation Proprietary Information

340

Chapter 7: Console and Library Functions

XPRSremovecboptnode
Purpose

Synopsis

Removes a node-optimal callback function previously added by XPRSaddcboptnode. The specified
callback function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecboptnode(XPRSprob prob, void (XPRS_CC⁎optnode)(XPRSprob my_prob, void ⁎my_object, int ⁎feas), void⁎ data);

Arguments
prob
optnodedata

The current problem.
The callback function to remove. If NULL then all node-optimal callback functions addedwith the given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all node-optimal callbacks with the function pointer optnode will be
removed.

Related topics
XPRSaddcboptnode

Fair Isaac Corporation Proprietary Information

341

Chapter 7: Console and Library Functions

XPRSremovecbpreintsol
Purpose

Synopsis

Removes a pre-integer solution callback function previously added by XPRSaddcbpreintsol. The
specified callback function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecbpreintsol(XPRSprob prob, void (XPRS_CC⁎preintsol)(XPRSprob my_prob, void ⁎my_object, int soltype, int⁎ifreject, double ⁎cutoff), void⁎ data);

Arguments
prob
preintsoldata

The current problem.
The callback function to remove. If NULL then all user infeasible node callback functions
added with the given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all user infeasible node callbacks with the function pointer preintsol will
be removed.

Related topics
XPRSaddcbpreintsol

Fair Isaac Corporation Proprietary Information

342

Chapter 7: Console and Library Functions

XPRSremovecbprenode
Purpose

Synopsis

Removes a preprocess node callback function previously added by XPRSaddcbprenode. The specified
callback function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecbprenode(XPRSprob prob, void (XPRS_CC⁎prenode)(XPRSprob prob, void⁎ my_object, int⁎ nodinfeas), void⁎data);

Arguments
prob
prenodedata

The current problem.
The callback function to remove. If NULL then all preprocess node callback functions
added with the given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all preprocess node callbacks with the function pointer prenode will be
removed.

Related topics
XPRSaddcbprenode

Fair Isaac Corporation Proprietary Information

343

Chapter 7: Console and Library Functions

XPRSremovecbsepnode
PurposeThis subroutine is deprecated and will be removed in a future release. Please use branching objects
instead, see XPRSaddcbchgbranchobject
Removes a pre-integer solution callback function previously added by XPRSaddcbsepnode. The
specified callback function will no longer be called after it has been removed.
Synopsis

int XPRS_CC XPRSremovecbsepnode(XPRSprob prob, int (XPRS_CC⁎sepnode)(XPRSprob prob, void⁎ vContext, int ibr, int iglsel, int
ifup, double curval), void⁎ data);

Arguments
prob
sepnodedata

The current problem.
The callback function to remove. If NULL then all separation callback functions addedwith the given user-defined data value will be removed.
The data value that the callback was added with. If NULL, then the data value will not bechecked and all separation callbacks with the function pointer sepnode will be removed.

Related topics
XPRSaddcbsepnode

Fair Isaac Corporation Proprietary Information344

Chapter 7: Console and Library Functions

XPRSremovecbusersolnotify
Purpose

Synopsis

Removes a user solution notification callback previously added by XPRSaddcbusersolnotify. The
specified callback function will no longer be called after it has been removed.
int XPRS_CC XPRSremovecbusersolnotify(XPRSprob prob, void (XPRS_CC⁎usersolnotify)(XPRSprob my_prob, void⁎ my_object, const char⁎solname, int status), void⁎ data);

Arguments
prob
The current problem.
usersolnotify The callback function to remove. If NULL then all user solution notification callback
functions added with the given user defined data value will be removed.
data
The data value that the callback was added with. If NULL, then the data value will not bechecked and all integer solution callbacks with the function pointer usersolnotify will
be removed.
Related topics
XPRSaddcbusersolnotify.

Fair Isaac Corporation Proprietary Information

345

Chapter 7: Console and Library Functions

XPRSrepairinfeas
Purpose
Synopsis

Provides a simplified interface for XPRSrepairweightedinfeas.
int XPRS_CC XPRSrepairinfeas (XPRSprob prob, int ⁎p_status, char penalty,
char phase2, char flags, double lepref, double gepref, double lbpref,
double ubpref, double delta);

Arguments
prob
p_status

penaltyphase2flags
leprefgepreflbprefubprefdelta

Related controls
Integer
DEFAULTALG

The current problem.
The status after the relaxation:0
relaxed optimum found;1
relaxed problem is infeasible;2
relaxed problem is unbounded;3
solution of the relaxed problem regarding the original objective is nonoptimal;
4
error (when return code is nonzero);
5
numerical instability;
analysis of an infeasible relaxation was performed, but the relaxation is feasible.
6
The type of penalties created from the preferences:ceach penalty is the reciprocal of the preference (default);s
the penalties are placed in the scaled problem.
Controls the second phase of optimization:ouse the objective sense of the original problem (default);xmaximize the relaxed problem using the original objective;fskip optimization regarding the original objective;nminimize the relaxed problem using the original objective;iif the relaxation is infeasible, generate an irreducible infeasible subset for the
analys of the problem;aif the relaxation is infeasible, generate all irreducible infeasible subsets for the
analys of the problem.
Specifies if the global search should be done:g
do the global search (default);lsolve as a linear model ignoring the discreteness of variables.
Preference for relaxing the less or equal side of row.
Preference for relaxing the greater or equal side of a row.
Preferences for relaxing lower bounds.
Preferences for relaxing upper bounds.
The relaxation multiplier in the second phase -1. For console use -d value. A positive
value means a relative relaxation by multiplying the first phase objective with (delta-1),
while a negative value means an absolute relaxation, by adding abs(delta) to the firstphase objective.

Forced algorithm selection (default for repairinfeas is primal).

Example
READPROB MYPROB.LP
REPAIRINFEAS -a -d 0.002
This example reads in an infeasible problem and identifies a solution which violates the rows and bounds
the least. It then fixes the measure of violations to this value multiplied by 1.002 to slightly increase theFair Isaac Corporation Proprietary Information

346

Chapter 7: Console and Library Functions

freedom in the problem and optimizes the relaxed problem using the original objective function.
Further information
1. A row or bound is relaxed by introducing a new nonnegative variable that will contain the infeasibility of
the row or bound. Suppose for example that row aT x = b is relaxed from below. Then a new variable(infeasibility breaker) s ≥ 0 is added to the row, which becomes aT x +s = b. Observe that aT x may now
take smaller values than b. To minimize such violations, the weighted sum of these new variables isminimized.
2. A preference of 0 results in the row or bound not being relaxed.
3. A negative preference indicates that a quadratic penalty cost should be applied. This can specified on a
per constraint side or bound basis.
4. Note that the set of preferences are scaling independent.
5. If a feasible solution is identified for the relaxed problem, with a sum of violations p, then the sum ofviolations is restricted to be no greater than (1+delta)p, and the problem is optimized with respect tothe original objective function. A nonzero delta increases the freedom of the original problem.
6. Note that on some problems, slight modifications of delta may affect the value of the original objective
drastically.
7. The default value for delta in the console is 0.001.
8. Note that because of their special associated modeling properties, binary and semi-continuous variables
are not relaxed.
9. The default algorithm for the first phase is the simplex algorithm, since the primal problem can be
efficiently warm started in case of the extended problem. These may be altered by setting the value ofcontrol DEFAULTALG.
10. If penalty is set such that each penalty is the reciprocal of the preference, the following rules areapplied while introducing the auxiliary variables:

Preference

Affects

Relaxation

Cost if pref.>0

Cost if pref.<0

lepref= rowsaT x - aux_var = b

1/lepref⁎aux_var

1/lepref⁎aux_var2

lepref<= rowsaT x - aux_var <= b

1/lepref⁎aux_var

1/lepref⁎aux_var2

gepref= rowsaT x + aux_var = b

1/gepref⁎aux_var

1/gepref⁎aux_var2

gepref>= rowsaT x + aux_var >= b

1/gepref⁎aux_var

1/gepref⁎aux_var2

ubprefupper bounds

xi - aux_var <= u1/ubpref⁎aux_var

1/ubpref⁎aux_var2

lbpreflower bounds

xi + aux_var >= l

1/lbpref⁎aux_var

1/lbpref⁎aux_var2

11. If an irreducible infeasible set (IIS) has been identified, the generated IIS(s) are accessible through the IIS
retrieval functions, see NUMIIS and XPRSgetiisdata.
Related topics
XPRSrepairweightedinfeas, 6.1.4.

Fair Isaac Corporation Proprietary Information

347

Chapter 7: Console and Library Functions

XPRSrepairweightedinfeas
Purpose

Synopsis

By relaxing a set of selected constraints and bounds of an infeasible problem, it attempts to identify a’solution’ that violates the selected set of constraints and bounds minimally, while satisfying all otherconstraints and bounds. Among such solution candidates, it selects one that is optimal regarding to theoriginal objective function. For the console version, see REPAIRINFEAS.
int XPRS_CC XPRSrepairweightedinfeas(XPRSprob prob, int ⁎ p_status, const
double lepref[], const double gepref[], const double lbpref[], const
double ubpref[], char phase2, double delta, const char ⁎flags);

Arguments
prob
p_status

leprefgepreflbprefubprefphase2

delta
flags

The current problem.
The status after the relaxation:1
relaxed problem is infeasible;2
relaxed problem is unbounded;3
solution of the relaxed problem regarding the original objective is nonoptimal;
4
error (when return code is nonzero);
5
numerical instability;
analysis of an infeasible relaxation was performed, but the relaxation is feasible.
6
Array of size ROWS containing the preferences for relaxing the less or equal side of row.
Array of size ROWS containing the preferences for relaxing the greater or equal side of arow.
Array of size COLS containing the preferences for relaxing lower bounds.
Array of size COLS containing preferences for relaxing upper bounds.
Controls the second phase of optimization:ouse the objective sense of the original problem (default);xmaximize the relaxed problem using the original objective;fskip optimization regarding the original objective;nminimize the relaxed problem using the original objective;iif the relaxation is infeasible, generate an irreducible infeasible subset for the
analys of the problem;aif the relaxation is infeasible, generate all irreducible infeasible subsets for the
analys of the problem.
The relaxation multiplier in the second phase -1.
Specifies flags to be passed to the Optimizer.

Related controls
DoublePENALTYVALUE

The weighted sum of violations if a solution is identified to the relaxed problem.

Fair Isaac Corporation Proprietary Information

348

Chapter 7: Console and Library Functions

Further information
1. A row or bound is relaxed by introducing a new nonnegative variable that will contain the infeasibility of
the row or bound. Suppose for example that row aT x = b is relaxed from below. Then a new variable(’infeasibility breaker’) s ≥ 0 is added to the row, which becomes aT x +s = b. Observe that aT x may now
take smaller values than b. To minimize such violations, the weighted sum of these new variables isminimized.
2. A preference of 0 results in the row or bound not being relaxed. The higher the preference, the more
willing the modeller is to relax a given row or bound.
3. The weight of each infeasibility breaker in the objective minimizing the violations is 1/p, where p is thepreference associated with the infeasibility breaker. Thus the higher the preference is, the lower a penalty
is associated with the infeasibility breaker while minimizing the violations.
4. If a feasible solution is identified for the relaxed problem, with a sum of violations p, then the sum ofviolations is restricted to be no greater than (1+delta)p, and the problem is optimized with respect tothe original objective function. A nonzero delta increases the freedom of the original problem.
5. Note that on some problems, slight modifications of delta may affect the value of the original objective
drastically.
6. The default value for delta in the console is 0.001.
7. Note that because of their special associated modeling properties, binary and semi-continuous variables
are not relaxed.
8. If pflags is set such that each penalty is the reciprocal of the preference, the following rules are applied
while introducing the auxiliary variables:

Pref. array

Affects

Relaxation

Cost if pref.>0

Cost if pref.<0

lepref= rowsaT x - aux_var = b

1/lrp⁎aux_var

1/lrp⁎aux_var2

lepref<= rowsaT x - aux_var <= b

1/lrp⁎aux_var

1/lrp⁎aux_var2

gepref= rowsaT x + aux_var = b

1/grp⁎aux_var

1/grp⁎aux_var2

gepref>= rowsaT x + aux_var >= b

1/grp⁎aux_var

1/grp⁎aux_var2

ubprefupper bounds

xi - aux_var <= u1/ubp⁎aux_var

1/ubp⁎aux_var2

lbpreflower bounds

xi + aux_var >= l

1/lbp⁎aux_var

1/lbp⁎aux_var2

9. If an irreducible infeasible set (IIS) has been identified, the generated IIS(s) are accessible through the IIS
retrieval functions, see NUMIIS and XPRSgetiisdata.
Related topics
XPRSrepairinfeas (REPAIRINFEAS), XPRSrepairweightedinfeasbounds, 6.1.4.

Fair Isaac Corporation Proprietary Information349

Chapter 7: Console and Library Functions

XPRSrepairweightedinfeasbounds
Purpose

Synopsis

REPAIRINFEAS

An extended version of XPRSrepairweightedinfeas that allows for bounding the level of relaxation
allowed.
int XPRS_CC XPRSrepairweightedinfeasbounds(XPRSprob prob, int ⁎ p_status,
const double lepref[], const double gepref[], const double lbpref[],
const double ubpref[], const double lerelax[], const double
gerelax[], const double lbrelax[], const double ubrelax[], charphase2, double delta, const char ⁎flags);
REPAIRINFEAS -[pflags] -[oflags] -[gflags] -[lrp value] -[grp value] -[lbpvalue] -[ubp value] -[lrb value] -[grb value] -[lbb value] -[ubbvalue] -[d value] -[r]Arguments
prob
p_status

leprefgepreflbprefubpreflerelax
gerelax
lbrelax
ubrelax
phase2

delta
flags

The current problem.
The status after the relaxation:1
relaxed problem is infeasible;2
relaxed problem is unbounded;3
solution of the relaxed problem regarding the original objective is nonoptimal;
4
error (when return code is nonzero);
5
numerical instability;
analysis of an infeasible relaxation was performed, but the relaxation is feasible.
6
Array of size ROWS containing the preferences for relaxing the less or equal side of row.
For the console use -lrp value.
Array of size ROWS containing the preferences for relaxing the greater or equal side of arow. For the console use -grp value.
Array of size COLS containing the preferences for relaxing lower bounds. For the console
use -lbp value.
Array of size COLS containing preferences for relaxing upper bounds. For the console use-ubp value.
Array of size ROWS containing the upper bounds on the amount the less or equal side of arow can be relaxed. For the console use -lrb value.
Array of size ROWS containing the upper bounds on the amount the greater or equal sideof a row can be relaxed. For the console use -grb value.
Array of size COLS containing the upper bounds on the amount the lower bounds can berelaxed. For the console use -lbb value.
Array of size COLS containing the upper bounds on the amount the upper bounds can berelaxed. For the console use -ubb value.
Controls the second phase of optimization:ouse the objective sense of the original problem (default);xmaximize the relaxed problem using the original objective;fskip optimization regarding the original objective;nminimize the relaxed problem using the original objective;iif the relaxation is infeasible, generate an irreducible infeasible subset for the
analys of the problem;aif the relaxation is infeasible, generate all irreducible infeasible subsets for the
analys of the problem.
The relaxation multiplier in the second phase -1.
Specifies flags to be passed to the Optimizer.

Fair Isaac Corporation Proprietary Information

350

Chapter 7: Console and Library Functionsr

If a summary of the violated variables and constraints should be printed after the relaxedsolution is determined.

Related controls
DoublePENALTYVALUE

The weighted sum of violations if a solution is identified to the relaxed problem.

Further information
1. The console command REPAIRINFEAS assumes that all preferences are 1 by default. Use the options-lrp, -grp, -lbp or -ubp to change them. The default limit on the maximum allowed relaxation per row
or bound in plus infinity.
2. A row or bound is relaxed by introducing a new nonnegative variable that will contain the infeasibility of
the row or bound. Suppose for example that row aT x = b is relaxed from below. Then a new variable(’infeasibility breaker’) s ≥ 0 is added to the row, which becomes aT x +s = b. Observe that aT x may now
take smaller values than b. To minimize such violations, the weighted sum of these new variables isminimized.
3. A preference of 0 results in the row or bound not being relaxed. The higher the preference, the more
willing the modeller is to relax a given row or bound.
4. A negative preference indicates that a quadratic penalty cost should be applied. This can specified on a
per constraint side or bound basis.
5. If a feasible solution is identified for the relaxed problem, with a sum of violations p, then the sum ofviolations is restricted to be no greater than (1+delta)p, and the problem is optimized with respect tothe original objective function. A nonzero delta increases the freedom of the original problem.
6. Note that on some problems, slight modifications of delta may affect the value of the original objective
drastically.
7. The default value for delta in the console is 0.001.
8. Note that because of their special associated modeling properties, binary and semi-continuous variables
are not relaxed.
9. Given any row j with preferences lrp=lepref[j] and grp=gepref[j], or variable i with boundpreferences ubp=ubpref[i] and lbp=lbpref[i], the following rules are applied while introducing
the auxiliary variables:

Preference

Affects

Relaxation

Cost if pref.>0

Cost if pref.<0

lrp= rowsaT x- aux_var = b

1/lrp⁎aux_var

1/lrp⁎aux_var2

lrp<= rowsaT x - aux_var <= b

1/lrp⁎aux_var

1/lrp⁎aux_var2

grp= rowsaT x + aux_var = b

1/grp⁎aux_var

1/grp⁎aux_var2

grp>= rowsaT x + aux_var >= b

1/grp⁎aux_var

1/grp⁎aux_var2

ubp

upper bounds

xi - aux_var <= u1/ubp⁎aux_var

1/ubp⁎aux_var2

lbp

lower bounds

xi + aux_var >= l

1/lbp⁎aux_var

1/lbp⁎aux_var2

10. Only positive bounds are applied; a zero or negative bound is ignored and the amount of relaxation
allowed for the corresponding row or bound is not limited. The effect of a zero bound on a row or boundwould be equivalent with not relaxing it, and can be achieved by setting its preference array value to zero
instead, or not including it in the preference arrays.
11. If an irreducible infeasible set (IIS) has been identified, the generated IIS(s) are accessible through the IIS
retrieval functions, see NUMIIS and XPRSgetiisdata.

Fair Isaac Corporation Proprietary Information

351

Chapter 7: Console and Library Functions

Related topics
XPRSrepairinfeas (REPAIRINFEAS), 6.1.4.

Fair Isaac Corporation Proprietary Information352

Chapter 7: Console and Library Functions

XPRSrestore
Purpose

SynopsisRESTORE

Restores the Optimizer’s data structures from a file created by XPRSsave (SAVE). Optimization may thenrecommence from the point at which the file was created.
int XPRS_CC XPRSrestore(XPRSprob prob, const char ⁎probname, const char⁎flags);RESTORE [probname] [flags]

Arguments
prob
probnameflags

The current problem.
A string of up to MAXPROBNAMELENGTH characters containing the problem name.
Additional flagshDo not restore hardware information from the file;
use the provided filename verbatim, without appending the .svf extension.
v

Example 1 (Library)
XPRSrestore(prob,"","");
Example 2 (Console)
RESTORE
Further information
1. This routine restores the data structures from the file problem_name.svf that was created by a previous
execution of XPRSsave (SAVE). Note that .svf files are particular to the release of the Optimizer used
to create them. They can only be read using the same major release of the Optimizer that was used tocreate them.
2. (Console) The main use for XPRSsave (SAVE) and XPRSrestore (RESTORE) is to enable the user tointerrupt a long optimization run using CTRL-C, and save the Optimizer status with the ability to restart itlater from where it left off. It might also be used to save the optimal status of a problem when the user
then intends to implement several uses of XPRSalter (ALTER) on the problem, re-optimizing each timefrom the saved status.
Related topics
XPRSalter (ALTER), XPRSsave (SAVE).

Fair Isaac Corporation Proprietary Information

353

Chapter 7: Console and Library Functions

XPRSrhssa
Purpose

Synopsis

Returns upper and lower sensitivity ranges for specified right hand side (RHS) function coefficients. If the
RHS coefficients are varied within these ranges the current basis remains optimal and the reduced costs
remain valid.
int XPRS_CC XPRSrhssa(XPRSprob prob, int nrows, const int rowind[], double
lower[], double upper[]);Arguments
prob
nrows
rowindlower
upper
ExampleThe current problem.
The number of RHS coefficients for which sensitivity ranges are required.
Integer array of length nrows containing the indices of the rows whose RHS coefficients
sensitivity ranges are required.
Double array of length nrows where the RHS lower range values are to be returned.
Double array of length nrows where the RHS upper range values are to be returned.

Here we obtain the RHS ranges for the three columns: 2, 6 and 8:
rowind[0] = 2; rowind[1] = 8; rowind[2] = 6;
XPRSrhssa(prob,3,rowind,lower,upper);After which lower and upper contain:
lower[0] = 5.0; upper[0] = 7.0;
lower[1] = 3.8; upper[1] = 5.2;
lower[2] = 5.7; upper[2] = 1e+20;
Meaning that the current basis remains optimal when 5.0 ≤ rhs2 , 3.8 ≤ rhs8 ≤ 5.2 and 5.7 ≤ rhs6 , rhsi
being the RHS coefficient of row i.

Further information
XPRSrhssa can only be called when an optimal solution to the current LP has been found. It cannot be
used when the problem is MIP presolved.
Related topics
XPRSobjsa, XPRSbndsa.

Fair Isaac Corporation Proprietary Information354

Chapter 7: Console and Library Functions

XPRSsave, XPRSsaveas
Purpose

SynopsisSAVE

Saves the current data structures, i.e. matrices, control settings and problem attribute settings to file andterminates the run so that optimization can be resumed later.
int XPRS_CC XPRSsave(XPRSprob prob);
int XPRS_CC XPRSsaveas(XPRSprob prob, const char ⁎filename);
SAVE

Arguments
prob
filename

The current problem.
The name of the file (without .svf) to save to.

Example 1 (Library)
XPRSsave(prob);
Example 2 (Console)
SAVE
Further information
1. The data structures are written to the file problem_name.svf. Optimization may recommence from thesame point when the data structures are restored by a call to XPRSrestore (RESTORE). Note that the.svf files created are particular to the release of the Optimizer used to create them. They can only beread using the same release Optimizer as used to create them.
2. The function XPRSsaveas is equivalent to XPRSsave with the exception of allowing to adjust the nameof the file created. The name of the file must not be greater than MAXPROBNAMELENGTH.
Related topics
XPRSrestore (RESTORE).

Fair Isaac Corporation Proprietary Information

355

Chapter 7: Console and Library Functions

XPRSscalePurpose
Synopsis

SCALE

Re-scales the current matrix.
int XPRS_CC XPRSscale(XPRSprob prob, const int rowscale[], const int
colscale[]);
SCALE

Arguments
prob
rowscalecolscale
Related controls
Integer
SCALING

The current problem.
Integer array of size ROWS containing the powers of 2 with which to scale the rows, or
NULL if not required.
Integer array of size COLS containing the powers of 2 with which to scale the columns, or
NULL if not required.

Type of scaling.

Example 1 (Library)
XPRSreadprob(prob,"jovial","");XPRSalter(prob,"serious");
XPRSscale(prob,NULL,NULL);
XPRSlpoptimize(prob,"");
This reads the MPS file jovial.mat, modifies it according to instructions in the file serious.alt,
rescales the matrix and seeks the minimum objective value.
Example 2 (Console)
The equivalent set of commands for the Console user would be:
READPROB jovial
ALTER serious
SCALE
LPOPTIMIZE
Further information
1. If rowscale and colscale are both non-NULL then they will be used to scale the matrix. Otherwise thematrix will be scaled according to the control SCALING. This routine may be useful when the current
matrix has been modified by calls to routines such as XPRSalter (ALTER), XPRSchgmcoef and
XPRSaddrows.
2. XPRSscale (SCALE) cannot be called if the current matrix is presolved.
Related topics
XPRSalter (ALTER), XPRSreadprob (READPROB).

Fair Isaac Corporation Proprietary Information

356

Chapter 7: Console and Library Functions

XPRSsetbranchbounds
Purpose

Synopsis

Specifies the bounds previously stored using XPRSstorebounds that are to be applied in order tobranch on a user global entity. This routine can only be called from the user separate callback function,
XPRSaddcbsepnode.
int XPRS_CC XPRSsetbranchbounds(XPRSprob prob, void ⁎bounds);

Arguments
prob
boundsExampleThe current problem.
Pointer previously defined in a call to XPRSstorebounds that references the stored
bounds to be used to separate the node.

This example defines a user separate callback function for the global search:
XPRSaddcbsepnode(prob,nodeSep,NULL,0);
where the function nodeSep is defined as follows:
int nodeSep(XPRSprob prob, void ⁎obj, int ibr, int iglsel,
int ifup, double curval){
void ⁎index;
double dbd;}

if( ifup ){dbd = ceil(curval);
XPRSstorebounds(prob, 1, &iglsel, "L", &dbd, &index);}else{
dbd = floor(curval);
XPRSstorebounds(prob, 1, &iglsel, "U", &dbd, &index);}
XPRSsetbranchbounds(prob, index);
return 0;

Related topics
XPRSloadcuts, XPRSaddcbestimate, XPRSaddcbsepnode, XPRSstorebounds, Section 5.9.

Fair Isaac Corporation Proprietary Information

357

Chapter 7: Console and Library Functions

XPRSsetbranchcuts
Purpose

Synopsis

Specifies the pointers to cuts in the cut pool that are to be applied in order to branch on a user global
entity. This routine can only be called from the user separate callback function, XPRSaddcbsepnode.
int XPRS_CC XPRSsetbranchcuts(XPRSprob prob, int ncuts, const XPRScut
cutind[]);Arguments
prob
ncuts
cutindThe current problem.
Number of cuts to apply.
Array containing the pointers to the cuts in the cut pool that are to be applied. Typicallyobtained from XPRSstorecuts.

Related topics
XPRSgetcpcutlist, XPRSaddcbestimate, XPRSaddcbsepnode, XPRSstorecuts, Section 5.9.

Fair Isaac Corporation Proprietary Information

358

Chapter 7: Console and Library Functions

XPRSsetcheckedmodePurposeYou can use this function to disable some of the checking and validation of function calls and function
call parameters for calls to the Xpress Optimizer API. This checking is relatively lightweight but disablingit can improve performance in cases where non-intensive Xpress Optimizer functions are called
repeatedly in a short space of time.
Please note: after disabling function call checking and validation, invalid usage of Xpress Optimizer
functions may not be detected and may cause the Xpress Optimizer process to behave unexpectedly or
crash. It is not recommended that you disable function call checking and validation during application
development.

Synopsis

int XPRS_CC XPRSsetcheckedmode(int checkedmode);

Argument
checkedmodePass as 0 to disable much of the validation for all Xpress function calls from the current
process. Pass 1 to re-enable validation. By default, validation is enabled.

Related topics
XPRSgetcheckedmode.

Fair Isaac Corporation Proprietary Information359

Chapter 7: Console and Library Functions

XPRSsetdblcontrol
Purpose
Synopsis

Sets the value of a given double control parameter.
int XPRS_CC XPRSsetdblcontrol(XPRSprob prob, int control, double value);

Arguments
prob
controlvalue

The current problem.
Control parameter whose value is to be set. A full list of all controls may be found in 8, orfrom the list in the xprs.h header file.
Value to which the control parameter is to be set.

Related topics
XPRSgetdblcontrol, XPRSsetintcontrol, XPRSsetstrcontrol.

Fair Isaac Corporation Proprietary Information

360

Chapter 7: Console and Library Functions

XPRSsetdefaultcontrol
Purpose
Synopsis

SETDEFAULTCONTROL

Sets a single control to its default value.
int XPRS_CC XPRSsetdefaultcontrol(XPRSprob prob, int control);
SETDEFAULTCONTROL controlname

Arguments
prob
The current problem.
control
Integer, double or string control parameter whose default value is to be set.
controlname Integer, double or string control parameter whose default value is to be set.
ExampleThe following turns off presolve to solve a problem, before resetting it to its default value and solving it
again:XPRSsetintcontrol(prob, XPRS_PRESOLVE, 0);
XPRSmipoptimize(prob, "");XPRSwriteprtsol(prob);
XPRSsetdefaultcontrol(prob, XPRS_PRESOLVE);
XPRSmipoptimize(prob, "");

Further information
A full list of all controls may be found in Chapter 8, or from the list in the xprs.h header file.
Related topics
XPRSsetdefaults, XPRSsetintcontrol, XPRSsetdblcontrol, XPRSsetstrcontrol.

Fair Isaac Corporation Proprietary Information

361

Chapter 7: Console and Library Functions

XPRSsetdefaults
Purpose

Synopsis

Sets all controls to their default values. Must be called before the problem is read or loaded by
XPRSreadprob, XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp.
int XPRS_CC XPRSsetdefaults(XPRSprob prob);
SETDEFAULTS

Argument
prob
ExampleSETDEFAULTS

The current problem.

The following turns off presolve to solve a problem, before resetting the control defaults, reading it andsolving it again:
XPRSsetintcontrol(prob, XPRS_PRESOLVE, 0);
XPRSmipoptimize(prob, "");XPRSwriteprtsol(prob);
XPRSsetdefaults(prob);
XPRSreadprob(prob);
XPRSmipoptimize(prob, "");

Further information
Can only be called when not currently solving a problem.
Related topics
XPRSsetdefaultcontrol, XPRSsetintcontrol, XPRSsetdblcontrol, XPRSsetstrcontrol.

Fair Isaac Corporation Proprietary Information

362

Chapter 7: Console and Library Functions

XPRSsetindicators
Purpose

Synopsis

Specifies that a set of rows in the matrix will be treated as indicator constraints during a global search.
An indicator constraint is made of a condition and a constraint. The condition is of the type"bin = value", where bin is a binary variable and value is either 0 or 1. The constraint is any
matrix row (may be linear, quadratic or general nonlinear). During global search, a row configured as anindicator constraint is enforced only when condition holds, that is only if the indicator variable bin has
the specified value. Note that every row may only get assigned a single indicator variable and term. If a
row needs to be activated by multiple different terms, the row needs to be duplicated so that each term
can be assigned to a distinct row. If the indicator variable should be changed, the old term needs to bedeleted first (by calling XPRSdelindicators or by calling this function with a comps argument of 0)
before assigning a new one.
int XPRS_CC XPRSsetindicators(XPRSprob prob, int nrows, const int rowind[],const int colind[], const int complement[]);Arguments
prob
nrows
rowindThe current problem.
The number of indicator constraints.
Integer array of length nrows containing the indices of the rows that define the constraint
part for the indicator constraints.
colindInteger array of length nrows containing the column indices of the indicator variables.
complement Integer array of length nrows with the complement flags:0
not an indicator constraint (in this case the corresponding entry in the colind
array is ignored);1
for indicator constraints with condition "bin = 1";-1
for indicator constraints with condition "bin = 0";

ExampleThis sets the first two matrix rows as indicator rows in the global problem prob; the first row controlled bycondition x4=1 and the second row controlled by condition x5=0 (assuming x4 and x5 correspond tocolumns indices 4 and 5).
int rowind[] = {0,1};
int colind[] = {4,5};
int complement[] = {1,-1};...
XPRSsetindicators(prob,2,rowind,colind,complement);
XPRSmipoptimize(prob,"");

Further information
Indicator rows must be set up before solving the problem. Any indicator row will be removed from thematrix after presolve and added to a special pool. An indicator row will be added back into the active
matrix only when its associated condition holds. An indicator variable can be used in multiple indicatorrows and can also appear in normal rows and in the objective function.
Related topics
XPRSgetindicators, XPRSdelindicators.

Fair Isaac Corporation Proprietary Information

363

Chapter 7: Console and Library Functions

XPRSsetintcontrol, XPRSsetintcontrol64
Purpose
Synopsis

Sets the value of a given integer control parameter.
int XPRS_CC XPRSsetintcontrol(XPRSprob prob, int control, int value);
int XPRS_CC XPRSsetintcontrol64(XPRSprob prob, int control, XPRSint64
value);

Arguments
prob
controlvalue
ExampleThe current problem.
Control parameter whose value is to be set. A full list of all controls may be found in 8, orfrom the list in the xprs.h header file.
Value to which the control parameter is to be set.

The following sets the control PRESOLVE to 0, turning off the presolve facility prior to optimization:
XPRSsetintcontrol(prob, XPRS_PRESOLVE, 0);
XPRSlpoptimize(prob, "");

Further information
Some of the integer control parameters, such as SCALING, are bitmaps, with each bit controlling different
behavior. Bit 0 has value 1, bit 1 has value 2, bit 2 has value 4, and so on.
Related topics
XPRSgetintcontrol, XPRSsetdblcontrol, XPRSsetstrcontrol.

Fair Isaac Corporation Proprietary Information364

Chapter 7: Console and Library Functions

XPRSsetlogfile
Purpose
Synopsis

This directs all Optimizer output to a log file.
int XPRS_CC XPRSsetlogfile(XPRSprob prob, const char ⁎filename);
SETLOGFILE filename

Arguments
prob
filename

ExampleSETLOGFILE

The current problem.
A string of up to MAXPROBNAMELENGTH characters containing the file name to which all
logging output should be written. If set to NULL, redirection of the output will stop and allscreen output will be turned back on (except for library users where screen output isalways turned off).

The following directs output to the file logfile.log:
XPRSinit(NULL);
XPRScreateprob(&prob);
XPRSsetlogfile(prob,"logfile.log");

Further information
1. It is recommended that a log file be set up for each problem being worked on, since it provides a meansfor obtaining any errors or warnings output by the Optimizer during the solution process.
2. If output is redirected with XPRSsetlogfile all screen output will be turned off.
3. Alternatively, an output callback can be defined using XPRSaddcbmessage, which will be called every
time a line of text is output. To discard all output messages the OUTPUTLOG integer control can be set to0.
Related topics
XPRSaddcbmessage.

Fair Isaac Corporation Proprietary Information

365

Chapter 7: Console and Library Functions

XPRSsetmessagestatus
Purpose
Synopsis

Manages suppression of messages.
int XPRS_CC XPRSsetmessagestatus(XPRSprob prob, int msgcode, int status);

Arguments
prob
msgcodestatusExampleThe problem for which message msgcode is to have its suppression status changed;
pass NULL if the message should have the status apply globally to all problems.
The id number of the message. Refer to the section 10 for a list of possible message
numbers.
Non-zero if the message is not suppressed; 0 otherwise. If a value for status is not
supplied in the command-line call then the console Optimizer prints the value of the
suppression status to screen i.e., non-zero if the message is not suppressed; 0 otherwise.

Attempting to optimize a problem that has no matrix loaded gives error 91. The following code uses
XPRSsetmessagestatus to suppress the error message:
XPRScreateprob(&prob);
XPRSsetmessagestatus(prob,91,0);
XPRSlpoptimize(prob,"");

Further information
If a message is suppressed globally then the message can only be enabled for any problem once theglobal suppression is removed with a call to XPRSsetmessagestatus with prob passed as NULL.
Related topics
XPRSgetmessagestatus.

Fair Isaac Corporation Proprietary Information

366

Chapter 7: Console and Library Functions

XPRSsetprobname
Purpose
Synopsis

SETPROBNAME

Sets the current default problem name. This command is rarely used.
int XPRS_CC XPRSsetprobname(XPRSprob prob, const char ⁎probname);
SETPROBNAME probname

Arguments
prob
probname

The current problem.
A string of up to MAXPROBNAMELENGTH characters containing the problem name.

Example
READPROB bob
LPOPTIMIZESETPROBNAME jim
READPROB
The above will read the problem bob and then read the problem jim.
Related topics
XPRSreadprob (READPROB), XPRSgetprobname, MAXPROBNAMELENGTH.

Fair Isaac Corporation Proprietary Information

367

Chapter 7: Console and Library Functions

XPRSsetstrcontrol
Purpose
Synopsis

Used to set the value of a given string control parameter.
int XPRS_CC XPRSsetstrcontrol(XPRSprob prob, int control, const char⁎value);Arguments
prob
controlvalue
ExampleThe current problem.
Control parameter whose value is to be set. A full list of all controls may be found in 8, orfrom the list in the xprs.h header file.
A string containing the value to which the control is to be set (plus a null terminator).

The following sets the control MPSOBJNAME to "Profit":
XPRSsetstrcontrol(prob, XPRS_MPSOBJNAME, "Profit");

Related topics
XPRSgetstrcontrol, XPRSsetdblcontrol, XPRSsetintcontrol.

Fair Isaac Corporation Proprietary Information

368

Chapter 7: Console and Library Functions

STOP
Purpose

Synopsis
ExampleTerminates the Console Optimizer, returning an exit code to the operating system. This is useful for batch
operations.
STOP
The following example inputs a matrix file, lama.mat, runs a global optimization on it and then exits:
READPROB lama
MIPOPTIMIZE
STOP

Further information
This command may be used to terminate the Optimizer as with the QUIT command. It sets an exit value
which may be inspected by the host operating system or invoking program.
Related topics
QUIT.

Fair Isaac Corporation Proprietary Information369

Chapter 7: Console and Library Functions

XPRSstorebounds
Purpose
SynopsisStores bounds for node separation using user separate callback function.
int XPRS_CC XPRSstorebounds(XPRSprob prob, int nbounds, const int colind[],const char bndtype[], const double bndval[], void ⁎⁎p_bounds);

Arguments
prob
nbounds
colindbndtypebndvalp_bounds
ExampleThe current problem.
Number of bounds to store.
Array containing the column indices.
Array containing the bounds types:
U
indicates an upper bound;L
indicates a lower bound.
Array containing the bound values.
Pointer that the user will use to reference the stored bounds for the Optimizer in
XPRSsetbranchbounds.

This example defines a user separate callback function for the global search:
XPRSaddcbsepnode(prob,nodeSep,void,0);
where the function nodeSep is defined as follows:
int nodeSep(XPRSprob prob, void ⁎obj int ibr, int iglsel,
int ifup, double curval){
void ⁎index;
double dbd;}

if( ifup ){dbd = ceil(curval);
XPRSstorebounds(prob, 1, &iglsel, "L", &dbd, &index);}else{
dbd = floor(curval);
XPRSstorebounds(prob, 1, &iglsel, "U", &dbd, &index);}
XPRSsetbranchbounds(prob, index);
return 0;

Related topics
XPRSsetbranchbounds, XPRSaddcbestimate, XPRSaddcbsepnode.

Fair Isaac Corporation Proprietary Information

370

Chapter 7: Console and Library Functions

XPRSstorecuts, XPRSstorecuts64
Purpose

SynopsisStores cuts into the cut pool, but does not apply them to the current node. These cuts must be explicitly
loaded into the matrix using XPRSloadcuts or XPRSsetbranchcuts before they become active.
int XPRS_CC XPRSstorecuts(XPRSprob prob, int ncuts, int nodups, const int
cuttype[], const char rowtype[], const double rhs[], const int
start[], XPRScut cutind[], const int colind[], const double
cutcoef[]);int XPRS_CC XPRSstorecuts64(XPRSprob prob, int ncuts, int nodups, const int
cuttype[], const char rowtype[], const double rhs[], const XPRSint64
start[], XPRScut cutind[], const int colind[], const double
cutcoef[]);Arguments
prob
ncuts
nodupscuttyperowtyperhs
startcutindcolindcutcoef
Related controls
DoubleMATRIXTOLThe current problem.
Number of cuts to add.
0
do not exclude duplicates from the cut pool;
1
duplicates are to be excluded from the cut pool;2
duplicates are to be excluded from the cut pool, ignoring cut type.
Integer array of length ncuts containing the cut types. The cut types can be any integer
and are used to identify the cuts.
Character array of length ncuts containing the row types:
Lindicates a ≤ row;E
indicates an = row;G
indicates a ≥ row.
Double array of length ncuts containing the right hand side elements for the cuts.
Integer array containing offsets into the colind and dmtval arrays indicating the startof each cut. This array is of length ncuts+1 with the last element start[ncuts] being
where cut ncuts+1 would start.
Array of length ncuts where the pointers to the cuts will be returned.
Integer array of length start[ncuts] containing the column indices in the cuts.
Double array of length start[ncuts] containing the matrix values for the cuts.

Tolerance on matrix elements.

Fair Isaac Corporation Proprietary Information

371

Chapter 7: Console and Library Functions

Further information
1. XPRSstorecuts can be used to eliminate duplicate cuts. If the nodups parameter is set to 1, the cutpool will be checked for duplicate cuts with a cut type identical to the cuts being added. If a duplicate cut
is found the new cut will only be added if its right hand side value makes the cut stronger. If the cut in thepool is weaker than the added cut it will be removed unless it has been applied to an active node of thetree. If nodups is set to 2 the same test is carried out on all cuts, ignoring the cut type.
2. XPRSstorecuts returns a list of the cuts added to the cut pool in the cutind array. If the cut is not
added to the cut pool because a stronger cut exits a NULL will be returned. The cutind array can bepassed directly to XPRSloadcuts or XPRSsetbranchcuts to load the most recently stored cuts into
the matrix.
3. The columns and elements of the cuts must be stored contiguously in the colind and dmtval arrays
passed to XPRSstorecuts. The starting point of each cut must be stored in the start array. To
determine the length of the final cut the start array must be of length ncuts+1 with the last element of
this array containing where the cut ncuts+1 would start.
Related topics
XPRSloadcuts XPRSsetbranchcuts, XPRSaddcbestimate, XPRSaddcbsepnode, 5.9.

Fair Isaac Corporation Proprietary Information

372

Chapter 7: Console and Library Functions

XPRSstrongbranch
Purpose

Synopsis

Performs strong branching iterations on all specified bound changes. For each candidate bound change,
XPRSstrongbranch performs dual simplex iterations starting from the current optimal solution of thebase LP, and returns both the status and objective value reached after these iterations.
int XPRS_CC XPRSstrongbranch(XPRSprob prob, const int nbounds, const int
colind[], const char bndtype[], const double bndval[], const int
iterlim, double objval[], int status[]);Arguments
prob
nbounds
colindbndtypebndvaliterlimobjvalstatusExampleThe current problem.
Number of bound changes to try.
Integer array of size nbounds containing the indices of the columns on which the bounds
will change.
Character array of length nbounds indicating the type of bound to change:
U
indicates change the upper bound;L
indicates change the lower bound;B
indicates change both bounds, i.e. fix the column.
Double array of length nbounds giving the new bound values.
Maximum number of LP iterations to perform for each bound change.
Objective value of each LP after performing the strong branching iterations.
Status of each LP after performing the strong branching iterations, as detailed for the
LPSTATUS attribute.

Suppose that the current LP relaxation has two integer columns (columns 0 and 1 which are fractionals
at 0.3 and 1.5, respectively, and we want to perform strong branching in order to choose which to branch
on. This could be done in the following way:
int colind[] = { 0, 0, 1, 1 };char bndtype[] = "LULU";
double bndval[] = {1, 0, 2, 1};
double objval[4];int status[4];...
XPRSstrongbranch(prob, 4, colind, bndtype, bndval, 1000,
objval, status);

Further information
Prior to calling XPRSstrongbranch, the current LP problem must have been solved to optimality and an
optimal basis must be available.

Fair Isaac Corporation Proprietary Information

373

Chapter 7: Console and Library Functions

XPRSstrongbranchcb
Purpose

Synopsis

Performs strong branching iterations on all specified bound changes. For each candidate bound change,
XPRSstrongbranchcb performs dual simplex iterations starting from the current optimal solution of
the base LP, and returns both the status and objective value reached after these iterations.
int XPRS_CC XPRSstrongbranchcb(XPRSprob prob, const int nbounds, const int
colind[], const char bndtype[], const double bndval[], const int
iterlim, double dsbobjval[], int status[], int (XPRS_CC⁎callback)(XPRSprob prob, void⁎ data, int bndidx), void⁎ data);

Arguments
prob
nbounds
colindbndtypebndvaliterlimobjvalstatuscallbackdatabndidxThe current problem.
Number of bound changes to try.
Integer array of size nbounds containing the indices of the columns on which the bounds
will change.
Character array of length nbounds indicating the type of bound to change:
U
indicates change the upper bound;L
indicates change the lower bound;B
indicates change both bounds, i.e. fix the column.
Double array of length nbounds giving the new bound values.
Maximum number of LP iterations to perform for each bound change.
Objective value of each LP after performing the strong branching iterations.
Status of each LP after performing the strong branching iterations, as detailed for the
LPSTATUS attribute.
Function to be called after each strong branch has been reoptimized.
User context to be provided for callback.
The index of bound for which callback is called.

Further information
Prior to calling XPRSstrongbranchcb, the current LP problem must have been solved to optimality andan optimal basis must be available.
XPRSstrongbranchcb is an extension to XPRSstrongbranch. If identical input arguments areprovided both will return identical results, the difference being that for the case of
XPRSstrongbranchcb the callback function is called at the end of each LP reoptimization.
For each branch optimized, the LP can be interrogated: the LP status of the branch is available throughchecking LPSTATUS, and the objective function value is available through LPOBJVAL. It is possible toaccess the full current LP solution by using XPRSgetlpsol.

Fair Isaac Corporation Proprietary Information

374

Chapter 7: Console and Library Functions

TUNE
Purpose

Synopsis

This command can start a tuner session for the current problem. In this case, the tuner will solve theproblem multiple times while evaluating a list of control settings and promising combinations of them.
When finished, the tuner will select and set the best control setting on the problem. Note that thedirection of optimization is given by OBJSENSE. This command can also handle the input and output of
tuner method files.
TUNE [-flags] [subcommand [filename]]

Arguments
flags

subcommand

filename

Flags to pass to TUNE, which specify whether to tune the current problem as an LP or a
MIP problem, and the algorithm for solving the LP problem or the initial LP relaxation of
the MIP. The flags are optional. If the argument includes:lwill tune the problem as an LP (mutually exclusive with flag g);gwill tune the problem as a MIP (mutually exclusive with flag l);dwill use the dual simplex method;pwill use the primal simplex method;bwill use the barrier method;nwill use the network simplex method.
Subcommand to pass to TUNE for handling tuner method files. It can be one of:pm / printmethod
Print the tuner method on the console.
wm / writemethod
Write the tuner method to a file.
rm / readmethod
Read the tuner method from a file.
probsetTune a set of problems.
mipsetTune a set of MIP problems.
lpset
Tune a set of LP problems.
Tuner method file or problem set file. This is an optional argument of the subcommand.

Related controls
Integer
TUNERHISTORYTUNERMAXTIMETUNERMETHODTUNERMODE
TUNEROUTPUT
TUNERPERMUTE
TUNERTARGET
TUNERTHREADS

Whether to reuse and append to previous tuner result.
Maximum total time allowed for the tuner.
Selects a factory tuner method.
Enable or disable the tuner.
Whether to write tuner result and logs to file system.
Number of permutations to solve with each control setting.
Defines the criterion by which individual runs are compared.
Number of threads to be used by the tuner.

StringTUNERMETHODFILE A file which contains a user-defined tuner method.
TUNEROUTPUTPATH The root path for all tuner result output.
TUNERSESSIONNAME When defined, will override the problem name within the tuner.
Example 1 (Console)
TUNE -lThis tunes the current problem as an LP problem.
Example 2 (Console)
TUNE pm

Fair Isaac Corporation Proprietary Information

375

Chapter 7: Console and Library Functions

TUNE printmethod
Both commands print the tuner method to the console.
Example 3 (Console)
TUNE rm method
TUNE readmethod

methodBoth commands read the tuner method from the method.xtm file.
Example 4 (Console)
TUNE wm method
TUNE writemethod method
Both commands write the tuner method to the method.xtm file.
Example 5 (Console)
TUNE probset problem.set
Tune a set of problems defined by the problem.set file.
Example 6 (Console)
TUNE lpset problem.set
Tune a set of LP problems defined by the problem.set file.
Further information
1. When both flags and subcommand are provided with the TUNE command, the subcommand will beignored.
2. Please refer to Section 5.12 for a detailed guide of how to use the tuner.
3. Please refer to Section 5.12.8 for more information about tuning a set of problems.

Fair Isaac Corporation Proprietary Information

376

Chapter 7: Console and Library Functions

XPRStune
Purpose

Synopsis

This function begins a tuner session for the current problem. The tuner will solve the problem multiple
times while evaluating a list of control settings and promising combinations of them. When finished, thetuner will select and set the best control setting on the problem. Note that the direction of optimization is
given by OBJSENSE.
int XPRS_CC XPRStune(XPRSprob prob, const char ⁎flags);

Arguments
prob
flags

The current problem.
Flags to pass to XPRStune, which specify whether to tune the current problem as an LPor a MIP problem, and the algorithm for solving the LP problem or the initial LP
relaxation of the MIP. The flags are optional. If the argument includes:lwill tune the problem as an LP (mutually exclusive with flag g);gwill tune the problem as a MIP (mutually exclusive with flag l);dwill use the dual simplex method;pwill use the primal simplex method;bwill use the barrier method;nwill use the network simplex method.

ExampleXPRStune(prob, "dp");
This tunes the current problem. The problem type is automatically determined. If it is an LP problem, it
will be solved with a concurrent run of the dual and primal simplex method. If it is a MIP problem, theinitial LP relaxation of the MIP will be solved with a concurrent run of primal and dual simplex.
Further information
1. Please refer to command TUNE for a list of related controls.
2. Please refer to Section 5.12 for a detailed guide of how to use the tuner.

Fair Isaac Corporation Proprietary Information

377

Chapter 7: Console and Library Functions

XPRStunerreadmethod
Purpose
Synopsis

This function loads a user defined tuner method from the given file.
int XPRS_CC XPRStunerreadmethod(XPRSprob prob, const char⁎ methodfile);

Arguments
prob
methodfile

The current problem.
The method file name, from which the tuner can load a user-defined tuner method.

ExampleXPRStunerreadmethod(prob, "method.xtm");
This loads the tuner method from the method.xtm file.
Further information
Please refer to Section 5.12.2 for more information about the tuner method, and Appendix A.8 for theformat of the tuner method file.

Fair Isaac Corporation Proprietary Information

378

Chapter 7: Console and Library Functions

XPRStunerwritemethod
Purpose
Synopsis

This function writes the current tuner method to a given file or prints it to the console.
int XPRS_CC XPRStunerwritemethod(XPRSprob prob, const char⁎ methodfile);

Arguments
prob
methodfile

The current problem.
The method file name, to which the tuner will write the current tuner method. If the input
is stdout or STDOUT, then the tuner will print the method to the console instead.

Example 1 (Library)
XPRStunerwritemethod(prob, "method.xtm");
This writes the tuner method to the method.xtm file.
Example 2 (Library)
XPRStunerwritemethod(prob, "stdout");
This prints the tuner method to the console.
Further information
Please refer to Section 5.12.2 for more information about the tuner method, and Appendix A.8 for theformat of the tuner method file.

Fair Isaac Corporation Proprietary Information

379

Chapter 7: Console and Library Functions

XPRSunloadprob
Purpose

Synopsis

Unloads and frees all memory associated with the current problem. It also invalidates the current
problem (as opposed to reading in an empty problem).
int XPRS_CC XPRSunloadprob(XPRSprob prob);

Argumentprob

The current problem.

Related topics
XPRSreadprob, XPRSloadlp, XPRSloadglobal, XPRSloadqglobal, XPRSloadqp.

Fair Isaac Corporation Proprietary Information

380

Chapter 7: Console and Library Functions

XPRSwritebasis
Purpose
Synopsis

WRITEBASIS

Writes the current basis to a file for later input into the Optimizer.
int XPRS_CC XPRSwritebasis(XPRSprob prob, const char ⁎filename, const char⁎flags);WRITEBASIS [-flags] [filename]Arguments
prob
filenameflags

The current problem.
A string of up to MAXPROBNAMELENGTH characters containing the file name from which
the basis is to be written. If omitted, the default problem_name is used with a .bss
extension.
Flags to pass to XPRSwritebasis (WRITEBASIS):i
output the internal presolved basis;t
output a compact advanced form of the basis;n
output basis file containing current solution values;houtput values in single precision;p
output values in full precision (obsolete as this is now default behavior);v
use the provided filename verbatim, without appending the .bss extension;z
compress the output file.

Example 1 (Library)
After an LP has been solved it may be desirable to save the basis for future input as an advanced starting
point for other similar problems. This may save significant amounts of time if the LP is complex. The
Optimizer input commands might then be:
XPRSreadprob(prob, "myprob", "");
XPRSlpoptimize(prob, "");XPRSwritebasis(prob, "", "");
This reads in a matrix file, maximizes the LP and saves the basis. Loading a basis for a MIP problem candisable some MIP presolve operations which can result in a large increase in solution times so it isgenerally not recommended.
Example 2 (Console)An equivalent set of commands to the above for console users would be:
READPROBLPOPTIMIZE
WRITEBASIS
Further information
1. The t flag is only useful for later input to a similar problem using the t flag with XPRSreadbasis(READBASIS).
2. If the Newton barrier algorithm has been used for optimization then crossover must have been performed
before there is a valid basis. This basis can then only be used for restarting the simplex (primal or dual)
algorithm.
3. XPRSwritebasis (WRITEBASIS) will output the basis for the original problem even if the matrix has
been presolved.
Related topics
XPRSgetbasis, XPRSreadbasis (READBASIS).

Fair Isaac Corporation Proprietary Information

381

Chapter 7: Console and Library Functions

XPRSwritebinsol
Purpose
Synopsis

WRITEBINSOL

Writes the current MIP or LP solution to a binary solution file for later input into the Optimizer.
int XPRS_CC XPRSwritebinsol(XPRSprob prob, const char ⁎filename, const char⁎flags);WRITEBINSOL [-flags] [filename]Arguments
prob
filenameflags

The current problem.
A string of up to MAXPROBNAMELENGTH characters containing the file name to which thesolution is to be written. If omitted, the default problem_name is used with a .sol
extension.
Flags to pass to XPRSwritebinsol (WRITEBINSOL):moutput the MIP solution;x
output the LP solution;v
use the provided filename verbatim, without appending the .sol extension;z
compress the output file.

Example 1 (Library)
After an LP has been solved or a MIP solution has been found the solution can be saved to file. If a MIP
solution exists it will be written to file unless the -x flag is passed to XPRSwritebinsol (WRITEBINSOL)
in which case the LP solution will be written. The Optimizer input commands might then be:
XPRSreadprob(prob, "myprob", "");XPRSmipoptimize(prob, "");XPRSwritebinsol(prob, "", "");
This reads in a matrix file, maximizes the MIP and saves the last found MIP solution.
Example 2 (Console)An equivalent set of commands to the above for console users would be:
READPROBMIPOPTIMIZE
WRITEBINSOL
Related topics
XPRSgetlpsol, XPRSgetmipsol, XPRSreadbinsol (READBINSOL), XPRSwritesol (WRITESOL),
XPRSwriteprtsol (WRITEPRTSOL).

Fair Isaac Corporation Proprietary Information

382

Chapter 7: Console and Library Functions

XPRSwritedirs
Purpose
Synopsis

WRITEDIRS

Writes the global search directives from the current problem to a directives file.
int XPRS_CC XPRSwritedirs(XPRSprob prob, const char ⁎filename);
WRITEDIRS [filename]Arguments
prob
filename

The current problem.
A string of up to MAXPROBNAMELENGTH characters containing the file name to which thedirectives should be written. If omitted (or NULL), the default problem_name is used witha .dir extension.

Further information
If the problem has been presolved, only the directives for columns in the presolved problem will be written
to file.
Related topics
XPRSloaddirs, A.5.

Fair Isaac Corporation Proprietary Information

383

Chapter 7: Console and Library Functions

XPRSwriteprob
Purpose
SynopsisWrites the current problem to an MPS or LP file.
int XPRS_CC XPRSwriteprob(XPRSprob prob, const char ⁎filename, const char⁎flags);WRITEPROB [-flags] [filename]Arguments
prob
filename

flags

ExampleWRITEPROB

The current problem.
A string of up to MAXPROBNAMELENGTH characters to contain the file name to which the
problem is to be written. If omitted, the default problem_name is used with a .mps
extension, unless the l flag is used in which case the extension is .lp.
Flags, which can be one or more of the following:o
one element per line;noutput the scaled problem;sscrambled vector names;loutput in LP format;p
output values in full precision (obsolete as this is now default behavior);tomit the Xpress header in LP format;v
use the provided filename verbatim, without appending the .mps or .lp
extension;z
compress the output file.

The following example outputs the current problem in LP format with scrambled vector names to the fileproblem_name.lp.
XPRSwriteprob(prob, "", "ls");

Further information
1. If XPRSloadlp, XPRSloadglobal, XPRSloadqglobal or XPRSloadqp is used to obtain a matrix
then there is no association between the objective function and the N rows in the matrix and so aseparate N row (called __OBJ___) is created when you do an XPRSwriteprob (WRITEPROB). Also if
you do an XPRSreadprob (READPROB) and then change either the objective row or the N row in thematrix corresponding to the objective row, you lose the association between the two and the __OBJ___
row is created when you do an XPRSwriteprob (WRITEPROB). To remove the objective row from thematrix when doing an XPRSreadprob (READPROB), set KEEPNROWS to -1 before XPRSreadprob(READPROB).
2. Warning: If XPRSreadprob (READPROB) is used to input a problem, then the input file will be overwritten
by XPRSwriteprob (WRITEPROB) if a new filename is not specified.
3. The Optimizer can write compressed matrix files in the following formats, as long as the command-line
tool necessary to compress the file can be located in the path: bzip2, xz, lzma, Z, zip, tar, tgz. The
Optimizer has built-in support for the gz format: no external tools are necessary to write gzipped matrix
files.
Related topics
XPRSreadprob (READPROB).

Fair Isaac Corporation Proprietary Information

384

Chapter 7: Console and Library Functions

XPRSwriteprtsol
Purpose
Synopsis

WRITEPRTSOL

Writes the current solution to a fixed format ASCII file, problem_name .prt.
int XPRS_CC XPRSwriteprtsol(XPRSprob prob, const char ⁎filename, const char⁎flags);WRITEPRTSOL [filename] [-flags]

Arguments
prob
filenameflags

The current problem.
A string of up to MAXPROBNAMELENGTH characters containing the file name to which thesolution is to be written. If omitted, the default problem_name will be used. The extension.prt will be appended.
Flags for XPRSwriteprtsol (WRITEPRTSOL) are:x
write the LP solution instead of the current MIP solution;v
use the provided filename verbatim, without appending the .prt extension;z
write a compressed output file;sinclude classical sensitivity analysis.

Related controls
Integer
MAXPAGELINES
DoubleOUTPUTTOL

Number of lines between page breaks.
Tolerance on print values.

Example 1 (Library)This example shows the standard use of this function, outputting the solution to file immediately
following optimization:
XPRSreadprob(prob, "myprob", "");
XPRSlpoptimize(prob, "");XPRSwriteprtsol(prob, "", "");
Example 2 (Console)
READPROBLPOPTIMIZEPRINTSOL
are the equivalent set of commands for Console users who wish to view the output directly on screen.
Further information
1. (Console) There is an equivalent command PRINTSOL which outputs the same information to the screen.
The format is the same as that output to file by XPRSwriteprtsol (WRITEPRTSOL), except that theuser is permitted to enter a response after each screen if further output is required.
2. The fixed width ASCII format created by this command is not as readily useful as that produced by
XPRSwritesol (WRITESOL). The main purpose of XPRSwriteprtsol (WRITEPRTSOL) is to create afile that can be sent directly to a printer. The format of this fixed format ASCII file is described inAppendix A.
3. To create a prt file for a previously saved solution, the solution must first be loaded with the
XPRSreadbinsol (READBINSOL) function.
Related topics
XPRSgetlpsol, XPRSgetmipsol, XPRSreadbinsol XPRSwritebinsol, XPRSwritesol, A.4.

Fair Isaac Corporation Proprietary Information

385

Chapter 7: Console and Library Functions

XPRSwriteslxsol
Purpose

Synopsis

WRITESLXSOLCreates an ASCII solution file (.slx) using a similar format to MPS files. These files can be read backinto the Optimizer using the XPRSreadslxsol function.
int XPRS_CC XPRSwriteslxsol(XPRSprob prob, const char ⁎filename, const char⁎flags);WRITESLXSOL -[flags] [filename]Arguments
prob
filenameflags

The current problem.
A string of up to MAXPROBNAMELENGTH characters containing the file name to which thesolution is to be written. If omitted, the default problem_name is used with a .slx
extension.
Flags to pass to XPRSwriteslxsol (WRITESLXSOL):lwrite the LP solution in case of a MIP problem;mwrite the MIP solution;p
use full precision for numerical values (obsolete as this is now default behavior);s
including slack variables;d
LP solution only: including dual variables;r
LP solution only: including reduced cost;v
use the provided filename verbatim, without appending the .slx extension;z
compress the output file.

Example 1 (Library)
XPRSwriteslxsol(prob,"lpsolution","");
This saves the MIP solution if the problem contains global entities, or otherwise saves the LP (barrier incase of quadratic problems) solution of the problem.
Example 2 (Console)
WRITESLXSOL lpsolution
Which is equivalent to the library example above.
Related topics
XPRSreadslxsol (READSLXSOL, XPRSwriteprtsol (WRITEPRTSOL), XPRSwritebinsol(WRITEBINSOL), XPRSreadbinsol (READBINSOL).

Fair Isaac Corporation Proprietary Information

386

Chapter 7: Console and Library Functions

XPRSwritesol
Purpose
Synopsis

WRITESOL

Writes the current solution to a CSV format ASCII file, problem_name.asc (and .hdr).
int XPRS_CC XPRSwritesol(XPRSprob prob, const char ⁎filename, const char⁎flags);WRITESOL [filename] [-flags]

Arguments
prob
filename

flags

Related controls
DoubleOUTPUTTOL
StringOUTPUTMASKThe current problem.
A string of up to MAXPROBNAMELENGTH characters containing the file name to which thesolution is to be written. If omitted, the default problem_name will be used. The
extensions .hdr and .asc will be appended.
Flags to control which optional fields are output:ssequence number;
n
name;
t
type;
b
basis status;aactivity;ccost (columns), slack (rows);llower bound;uupper bound;ddj (column; reduced costs), dual value (rows; shadow prices);rright hand side (rows).
If no flags are specified, all fields are output.
Additional flags:poutputs in full precision;q
only outputs vectors with nonzero optimum value;x
output the current LP solution instead of the MIP solution;z
compress the output file.

Tolerance on print values.
Mask to restrict the row and column names output to file.

Example 1 (Library)In this example the basis status is output (along with the sequence number) following optimization:
XPRSreadprob(prob, "richard", "");
XPRSlpoptimize(prob, "");XPRSwritesol(prob, "", "sb");
Example 2 (Console)
Suppose we wish to produce files containing■ the names and values of variables starting with the letter X which are nonzero and■ the names, values and right hand sides of constraints starting with CO2.

The Optimizer commands necessary to do this are:OUTPUTMASK = "X???????"WRITESOL XVALS -naq

Fair Isaac Corporation Proprietary Information

387

Chapter 7: Console and Library Functions

OUTPUTMASK = "CO2?????"WRITESOL CO2 -nar
Further information
1. The command produces two readable files: filename.hdr (the solution header file) andfilename.asc (the CSV foramt solution file). The header file contains summary information, all in one
line. The ASCII file contains one line of information for each row and column in the problem. Any fields
appearing in the .asc file will be in the order the flags are described above. The order that the flags are
specified by the user is irrelevant.
2. Additionally, the mask control OUTPUTMASK may be used to control which names are reported to the
ASCII file. Only vectors whose names match OUTPUTMASK are output. OUTPUTMASK is set by default to"????????", so that all vectors are output.
Related topics
XPRSgetlpsol, XPRSgetmipsol, XPRSwriteprtsol (WRITEPRTSOL).

Fair Isaac Corporation Proprietary Information

388

CHAPTER 8

Control Parameters
Various controls exist within the Optimizer to govern the solution procedure and the form of output. The
majority of these take integer values and act as switches between various types of behavior. The
tolerances on values are double precision, and there are a few controls which are character strings,
setting names to structures. Any of these may be altered by the user to enhance performance of the
Optimizer. However, it should be noted that the default values provided have been found to work well inpractice over a range of problems and caution should be exercised if they are changed.

8.1 Retrieving and Changing Control Values
Console Xpress users may obtain control values by issuing the control name at the Optimizer prompt, >,and hitting the RETURN key. Controls may be set using the assignment syntax:
control_name = new_value
where new_value is an integer value, double or string as appropriate. For character strings, the name must
be enclosed in single quotes and all eight characters must be given.
Users of the FICO Xpress Libraries are provided with the following set of functions for setting andobtaining control values:
XPRSgetintcontrol

XPRSgetdblcontrol

XPRSgetstrcontrol

XPRSsetintcontrol

XPRSsetdblcontrol

XPRSsetstrcontrol

It is an important point that the controls as listed in this chapter must be prefixed with XPRS_ to be usedwith the FICO Xpress Libraries and failure to do so will result in an error. An example of their usage is asfollows:
XPRSgetintcontrol(prob, XPRS_PRESOLVE, &presolve);
printf("The value of PRESOLVE is %d\n", presolve);
XPRSsetintcontrol(prob, XPRS_PRESOLVE, 1-presolve);
printf("The value of PRESOLVE is now %d\n", 1-presolve);

ALGAFTERCROSSOVER
Description

The algorithm to be used for the final clean up step after the crossover.

Type

Integer

Values12
34Automatically determined.
Dual simplex.
Primal simplex.
Concurrent.

Fair Isaac Corporation Proprietary Information

389

Chapter 8: Control Parameters

Default value

1

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE) (when the barrier isused), XPRScrossoverlpsol.

ALGAFTERNETWORK
Description

The algorithm to be used for the clean up step after the network simplex solver.

Type

Integer

Values-1
2
3

Default value-1

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE) (when network
simplex is used).

Automatically determined.
Dual simplex.
Primal simplex.

AUTOCUTTING
Description

Should the Optimizer automatically decide whether to generate cutting planes at local nodes inthe tree or not? If the CUTFREQ control is set, no automatic selection will be made and local
cutting will be enabled.

Type

Integer

Values-1
01

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

CUTDEPTH, CUTFREQ.

Automatic.
Disabled.
Enabled.

AUTOSCALING
Description

Whether the Optimizer should automatically select between different scaling algorithms. If the
SCALING control is set, no automatic scaling will be applied.

Type

Integer

Values-10123Automatic.
Disabled.
Cautious strategy. Non-standard scaling will only be selected if it appears to be clearlysuperior.
Moderate strategy.
Aggressive strategy. Standard scaling will only be selected if it appears to be clearlysuperior.

Default value-1

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

SCALING, OBJSCALEFACTOR.

Fair Isaac Corporation Proprietary Information390

Chapter 8: Control Parameters

AUTOPERTURB
Description

Simplex: This indicates whether automatic perturbation is performed. If this is set to 1, theproblem will be perturbed whenever the simplex method encounters an excessive number ofdegenerate pivot steps, thus preventing the Optimizer being hindered by degeneracies.

Type

Integer

Values0
1

Default value

1

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

No perturbation performed.
Automatic perturbation is performed.

BACKTRACKDescription

Branch and Bound: Specifies how to select the next node to work on when a full backtrack is
performed.

Type

Integer

Values

-1
1
2
3
4
5
6
7
8
9
10
11
12

Automatically determined.
Unused.
Select the node with the best estimated solution.
Select the node with the best bound on the solution.
Select the deepest node in the search tree (equivalent to depth-first search).
Select the highest node in the search tree (equivalent to breadth-first search).
Select the earliest node created.
Select the latest node created.
Select a node randomly.
Select the node whose LP relaxation contains the fewest number of infeasible global
entities.
Combination of 2 and 9.
Combination of 2 and 4.
Combination of 3 and 4.

Default value

3

Note

Note When two nodes are rated the same according to the BACKTRACK selection, a secondary
rating is performed using the method set by BACKTRACKTIE.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

BACKTRACKTIE.

BACKTRACKTIEDescription

Branch and Bound: Specifies how to break ties when selecting the next node to work on when afull backtrack is performed. The options are the same as for the BACKTRACK control.

Type

Integer

Fair Isaac Corporation Proprietary Information

391

Chapter 8: Control Parameters

Values

-1
1
2
3
4
5
6
7
8
9
10
11
12

Default selection.
Unused.
Select the node with the best estimated solution.
Select the node with the best bound on the solution.
Select the deepest node in the search tree (equivalent to depth-first search).
Select the highest node in the search tree (equivalent to breadth-first search).
Select the earliest node created.
Select the latest node created.
Select a node randomly.
Select the node whose LP relaxation contains the fewest number of infeasible global
entities.
Combination of 2 and 9.
Combination of 2 and 4.
Combination of 3 and 4.

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

BACKTRACK.

BARALG
Description

This control determines which barrier algorithm is to be used to solve the problem.

Type

Integer

Values-1
0
1
2
3Default value

-1

Note

The automatic setting uses 1 for LP and QP problems and 3 for QCQP problems. Usually thedetection of primal or dual infeasibility is more robust with settings 2 or 3, therefore, it isadvantageous to use one of these values if the model is presumably infeasible.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE), XPRSminim(MINIM), XPRSmaxim (MAXIM), XPRSglobal (GLOBAL).

Determined automatically.
Unused.
Use the infeasible-start barrier algorithm.
Use the homogeneous self-dual barrier algorithm.
Start with 2 and optionally switch to 1 during the execution.

BARCRASH
Description

Newton barrier: This determines the type of crash used for the crossover. During the crashprocedure, an initial basis is determined which attempts to speed up the crossover. A good
choice at this stage will significantly reduce the number of iterations required to crossover to an
optimal solution. The possible values increase proportionally to their time-consumption.

Type

Integer

Values0
1-6Turns off all crash procedures.
Available strategies with 1 being conservative and 6 being aggressive.

Fair Isaac Corporation Proprietary Information

392

Chapter 8: Control Parameters

Default value

4

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARDUALSTOP
Description

Newton barrier: This is a convergence parameter, representing the tolerance for dual
infeasibilities. If the difference between the constraints and their bounds in the dual problem
falls below this tolerance in absolute value, optimization will stop and the current solution will
be returned.

Type

DoubleDefault value

0 (determine automatically)

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARFREESCALE
Description

Defines how the barrier algorithm scales free variables.

Type

DoubleDefault value

1e-6

Note

When using smaller values the barrier algorithm scales free variables more aggressively which
can improve performance but may impact numerical stability.

Affects routines

XPRSlpoptimize (LPOPTIMIZE).

See also

SCALING.

BARGAPSTOP
Description

Newton barrier: This is a convergence parameter, representing the tolerance for the relative
duality gap. When the difference between the primal and dual objective function values falls
below this tolerance, the Optimizer determines that the optimal solution has been found.

Type

DoubleDefault value

0 (determine automatically)

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARGAPTARGET
Description

Newton barrier: The target tolerance for the relative duality gap. The barrier algorithm will keep
iterating until either BARGAPTARGET is satisfied or until no further improvements are possible.
In the latter case, if BARGAPSTOP is satisfied, it will declare the problem optimal.

Type

DoubleDefault value

0 (determine automatically)

Fair Isaac Corporation Proprietary Information

393

Chapter 8: Control Parameters

Note

When a solution returned by the barrier algorithm has not converged tightly enough for an
application, for example if the dual solution is not accurate enough or crossover is taking too
long, setter BARGAPTARGET to a small value often resolves the problem, without the risk of thesolve failing due to a complementarity level not being numerically achievable. Typicalsuggested values can be between 1–10 and 1–18 .

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARFAILITERLIMIT
Description

Newton barrier: The maximum number of consecutive iterations that fail to improve thesolution in the barrier algorithm.

Type

Integer

Values0>0Default value0

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Determined automaticallyMaximum number of consecutive barrier iterations allowed without progress.

BARINDEFLIMIT
Description

Newton Barrier. This limits the number of consecutive indefinite barrier iterations that will be
performed. The optimizer will try to minimize (resp. maximize) a QP problem even if the Q
matrix is not positive (resp. negative) semi-definite. However, the optimizer may detect that the
Q matrix is indefinite and this can result in the optimizer not converging. This control specifies
how many indefinite iterations may occur before the optimizer stops and reports that the
problem is indefinite. It is usual to specify a value greater than one, and only stop after a series
of indefinite matrices, as the problem may be found to be indefinite incorrectly on a few
iterations for numerical reasons.

Type

Integer

Default value

15

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARITERLIMIT
Description

Newton barrier: The maximum number of iterations. While the simplex method usually
performs a number of iterations which is proportional to the number of constraints (rows) in a
problem, the barrier method standardly finds the optimal solution to a given accuracy after anumber of iterations which is independent of the problem size. The penalty is rather that thetime for each iteration increases with the size of the problem. BARITERLIMIT specifies the
maximum number of iterations which will be carried out by the barrier.

Type

Integer

Default value

500

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Fair Isaac Corporation Proprietary Information

394

Chapter 8: Control Parameters

BARKERNEL
Description

Newton barrier: Defines how centrality is weighted in the barrier algorithm.

Type

DoubleValues>=+1.0<=-1.0

Default value

0.0

Note

Increasing this parameter may increase the number of iterations, therefore the recommended
range is [1,2] and [-2,-1].

Affects routines

XPRSlpoptimize (LPOPTIMIZE).

See also

BARALG.

Increases the emphasis on centrality when larger value is set.
Selects a value adaptively in every iteration from [+1, -BARKERNEL].

BAROBJPERTURB
Description

Defines how the barrier perturbs the objective.

Type

DoubleValues>00<0

Let the optimizer decide if the objective is perturbed or not and use the parametervalue as the scale of the perturbation.
Turn off objective perturbation.
Always perturb the objective by the absolute value of the parameter.

Default value

1e-6

Note

The perturbation scale should be set carefully with consideration to the optimality tolerance.
The parameter affects only the barrier solve.

Affects routines

XPRSlpoptimize (LPOPTIMIZE).

See also

BAROBJSCALE.

BAROBJSCALE
Description

Defines how the barrier scales the objective.

Type

DoubleValues-10>=0Default value

-1

Note

The scaling perfromed by the barrier is applied on top of any other scaling in the problem andonly affects the barrier solve.

Affects routines

XPRSlpoptimize (LPOPTIMIZE).

See also

SCALING.

Let the optimizer decide.
Scale by geometric mean.
Scale such that the largest objective coefficient’s largest element does not exceed thisnumber. In quadratic problems, the quadratic diagonal is used as reference valuses
instead of the linear objective.

Fair Isaac Corporation Proprietary Information

395

Chapter 8: Control Parameters

BARORDER
Description

Newton barrier: This controls the Cholesky factorization in the Newton-Barrier.

Type

Integer

Values0123Choose automatically.
Minimum degree method. This selects diagonal elements with the smallest number ofnonzeros in their rows or columns.
Minimum local fill method. This considers the adjacency graph of nonzeros in thematrix and seeks to eliminate nodes that minimize the creation of new edges.
Nested dissection method. This considers the adjacency graph and recursively seeks
to separate it into non-adjacent pieces.

Default value0

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARORDERTHREADS
Description

If set to a positive integer it determines the number of concurrent threads for the sparse matrix
ordering algorithm in the Newton-barrier method.

Type

Integer

Default value

0 (determine automatically)

Note

Larger values than BARCORES will be automatically reduced to the value of BARCORES.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

BARORDER, BARCORES.

BAROUTPUT
Description

Newton barrier: This specifies the level of solution output provided. Output is provided either
after each iteration of the algorithm, or else can be turned off completely by this parameter.

Type

Integer

Values0
1

Default value

1

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

No output.
At each iteration.

BARPERTURB
Description

Newton barrier: In numerically challenging cases it is often advantageous to apply
perturbations on the KKT system to improve its numerical properties. BARPERTURB controlls
how much perturbation is allowed during the barrier iterations. By default no perturbation isallowed. Set this parameter with care as larger perturbations may lead to less efficient iterates
and the best settings are problem-dependent.

Type

DoubleFair Isaac Corporation Proprietary Information

396

Chapter 8: Control Parameters

Default value0

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARREFITER
Description

Newton barrier: After terminating the barrier algorithm, further refinement steps can be
performed. Such refinement steps are especially helpful if the solution is near to the optimum
and can improve primal feasibility and decrease the complementarity gap. It is also often
advantageous for the crossover algorithm. BARREFITER specifies the maximum number ofsuch refinement iterations.

Type

Integer

Default value0

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARPRESOLVEOPS
Description

Newton barrier: This controls the Newton-Barrier specific presolve operations.

Type

Integer

Values0
1
2

Default value0

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Use standard presolve.
Extra effort is spent in barrier specific presolve.
Do full matrix eliminations (reduce matrix size).

BARPRIMALSTOP
Description

Newton barrier: This is a convergence parameter, indicating the tolerance for primal
infeasibilities. If the difference between the constraints and their bounds in the primal problem
falls below this tolerance in absolute value, the Optimizer will terminate and return the current
solution.

Type

DoubleDefault value

0 (determine automatically)

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARREGULARIZE
Description

This control determines how the barrier algorithm applies regularization on the KKT system.

Type

Integer

Fair Isaac Corporation Proprietary Information

397

Chapter 8: Control Parameters

Values

Bit
0
1
2
3

MeaningStandard regularization is turned on/off.
Reduced regularization is turned on/off. This option reduces the perturbation effect of
the standard regularization.
Forces to keep dependent rows in the KKT system.
Forces to preserve degenerate rows in the KKT system.

Default value

-1

Note

The parameter is a bit set but value -1 (the default value) is treated in a special way: if theparameter is set to -1 then the solver will automatically select the bits it deems most useful.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE), XPRSminim(MINIM), XPRSmaxim (MAXIM), XPRSglobal (GLOBAL).

BARRHSSCALE
Description

Defines how the barrier scales the right hand side.

Type

DoubleValues-10>=0Default value

-1

Note

The scaling perfromed by the barrier is applied on top of any other scaling in the problem andonly affects the barrier solve.

Affects routines

XPRSlpoptimize (LPOPTIMIZE).

See also

SCALING.

Let the optimizer decide.
Scale by geometric mean.
Scale such that the largest right hand side coefficient’s largest element does notexceed this number.

BARSOLUTION
Description

This determines whether the barrier has to decide which is the best solution found or return thesolution computed by te last barrier iteration.

Type

Integer

Values-101(callback only: do not save current soulution as the best one).
return the best solution found (in callback: let the barrier decide the current solution isthe best or not).
return the last barrier iteration (in callback: save current solution as the best solution
so far).

Default value0

Affects routines

The barrier algorithm.

Fair Isaac Corporation Proprietary Information

398

Chapter 8: Control Parameters

BARSTART
Description

Newton barrier: Controls the computation of the starting point for the barrier algorithm.

Type

Integer

Values

-1
0
1
2

3

Uses the available solution for warm-start.
Determine automatically.
Uses simple heuristics to compute the starting point based on the magnitudes of thematrix entries.
Uses the pseudoinverse of the constraint matrix to determine primal and dual initialsolutions. Less sensitive to scaling and numerically more robust, but in several caseless efficient than 1.
Uses the unit starting point for the homogeneous self-dual barrier algorithm.

Default value0

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARSTARTWEIGHT
Description

Newton barrier: This sets a weight for the warm-start point when warm-start is set for thebarrier algorithm. Using larger weight gives more emphasis for the supplied starting point.

Type

DoubleDefault value

0.85

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

BARSTART.

BARSTEPSTOP
Description

Newton barrier: A convergence parameter, representing the minimal step size. On each iterationof the barrier algorithm, a step is taken along a computed search direction. If that step size issmaller than BARSTEPSTOP, the Optimizer will terminate and return the current solution.

Type

DoubleDefault value

1.0E-16

Note

If the barrier method is making small improvements on BARGAPSTOP on later iterations, it may
be better to set this value higher, to return a solution after a close approximation to the
optimum has been found.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARTHREADS
Description

If set to a positive integer it determines the number of threads implemented to run the
Newton-barrier algorithm. If the value is set to the default value (-1), the THREADS control will
determine the number of threads used.

Type

Integer

Fair Isaac Corporation Proprietary Information

399

Chapter 8: Control Parameters

Default value-1(determined by the THREADS control)

Note

There is a practical upper limit of 50 on the number of parallel threads the optimizer will create.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

BARCORES, MIPTHREADS, CONCURRENTTHREADS, THREADS.

BARCORES
Description

If set to a positive integer it determines the number of physical CPU cores assumed to bepresent in the system by the barrier algorithm. If the value is set to the default value (-1),
Xpress will automatically detect the number of cores.

Type

Integer

Default value-1(automatically detected)

Note

The control is provided for cross-hardware reproducibility purposes. The count does not include
logical cores created by Hyper-Threading.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

BARTHREADS.

BIGM
Description

The infeasibility penalty used if the "Big M" method is implemented.

Type

DoubleDefault value

Dependent on the matrix characteristics.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BIGMMETHOD
Description

Simplex: This specifies whether to use the "Big M" method, or the standard phase I (achieving
feasibility) and phase II (achieving optimality). In the "Big M" method, the objective coefficientsof the variables are considered during the feasibility phase, possibly leading to an initial
feasible basis which is closer to optimal. The side-effects involve possible round-off errors dueto the presence of the "Big M" factor in the problem.

Type

Integer

Values0
1

Default value

1

Note

Reset by XPRSreadprob (READPROB), XPRSloadglobal, XPRSloadlp,
XPRSloadqglobal and XPRSloadqp.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

For phase I / phase II.
If "Big M" method to be used.

Fair Isaac Corporation Proprietary Information

400

Chapter 8: Control Parameters

BRANCHCHOICE
Description

Once a global entity has been selected for branching, this control determines which of the
branches is solved first.

Type

Integer

Values0123Minimum estimate branch first.
Maximum estimate branch first.
If an incumbent solution exists, solve the branch satisfied by that solution first.
Otherwise solve the minimum estimate branch first (option 0).
Solve first the branch that forces the value of the branching variable to move farther
away from the value it had at the root node. If the branching entity is not a simple
variable, solve the minimum estimate branch first (option 0).

Default value0

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

BRANCHDISJ
Description

Branch and Bound: Determines whether the optimizer should attempt to branch on general split
disjunctions during the branch and bound search.

Type

Integer

Values-10123Automatic selection of the strategy.
Disabled.
Cautious strategy. Disjunctive branches will be created only for general integers with awide range.
Moderate strategy.
Aggressive strategy. Disjunctive branches will be created for both binaries andintegers.

Default value

-1

Notes

Note
are a special form of disjunctions that can be written as
P Split disjunctions
P
m
x
≤
m
∨
m
x
≥ m0 + 1
j
j
0
j
j
j
j
The split disjunctions created by the optimizer will use a combination of binary or integer
variables xj , with integer coefficients mj .
Split disjunctions for branching will always be created with a default priority value of 400
instead of the default value of 500 for regular entity branches.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

BRANCHSTRUCTURAL
Description

Branch and Bound: Determines whether the optimizer should search for special structure in the
problem to branch on during the branch and bound search.

Type

Integer

Fair Isaac Corporation Proprietary Information

401Chapter 8: Control Parameters

Values-101Automatically determined.
Disabled.
Enabled.

Default value

-1

Notes

Structural branches will often involve branching on more than a single global entity at a time.
As a result of a structural branch, a parent node could therefore end up with more than twochild nodes, unlike the standard single entity branches.
Structural branches will always be created with a default priority value of 400 instead of thedefault value of 500 for regular entity branches.
XPRSmipoptimize (MIPOPTIMIZE).

Affects routines

BREADTHFIRST
Description

The number of nodes to include in the best-first search before switching to the local first search(NODESELECTION = 4).

Type

Integer

Default value

11

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

CACHESIZE
Description

Newton Barrier: L2 or L3 (see notes) cache size in kB (kilobytes) of the CPU. On Intel (orcompatible) platforms a value of -1 may be used to determine the cache size automatically. If
the CPU model is new then the cache size may not be correctly detected by an older release of
the software.

Type

Integer

Default value

-1

Notes

1. Specifying the correct cache size can give a significant performance advantage with the
Newton barrier algorithm. If the size is unknown, it is better to specify a smaller size.
2. If the size cannot be determined automatically, a default size of 128kB is assumed.
3. Where present, the L3 cache size should be chosen rather than the L2 cache size.
4. For multi-core CPUs, the cache is shared between a subset of the cores. The Optimizer will
divide the CACHESIZE value by the number of cores sharing the cache if >1 Barrier threads are
running.
5. Where the CPU is described as having multiple caches ie. 2x6M then the correct cache size to
use is 6M not 12M.
6. Examples:Intel Core 2 Duo E6400 (2M Cache, 2.13GHz)CACHESIZE=2048

Intel Xeon x5570 (8M Cache, 2.93GHz)CACHESIZE=8192

Intel Core 2 QX6700 ( 2x4M Cache, 2.93 GHz)CACHESIZE=4096

7. If in doubt, please contact Support for advice.

Fair Isaac Corporation Proprietary Information402

Chapter 8: Control Parameters

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

L1CACHE.

CALLBACKFROMMASTERTHREAD
Description

Branch and Bound: specifies whether the MIP callbacks should only be called on the masterthread.

Type

Integer

Values0
1

Default value0

Affects routines

XPRSmipoptimize.

Invoke callbacks on worker threads during parallel MIP;
Only ever invoke a callback on the thread that called XPRSmipoptimize.

CHOLESKYALG
Description

Newton barrier: type of Cholesky factorization used.

Type

Integer

Values

Bit
0

1

2

3

4

5

6

7

8

9

Meaningmatrix blocking:
0: automatic setting;
1: manual setting.
if manual selection of matrix blocking:
0: multi-pass;
1: single-pass.
nonseparable QP relaxation:
0: off;
1: on.
corrector weight:
0: automatic setting;
1: manual setting.
if manual selection of corrector weight:
0: off;
1: on.
refinement:
0: automatic setting;
1: manual setting.
preconditioned conjugate gradient method (PCGM):
0: PCGM off;
1: PCGM on.
Preconditioned quasi minimal residual (QMR) to refine solution:
0: QMR off;
1: QMR on.
Perform refinement on the augmented system
0: off;
1: on.
Force highest accuracy in refinement
0: off;
1: on.

Fair Isaac Corporation Proprietary Information

403

Chapter 8: Control Parameters

Default value-1 (automatic)

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

CHOLESKYTOL
Description

Newton barrier: The tolerance for pivot elements in the Cholesky decomposition of the normal
equations coefficient matrix, computed at each iteration of the barrier algorithm. If the absolutevalue of the pivot element is less than or equal to CHOLESKYTOL, it merits special treatment in
the Cholesky decomposition process.

Type

DoubleDefault value

1.0E-15

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

CLAMPING
Description

This control allows for the adjustment of returned solution values such that they are always
within bounds.

Type

Integer

Values

Bit
-1
0
1
2
3

Meaning
Determined automatically.
Adjust primal solution to always be within primal bounds. Slacks if provided will be
adjusted accordingly.
Adjust primal slack values to always be within constraint bounds.
Adjust dual solution to always be within the dual bounds implied by the slacks.
Reduced costs, if provided, will be adjusted accordingly.
Adjust reduced costs to always be within dual bounds implied by the primal solution.

Default value0

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE), XPRSminim(MINIM), XPRSmaxim (MAXIM), XPRSglobal (GLOBAL).

COMPUTE
Description

Controls whether the next solve is performed directly or on an Insight Compute Interface.

Type

Integer

Values0
1

Default value

Depends on environment

NoteThis control can only be used if Xpress is not in compute mode due to the environment variableof the same name XPRS_COMPUTE being set before initialising Xpress.

Solve locally.
Solve using an Insight Compute Interface.

The first time the control is set to 1, Xpress reads the XPRS_COMPUTE_URL environment
variable for the server address.
Once enabled, the same restrictions apply to any solves that normally applies to solves (e.g. a
restricted set of callbacks are supported).
Enabling compute mode this way does not release the license held by Xpress.

Fair Isaac Corporation Proprietary Information404

Chapter 8: Control Parameters

Affects routines

XPRSmipoptimize (MIPOPTIMIZE), XPRSlpoptimize (LPOPTIMIZE), XPRSiisfirst(IIS), XPRSrepairinfeas (REPAIRINFEAS).

COMPUTEEXECSERVICE
Description

Selects the Insight execution service that will be used for solving remote optimizations.

Type

StringDefault value

Empty stringNote

Set to the name of the execution service you want to use.

Note

When an empty string, the value from the configuration file will be used, or Insight server’s
default execution service if neither is populated.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

COMPUTEJOBPRIORITY
Description

Selects the priority that will be used for remote optimization jobs.

Type

Integer

Default value

0

Note

Possible values are from -100 to 100.

Note

A job of priority N will always get scheduled before a job of priority N-1, provided there issufficient capacity.

Note

If the value is 0, the value from the configuration file will be used, or priority 0 if neither is
specified.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

COMPUTELOG
Description

Controls how the run log is fetched when a solve is performed on an Insight Compute Interface.

Type

Integer

Values0
1
2
3

Default value

1

Note

As run log lines are fetched from the remote solve, they will be sent to the message callback or
be displayed by the solver in the console.

Run log will not be fetched
Run log will be fetched in real-time
Run log will be fetched at the end of the solve
Run log will be fetched at the end of the solve if the solve fails with an error

The run log will not be available if the control is assigned any value other than ’1’ (real-time) andthe solve is terminated from outside a callback, such as by calling XPRSinterrupt or hitting
CTRL+C in the solver console.
Affects routines

XPRSmipoptimize (MIPOPTIMIZE), XPRSlpoptimize (LPOPTIMIZE), XPRSiisfirst(IIS), XPRSrepairinfeas (REPAIRINFEAS), XPRSaddcbmessage.

Fair Isaac Corporation Proprietary Information405

Chapter 8: Control Parameters

CONFLICTCUTS
Description

Branch and Bound: Specifies how cautious or aggressive the optimizer should be whensearching for and applying conflict cuts. Conflict cuts are in-tree cuts derived from nodes foundto be infeasible or cut off, which can be used to cut off other branches of the search tree.

Type

Integer

Values-1
0
1
2
3Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE)

Automatic.
Disable conflict cuts.
Cautious application of conflict cuts.
Medium application of conflict cuts.
Aggressive application of conflict cuts.

CONCURRENTTHREADS
Description

Determines the number of threads used by the concurrent solver.

Type

Integer

Values-1>0

Default value

-1

Note

Please refer to section 5.10.1 for a detailed description of the concurrent solver.

Affects routines

XPRSlpoptimize (LPOPTIMIZE).

See also

DETERMINISTIC, DUALTHREADS, BARTHREADS, THREADS.

Determined automatically
Number of threads to use.

CORESPERCPU
Description

Used to override the detected value of the number of cores on a CPU. The cache size (either
detected or specified via the CACHESIZE control) used in Barrier methods will be divided bythis amount, and this scaled-down value will be the amount of cache allocated to each Barrier
threadType

Integer

Default value-1

Affects routines

CACHESIZE

COVERCUTS
Description

Branch and Bound: The number of rounds of lifted cover inequalities at the top node. A lifted
cover inequality is an additional constraint that can be particularly effective at reducing the sizeof the feasible region without removing potential integral solutions. The process of generatingthese can be carried out a number of times, further reducing the feasible region, albeit incurring
a time penalty. There is usually a good payoff from generating these at the top node, sincethese inequalities then apply to every subsequent node in the tree search.

Fair Isaac Corporation Proprietary Information

406

Chapter 8: Control Parameters

Type

Integer

Default value-1 — determined automatically.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

CPIALPHA
Description

decay term for confined primal integral computation.

Type

DoubleNote

This control represents the exponential decay term for computing the
OBSERVEDPRIMALINTEGRAL. The smaller it is, the more emphasis is put on the early part ofthe search. A value of 1 corresponds to computing a regular primal integral without exponential
decay. For details see Berthold and Csizmadia: The confined primal integral, Mathematical
Programming volume 188(2), pp. 523–537, 2021.

Default value1

See also

CPISCALEFACTOR, OBSERVEDPRIMALINTEGRAL.

CPUPLATFORM
Description

Newton Barrier: Selects the AMD or Intel x86 vectorization instruction set that Barrier should
run optimized code for.

Type

Integer

Values

-2
-1
0
1
2
3

Default value

-1

Note

Generic code, SSE2 and AVX optimized code will all result in the same solution path. Using
AVX2 might result in a different solution path.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Highest supported [Generic, SSE2, AVX or AVX2].
Highest supported solve path consistent code [Generic, SSE2 or AVX].
Use generic code compatible with all CPUs.
Use SSE2 optimized code.
Use AVX optimized code.
Use AVX2 optimized code.

CPUTIME
Description

How time should be measured when timings are reported in the log and when checking against
time limits

Type

Integer

Values-1
01

Default value0

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Disable the timer.
Use elapsed time.
Use process time.

Fair Isaac Corporation Proprietary Information

407

Chapter 8: Control Parameters

CRASH
Description

Simplex: This determines the type of crash used when the algorithm begins. During the crashprocedure, an initial basis is determined which is as close to feasibility and triangularity as
possible. A good choice at this stage will significantly reduce the number of iterations required
to find an optimal solution. The possible values increase proportionally to theirtime-consumption.

Type

Integer

Note

For the primal simplex algorithm the following choices are available:

Values

0
1
2
3
4
n>10

Default value

2

Note

For the dual simplex algorithm, the crash control is interpreted as a bit-vector for adjusting the
behavior of the procedure:

Values

Bit
0
1
2
3
4

Default value

2

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Turns off all crash procedures.
For singletons only (one pass).
For singletons only (multi pass).
Multiple passes through the matrix considering slacks.
Multiple ( ≤ 10) passes through the matrix but only doing slacks at the very end.
As for value 4 but performing at most n - 10 passes.

Meaning
Perform standard crash.
Perform additional numerical checks during crash.
Extend the set of column candidates for crash.
Extend the set of row candidates for crash.
Force crash, i.e., consider all suitable columns/rows as candidates for crash.

CROSSOVER
Description

Newton barrier: This control determines whether the barrier method will cross over to thesimplex method when at optimal solution has been found, to provide an end basis (seeXPRSgetbasis, XPRSwritebasis) and advanced sensitivity analysis information (seeXPRSobjsa, XPRSrhssa, XPRSbndsa).

Type

Integer

Values-1
0
1
2

Default value

-1

Note

The full primal and dual solution is available whether or not crossover is used. The crossovermust not be disabled if the barrier is used to reoptimize nodes of a MIP.
By default crossover will not be performed on QP and MIQP problems.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Determined automatically.
No crossover.
Primal crossover first.
Dual crossover first.

Fair Isaac Corporation Proprietary Information

408

Chapter 8: Control Parameters

CROSSOVERACCURACYTOL
Description

Newton barrier: This control determines how crossover adjusts the default relative pivot
tolerance. When re-inversion is necessary, crossover will compare the recalculated working
basic solution with the assumed ones just before re-inversion took place. If the error is above
this threshold, crossover will adjust the relative pivot tolerance to address the build-up of
numerical inaccuracies.

Type

DoubleDefault value

1e-6

Note

The full primal and dual solution is available whether or not crossover is used. The crossovermust not be disabled if the barrier is used to reoptimize nodes of a MIP.
By default crossover will not be performed on QP and MIQP problems.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

CROSSOVERITERLIMIT
Description

Newton barrier: The maximum number of iterations that will be performed in the crossoverprocedure before the optimization process terminates.

Type

Integer

Default value

2147483647

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

CROSSOVER.

CROSSOVEROPS
Description

Newton barrier: a bit vector for adjusting the behavior of the crossover procedure.

Type

Integer

Values

Bit
0

1

2

3

Meaning
Returned solution when the crossover terminates prematurely:
0: Return the last basis from the crossover;
1: Return the barrier solution.
Select the crossover stages to be performed:
0: Perform both crossover stages;
1: Skip second crossover stage.
Set crossover behaviour:
0: Force to perform all pivots;
1: Skip pivots that are numerically less reliable.
Set crossover behaviour:
0: Perform standard crossover;
1: Perform a slower, but numerically more careful crossover.

Default value0

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

CROSSOVER.

Fair Isaac Corporation Proprietary Information409

Chapter 8: Control Parameters

CROSSOVERTHREADS
Description

Determines the maximum number of threads that parallel crossover is allowed to use. If
CROSSOVERTHREADS is set to the default value (-1), the BARTHREADS control will determine
the number of threads used.

Type

Integer

Default value-1 (determined by the BARTHREADS control)

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

BARTHREADS, CONCURRENTTHREADS, THREADS.

CSTYLE
Description

This parameter is deprecated and will be removed in a future release. The control was used fornumbering arrays.

Type

Integer

Values0
1

Default value

1

Affects routines

All library routines which take arrays as arguments.

Indicates that the FORTRAN convention should be used for arrays (i.e. starting from 1).
Indicates that the C convention should be used for arrays (i.e. starting from 0).

CUTDEPTH
Description

Branch and Bound: Sets the maximum depth in the tree search at which cuts will be generated.
Generating cuts can take a lot of time, and is often less important at deeper levels of the tree
since tighter bounds on the variables have already reduced the feasible region. A value of 0
signifies that no cuts will be generated.

Type

Integer

Default value-1 — determined automatically.

Note

Does not affect cutting on the root node.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

AUTOCUTTING, CUTFREQ.

CUTFACTOR
Description

Limit on the number of cuts and cut coefficients the optimizer is allowed to add to the matrix
during global search. The cuts and cut coefficients are limited by CUTFACTOR times thenumber of rows and coefficients in the initial matrix.

Type

DoubleValues-1>=0

Default value-1

Let the optimizer decide on the maximum amount of cuts based on CUTSTRATEGY.
Multiple of number of rows and coefficients to use.

Fair Isaac Corporation Proprietary Information

410

Chapter 8: Control Parameters

Note

A value of 0.0 prevents cuts from being added, and a value of e.g. 1.0 will allow the problem togrow to twice the initial number of rows and coefficients.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

CUTSTRATEGY.

CUTFREQ
Description

Branch and Bound: This specifies the frequency at which cuts are generated in the tree search.
If the depth of the node modulo CUTFREQ is zero, then cuts will be generated.

Type

Integer

Default value-1 — determined automatically.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

AUTOCUTTING, CUTDEPTH.

CUTSTRATEGY
Description

Branch and Bound: This specifies the cut strategy. A more aggressive cut strategy, generating agreater number of cuts, will result in fewer nodes to be explored, but with an associated time
cost in generating the cuts. The fewer cuts generated, the less time taken, but the greater
subsequent number of nodes to be explored.

Type

Integer

Values-1
0
1
2
3Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

Automatic selection of the cut strategy.
No cuts.
Conservative cut strategy.
Moderate cut strategy.
Aggressive cut strategy.

CUTSELECT
Description

A bit vector providing detailed control of the cuts created for the root node of a global solve.
Use TREECUTSELECT to control cuts during the tree search.

Type

Integer

Fair Isaac Corporation Proprietary Information

411

Chapter 8: Control Parameters

Values

Bit
5
6
7
8
11
12
13
14
15
16
17

Meaning
Clique cuts.
Mixed Integer Rounding (MIR) cuts.
Lifted cover cuts.
Turn on row aggregation for MIR cuts.
Flow path cuts.
Implication cuts.
Turn on automatic Lift-and-Project cutting strategy.
Disable cutting from cut rows.
Lifted GUB cover cuts.
Zero-half cuts.
Indicator constraint cuts.

Default value

-1

Note

The default value is -1 which enables all bits. Any bits not listed in the above table should be left
in their default ’on’ state, since the interpretation of such bits might change in future versions of
the optimizer.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

COVERCUTS, GOMCUTS, TREECUTSELECT.

DEFAULTALG
Description

This selects the algorithm that will be used to solve the LP if no algorithm flag is passed to the
optimization routines.

Type

Integer

Values1
2
3
4

Default value

1

Note

Please note that this will affect how the MIP node LP problems are solved during the global
search. To change how the root LP is solved only, please use the appropriate flags to
XPRSlpoptimize or XPRSmipoptimize. In particular, CONCURRENTTHREADS takes
precedence when solving the root node, and only if it is restricted to a single thread, it will use
the chosen default algorithm.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Automatically determined.
Dual simplex.
Primal simplex.
Newton barrier.

DENSECOLLIMIT
Description

Newton barrier: Columns with more than DENSECOLLIMIT elements are considered to bedense. Such columns will be handled specially in the Cholesky factorization of this matrix.

Type

Integer

Default value

0 — determined automatically.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Fair Isaac Corporation Proprietary Information

412

Chapter 8: Control Parameters

DETERMINISTIC
Description

Branch and Bound: Specifies whether the parallel MIP search should be deterministic.

Type

Integer

Values0
1
2

Default value

1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPTHREADS.

Use non-deterministic parallel MIP.
Use deterministic parallel MIP.
Use deterministic parallel MIP, but allow the concurrent root LP solve to beopportunistic.

DUALGRADIENT
Description

Simplex: This specifies the dual simplex pricing method.

Type

Integer

Values-1
0
1
2
3Default value-1

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

PRICINGALG.

Determine automatically.
Devex.
Steepest edge.
Direct steepest edge.
Sparse Devex.

DUALIZE
Description

This specifies whether presolve should form the dual of the problem.

Type

Integer

Values-1
01

Default value-1

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

DUALIZEOPS

Determine automatically.
Solve the primal problem.
Solve the dual problem.

Fair Isaac Corporation Proprietary Information

413

Chapter 8: Control Parameters

DUALIZEOPS
Description

Bit-vector control for adjusting the behavior when a problem is dualized.

Type

Integer

ValuesBit
0Default value

1 (bit 0 is set)

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

DUALIZE

Meaning
Swap the simplex algorithm to run. If dual simplex is selected for the original problem
then primal simplex will be run on the dualized problem, and simiarly if primal simplex
is selected.

DUALPERTURB
Description

The factor by which the problem will be perturbed prior to optimization by dual simplex. A valueof 0.0 results in no perturbation prior to optimization. DUALPERTURB, if set to a non-negativevalue, overrules the value of PERTURB. The control PERTURB is deprecated, the use of
PRIMALPERTURB and DUALPERTURB is advised instead.
Note the interconnection to the AUTOPERTURB control. If AUTOPERTURB is set to 1, thedecision whether to perturb or not is left to the Optimizer. When the problem is automatically
perturbed in dual simplex, however, the value of DUALPERTURB will be used for perturbation.

Type

DoubleDefault value-1 — determined automatically.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

AUTOPERTURB, PERTURB, PRIMALPERTURB.

DUALSTRATEGY
Description

This bit-vector control specifies the dual simplex strategy.

Type

Integer

Values

Bit
0
1
2
3
4
5

Default value

1

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Meaning
Switch to primal when re-optimization goes dual infeasible and numerically unstable.
When dual intend to switch to primal, stop the solve instead of switching to primal.
Use more aggressive cut-off in MIP search.
Use dual simplex to remove cost perturbations.
Enable more aggressive dual pivoting strategy.
Keep using dual simplex even when it’s numerically unstable.

Fair Isaac Corporation Proprietary Information

414

Chapter 8: Control Parameters

DUALTHREADS
Description

Determines the maximum number of threads that dual simplex is allowed to use. If
DUALTHREADS is set to the default value (-1), the THREADS control will determine the numberof threads used.

Type

Integer

Default value-1 (determined by the THREADS control)

Notes

When solving a linear MIP, the dual simplex algorithm will use multiple threads only whensolving the initial LP relaxation or when reoptimizing between rounds of cuts on the root node.
The parallel dual simplex algorithm differs from the sequential dual simplex algorithm andmight follow a different solve path. For DUALTHREADS > 1 the solve path is independent of
the number of threads used, although the practical limit for observing performance benefits isaround DUALTHREADS = 8.

Affects routines

XPRSlpoptimize (LPOPTIMIZE).

See also

CONCURRENTTHREADS, THREADS.

EIGENVALUETOL
Description

A quadratic matrix is considered not to be positive semi-definite, if its smallest eigenvalue issmaller than the negative of this value.

Type

DoubleDefault value

1E-6

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE),CHECKCONVEXITY.

See also

IFCHECKCONVEXITY.

ELIMFILLIN
Description

Amount of fill-in allowed when performing an elimination in presolve .

Type

Integer

Default value

10

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

ELIMTOL
Description

The Markowitz tolerance for the elimination phase of the presolve.

Type

DoubleDefault value

0.001

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Fair Isaac Corporation Proprietary Information

415

Chapter 8: Control Parameters

ESCAPENAMES
Description

If characters illegal to an mps or lp file should be escaped to guarantee readability, and whether
escaped characters should be transformed back when reading such a file.

Type

Integer

Values0
1

Default value

1

Affects routines

XPRSreadprob (READPROB), XPRSwriteprob (WRITEPROB) .

Illegal characters are not escaped.
Illegal charactesr are escaped.

ETATOL
Description

Tolerance on eta elements. During each iteration, the basis inverse is premultiplied by anelementary matrix, which is the identity except for one column - the eta vector. Elements of eta
vectors whose absolute value is smaller than ETATOL are taken to be zero in this step.

Type

DoubleDefault value

1.0E-13Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE), XPRSbtran,
XPRSftran.

EXTRACOLS
Description

The initial number of extra columns to allow for in the matrix. If columns are to be added to thematrix, then, for maximum efficiency, space should be reserved for the columns before thematrix is input by setting the EXTRACOLS control. If this is not done, resizing will occur
automatically, but more space may be allocated than the user actually requires.

Type

Integer

Default value0

Affects routines

XPRSreadprob (READPROB), XPRSloadglobal, XPRSloadlp, XPRSloadqglobal,
XPRSloadqp.

See also

EXTRAROWS, EXTRAELEMS, EXTRAMIPENTS.

EXTRAELEMS
Description

The initial number of extra matrix elements to allow for in the matrix, including coefficients forcuts. If rows or columns are to be added to the matrix, then, for maximum efficiency, spaceshould be reserved for the extra matrix elements before the matrix is input by setting the
EXTRAELEMS control. If this is not done, resizing will occur automatically, but more space may
be allocated than the user actually requires.

Type

Integer

Default value

Hardware/platform dependent.

Affects routines

XPRSreadprob (READPROB), XPRSloadglobal, XPRSloadlp, XPRSloadqglobal,
XPRSloadqp.

See also

EXTRACOLS, EXTRAROWS.

Fair Isaac Corporation Proprietary Information

416

Chapter 8: Control Parameters

EXTRAMIPENTS
Description

The initial number of extra global entities to allow for.

Type

Integer

Default value0

Affects routines

XPRSreadprob (READPROB), XPRSloadglobal, XPRSloadqglobal.

EXTRAPRESOLVE
Description

This control no longer has any effect and will be removed from future releases. Use
PRESOLVEMAXGROW to limit the number of non-zero coefficients in the presolved problem.

Type

Integer

Default value0

Affects routines

XPRSreadprob (READPROB), XPRSloadglobal, XPRSloadlp, XPRSloadqglobal,
XPRSloadqp.

EXTRAQCELEMENTS
Description

This parameter is deprecated and will be removed in a future release. This control no longer has
any effect.

Type

Integer

Default value0

Affects routines

XPRSreadprob (READPROB), XPRSloadqcqp.

See also

EXTRAELEMS, EXTRAMIPENTS, EXTRAROWS, EXTRAQCROWS.

EXTRAQCROWS
Description

This parameter is deprecated and will be removed in a future release. This control no longer has
any effect.

Type

Integer

Default value0

Affects routines

XPRSreadprob (READPROB), XPRSloadqcqp.

See also

EXTRAELEMS, EXTRAMIPENTS, EXTRAROWS, EXTRAQCELEMENTS.

EXTRAROWS
Description

The initial number of extra rows to allow for in the matrix, including cuts. If rows are to be
added to the matrix, then, for maximum efficiency, space should be reserved for the rows
before the matrix is input by setting the EXTRAROWS control. If this is not done, resizing will
occur automatically, but more space may be allocated than the user actually requires.

Fair Isaac Corporation Proprietary Information

417

Chapter 8: Control Parameters

Type

Integer

Default value0

Affects routines

XPRSreadprob (READPROB), XPRSloadglobal, XPRSloadlp, XPRSloadqglobal,
XPRSloadqp.

See also

EXTRACOLS.

EXTRASETELEMS
Description

The initial number of extra elements in sets to allow for in the matrix. If sets are to be added tothe matrix, then, for maximum efficiency, space should be reserved for the set elements before
the matrix is input by setting the EXTRASETELEMS control. If this is not done, resizing will
occur automatically, but more space may be allocated than the user actually requires.

Type

Integer

Default value0

Affects routines

XPRSreadprob (READPROB), XPRSloadglobal, XPRSloadlp, XPRSloadqglobal,
XPRSloadqp.

See also

EXTRAMIPENTS, EXTRASETS.

EXTRASETS
Description

The initial number of extra sets to allow for in the matrix. If sets are to be added to the matrix,
then, for maximum efficiency, space should be reserved for the sets before the matrix is input
by setting the EXTRASETS control. If this is not done, resizing will occur automatically, butmore space may be allocated than the user actually requires.

Type

Integer

Default value0

Affects routines

XPRSreadprob (READPROB), XPRSloadglobal, XPRSloadlp, XPRSloadqglobal,
XPRSloadqp.

See also

EXTRAMIPENTS, EXTRASETELEMS.

FEASIBILITYPUMP
Description

Branch and Bound: Decides if the Feasibility Pump heuristic should be run at the top node.

Type

Integer

Values-1
0
1
2

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

Automatic.
Turned off.
Always try the Feasibility Pump.
Try the Feasibility Pump only if other heuristics have failed to find an integer solution.

Fair Isaac Corporation Proprietary Information

418

Chapter 8: Control Parameters

FEASTOL
Description

This tolerance determines when a solution is treated as feasible. If the amount by which aconstraint’s activity violates its right-hand side or ranged bound is less in absolute magnitude
than FEASTOL, then the constraint is treated as satisfied. Similarly, if the amount by which acolumn violates its bounds is less in absolute magnitude than FEASTOL, those bounds are also
treated as satisfied.

Type

DoubleDefault value

1.0E-06

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE), XPRSgetinfeas.

FEASTOLPERTURB
Description

This tolerance determines how much a feasible primal basic solution is allowed to be perturbed
when performing basis changes. The tolerance FEASTOL is always considered as an upper
limit for the perturbations, but in some cases smaller value can be more desirable.

Type

DoubleDefault value

1.0E-06

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE), XPRSgetinfeas.

FEASTOLTARGET
Description

This specifies the target feasibility tolerance for the solution refiner.

Type

DoubleDefault value

0 — use the value specified by FEASTOL.

Note

Zero and negative values are ignored, and the value of FEASTOL is used.

Note

Use very small values like 1e-100 to state the refinement should continue as long as an
improvement is made. Use very large values like 1e+100 to disable only this aspect of therefiner.

Note

Refining solutions to match the feastoltarget can influence and worsen their objective value incase the previous objective could only be achieved through slight infeasibilities.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

REFINEOPS, LPREFINEITERLIMIT, OPTIMALITYTOLTARGET.

FORCEOUTPUT
Description

Certain names in the problem object may be incompatible with different file formats (such as
names containing spaces for LP files). If the optimizer might be unable to read back a problem
because of non-standard names, it will first attempt to write it out using an extended naming
convention. If the names would not be possible to extend so that they would be reproducible
and recognizable, it will give an error message and won’t create the file. If the optimizer might
be unable to read back a problem because of non-standard names, it will give an error message
and won’t create the file. This option may be used to force output anyway.

Fair Isaac Corporation Proprietary Information

419

Chapter 8: Control Parameters

Type

Integer

Values0
1
2
3

Check format compatibility, and in case of failure try to extend names so that they are
reproducible and recognizable.
Force output using problem names as is.
Always use ’x(’ original name ’)’ in LP files to create a representation that can be readby Xpress. Default for problem having spaces in names
Substitute spaces by the ’_’ character in LP files

Default value0

Affects routines

XPRSwriteprob (WRITEPROB).

FORCEPARALLELDUAL
Description

Dual simplex: specifies whether the dual simplex solver should always use the parallel simplex
algorithm. By default, when using a single thread, the dual simplex solver will execute a
dedicated sequential simplex algorithm.

Type

Integer

Values0
1

Default value0

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

THREADS, DUALTHREADS.

Disabled.
Enabled. Force the dual simplex solver to use the parallel algorithm.

GENCONSABSTRANSFORMATION
Description

This control specifies the reformulation method for absolute value general constraints at the
beginning of the search.

Type

Integer

Values-1
01

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

Automatic.
Use a formulation based on indicator constraints.
Use a formulation based on SOS1-contraints.

GENCONSDUALREDUCTIONS
Description

This parameter specifies whether dual reductions should be applied to reduce the number ofcolumns and rows added when transforming general constraints to MIP structs.

Type

Integer

Values0
1

Default value

1

Disabled. No dual reductions, add columns and rows.
Enabled. Only add neccessary columns and rows, drop those implied by the objective
sense.

Fair Isaac Corporation Proprietary Information

420

Chapter 8: Control Parameters

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPDUALREDUCTIONS.

GLOBALFILEBIAS
Description

This parameter is deprecated and will be removed in a future release. This control no longer has
any effect. In older versions of Xpress, it could be used to influence how much Xpress would
write tree search data to the global file in preference to using in-memory data compression.

Type

DoubleDefault value

0.5

See also

GLOBALFILEUSAGE, TREEMEMORYLIMIT, TREEMEMORYSAVINGTARGET.

GLOBALFILELOGINTERVAL
Description

This control sets the interval between progress messages output while writing tree data to theglobal file, in seconds. The solve is slowed greatly while data is being written to the global fileand this output allows the user to see how much progress is being made.

Type

Integer

Default value

60

See also

TREEDIAGNOSTICS.

GOMCUTS
Description

Branch and Bound: The number of rounds of Gomory or lift-and-project cuts at the top node.

Type

Integer

Default value-1 — determined automatically.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

TREEGOMCUTS, LNPBEST, LNPITERLIMIT.

HEURBEFORELP
Description

Branch and Bound: Determines whether primal heuristics should be run before the initial LP
relaxation has been solved.

Type

Integer

Values-1
01

Default value-1

Automatic - let the optimizer decide if heuristics should be run.
Disabled.
Enabled.

Fair Isaac Corporation Proprietary Information

421

Chapter 8: Control Parameters

Note

It is possible that a heuristic will find an optimal integer solution that will result in the LP
relaxation solution being cut off. If the problem is solved with the "l" flag to
XPRSmipoptimize (i.e., stop after solving the LP relaxation), then LPSTATUS might bereturned as XPRS_LP_CUTOFF or XPRS_LP_CUTOFF_IN_DUAL.
f dedicated heuristic threads are enabled through the HEURTHREADS control, then the initialheuristics will be run in parallel with the LP solve, instead of before.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

HEUREMPHASIS, HEURTHREADS.

HEURDEPTH
Description

Branch and Bound: Sets the maximum depth in the tree search at which heuristics will be used
to find MIP solutions. It may be worth stopping the heuristic search for solutions after a certain
depth in the tree search. A value of 0 signifies that heuristics will not be used. This control nolonger has any effect and will be removed from future releases.

Type

Integer

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

HEURDIVEITERLIMIT
Description

Branch and Bound: Simplex iteration limit for reoptimizing during the diving heuristic.

Type

DoubleValues>=10<0Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

HEUREMPHASIS.

Fixed iteration limit.
No iteration limit.
Automatic selection of the iteration limit based on the problem size. The absolutevalue is used as a multiplier on the automatic selection.

HEURDIVERANDOMIZE
Description

The level of randomization to apply in the diving heuristic. The diving heuristic uses priority
weights on rows and columns to determine the order in which to e.g. round fractional columns,
or the direction in which to round them. This control determines by how large a random factor
these weights should be changed.

Type

DoubleValues0.0-1.0 Amount of randomization (0.0=none, 1.0=full)

Default value

0.0

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

HEURDIVESTRATEGY, HEURDIVESPEEDUP.

Fair Isaac Corporation Proprietary Information

422

Chapter 8: Control Parameters

HEURDIVESOFTROUNDING
Description

Branch and Bound: Enables a more cautious strategy for the diving heuristic, where it tries topush binaries and integer variables to their bounds using the objective, instead of directly fixing
them. This can be useful when the default diving heuristics fail to find any feasible solutions.

Type

Integer

Values-1
0
1
2

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

HEURDIVESTRATEGY.

Automatic selection.
Do not use soft rounding.
Cautious use of the soft rounding strategy.
More aggressive use of the soft rounding strategy.

HEURDIVESPEEDUP
Description

Branch and Bound: Changes the emphasis of the diving heuristic from solution quality to diving
speed.

Type

Integer

Values-2-1
0-4

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

HEURDIVESTRATEGY.

Automatic selection biased towards quality
Automatic selection biased towards speed.
manual emphasis bias from emphasis on quality (0) to emphasis on speed (4).

HEURDIVESTRATEGY
Description

Branch and Bound: Chooses the strategy for the diving heuristic.

Type

Integer

Values-10
1-18

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

HEUREMPHASIS.

Automatic selection of strategy.
Disables the diving heuristic.
Available pre-set strategies for rounding infeasible global entities and reoptimizing
during the heuristic dive.

Fair Isaac Corporation Proprietary Information

423

Chapter 8: Control Parameters

HEUREMPHASIS
Description

Branch and Bound: This control specifies an emphasis for the search w.r.t. primal heuristics
and other procedures that affect the speed of convergence of the primal-dual gap. For
problems where the goal is to achieve a small gap but not neccessarily solving them tooptimality, it is recommended to set HEUREMPHASIS to 1. This setting triggers many additional
heuristic calls, aiming for reducing the gap at the beginning of the search, typically at theexpense of an increased time for proving optimality.

Type

Integer

Values-1
0
1
2

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

Optimizer default strategy.
Disables all heuristics.
Focus on reducing the primal-dual gap in the early part of the search.
Extremely aggressive search heuristics.

HEURFORCESPECIALOBJ
Description

Branch and Bound: This specifies whether local search heuristics without objective or with an
auxiliary objective should always be used, despite the automatic selection of the Optimiezr.
Deactivated by default.

Type

Integer

Values0
1

Default value0

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

HEURSEARCHROOTSELECT, HEURSEARCHTREESELECT.

Disabled.
Enabled. Run special objective heuristics on large problems and even if incumbent
exists.

HEURFREQ
Description

Branch and Bound: This specifies the frequency at which heuristics are used in the tree search.
Heuristics will only be used at a node if the depth of the node is a multiple of HEURFREQ.

Type

Integer

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

HEURMAXSOL
Description

Branch and Bound: This specifies the maximum number of heuristic solutions that will befound in the tree search. This control no longer has any effect and will be removed from future
releases.

Fair Isaac Corporation Proprietary Information424

Chapter 8: Control Parameters

Type

Integer

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

HEURNODES
Description

Branch and Bound: This specifies the maximum number of nodes at which heuristics are usedin the tree search. This control no longer has any effect and will be removed from future
releases.

Type

Integer

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

HEURSEARCHEFFORT
Description

Adjusts the overall level of the local search heuristics.

Type

DoubleDefault value

1.0

Note

HEURSEARCHEFFORT is used as a multiplier on the default amount of work the local searchheuristics should do. A higher value means the local search heuristics will be run more often
and that they are allowed to search larger neighborhoods.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

HEUREMPHASIS, HEURSEARCHROOTSELECT, HEURSEARCHTREESELECT.

HEURSEARCHFREQ
Description

Branch and Bound: This specifies how often the local search heuristic should be run in the tree.

Type

Integer

Values-10n>0Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

HEURSEARCHROOTCUTFREQ.

Automatic.
Disabled in the tree.
Number of nodes between each run.

Fair Isaac Corporation Proprietary Information

425

Chapter 8: Control Parameters

HEURSEARCHROOTCUTFREQ
Description

How frequently to run the local search heuristic during root cutting. This is given as how many
cut rounds to perform between runs of the heuristic. Set to zero to avoid applying the heuristic
during root cutting.
Branch and Bound: This specifies how often the local search heuristic should be run in the tree.

Type

Integer

Values-10n>0Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

HEURSEARCHFREQ.

Automatic.
Disabled heuristic during cutting.
Number of cutting rounds between each run.

HEURSEARCHROOTSELECT
Description

A bit vector control for selecting which local search heuristics to apply on the root node of a
global solve. Use HEURSEARCHTREESELECT to control local search heuristics during the tree
search.

Type

Integer

Values

Bit
0
1
2

3
4
5
6

Meaning
Local search with a large neighborhood. Potentially slow but is good for finding
solutions that differs significantly from the incumbent.
Local search with a small neighborhood centered around a node LP solution.
Local search with a small neighborhood centered around an integer solution. This
heuristic will often provide smaller, incremental improvements to an incumbent
solution.
Local search with a neighborhood set up through the combination of multiple integer
solutions.
UnusedLocal search without an objective function. Called seldom and only when no feasible
solution is available.
Local search with an auxiliary objective function. Called seldom and only when no
feasible solution is available.

Default value

117

Note

Some of the local search heuristics will benefit from having an existing incumbent solution, but
it is not required. An initial solution can also be provided by the user through either
XPRSloadmipsol or XPRSreadbinsol.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

HEUREMPHASIS, HEURSEARCHTREESELECT, HEURSEARCHEFFORT.

Fair Isaac Corporation Proprietary Information

426

Chapter 8: Control Parameters

HEURSEARCHTREESELECT
Description

A bit vector control for selecting which local search heuristics to apply during the tree search ofa global solve. Use HEURSEARCHROOTSELECT to control local search heuristics on the root
node.

Type

Integer

Values

Bit
0
1
2

3
4
5
6

Meaning
Local search with a large neighborhood. Potentially slow but is good for finding
solutions that differs significantly from the incumbent.
Local search with a small neighborhood centered around a node LP solution.
Local search with a small neighborhood centered around an integer solution. This
heuristic will often provide smaller, incremental improvements to an incumbent
solution.
Local search with a neighborhood set up through the combination of multiple integer
solutions.
UnusedLocal search without an objective function. Called seldom and only when no feasible
solution is available.
Local search with an auxiliary objective function. Called seldom and only when no
feasible solution is available.

Default value

17

Note

Some of the local search heuristics will benefit from having an existing incumbent solution, but
it is not required. An initial solution can also be provided by the user through either
XPRSloadmipsol or XPRSaddmipsol.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

HEUREMPHASIS, HEURSEARCHROOTSELECT, HEURSEARCHEFFORT.

HEURSTRATEGY
Description

This parameter is deprecated and will be removed in a future release. Use HEUREMPHASIS
instead.
Branch and Bound: This specifies the heuristic strategy. On some problems it is worth trying
more comprehensive heuristic strategies by setting HEURSTRATEGY to 2 or 3.

Type

Integer

Values-1
0
1
2
3Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

Automatic selection of heuristic strategy.
No heuristics.
Basic heuristic strategy.
Enhanced heuristic strategy.
Extensive heuristic strategy.

Fair Isaac Corporation Proprietary Information

427

Chapter 8: Control Parameters

HEURTHREADS
Description

Branch and Bound: The number of threads to dedicate to running heuristics on the root node.

Type

Integer

Values-1
0>=1

Default value

0

Note

When heuristic threads are enable, the heuristics will be run in parallel with the initial LP solve, if
possible, and in parallel with the root cutting.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

THREADS.

Automatically determined from the THREADS control.
Disabled. Heuristics will be run sequentially with the root LP solve and cutting.
Number of root threads to dedicate to parallel heuristics.

HISTORYCOSTS
Description

Branch and Bound: How to update the pseudo cost for a global entity when a strong branch or aregular branch is applied.

Type

Integer

Values-1
0
1
2
3Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

SBBEST, SBESTIMATE, SBSELECT

Automatically determined.
No update.
Initialize using only regular branches from the root to the current node.
Same as 1, but initialize with strong branching results as well.
Initialize using any regular branching or strong branching information from all nodes
solves before the current node.

IFCHECKCONVEXITY
Description

Determines if the convexity of the problem is checked before optimization. Applies to quadratic,
mixed integer quadratic and quadratically constrained problems. Checking convexity takessome time, thus for problems that are known to be convex it might be reasonable to switch thechecking off.

Type

Integer

Values0
1

Default value

1

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

EIGENVALUETOL

Turn off convexity checking.
Turn on convexity checking.

Fair Isaac Corporation Proprietary Information

428

Chapter 8: Control Parameters

INDLINBIGM
Description

During presolve, indicator constraints will be linearized using a BigM coefficient whenever that
BigM coefficient is small enough. This control defines the largest BigM for which such a
linearized version will be added to the problem in addition to the original constraint. If the BigM
is even smaller than INDPRELINBIGM, then the original indicator constraint will additionally be
dropped from the problem.

Type

DoubleDefault value

1.0E+05

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

Note

INDLINBIGM should always be at least as large as INDPRELINBIGM. For any value less orequal to INDPRELINBIGM, indicator constraints will never be duplicated and only
INDPRELINBIGM is taken into account for linearization.

See also

INDPRELINBIGM

INDPRELINBIGM
Description

During presolve, indicator constraints will be linearized using a BigM coefficient whenever that
BigM coefficient is small enough. This control defines the largest BigM for which the original
constraint will be replaced by the linearized version. If the BigM is larger than INDPRELINBIGM
but smaller than INDLINBIGM, the linearized row will be added but the original indicator
constraint is kept as a numerically stable way to check feasibility.

Type

DoubleDefault value

100.0

Note

Replacing an indicator constraint with a BigM row has a side effect on tolerances. In theindicator constraint form, the constraint part is satisfied with FEASTOL tolerance; while after
changing it to BigM form, the constraint also includes the binary indicator variable (with acoefficient up to INDPRELINBIGM and an integrality tolerance of MIPTOL), therefore theconstraint part of the indicator contraint is satisfied with tolerance
FEASTOL+MIPTOL*INDPRELINBIGM.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

INDLINBIGMINPUTTOL
Description

The tolerance on input values elements. If any value is less than or equal to INPUTTOL inabsolute value, it is treated as zero. For the internal zero tolerance see MATRIXTOL.

Type

DoubleNote

This control needs to be set before inputting the problem, as it has no effect afterwards.

Default value

0.0

Affects routines

XPRSreadprob (READPROB), XPRSloadglobal, XPRSloadlp, XPRSloadqglobal,
XPRSloadqp, XPRSalter (ALTER), XPRSaddcols, XPRSaddcuts, XPRSaddrows,
XPRSchgcoef, XPRSchgmcoef, XPRSstorecuts.

Fair Isaac Corporation Proprietary Information429

Chapter 8: Control Parameters

INVERTFREQ
Description

Simplex: The frequency with which the basis will be inverted. The basis is maintained in afactorized form and on most simplex iterations it is incrementally updated to reflect the step
just taken. This is considerably faster than computing the full inverted matrix at each iteration,although after a number of iterations the basis becomes less well-conditioned and it becomes
necessary to compute the full inverted matrix. The value of INVERTFREQ specifies the
maximum number of iterations between full inversions.

Type

Integer

Default value-1 — the frequency is determined automatically.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

INVERTMIN
Description

Simplex: The minimum number of iterations between full inversions of the basis matrix. See
the description of INVERTFREQ for details.

Type

Integer

Default value

3

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

IOTIMEOUT
Description

The maximum number of seconds to wait for an I/O operation before it is cancelled.

Type

Integer

Default value

30

Affects routines

XPRSreadprob (READPROB), XPRSreaddirs (READDIRS), XPRSreadslxsol(READSLXSOL), XPRSreadbasis (READBASIS), XPRSreadbinsol (READBINSOL),
XPRSwritedirs (WRITEDIRS), XPRSwritebasis (WRITEBASIS), XPRSwritesol(WRITESOL), XPRSwritebinsol (WRITEBINSOL), XPRSwriteprtsol (WRITEPRTSOL),
XPRSwriteslxsol (WRITESLXSOL), XPRSwriteprob (WRITEPROB), XPRSsave (SAVE),
XPRSsaveas, XPRSrestore (RESTORE), XPRSiiswrite (IIS), XPRSalter (ALTER).

KEEPBASIS
Description

Simplex: This determines which basis to use for the next iteration. The choice is between usingthat determined by the crash procedure at the first iteration, or using the basis from the last
iteration.

Type

Integer

Values01
23Problem optimization starts from the first iteration, i.e. the previous basis is ignored.
The previously loaded basis (last in memory) should be used.
Use the previous basis only if it is valid for the current problem (the number of basic
variables must match the number of rows).
Use the previous basis only if it is valid and numerically stable in the current problem.

Fair Isaac Corporation Proprietary Information

430

Chapter 8: Control Parameters

Default value

1

Note

This gets reset to the default value after optimization has started.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

KEEPNROWS
Description

How nonbinding rows should be handled by the MPS reader.

Type

Integer

Values-1
01

Default value-1

Affects routines

XPRSreadprob (READPROB).

Delete N type rows from the matrix.
Delete elements from N type rows leaving empty N type rows in the matrix.
Keep N type rows.

L1CACHE
Description

Newton barrier: L1 cache size in kB (kilo bytes) of the CPU. On Intel (or compatible) platforms avalue of -1 may be used to determine the cache size automatically.

Type

Integer

Default value

Hardware/platform dependent.

Notes

Specifying the correct L1 cache size can give a significant performance advantage with the
Newton barrier algorithm.
If the size is unknown, it is better to specify a smaller size.
If the size cannot be determined automatically on Intel (or compatible) platforms, a default sizeof 8 kB is assumed.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

LINELENGTH
Description

This parameter is deprecated and will be removed in a future release. This control no longer has
any effect.

Type

Integer

LNPBEST
Description

Number of infeasible global entities to create lift-and-project cuts for during each round ofGomory cuts at the top node (see GOMCUTS).

Type

Integer

Default value

50

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Fair Isaac Corporation Proprietary Information

431

Chapter 8: Control Parameters

LNPITERLIMIT
Description

Number of iterations to perform in improving each lift-and-project cut.

Type

Integer

Default value-1 — determined automatically.

Note

By setting the number to zero a Gomory cut will be created instead.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

LPFLAGS
Description

A bit-vector control which defines the algorithm for solving an LP problem or the initial LP
relaxation of a MIP problem.

Type

Integer

Values

Bit
0
1
2
3

Default value

0

Notes

Setting bit 0, 1, 2, 3 of this control will have the same effect of passing flags d, p, b, n to
XPRSmipoptimize or XPRSlpoptimize. When more than one bit are set, then the LP
problem will be solved with the concurrent solver. When this control is set and flags are passed
at the same time, the flags will overrule the value of the control.

Meaning
Use the dual simplex method.
Use the primal simplex method.
Use the barrier method.
Use the network simplex method.

This control can be tuned.
Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

LPITERLIMIT
Description

The maximum number of iterations that will be performed by primal simplex or dual simplex
before the optimization process terminates. For MIP problems, this is the maximum total
number of iterations over all nodes explored by the Branch and Bound method.

Type

Integer

Default value

2147483645

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

LPREFINEITERLIMIT
Description

This specifies the simplex iteration limit the solution refiner can spend in attempting to increase
the accuracy of an LP solution.

Type

Integer

Default value-1 — determined automatically.

Fair Isaac Corporation Proprietary Information

432

Chapter 8: Control Parameters

Note

The solution refiner iteratively attempts to increase the accuracy of the solution until either both
FEASTOLTARGET and OPTIMALITYTOLTARGET is satisfied, or accuracy cannot further be
increased, or the effort limit determined by LPREFINEITERLIMIT is exhausted.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

REFINEOPS, FEASTOLTARGET, OPTIMALITYTOLTARGET.

LOCALCHOICE
Description

Controls when to perform a local backtrack between the two child nodes during a dive in the
branch and bound tree.

Type

Integer

Values1
2
3

Default value

3

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

Never backtrack from the first child, unless it is dropped (infeasible or cut off).
Always solve both child nodes before deciding which child to continue with.
Automatically determined.

LPFOLDING
Description

Simplex and barrier: whether to fold an LP problem before solving it.

Type

Integer

Values-1
01

Default value-1

Affects routines

XPRSlpoptimize (LPOPTIMIZE).

Automatic.
Disable LP folding.
Enable LP folding. Attempt to fold all LP problems and MIP initial relaxations.

LPLOG
Description

Simplex: The frequency at which the simplex log is printed.

Type

Integer

Valuesn<00n>0Default value

100

Note

This control only has an effect if LPLOGSTYLE is set to 0.

Affects routines

XPRSlpoptimize (LPOPTIMIZE).

See also

A.7.

Detailed output every -n iterations.
Log displayed at the end of the optimization only.
Summary output every n iterations.

Fair Isaac Corporation Proprietary Information

433

Chapter 8: Control Parameters

LPLOGDELAY
Description

Time interval between two LP log lines.

Type

DoubleDefault value

1.0

Note

This control only has an effect if LPLOGSTYLE is set to 1.

Affects routines

XPRSlpoptimize (LPOPTIMIZE).

LPLOGSTYLE
Description

Simplex: The style of the simplex log.

Type

Integer

Values01

Simplex log is printed based on simplex iteration count, at a fixed frequency as
specified by the LPLOG control.
Simplex Log is printed based on an estimation of elapsed time, determined by aninternal deterministic timer.

Default value

1

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE), XPRSminim(MINIM), XPRSmaxim (MAXIM), XPRSglobal (GLOBAL).

LPTHREADS
Description

This parameter is deprecated and will be removed in a future release. This control is provided forcompatibility purposes. Please use CONCURRENTTHREADS instead.

Type

Integer

Default value

-1

Note

The value of this control is mirrored by the CONCURRENTTHREADS control.

See also

CONCURRENTTHREADSMARKOWITZTOL
Description

The Markowitz tolerance used for the factorization of the basis matrix.

Type

DoubleDefault value

0.01

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Fair Isaac Corporation Proprietary Information

434

Chapter 8: Control Parameters

MATRIXTOL
Description

The zero tolerance on matrix elements. If the value of a matrix element is less than or equal to
MATRIXTOL in absolute value, it is treated as zero. The control applies when solving a problem,
for an input tolerance see INPUTTOL.

Type

DoubleDefault value

1.0E-09

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE) .

MAXCHECKSONMAXCUTTIME
Description

This control is intended for use where optimization runs that are terminated using the
MAXCUTTIME control are required to be reproduced exactly. This control is necessary becauseof the inherent difficulty in terminating algorithmic software in a consistent way using temporal
criteria. The control value relates to the number of times the optimizer checks the
MAXCUTTIME criterion up to and including the check when the termination of cutting was
activated. To use the control the user first must obtain the value of the
CHECKSONMAXCUTTIME attribute after the run returns. This attribute value is the number oftimes the optimizer checked the MAXCUTTIME criterion during the last call to the optimization
routine XPRSmipoptimize. Note that this attribute value will be negative if the optimizer
terminated cutting on the MAXCUTTIME criterion. To ensure accurate reproduction of a run theuser should first ensure that MAXCUTTIME is set to its default value or to a large value so therun does not terminate again on MAXCUTTIME and then simply set the control
MAXCHECKSONMAXCUTTIME to the absolute value of the CHECKSONMAXCUTTIME value.

Type

Integer

Values0n>0Default value0

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

Not active.
The number of times the optimizer should check the MAXCUTTIME criterion before
triggering a termination.

MAXCHECKSONMAXTIME
Description

This control is intended for use where optimization runs that are terminated using the MAXTIME
control are required to be reproduced exactly. This control is necessary because of the inherent
difficulty in terminating algorithmic software in a consistent way using temporal criteria. The
control value relates to the number of times the optimizer checks the MAXTIME criterion up to
and including the check when the termination was activated. To use the control the user firstmust obtain the value of the CHECKSONMAXTIME attribute after the run returns. This attributevalue is the number of times the optimizer checked the MAXTIME criterion during the last call tothe optimization routine XPRSmipoptimize. Note that this attribute value will be negative if
the optimizer terminated on the MAXTIME criterion. To ensure that a reproduction of a run
terminates in the same way the user should first ensure that MAXTIME is set to its default value
or to a large value so the run does not terminate again on MAXTIME and then simply set thecontrol MAXCHECKSONMAXTIME to the absolute value of the CHECKSONMAXTIME value.

Type

Integer

Fair Isaac Corporation Proprietary Information

435

Chapter 8: Control Parameters

Values0n>0

Not active.
The number of times the optimizer should check the MAXTIME criterion before
triggering a termination.

Default value0

Affects routines

XPRSmipoptimize (MIPOPTIMIZE)MAXMCOEFFBUFFERELEMS
Description

The maximum number of matrix coefficients to buffer before flushing into the internal
representation of the problem. Buffering coefficients can offer a significant performance gain
when you are building a matrix using XPRSchgcoef or XPRSchgmcoef, but can lead to asignificant memory overhead for large matrices, which this control allows you to influence.

Type

Integer

Default value

2147483647

Affects routines

XPRSchgcoef, XPRSchgmcoef.

MAXCUTTIME
Description

The maximum amount of time allowed for generation of cutting planes and reoptimization. The
limit is checked during generation and no further cuts are added once this limit has been
exceeded.

Type

Integer

Values0n>0Default value0

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

No time limit.
Stop cut generation after n seconds.

MAXGLOBALFILESIZE
Description

The maximum size, in megabytes, to which the global file may grow, or 0 for no limit. When the
global file reaches this limit, a second global file will be created. Useful if you are using afilesystem that puts a maximum limit on the size of a file.

Type

Integer

Default value0

See also

GLOBALFILESIZE.

MAXIIS
Description

This function controls the number of Irreducible Infeasible Sets to be found using the
XPRSiisall (IIS -a).

Type

Integer

Fair Isaac Corporation Proprietary Information

436

Chapter 8: Control Parameters

Values-10
n>0Search for all IIS.
Do not search for IIS.
Search for the first n IIS.

Default value

-1

Note

The function XPRSiisnext is not affected.

Affects routines

XPRSiisall (IIS-a).

MAXIMPLIEDBOUND
Description

Presolve: When tighter bounds are calculated during MIP preprocessing, only bounds whose
absolute value are smaller than MAXIMPLIEDBOUND will be applied to the problem.

Type

DoubleDefault value

1.0E+08Note

For numerically challenging MIP problems, it can sometimes help make the solve more stableby reducing the value of MAXIMPLIEDBOUND to something smaller - e.g. 1.0E+06. It is notrecommended to increase this parameter beyond the default of 1.0E+08.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

MAXLOCALBACKTRACK
Description

Branch-and-Bound: How far back up the current dive path the optimizer is allowed to look for a
local backtrack candidate node.

Type

Integer

Values-1n>0Default value

-1

Note

If this control is set to k, then the candidate set of nodes for a local backtrack will consist of allactive nodes in the subtree rooted at height k above the current node. For example, a setting of
1 will result in only sibling nodes of the current node being considered.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

LOCALCHOICE.

Automatic.
Local backtrack limit.

MAXMEMORYHARD
Description

This control sets the maximum amount of memory in megabytes the optimizer should allocate.
If this limit is exceeded, the solve will terminate. This control is designed to make the optimizer
stop in a controlled manner, so that the problem object is valid once termination occurs. The
solve state will be set to incomplete. This is different to an out of memory condition in whichcase the optimizer returns an error. The optimizer may still allocate memory once the limit isexceeded to be able to finsish the operations and stop in a controlled manner. WhenRESOURCESTRATEGY is enabled, the control also has the same effect as MAXMEMORYSOFT
and will cause the optimizer to try preserving memory when possible.

Type

Integer

Fair Isaac Corporation Proprietary Information

437

Chapter 8: Control Parameters

Default value

0 (no limit)

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

MAXMEMORYSOFT
Description

When RESOURCESTRATEGY is enabled, this control sets the maximum amount of memory inmegabytes the optimizer targets to allocate. This may change the solving path, but will notcause the solve to terminate early. To set a hard version of the same, please set
MAXMEMORYHARD.

Type

Integer

Default value

0 (no limit)

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

MAXMIPTASKS
Description

Branch-and-Bound: The maximum number of tasks to run in parallel during a MIP solve.

Type

Integer

Values-1>0

Default value

-1

Note

The MIP solver will create smaller tasks from individual active nodes or based on local searchheuristics. These are tasks that will be executed in parallel by the number of threads set by
MIPTHREADS.

Note

If MAXMIPTASKS is set to a fixed, positive value, the branch-and-bound tree nodes will always
be solved in the same deterministic way, independent of the actual number of executing
threads implied by MIPTHREADS.

Task limit determined automatically from MIPTHREADS.
Fixed task limit.

How a MIP is solved will still depend on the number of threads used for solving the continuous
relaxation and therefore on the settings for the controls BARTHREADS, BARCORES,DUALTHREADS and CONCURRENTTHREADS).
To obtain a MIP solve that is completely independent of the number of threads, it is sufficient to
set MAXMIPTASKS, FORCEPARALLELDUAL, BARTHREADS and BARCORES. The concurrent LPsolver should be avoided in this case.
Note

While you can set this control to large value, the implementation will limit the number of tasks
for performance reasons. This limit is currently 32 on 32bit platforms and 256 on 64 bit
platforms.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPTHREADS, THREADS, DUALTHREADS, BARTHREADS, BARCORES, CONCURRENTTHREADS,FORCEPARALLELDUAL.

Fair Isaac Corporation Proprietary Information

438

Chapter 8: Control Parameters

MAXMIPSOL
Description

Branch and Bound: This specifies a limit on the number of integer solutions to be found by the
Optimizer. It is possible that during optimization the Optimizer will find the same objective
solution from different nodes. However, MAXMIPSOL refers to the total number of integer
solutions found, and not necessarily the number of distinct solutions.

Type

Integer

Default value

0

Note

Setting MAXMIPSOL=1 can alter the solution path as this will put the emphasis on finding any
feasible solution by triggering additional heuristics.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

MAXNODE
Description

Branch and Bound: The maximum number of nodes that will be explored.

Type

Integer

Default value

2147483647

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

MAXPAGELINES
Description

Number of lines between page breaks in printable output.

Type

Integer

Default value

23

Affects routines

XPRSwriteprtsol (WRITEPRTSOL).

MAXSCALEFACTOR
Description

This determines the maximum scaling factor that can be applied during scaling. The maximum
is provided as an exponent of a power of 2.

Type

Integer

Values0-64

Default value

64

Affects routines

XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSreadprob(READPROB), XPRSscale (SCALE).

See also

SCALING.

The maximum is provided an exponent of a power of 2.

Fair Isaac Corporation Proprietary Information

439

Chapter 8: Control Parameters

MAXSTALLTIME
Description

The maximum time in seconds that the Optimizer will continue to search for improving solution
after finding a new incumbent.

Type

Integer

Values0n>0Default value0

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MAXTIME, MAXMIPSOL.

No stall time limit.
If an integer solution has been found, stop MIP search after n seconds without a newincumbent. No effect as long as no solution was found.

MAXTIME
Description

The maximum time in seconds that the Optimizer will run before it terminates, including the
problem setup time and solution time. For MIP problems, this is the total time taken to solve all
the nodes.

Type

Integer

Values0n>0n<0

No time limit.
If an integer solution has been found, stop MIP search after n seconds, otherwise
continue until an integer solution is finally found.
Stop in LP or MIP search after n seconds.

Default value0

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

MIPABSCUTOFF
Description

Branch and Bound: If the user knows that they are interested only in values of the objectivefunction which are better than some value, this can be assigned to MIPABSCUTOFF. This
allows the Optimizer to ignore solving any nodes which may yield worse objective values,saving solution time. When a MIP solution is found a new cut off value is calculated and thevalue can be obtained from the CURRMIPCUTOFF attribute. The value of CURRMIPCUTOFF iscalculated using the MIPRELCUTOFF and MIPADDCUTOFF controls.

Type

DoubleDefault value

1.0E+40 (for minimization problems); -1.0E+40 (for maximization problems).

Note

MIPABSCUTOFF can also be used to stop the dual algorithm.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPRELCUTOFF, MIPADDCUTOFF.

Fair Isaac Corporation Proprietary Information

440

Chapter 8: Control Parameters

MIPABSGAPNOTIFY
Description

Branch and bound: if the gapnotify callback has been set using XPRSaddcbgapnotify,
then this callback will be triggered during the global search when the absolute gap reaches orpasses the value you set of the MIPRELGAPNOTIFY control.

Type

DoubleDefault value-1.0

Affects routines

XPRSaddcbgapnotify, XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPRELGAPNOTIFY, MIPABSGAPNOTIFYOBJ, MIPABSGAPNOTIFYBOUNDMIPABSGAPNOTIFYBOUND
Description

Branch and bound: if the gapnotify callback has been set using XPRSaddcbgapnotify,
then this callback will be triggered during the global search when the best bound reaches orpasses the value you set of the MIPRELGAPNOTIFYBOUND control.

Type

DoubleDefault value

1.0E+20 (for minimization problems); -1.0E+20 (for maximization problems)

Affects routines

XPRSaddcbgapnotify, XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPRELGAPNOTIFY, MIPABSGAPNOTIFYOBJ, MIPABSGAPNOTIFYMIPABSGAPNOTIFYOBJ
Description

Branch and bound: if the gapnotify callback has been set using XPRSaddcbgapnotify,
then this callback will be triggered during the global search when the best solution value
reaches or passes the value you set of the MIPRELGAPNOTIFYOBJ control.

Type

DoubleDefault value-1.0E+20 (for minimization problems); 1.0E+20 (for maximization problems)

Affects routines

XPRSaddcbgapnotify, XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPRELGAPNOTIFY, MIPABSGAPNOTIFY, MIPABSGAPNOTIFYBOUNDMIPABSSTOP
Description

Branch and Bound: The absolute tolerance determining whether the global search will continue
or not. It will terminate if|MIPOBJVAL - BESTBOUND| ≤ MIPABSSTOP
where MIPOBJVAL is the value of the best solution’s objective function, and BESTBOUND is thecurrent best solution bound. For example, to stop the global search when a MIP solution has
been found and the Optimizer can guarantee it is within 100 of the optimal solution, set
MIPABSSTOP to 100.

Type

DoubleDefault value

0.0

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPRELSTOP, MIPADDCUTOFF.

Fair Isaac Corporation Proprietary Information

441

Chapter 8: Control Parameters

MIPADDCUTOFF
Description

Branch and Bound: The amount to add to the objective function of the best integer solution
found to give the new CURRMIPCUTOFF. Once an integer solution has been found whose
objective function is equal to or better than CURRMIPCUTOFF, improvements on this value may
not be interesting unless they are better by at least a certain amount. If MIPADDCUTOFF isnonzero, it will be added to CURRMIPCUTOFF each time an integer solution is found which is
better than this new value. This cuts off sections of the tree whose solutions would not
represent substantial improvements in the objective function, saving processor time. The
control MIPABSSTOP provides a similar function but works in a different way.

Type

DoubleDefault value-1.0E-05

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPRELCUTOFF, MIPABSSTOP, MIPABSCUTOFF.

MIPCOMPONENTS
Description

Determines whether disconnected components in a MIP should be solved as separate MIPs.
There can be significant performence benefits from solving disconnected components
individual instead of being part of the main branch-and-bound search.

Type

Integer

Values-1
01

Default value

-1

Note

If there are no constraints linking two variables, either directly or indirectly through othervariables, they are said to belong to two separate disconnected components. When a problem
contains disconnected components of signficant size, it can be advantageous to solve eachcomponent as a separate MIP. When significant disconnected components are detected in the
problem, the solver will switch to a different solve mode where each component is solved
separately. This switch will happen after the root node processing has completed and when thesolve is about to enter the branch-and-bound search.

Note

Solving disconnected components separately is not compatible with many callbacks that canbe used for modifying the branch-and-bound search. Setting any of the following callbacks willautomatically disable the separate solving of disconnected components:
XPRSaddcboptnode, XPRSaddcbprenode, XPRSaddcbcutmgr, XPRSaddcbestimate,
XPRSaddcbsepnode, XPRSaddcbchgbranch, XPRSaddcbchgbranchobject

Note

Solving disconnected components separately is not compatible with concurrent MIP solves. If
concurrent MIP solves has been turned off, disconnected components will be solved as part ofthe standard branch-and-bound search in each concurrent solve.

Note

Disabling MIP dual reductions through MIPDUALREDUCTIONS will also disable the separate
solve of disconnected components.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

PRECOMPONENTS, MIPCONCURRENTSOLVES, XPRSaddcboptnode, XPRSaddcbprenode,
XPRSaddcbcutmgr, XPRSaddcbestimate, XPRSaddcbsepnode, XPRSaddcbchgbranch,
XPRSaddcbchgbranchobject

Automatic - let the solver decide.
Disable solving disconnected components separately.
Solve disconnected components separately.

Fair Isaac Corporation Proprietary Information

442

Chapter 8: Control Parameters

MIPCONCURRENTNODES
Description

Sets the node limit for when a winning solve is selected when concurrent MIP solves areenabled. When multiple MIP solves are started, they each run up to the MIPCONCURRENTNODES
node limit and only one winning solve is selected for contuinuing the search with.

Type

Integer

Values-1>0

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPCONCURRENTSOLVES

Automatic - let the solver decide on a node limit.
Number of nodes each concurrent solve should complete before a winner is selected.

MIPCONCURRENTSOLVES
Description

Selects the number of concurrent solves to start for a MIP. Each solve will use a unique random
seed for its random number generator, but will otherwise apply the same user controls. The first
concurrent solve to complete will have solved the MIP and all the concurrent solves will beterminated at this point. Using concurrent solves can be advantageous when a MIP displays ahigh level of performance variability.

Type

Integer

Values

-1
0, 1
n>1

Default value

0

Note

A node limit is imposed on each concurrent solve, through MIPCONCURRENTNODES. When aconcurrent solve reaches this node limit, it will be suspended until all concurrent solves havereached the limit. At this point a winner will be declared, based on which solve made the mostprogress towards optimality and only the winning solve will continue, using all threading
resources. If a concurrent solve completes its MIP search before reaching the node limit, allsolves will be stopped.

Note

Concurrent solves are not compatible with many callbacks that can be used for modifying thebranch-and-bound search. Setting any of the following callbacks will automatically disable
concurrent solves: XPRSaddcboptnode, XPRSaddcbprenode, XPRSaddcbcutmgr,
XPRSaddcbestimate, XPRSaddcbsepnode, XPRSaddcbchgbranch,
XPRSaddcbchgbranchobject

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPCONCURRENTNODES, XPRSaddcboptnode, XPRSaddcbprenode, XPRSaddcbcutmgr,
XPRSaddcbestimate, XPRSaddcbsepnode, XPRSaddcbchgbranch,
XPRSaddcbchgbranchobject

Enabled. The number of concurrent solves depends on MIPTHREADS.
Disabled
Enabled. The number of concurrent solves to start is given by n.

Fair Isaac Corporation Proprietary Information

443

Chapter 8: Control Parameters

MIPDUALREDUCTIONS
Description

Branch and Bound: Limits operations that can reduce the MIP solution space.

Type

Integer

Values2
1
0

Default value

1

Note

The MIPDUALREDUCTIONS control, when set to a value different from 1 will adjust the valuesof other controls in order to prevent MIP solver operations that can result in the removal of
dominated solutions. For example, dual reductions during preprocessing attempts to remove
dominated solutions based on objective arguments, assuming that all constraints are known to
the Optimizer. If a problem is detected to have symmetries, the solver might also remove somesymmetrical solutions from the search space. In both cases, the set of feasible MIP solutions
might be reduced. With default settings, it is only guaranteed that at least one optimal solution
remains.

Note

When attempting to collect the n-best solutions, it is recommended to set
MIPDUALREDUCTIONS=2. This will ensure that the only solutions missed by the enumeration
are those that only differ from an existing solution in the values of the continuous variables.

Note

Advanced users that maintain external constraints, which are applied dynamically to the
problem using callbacks during a branch-and-bound solve, it is recommended to set
MIPDUALREDUCTIONS=0. This ensures that any solution to the original problem that satisfies
all of the user’s external constraints maps to a feasible solution in the presolved space.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPPRESOLVE, PRECOMPONENTS, PRESOLVEOPS, SYMMETRY.

Allow dual reductions on continuous variables only.
Allow all dual reductions.
Prevent all dual reductions.

MIPFRACREDUCE
Description

Branch and Bound: Specifies how often the optimizer should run a heuristic to reduce thenumber of fractional integer variables in the node LP solutions.

Type

Integer

Values-1
0
1
2
3Default value

-1

Note

This heuristic is only applicable to problems that are dual degenerate. These are problems that
contain multiple solutions with identical objective function value. The more dual degenerate aproblem is, the more likely it will be for this heuristic to have an improving effect.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

Automatic.
Disabled.
Run before and after cutting on the root node.
Run also during root cutting.
Run also during the tree search.

Fair Isaac Corporation Proprietary Information444

Chapter 8: Control Parameters

MIPKAPPAFREQ
Description

Branch and Bound: Specifies how frequently the basis condition number (also known as kappa)
should be calculated during the branch-and-bound search.

Type

Integer

Values01n>1

Default value

0

Note

The condition number is calculated as the norm of the basis matrix multiplied by the norm of its
inverse. This uses the Froebenius norm.

Note

A summary will be printed at the end of the solve, summarizing the collected condition
numbers collected:

Do not calculate condition numbers.
Calculate conditions numbers on every node, including after each round of root cutting.
Calculate a condition number once per node of every n’th level of the
branch-and-bound tree.

Statistic

Meaning

Nodes kappa stable

No. of stable sampled nodes (kappa < 107 )Nodes kappa suspicius

No. of suspicious sampled nodes (107 ≤ kappa < 1010 )Nodes kappa unstable

No. of unstable sampled nodes (1010 ≤ kappa < 1013 )Nodes kappa ill-posed

No. of ill-posed sampled nodes (1013 ≤ kappa)

Largest kappa seen

The largest condition number calculated through all sampled nodes.

Kappa attention level

A measure of how ill-posed the problem is (between 0 and 1).

Affects routines

ATTENTIONLEVEL, MAXKAPPA, XPRSmipoptimize (MIPOPTIMIZE).

See also.

MIPLOG
Description

Global print control.

Type

Integer

Values-n0
123Default value-100

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

A.9.

Print out summary log at each nth node.
No printout in global.
Only print out summary statement at the end.
Print out detailed log at all solutions found.
Print out detailed log at each node.

Fair Isaac Corporation Proprietary Information

445

Chapter 8: Control Parameters

MIPPRESOLVE
Description

Branch and Bound: Type of integer processing to be performed. If set to 0, no processing will
be performed.

Type

Integer

Values

Bit
0

1

2
3
4
5
6
7
8

Meaning
Reduced cost fixing will be performed at each node. This can simplify the node before
it is solved, by deducing that certain variables’ values can be fixed based on additionalbounds imposed on other variables at this node.
Primal reductions will be performed at each node. Uses constraints of the node totighten the range of variables, often resulting in fixing their values. This greatly
simplifies the problem and may even determine optimality or infeasibility of the node
before the simplex method commences.
[Unused] This bit is no longer used to control probing. Refer to the integer control
PREPROBING for setting probing level during presolve.
If node preprocessing is allowed to change bounds on continuous columns.
Dual reductions will be performed at each node.
Allow global (non-bound) tightening of the problem during the tree search.
The objective function will be used to find reductions at each node.
Allow the branch-and-bound tree search to be restarted if it appears to beadvantageous.
Allow that symmetry is used to presolve the node problem.

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

5.3, PRESOLVE, PRESOLVEOPS, PREPROBING.

MIPRAMPUP
Description

Controls the strategy used by the parallel MIP solver during the ramp-up phase of abranch-and-bound tree search.

Type

Integer

Values-101Automatically determined.
No special treatment during the ramp-up phase. Always run with the maximal numberof tasks.
Limit the number of tasks until the initial dives have completed.

Default value

-1

Note

The branch-and-bound tree search starts from the single root node, and only through branchingon this root node and the resulting child nodes, are enough active nodes created to produce
sufficient tasks to keep all MIP workers busy. This is referred to as the ramp-up phase of aparallel MIP.
In a typical MIP solve, the solutions found during the initial dives will typically provide asignificant improvement over the root heuristic solutions. It can therefore be advantageous to
let these initial dives run as fast as possible, by limiting resource contention. This can beaccomplished by restricting the number of parallel tasks and thereby reducing the memory bus

Fair Isaac Corporation Proprietary Information

446

Chapter 8: Control Parameters

contention. The MIPRAMPUP control can be used to turn this initial task restriction of a parallel
MIP solve on or off.
Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPTHREADS, MAXMIPTASKS.

MIPRESTART
Description

Branch and Bound: controls strategy for in-tree restarts.

Type

Integer

Values-1
0
1
2

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPRESTARTGAPTHRESHOLD, MIPRESTARTFACTOR

Determined automatically (XPRS_MIPRESTART_DEFAULT).
Disable in-tree restarts (XPRS_MIPRESTART_OFF).
Allow in-tree restarts at normal aggressiveness (XPRS_MIPRESTART_MODERATE).
Allow in-tree restarts at higher aggressiveness (more likely to trigger a restart)(XPRS_MIPRESTART_AGGRESSIVE).

MIPRESTARTGAPTHRESHOLD
Description

Branch and Bound: Initial gap threshold to delay in-tree restart. The restart is delayed initially if
the gap, given as a fraction between 0 and 1, is below this threshold. The optimizer adjusts thethreshold every time a restart is delayed. Note that there are other criteria that can delay or
prevent a restart.

Type

DoubleDefault value

0.02

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPRESTART, MIPRESTARTFACTOR

MIPRESTARTFACTOR
Description

Branch and Bound: Fine tune initial conditions to trigger an in-tree restart. Use a value > 1 toincrease the aggressiveness with which the Optimizer restarts. Use a value < 1 to relax theaggressiveness with which the Optimizer restarts. Note that this control does not affect theinitial condition on the gap, which must be set separately.

Type

DoubleDefault value

1.0

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPRESTART, MIPRESTARTGAPTHRESHOLD

Fair Isaac Corporation Proprietary Information

447

Chapter 8: Control Parameters

MIQCPALG
Description

This control determines which algorithm is to be used to solve mixed integer quadratic
constrained and mixed integer second order cone problems.

Type

Integer

Values-1
01

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE), XPRSminim (MINIM), XPRSmaxim (MAXIM),XPRSglobal (GLOBAL).

Determined automatically.
Use the barrier algorithm in the branch and bound algorithm.
Use outer approximations in the branch and bound algorithm.

MIPREFINEITERLIMIT
Description

This defines an effort limit expressed as simplex iterations for the MIP solution refiner. The
limit is per reoptimizations in the MIP refiner.

Type

Integer

Default value-1 — determined automatically.

Affects routines

XPRSrefinemipsol (REFINEMIPSOL).

MIPRELCUTOFF
Description

Branch and Bound: Percentage of the LP solution value to be added to the value of the objectivefunction when an integer solution is found, to give the new value of CURRMIPCUTOFF. The
effect is to cut off the search in parts of the tree whose best possible objective function would
not be substantially better than the current solution. The control MIPRELSTOP provides asimilar functionality but works in a different way.

Type

DoubleDefault value

1.0E-04

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPABSCUTOFF, MIPADDCUTOFF, MIPRELSTOP.

MIPRELGAPNOTIFY
Description

Branch and bound: if the gapnotify callback has been set using XPRSaddcbgapnotify,
then this callback will be triggered during the global search when the relative gap reaches orpasses the value you set of the MIPRELGAPNOTIFY control.

Type

DoubleDefault value-1.0

Affects routines

XPRSaddcbgapnotify, XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPABSGAPNOTIFY, MIPABSGAPNOTIFYOBJ, MIPABSGAPNOTIFYBOUND

Fair Isaac Corporation Proprietary Information

448

Chapter 8: Control Parameters

MIPRELSTOP
Description

Branch and Bound: This determines when the global search will terminate. Global search willstop if:|MIPOBJVAL - BESTBOUND| ≤ MIPRELSTOP x max(|BESTBOUND|,|MIPOBJVAL|)
where MIPOBJVAL is the value of the best solution’s objective function and BESTBOUND is thecurrent best solution bound. For example, to stop the global search when a MIP solution has
been found and the Optimizer can guarantee it is within 5% of the optimal solution, set
MIPRELSTOP to 0.05.

Type

DoubleDefault value

0.0001

Note

This control is a stopping criteria only and different values of the control will not affect thesolution path before termination. Unlike other stopping criteria, like time and node count,termination on MIPRELSTOP will cause the final solution to be declared optimal and the
problem to be returned to its original state.

Note

Tolerances, such as MIPRELCUTOFF and MIPABSCUTOFF, determine how much the objective
value of a new MIP solution has to differ from the incumbent for it to be accepted. These
controls therefore also influence the final gap at the end of a MIP solve.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPABSSTOP, MIPRELCUTOFF.

MIPTERMINATIONMETHOD
Description

Branch and Bound: How a MIP solve should be stopped on early termination when there are still
active tasks in the system. This can happen when, for example, a time or node limit is reached.

Type

Integer

Values01

Terminate tasks at the earliest opportunity. This can result in some unfinished node
solves being discarded, although never integer solutions.
Allow tasks to complete their current work but prevent new tasks from being started.

Default value

0

Note

With MIPTERMINATIONMETHOD=0, termination will be quick but the returned state of the MIP
solve will not include any work done by interrupted tasks. In particular, it is possible that someuser callbacks (not intsol or preintsol) will have been fired for nodes that are discarded at
termination. A user program that relies on the firing of callbacks being completely deterministic
should therefore set MIPTERMINATIONMETHOD=1, which will produce a slower termination,
but guaranteed deterministic firing of all user callbacks.

Note

Irrespective of the choice of MIPTERMINATIONMETHOD, a MIP solve will always be returned ina deterministic state when DETERMINISTIC=1.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

DETERMINISTIC, MAXMIPTASKS, MIPTHREADS, THREADS.

Fair Isaac Corporation Proprietary Information449

Chapter 8: Control Parameters

MIPTHREADS
Description

If set to a positive integer it determines the number of threads implemented to run the parallel
MIP code. If MIPTHREADS is set to the default value (-1), the THREADS control will determine
the number of threads used.

Type

Integer

Default value-1 (determined by the THREADS control)

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

DETERMINISTIC, MAXMIPTASKS, HEURTHREADS, THREADS.

MIPTOL
Description

Branch and Bound: This is the tolerance within which a decision variable’s value is considered
to be integral.

Type

DoubleDefault value

5.0E-06

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

MIPTOLTARGET
Description

Target MIPTOL value used by the automatic MIP solution refiner as defined by REFINEOPS.
Negative and zero values are ignored.

Type

DoubleDefault value

0.0

Note

Refining solutions to match the miptoltarget can influence and worsen their objective value incase the previous objective could only be achieved through slight infeasibilities.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

MPS18COMPATIBLE
Description

Provides compatibility of MPS file output for older MPS readers.

Type

Integer

Values

Bit 0
Bit 1

Default value0

Affects routines

XPRSwriteprob (WRITEPROB)

Do not write objective sense (OBJSENSE section).
Fixed binaries are written as fixed only (unless used as a base variable for an indicator
constraint).

Fair Isaac Corporation Proprietary Information450

Chapter 8: Control Parameters

MPSBOUNDNAME
Description

The bound name sought in the MPS file. As with all string controls, this is of length 64
characters plus a null terminator, \0.

TypeStringDefault value

64 blanks

Affects routines

XPRSreadprob (READPROB).

MPSECHO
Description

Determines whether comments in MPS matrix files are to be printed out during matrix input.

Type

Integer

Values0
1

Default value0

Affects routines

XPRSreadprob (READPROB).

MPS comments are not to be echoed.
MPS comments are to be echoed.

MPSFORMAT
Description

Specifies the format of MPS files.

Type

Integer

Values-1
01

Default value

1

Note

Setting MPSFORMAT to 0 or -1 disables XSLPreadprob in case Xpress NonLinear is used.

Affects routines

XPRSalter (ALTER), XPRSreadbasis (READBASIS), XPRSreadprob (READPROB).

To determine the file type automatically.
For fixed format.
If MPS files are assumed to be in free format by input.

MPSOBJNAME
Description

The objective function name sought in the MPS file. If the original MPS objective row is nolonger in the matrix, this control can be set to name the neutral row representing the objective in
the MPS file. As with all string controls, this is of length 64 characters plus a null terminator, \0.

TypeStringDefault value

64 blanks

Affects routines

XPRSreadprob (READPROB).

Fair Isaac Corporation Proprietary Information

451

Chapter 8: Control Parameters

MPSRANGENAME
Description

The range name sought in the MPS file. As with all string controls, this is of length 64
characters plus a null terminator, \0.

TypeStringDefault value

64 blanks

Affects routines

XPRSreadprob (READPROB).

MPSRHSNAME
Description

The right hand side name sought in the MPS file. As with all string controls, this is of length 64
characters plus a null terminator, \0.

TypeStringDefault value

64 blanks

Affects routines

XPRSreadprob (READPROB).

MUTEXCALLBACKSDescription

Branch and Bound: This determines whether the callback routines are mutexed from within the
optimizer.

Type

Integer

Values0
1

Default value

1

Note

If the users’ callbacks take a significant amount of time it may be preferable not to mutex thecallbacks. In this case the user must ensure that their callbacks are threadsafe.

Affects routines

XPRSaddcboptnode, XPRSaddcbinfnode, XPRSaddcbintsol, XPRSaddcbnodecutoff,
XPRSaddcbprenode.

Callbacks are not mutexed.
Callbacks are mutexed.

NETCUTS
Description

Determines the addition of multi-commodity network cuts to a problem. The parameter isdefined as a bit string, and values 1, 2, 4 can be summed up if the user wants more classes ofcuts to be added.

Type

Integer

Values-10124Automatically determined.
Do not add these cuts.
Add cut-set inequalities.
Add node cut-set inequalities, i.e., cut-set inequalities that are based on a network cut
defined on a single network node.
Add lifted flow-cover inequalities.

Fair Isaac Corporation Proprietary Information

452

Chapter 8: Control Parameters

Default value

0

Note

If the user wants to add both cut-set inequalities and lifted flow-cover inequalities but not nodecut-set inequalities, the value of the control should be set to 1+4=5.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

NETSTALLLIMIT
Description

Limit the number of degenerate pivots of the network simplex algorithm, before switching toeither primal or dual simplex, depending on ALGAFTERNETWORK.

Type

Integer

Values-10n>0Default value-1

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE) (when network
simplex is used).

See also

ALGAFTERNETWORK

Automatically determined limit
No limit.
Limit to n network simplex iterations.

NODEPROBINGEFFORT
Description

Adjusts the overall level of node probing.

Type

DoubleDefault value

1.0

Note

NODEPROBINGEFFORT is used as a multiplier on the default amount of work node probing
should do. Setting the control to zero disables node probing.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

NODESELECTION
Description

Branch and Bound: This determines which nodes will be considered for solution once thecurrent node has been solved.

Type

Integer

Values12345Local first: Choose between descendant and sibling nodes if available; choose from all
outstanding nodes otherwise.
Best first: Choose from all outstanding nodes.
Local depth first: Choose between descendant and sibling nodes if available; choose
from the deepest nodes otherwise.
Best first, then local first: Best first is used for the first BREADTHFIRST nodes, after
which local first is used.
Pure depth first: Choose from the deepest outstanding nodes.

Default value

Dependent on the matrix characteristics.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

Fair Isaac Corporation Proprietary Information

453

Chapter 8: Control Parameters

NUMERICALEMPHASIS
Description

How much emphasis to place on numerical stability instead of solve speed.

Type

Integer

Values-1
0
1
2
3Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE), XPRSlpoptimize (LPOPTIMIZE).

Automatic. The emphasis might be influenced by the setting of other controls.
Emphasize speed.
Mild emphasis on numerical stability.
Medium emphasis on numerical stability.
Strong emphasis on numerical stability.

OBJSCALEFACTOR
Description

Custom global objective scaling factor, expressed as a power of 2. When set, it overwrites theautomatic global objective scaling factor. A value of 0 means no objective scaling. This control
is applied for the full solve, and is independent of any extra scaling that may occur specificallyfor the barrier or simplex solvers. As it is a power of 2, to scale by 16, set the value of thecontrol to 4.

Type

DoubleDefault value0

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

OPTIMALITYTOL
Description

Simplex: This is the zero tolerance for reduced costs. On each iteration, the simplex method
searches for a variable to enter the basis which has a negative reduced cost. The candidates
are only those variables which have reduced costs less than the negative value of
OPTIMALITYTOL.

Type

DoubleDefault value

1.0E-06

Affects routines

XPRSgetinfeas, XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

OPTIMALITYTOLTARGET
Description

This specifies the target optimality tolerance for the solution refiner.

Type

DoubleDefault value

0 — use the value specified by OPTIMALITYTOL.

Note

Zero and negative values are ignored, and the value of OPTIMALITYTOL is used.

Note

Use very small values like 1e-100 to state the refinement should continue as long as an
improvement is made. Use very large values like 1e+100 to disable only this aspect of therefiner.

Fair Isaac Corporation Proprietary Information

454

Chapter 8: Control Parameters

Note

Refining solutions to match the optimalitytoltarget can influence and increase their infeasibility
in case the previous feasibility could only be achieved through slight dual violations.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

REFINEOPS, LPREFINEITERLIMIT, FEASTOLTARGET.

OUTPUTCONTROLS
Description

This control toggles the printing of all control settings at the beginning of the search. This
includes the printing of controls that have been explicitly assigned to their default value. All
unset controls are omitted as they keep their default value.

Type

Integer

Values0
1

Default value

1

Note

Setting OUTPUTCONTROLS to 0 has no effect on the function XPRSdumpcontrols

Turn off printing of user-specified control settings.
Print controls.

OUTPUTLOG
Description

This controls the level of output produced by the Optimizer during optimization. In the Console
Optimizer, OUTPUTLOG controls which messages are sent to the screen (stdout). When using
the Optimizer library, no output is sent to the screen. If the user wishes output to be displayed,
they must define a callback function and print messages to the screen themselves. In this case,
OUTPUTLOG controls which messages are sent to the user output callback.

Type

Integer

Values0
1
3
4

Default value

1

Affects routines

XPRSaddcbmessage, XPRSsetlogfile.

Turn all output off.
Print all messages.
Print error and warning messages.
Print error messages only.

OUTPUTMASKDescription

Mask to restrict the row and column names written to file. As with all string controls, this is oflength 64 characters plus a null terminator, \0.

TypeStringDefault value

64 ’?’s

Affects routines

XPRSwritesol (WRITESOL).

Fair Isaac Corporation Proprietary Information

455

Chapter 8: Control Parameters

OUTPUTTOL
Description

Zero tolerance on print values.

Type

DoubleDefault value

1.0E-05

Affects routines

XPRSwriteprtsol (WRITEPRTSOL), XPRSwritesol (WRITESOL).

PENALTY
Description

Minimum absolute penalty variable coefficient. BIGM and PENALTY are set by the input routine(XPRSreadprob (READPROB)) but may be reset by the user prior to XPRSlpoptimize(LPOPTIMIZE).

Type

DoubleDefault value

Dependent on the matrix characteristics.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

PERTURB
Description

This parameter is deprecated and will be removed in a future release. The use of
PRIMALPERTURB and DUALPERTURB is advised instead.
The control was used to give a factor by which the problem will be perturbed prior to
optimization by either simplex algorithm.

Type

DoubleDefault value

0.0

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

AUTOPERTURB, PERTURB, PRIMALPERTURB.

PIVOTTOL
Description

Simplex: The zero tolerance for matrix elements. On each iteration, the simplex method seeks anonzero matrix element to pivot on. Any element with absolute value less than PIVOTTOL istreated as zero for this purpose.

Type

DoubleDefault value

1.0E-09

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE), XPRSpivot.

PPFACTOR
Description

The partial pricing candidate list sizing parameter.

Type

DoubleDefault value

1.0

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Fair Isaac Corporation Proprietary Information

456

Chapter 8: Control Parameters

PREANALYTICCENTER
Description

Determines if analytic centers should be computed and used for variable fixing and thegeneration of alternative reduced costs (-1: Auto 0: Off, 1: Fixing, 2: Redcost, 3: Both)Type

Integer

Values-1
0
1
2
3Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

Automatic.
Disable analytic center presolving.
Use analytic center for variable fixing only.
Use analytic center for reduced cost computation only.
Use analytic centers for both, variable fixing and reduced cost computation.

PREBASISRED
Description

Determines if a lattice basis reduction algorithm should be attempted as part of presolve

Type

Integer

Values-1
01

Default value0

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

Automatic.
Disable basis reduction.
Enable basis reduction.

PREBNDREDCONE
Description

Determines if second order cone constraints should be used for inferring bound reductions on
variables when solving a MIP.

Type

Integer

Values-1
01

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

PREBNDREDQUAD, MIQCPALG.

Automatic.
Disable bound reductions from second order cone constraints.
Enable bound reductions from second order cone constraints.

PREBNDREDQUAD
Description

Determines if convex quadratic contraints should be used for inferring bound reductions on
variables when solving a MIP.

Type

Integer

Fair Isaac Corporation Proprietary Information

457

Chapter 8: Control Parameters

Values-101Automatic.
Disable bound reductions from quadratic constraints.
Enable bound reductions from quadratic constraints.

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

PREBNDREDCONE, MIQCPALG.

PRECLIQUESTRATEGY
Description

Determines how much effort to spend on clique covers in presolve.

Type

Integer

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

PRECOEFELIM
Description

Presolve: Specifies whether the optimizer should attempt to recombine constraints in order toreduce the number of non zero coefficients when presolving a mixed integer problem.

Type

Integer

Values0
1
2

Default value

2

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

PRESOLVE, PRESOLVEOPS.

Disabled.
Remove as many coefficients as possible.
Cautious eliminations. Will not perform a reduction if it might destroy problem
structure useful to e.g. heuristics or cutting.

PRECOMPONENTS
Description

Presolve: determines whether small independent components should be detected and solved
as individual subproblems during root node processing.

Type

Integer

Values-1
01

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

PRESOLVE, PRESOLVEOPS.

Automatically determined.
Disable detection of independent components.
Enable detection of independent components.

Fair Isaac Corporation Proprietary Information

458

Chapter 8: Control Parameters

PRECOMPONENTSEFFORT
Description

Presolve: adjusts the overall effort for the independent component presolver. This control
affects working limits for the subproblem solving as well as thresholds when it is called.
Increase to put more emphasis on component presolving.

Type

DoubleDefault value

1.0

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

PRECOMPONENTS.

PRECONEDECOMP
Description

Presolve: decompose regular and rotated cones with more than two elements and apply Outer
Approximation on the resulting components.

Type

Integer

Values-10123Automatically determined.
Disable cone decomposition.
Enable cone decomposition by replacing large cones with small ones in the presolved
problem.
Similar to 1, plus decomposition is enabled even if the cone variable is fixed.
Cones are decomposed within the Outer Approximation domain only, i.e., the problem
maintains the original cones.

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

PRESOLVE, PRESOLVEOPS.

PRECONVERTSEPARABLE
Description

Presolve: reformulate problem with non-diagonal quadratic objective and/or constraints as
diagonal quadratic or second-order conic constraints.

Type

Integer

Values-1
0
1
2
3Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

PRESOLVE.

Note

This control is only used in MIQPs and MIQCQPs, and has no effect when used on continuous
quadratic problems.

Automatically determined.
Disable reformulation.
Enable reformulation to diagonal quadratic constraints.
Similar to 1, plus reduction to second-order cones.
Similar to 2, plus the objective function is converted to a constraint and treated as aquadratic constraint.

Fair Isaac Corporation Proprietary Information459

Chapter 8: Control Parameters

PREDOMCOL
Description

Presolve: Determines the level of dominated column removal reductions to perform whenpresolving a mixed integer problem. Only binary columns will be checked.

Type

Integer

Values-1
0
1
2

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

PRESOLVE, PRESOLVEOPS.

Automatically determined.
Disabled.
Cautious strategy.
All candidate binaries will be checked for domination.

PREDOMROW
Description

Presolve: Determines the level of dominated row removal reductions to perform whenpresolving a problem.

Type

Integer

Values-1
0
1
2
3Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE), XPRSlpoptimize (LPOPTIMIZE).

See also

PRESOLVE, PRESOLVEOPS.

Automatically determined.
Disabled.
Cautious strategy.
Medium strategy.
Aggressive strategy. All candidate row combinations will be considered.

PREDUPROW
Description

Presolve: Determines the type of duplicate rows to look for and eliminate when presolving aproblem.

Type

Integer

Values-1
0
1
2
3Default value

Automatically determined.
Do not eliminate duplicate rows.
Eliminate only rows that are identical in all variables.
Same as option 1 plus eliminate duplicate rows with simple penalty variable
expressions. (MIP only).
Same as option 2 plus eliminate duplicate rows with more complex penalty variable
expressions. (MIP only).

-1

Fair Isaac Corporation Proprietary Information

460

Chapter 8: Control Parameters

Note

Duplicate rows can also be disabled by clearing the corresponding bit of the PRESOLVEOPS
integer control.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE), XPRSlpoptimize (LPOPTIMIZE).

See also

PRESOLVE, PRESOLVEOPS.

PREELIMQUAD
Description

Presolve: Allows for elimination of quadratic variables via doubleton rows.

Type

Integer

Values-1
01

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE), XPRSlpoptimize (LPOPTIMIZE).

See also

PRESOLVE, PRESOLVEOPS.

Automatically determined.
Do not eliminate duplicate rows.
Eliminate at least one quadratic variable for each doubleton row.

PREFOLDING
Description

Presolve: Determines if a folding procedure should be used to aggregate continuous columns
in an equitable partition.

Type

Integer

Values-1
01

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

PRESOLVE.

Automatically determined.
Disabled.
Enabled.

PREIMPLICATIONS
Description

Presolve: Determines whether to use implication structures to remove redundant rows. If
implication sequences are detected, they might also be used in probing.

Type

Integer

Values-1
01

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE), XPRSlpoptimize (LPOPTIMIZE).

See also

PRESOLVE, PRESOLVEOPS, PREPROBING.

Automatically determined.
Do not use implications for sparsification.
Use implications to remove reduandant rows.

Fair Isaac Corporation Proprietary Information

461

Chapter 8: Control Parameters

PRELINDEP
Description

Presolve: Determines whether to check for and remove linearly dependent equality constraints
when presolving a problem.

Type

Integer

Values-1
01

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE), XPRSlpoptimize (LPOPTIMIZE).

See also

PRESOLVE, PRESOLVEOPS.

Automatically determined.
Do not check for linearly dependent equality constraints.
Check for and remove linearly dependent equality constraints.

PREOBJCUTDETECT
Description

Presolve: Determines whether to check for constraints that are parallel or near parallel to alinear objective function, and which can safely be removed. This reduction applies to MIPs only.

Type

Integer

Values0
1

Default value

1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

PRESOLVE, PRESOLVEOPS.

Disable check and reductions.
Enable check and reductions.

PREPERMUTE
Description

This bit vector control specifies whether to randomly permute rows, columns and global
information when starting the presolve. With the default value 0, no permutation will take place.

Type

Integer

ValuesBit
01
2

Default value

0

Note

Random permutations enable trying out different solution paths when solving a problem. The
random seed for the permutations can be set using PREPERMUTESEED. When both PRESORTand PREPERMUTE are enabled, it will sort and then permute the problem.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

PREPERMUTESEED, PRESORT, PRESOLVE, MIPPRESOLVE.

Meaning
Permute rows.
Permute columns.
Permute global information. This bit only affects MIP problems.

Fair Isaac Corporation Proprietary Information

462

Chapter 8: Control Parameters

PREPERMUTESEED
Description

This control sets the seed for the pseudo-random number generator for permuting the problem
when starting the presolve. This control only has effects when PREPERMUTE is enabled.

Type

Integer

Default value

1

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

PREPERMUTE, PRESOLVE, MIPPRESOLVE.

PREPROBING
Description

Presolve: Amount of probing to perform on binary variables during presolve. This is done by
fixing a binary to each of its values in turn and analyzing the implications.

Type

Integer

Values

-1
0
+1
+2
+3

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

PRESOLVE.

Let the optimizer decide on the amount of probing.
Disabled.
Light probing — only few implications will be examined.
Full probing — all implications for all binaries will be examined.
Full probing and repeat as long as the problem is significantly reduced.

PREPROTECTDUAL
Description

Presolve: specifies whether the presolver should protect a given dual solution by maintaining
the same level of dual feasibility. Enabling this control often results in a worse presolved model.
This control only expected to be optionally enabled before calling XPRScrossoverlpsol.

Type

Integer

Values0
1

Default value0

Affects routines

XPRScrossoverlpsol

Disabled.
Enabled. Protect the dual solution during presolve.

PRESOLVE
Description

This control determines whether presolving should be performed prior to starting the mainalgorithm. Presolve attempts to simplify the problem by detecting and removing redundantconstraints, tightening variable bounds, etc. In some cases, infeasibility may even be
determined at this stage, or the optimal solution found.

Type

Integer

Fair Isaac Corporation Proprietary Information

463

Chapter 8: Control Parameters

Values

-1

0
1
2
3

Presolve applied, but a problem will not be declared infeasible if primal infeasibilities
are detected. The problem will be solved by the LP optimization algorithm, returning an
infeasible solution, which can sometimes be helpful.
Presolve not applied.
Presolve applied.
Presolve applied, but redundant bounds are not removed. This can sometimes
increase the efficiency of the barrier algorithm.
Presolve is applied, and bounds detected to be redundant are always removed.

Default value

1

Note

Memory for presolve is dynamically resized. If the Optimizer runs out of memory for presolve,
an error message (245 ) is produced.
Presolve settings 2 and 3 can sometimes make the barrier solves more efficient.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

5.3, PRESOLVEOPS.

PRESOLVEMAXGROW
Description

Limit on how much the number of non-zero coefficients is allowed to grow during presolve,
specified as a ratio of the number of non-zero coefficients in the original problem.

Type

DoubleDefault value

0.1

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

PRESOLVEOPS
Description

This bit vector control specifies the operations which are performed during the presolve.

Type

Integer

Values

Bit
0
1
2
3
4
5
6
7
8
9
10
11
12
14
15

Meaning
Singleton column removal.
Singleton row removal.
Forcing row removal.
Dual reductions.
Redundant row removal.
Duplicate column removal.
Duplicate row removal.
Strong dual reductions.
Variable eliminations.
No IP reductions.
No semi-continuous variable detection.
No advanced IP reductions.
No eliminations on integers.
Linearly dependant row removal.
No integer variable and SOS detection.

Fair Isaac Corporation Proprietary Information

464

Chapter 8: Control Parameters

Default value

511 (bits 0 — 8 incl. are set)

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE),XPRSpresolverow.

See also

5.3, PRESOLVE, MIPPRESOLVE.

PRESOLVEPASSES
Description

Number of reduction rounds to be performed in presolve

Type

Integer

Default value

1

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

5.3, PRESOLVE.

PRESORT
Description

This bit vector control specifies whether to sort rows, columns and global information by theirnames when starting the presolve. With the default value 0, no sorting will take place.

Type

Integer

ValuesBit
01
2

Default value

0

Note

Sorting a problem by names can help obtain the same solution path when the rows, columns or
global information of the problem is rearranged. It is recommended to enable all three bits
when sorting a problem. When both PRESORT and PREPERMUTE are enabled, it will sort andthen permute the problem.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

PREPERMUTE, PRESOLVE, MIPPRESOLVE.

Meaning
Sort rows.
Sort columns.
Sort global information. This bit only affects MIP problems.

PRICINGALG
Description

Simplex: This determines the primal simplex pricing method. It is used to select which variable
enters the basis on each iteration. In general Devex pricing requires more time on each iteration,
but may reduce the total number of iterations, whereas partial pricing saves time on each
iteration, but may result in more iterations.

Type

Integer

Values-10123Partial pricing.
Determined automatically.
Devex pricing.
Steepest edge.
Steepest edge with unit initial weights.

Fair Isaac Corporation Proprietary Information

465

Chapter 8: Control Parameters

Default value0

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

DUALGRADIENT.

PRIMALOPS
Description

Primal simplex: allows fine tuning the variable selection in the primal simplex solver.

Type

Integer

Values

Bit
0
1
2
3
4

Default value

-1

Note

If both bits 0 and 1 are both set or unset then the dj scaling strategy is determined automatically.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

PRICINGALG.

Meaning
Use aggressive dj scaling.
Conventional dj scaling.
Use reluctant switching back to partial pricing.
Use dynamic switching between cheap and expensive pricing strategies.
Keep solving even after potential cycling is detected.

PRIMALPERTURB
Description

The factor by which the problem will be perturbed prior to optimization by primal simplex. Avalue of 0.0 results in no perturbation prior to optimization. PRIMALPERTURB, if set to a
non-negative value, overrules the value of PERTURB. The control PERTURB is deprecated, theuse of PRIMALPERTURB and DUALPERTURB is advised instead.
Note the interconnection to the AUTOPERTURB control. If AUTOPERTURB is set to 1, thedecision whether to perturb or not is left to the Optimizer. When the problem is automatically
perturbed in primal simplex, however, the value of PRIMALPERTURB will be used for
perturbation.

Type

DoubleDefault value-1 — determined automatically.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

AUTOPERTURB, DUALPERTURB, PERTURB.

PRIMALUNSHIFT
Description

Determines whether primal is allowed to call dual to unshift.

Type

Integer

Values0
1

Default value0

Allow the dual algorithm to be used to unshift.
Don’t allow the dual algorithm to be used to unshift.

Fair Isaac Corporation Proprietary Information

466

Chapter 8: Control Parameters

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

PRIMALOPS, PRICINGALG, DUALSTRATEGY.

PSEUDOCOST
Description

Branch and Bound: The default pseudo cost used in estimation of the degradation associatedwith an unexplored node in the tree search. A pseudo cost is associated with each integer
decision variable and is an estimate of the amount by which the objective function will beworse if that variable is forced to an integral value.

Type

DoubleDefault value

0.01

Affects routines

XPRSmipoptimize (MIPOPTIMIZE), XPRSreaddirs (READDIRS).

PWLDUALREDUCTIONS
Description

This parameter specifies whether dual reductions should be applied to reduce the number ofcolumns, rows and SOS-constraints added when transforming piecewise linear objectives andconstraints to MIP structs.

Type

Integer

Values0
1

Default value

1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPDUALREDUCTIONS.

Disabled. No dual reductions, add all columns, rows and SOS-constraints.
Enabled. Only add neccessary columns, rows and sets, drop those implied by theobjective sense.

PWLNONCONVEXTRANSFORMATION
Description

This control specifies the reformulation method for piecewise linear constraints at the
beginning of the search.
Note that the chosen formulation will only be used if MIP entities are necessary but not if
presolve detected that a convex reformulation is possible. Furthermore, the binary formulation
will only be applied to piecewise linear constraints with bounded input variable, otherwise the
SOS2-formulation will be used.

Type

Integer

Values-1
01

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

Automatic.
Use a formulation based on SOS2-constraints.
Use a formulation based on binary variables.

Fair Isaac Corporation Proprietary Information

467

Chapter 8: Control Parameters

QCCUTS
Description

Branch and Bound: Limit on the number of rounds of outer approximation cuts generated forthe root node, when solving a mixed integer quadratic constrained or mixed integer second
order conic problem with outer approximation.

Type

Integer

Default value-1 — determined automatically.

Note

This control only has an effect for problems with quadratic or second order cone constraints,
and only if outer approximation has not been disabled by setting MIQCPALG to 0.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

TREEQCCUTS.

QCROOTALG
Description

This control determines which algorithm is to be used to solve the root of a mixed integer
quadratic constrained or mixed integer second order cone problem, when outer approximation
is used.

Type

Integer

Values-1
01

Default value

-1

Note

This control only has an effect if MIQCPALG is set to 1.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE), XPRSminim (MINIM), XPRSmaxim (MAXIM),XPRSglobal (GLOBAL).

Determined automatically.
Use the barrier algorithm.
Use the dual simplex on a relaxation of the problem constructed using outerapproximation.

QSIMPLEXOPS
Description

Controls the behavior of the quadratic simplex solvers.

Type

Integer

Values

Bit
0
1
2
3
4
5
6
7
8

Meaning
Force traditional primal first phase.
Force BigM primal first phase.
Force traditional dual first phase.
Force BigM dual first phase.
Always use artificial bounds in dual.
Use original problem basis only when warmstarting the KKT.
Skip the primal bound flips for ranged primals (might cause more trouble than good if
the bounds are very large).
Also do the single pivot crash.
Do not apply aggressive perturbation in dual.

Fair Isaac Corporation Proprietary Information

468

Chapter 8: Control Parameters

Default value0

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

QUADRATICUNSHIFT
Description

Determines whether an extra solution purification step is called after a solution found by thequadratic simplex (either primal or dual).

Type

Integer

Values-1
01

Default value-1

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Determined automatically.
No purification step.
Always do the purification step.

RANDOMSEED
Description

Sets the initial seed to use for the pseudo-random number generator in the Optimizer. The
sequence of random numbers is always reset using the seed when starting a new optimization
run.

Type

Integer

Default value

1

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

REFACTOR
Description

Indicates whether the optimization should restart using the current representation of thefactorization in memory.

Type

Integer

Values-1
01

Default value

-1

Note

In the tree search, the optimal bases at the nodes are not refactorized by default, but the
optimal basis for an LP problem will be refactorized. If you are repeatedly solving LPs with few
changes then it is more efficient to set REFACTOR to 0.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Automatic.
Do not refactor on reoptimizing.
Refactor on reoptimizing.

Fair Isaac Corporation Proprietary Information

469

Chapter 8: Control Parameters

REFINEOPS
Description

This specifies when the solution refiner should be executed to reduce solution infeasibilities.
The refiner will attempt to satisfy the target tolerances for all original linear constraints before
presolve or scaling has been applied.

Type

Integer

Values

Bit
0
1

3
4
5
6
7
8
9
10

Meaning
Run the solution refiner on an optimal solution of a non-global problem.
Run the solution refiner when a new solution is found during a global search. The
refiner will be applied to the presolved solution before any post-solve operations areapplied.
Run the solution refiner on each node of the MIP search.
Run the solution refiner on an optimal solution before postsolve on a non-global
problem.
Apply the iterative refiner to refine the solution.
Use higher precision in the iterative refinement.
If set, the iterative refiner will use the primal simplex algorithm.
If set, the iterative refiner will use the dual simplex algorithm.
Refine MIP solutions such that rounding them keeps the problem feasible whenreoptimized.
Attempt to refine MIP solutions such that rounding them keeps the problem feasible
when reoptimized, but accept integers solutions even if refinement fails.

Default value

19 (bits 0, 1 and 4 are set)

Notes

If neither the 7th nor 8th bit is set, the refiner will use the primal simplex if the primal violations
are larger than the dual violations, otherwise it will use the dual simplex.
If both the 7th and 8th bit are set then the refiner will split the problem into a primal feasible anddual feasible part, and solve the first with primal simplex and the second with dual simplex.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

LPREFINEITERLIMIT, FEASTOLTARGET, OPTIMALITYTOLTARGET, MIPTOLTARGET.

RELAXTREEMEMORYLIMIT
Description

When the memory used by the branch and bound search tree exceeds the target specified by
the TREEMEMORYLIMIT control, the optimizer will try to reduce this by writing nodes to theglobal file. In rare cases, usually where the solve has many millions of very small nodes, the tree
structural data (which cannot be written to the global file) will grow large enough to approach orexceed the tree’s memory target. When this happens, optimizer performance can degrade
greatly as the solver makes heavy use of the global file in preference to memory. To prevent
this, the solver will automatically relax the tree memory limit when it detects this case; the
RELAXTREEMEMORYLIMIT control specifies the proportion of the previous memory limit bywhich to relax it. Set RELAXTREEMEMORYLIMIT to 0.0 to force the Xpress Optimizer to neverrelax the tree memory limit in this way.

Type

DoubleNote

While setting higher values of RELAXTREEMEMORYLIMIT can improve performance
significantly for a small number of models in low memory situations, the user is advised to use

Fair Isaac Corporation Proprietary Information

470

Chapter 8: Control Parameters

the TREEMEMORYLIMIT control to tune the memory usage of the branch and bound tree,according to the solve characteristics of their problem, rather than increasing
RELAXTREEMEMORYLIMIT.
Default value

0.1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

TREEMEMORYLIMIT.

RELPIVOTTOL
Description

Simplex: At each iteration a pivot element is chosen within a given column of the matrix. The
relative pivot tolerance, RELPIVOTTOL, is the size of the element chosen relative to the largest
possible pivot element in the same column.

Type

DoubleDefault value

1.0E-06

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE), XPRSpivot.

REPAIRINDEFINITEQ
Description

Controls if the optimizer should make indefinite quadratic matrices positive definite when it ispossible.

Type

Integer

Values0
1

Default value

1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

Repair if possible.
Do not repair.

REPAIRINFEASMAXTIME
Description

Overall time limit for the repairinfeas toolType

Integer

Values0n>0n<0

No time limit.
If an integer solution has been found, stop MIP search after n seconds, otherwise
continue until an integer solution is finally found.
Stop in LP or MIP search after n seconds.

Default value

0

Note

This control affects the total runtime of repairinfeas, as opposed to MAXTIME which affects theindividual solves reapirinfeas carries out.

Affects routines

XPRSrepairinfeas (REPAIRINFEAS).

Fair Isaac Corporation Proprietary Information

471

Chapter 8: Control Parameters

RESOURCESTRATEGY
Description

Controls whether the optimizer is allowed to make nondeterministic decisions if memory is
running low in an effort to preserve memory and finish the solve. Available memory (orcontainer limits) are automatically detected but can also be changed by MAXMEMORYSOFT and
MAXMEMORYHARD

Type

Integer

Values1

Default value0

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Allow the optimizer to change the solve path if necessary to preserve memory when
getting close to one of the memory limits.

ROOTPRESOLVE
Description

Determines if presolving should be performed on the problem after the global search has
finished with root cutting and heuristics.

Type

Integer

Values-1
0+1

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

PRESOLVE.

Let the optimizer decide if the problem should be presolved again.
Disabled.
Always presolve the root problem.

SBBEST
Description

Number of infeasible global entities to initialize pseudo costs for on each node.

Type

Integer

Values-10n>0Default value

-1

Notes

By default, strong branching will be performed only for infeasible global entities whose pseudo
costs have not otherwise been initialized (see HISTORYCOSTS).

determined automatically.
disable strong branching.
perform strong branching on up to n entities at each node.

If SBBEST is set to zero, the control HISTORYCOSTS will also be treated as zero and no pastbranching or strong branching information will be used in the global entity selection.
Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

SBITERLIMIT, SBSELECT, SBEFFORT, HISTORYCOSTS.

Fair Isaac Corporation Proprietary Information

472

Chapter 8: Control Parameters

SBEFFORT
Description

Adjusts the overall amount of effort when using strong branching to select an infeasible global
entity to branch on.

Type

DoubleDefault value

1.0

Note

SBEFFORT is used as a multiplier on other strong branching related controls, and affects thevalues used for SBBEST, SBSELECT and SBITERLIMIT when those are set to automatic.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

SBBEST, SBITERLIMIT, SBSELECT.

SBESTIMATE
Description

Branch and Bound: How to calculate pseudo costs from the local node when selecting an
infeasible global entity to branch on. These pseudo costs are used in combination with local
strong branching and history costs to select the branch candidate.

Type

Integer

Values-1
1-6

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

SBBEST, SBITERLIMIT, SBSELECT, HISTORYCOSTS.

Automatically determined.
Different variants of local pseudo costs.

SBITERLIMIT
Description

Number of dual iterations to perform the strong branching for each entity.

Type

Integer

Default value-1 — determined automatically.

Note

This control can be useful to increase or decrease the amount of effort (and thus time) spent
performing strong branching at each node. Setting SBITERLIMIT=0 will disable dual strong
branch iterations. Instead, the entity at the head of the candidate list will be selected forbranching.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

SBBEST, SBSELECT.

SBSELECT
Description

The size of the candidate list of global entities for strong branching.

Type

Integer

Fair Isaac Corporation Proprietary Information

473

Chapter 8: Control Parameters

Values-2-1n>=0Automatic (low effort).
Automatic (high effort).
Include n entities in the candidate list (but always at least SBBEST candidates).

Default value

-2

Note

Before strong branching is applied on a node of the branch and bound tree, a list of candidates
is selected among the infeasible global entities. These entities are then evaluated based on thelocal LP solution and prioritized. Strong branching will then be applied to the SBBEST
candidates. The evaluation is potentially expensive and for some problems it might improve
performance if the size of the candidate list is reduced.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

SBBEST, SBEFFORT, SBESTIMATE.

SCALING
Description

This bit vector control determines how the Optimizer will rescale a model internally before
optimization. If set to 0, no scaling will take place.

Type

Integer

Values

Bit
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Meaning
Row scaling.
Column scaling.
Row scaling again.
Maximum.
Curtis-Reid.
0: scale by geometric mean.
1: scale by maximum element.
Treat big-M rows as normal rows.
Scale objective function for the simplex method.
Exclude the quadratic part of constraint when calculating scaling factors.
Scale before presolve.
Do not scale rows up.
Do not scale columns down.
Do not apply automatic global objective scaling.
RHS scaling.
Disable aggressive quadratic scaling.
Enable explicit linear slack scaling.

Default value

163

Note

Setting SCALING to 0 will preserve the current scaling of the problem. Note that the Optimizer
might automatically select a different scaling strategy, when the control AUTOSCALING is notdisabled. However, if SCALING is set to any value by the user, AUTOSCALING will be ignored.

Affects routines

XPRSlpoptimize, XPRSlpoptimize, XPRSmipoptimize, XPRSscale (SCALE).

See also

6.3.1, MAXSCALEFACTOR, OBJSCALEFACTOR, AUTOSCALING.

Fair Isaac Corporation Proprietary Information

474

Chapter 8: Control Parameters

SERIALIZEPREINTSOL
Description

Setting SERIALIZEPREINTSOL to 1 will ensure that the preintsol callback will always be
fired in a deterministic order during a parallel MIP solve.

Type

Integer

Values0
1

Default value0

Affects routines

XPRSmipoptimize (MIPOPTIMIZE), XPRSaddcbpreintsol.

The preintsol callbacks will be fired asynchronously from different threads.
The preintsol callbacks will be fired in a deterministic order.

SIFTING
Description

Determines whether to enable sifting algorithm with the dual simplex method.

Type

Integer

Values-1
01

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE), XPRSlpoptimize (LPOPTIMIZE).

Automatically determined.
Disable sifting.
Enable sifting.

SIFTPASSES
Description

Determines how quickly we allow to grow the worker problems during the sifting algorithm.
Using larger values can increase the number of columns added to the worker problem which
often results in increased solve times for the worker problems but the number of necessary
sifting iterations may be reduced. .

Type

Integer

Default value

4

Affects routines

XPRSmipoptimize (MIPOPTIMIZE), XPRSlpoptimize (LPOPTIMIZE).

SIFTPRESOLVEOPS
Description

Determines the presolve operations for solving the subproblems during the sifting algorithm.

Type

Integer

Values-1>=0

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE), XPRSlpoptimize (LPOPTIMIZE).

See also

PRESOLVEOPS.

Use the PRESOLVEOPS setting specified for the original problem.
Use the value for the PRESOLVEOPS parameter for solving the subproblems during thesifting algorithm.

Fair Isaac Corporation Proprietary Information

475

Chapter 8: Control Parameters

SIFTSWITCH
Description

Determines which algorithm to use for solving the subproblems during sifting.

Type

Integer

Values-10>0Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE), XPRSlpoptimize (LPOPTIMIZE).

Dual simplex.
Barrier.
Use the barrier algorithm while the number of dual infeasibilities is larger than thisvalue, otherwise use dual simplex.

SLEEPONTHREADWAIT
Description

Determines if the threads should be put into a wait state when waiting for work.

Type

Integer

ValuesBit-1
01

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

Meaning
Automatically determined depending on the CPU the Optimizer is running on.
Keep the threads busy when waiting for work.
Put the threads into a wait state when waiting for work.

SOSREFTOL
Description

The minimum relative gap between the ordering values of elements in a special ordered set.
The gap divided by the absolute value of the larger of the two adjacent values must be at least
SOSREFTOL.

Type

DoubleDefault value

1.0E-06

Note

This tolerance must not be set lower than 1.0E-06.

Affects routines

XPRSloadglobal, XPRSloadqglobal, XPRSreadprob (READPROB).

SYMMETRY
Description

Adjusts the overall amount of effort for symmetry detection.

Type

Integer

Values0
1
2

Default value

1

No symmetry detection.
Conservative effort.
Intensive symmetry search.

Fair Isaac Corporation Proprietary Information

476

Chapter 8: Control Parameters

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

SYMSELECT.

SYMSELECT
Description

Adjusts the overall amount of effort for symmetry detection.

Type

Integer

Values0
1

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

SYMMETRY.

Search the whole matrix (otherwise the 0, 1 and -1 coefficients only).
Search all entities (otherwise binaries only).

THREADS
Description

The default number of threads used during optimization.

Type

Integer

Values-1>0

Default value

-1

Note

The value may be changed for specific parts of the optimization by the CONCURRENTTHREADS,MIPTHREADS and BARTHREADS controls.

Affects routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

DETERMINISTIC, MIPTHREADS, BARTHREADS, CONCURRENTTHREADS.

Determined automatically based on hardware configuration.
Number of threads to use.

TRACE
Description

Display the infeasibility diagnosis during presolve. If non-zero, an explanation of the logicaldeductions made by presolve to deduce infeasibility or unboundedness will be displayed onscreen or sent to the message callback function.

Type

Integer

Default value

0

Note

Presolve is sometimes able to detect infeasibility and unboundedness in problems. The set of
deductions made by presolve can allow the user to diagnose the cause of infeasibility or
unboundedness in their problem. However, not all infeasibility or unboundedness can bedetected and diagnosed in this way.

Affects routines

XPRSlpoptimize (LPOPTIMIZE).

Fair Isaac Corporation Proprietary Information

477

Chapter 8: Control Parameters

TREECOMPRESSION
Description

When writing nodes to the gloal file, the optimizer can try to use data-compression techniques
to reduce the size of the global file on disk. The TREECOMPRESSION control determines thestrength of the data-compression algorithm used; higher values give superior
data-compression at the affect of decreasing performance, while lower values compress
quicker but not as effectively. Where TREECOMPRESSION is set to 0, no data compression will
be used on the global file.

Type

Integer

Default value

2

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

TREEMEMORYLIMIT.

TREECOVERCUTS
Description

Branch and Bound: The number of rounds of lifted cover inequalities generated at nodes otherthan the top node in the tree. Compare with the description for COVERCUTS. A value of -1
indicates the number of rounds is determined automatically.

Type

Integer

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

TREECUTSELECT
Description

A bit vector providing detailed control of the cuts created during the tree search of a global
solve. Use CUTSELECT to control cuts on the root node.

Type

Integer

Values

Bit
5
6
7
8
11
12
13
14
15
16
17

Default value

-1

Note

The default value is -1 which enables all bits. Any bits not listed in the above table should be left
in their default ’on’ state, since the interpretation of such bits might change in future versions of
the optimizer.

Meaning
Clique cuts.
Mixed Integer Rounding (MIR) cuts.
Lifted cover cuts.
Turn on row aggregation for MIR cuts.
Flow path cuts.
Implication cuts.
Turn on automatic Lift and Project cutting strategy.
Disable cutting from cut rows.
Lifted GUB cover cuts.
Zero-half cuts.
Indicator constraint cuts.

Fair Isaac Corporation Proprietary Information

478

Chapter 8: Control Parameters

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

COVERCUTS, GOMCUTS, CUTSELECT.

TREEDIAGNOSTICS
Description

A bit vector providing control over how various tree-management-related messages get printed
in the global logfile during the branch-and-bound search.

Type

Integer

ValuesBit
01
1

Default value

7

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPLOG, PEAKTOTALTREEMEMORYUSAGE, GLOBALFILELOGINTERVAL.

Meaning
Output regular summaries of current tree memory usage.
Output messages whenever tree data is being written to global file.
Output progress messages while tree data is being written to the global flie, at aninterval controlled by the GLOBALFILELOGINTERVAL control.

TREEGOMCUTS
Description

Branch and Bound: The number of rounds of Gomory cuts generated at nodes other than thefirst node in the tree. Compare with the description for GOMCUTS. A value of -1 indicates thenumber of rounds is determined automatically.

Type

Integer

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

TREEMEMORYLIMIT
Description

A soft limit, in megabytes, for the amount of memory to use in storing the branch and boundsearch tree. This doesn’t include memory used for presolve, heuristics, solving the LP
relaxation, etc. When set to 0 (the default), the optimizer will calculate a limit automatically
based on the amount of free physical memory detected in the machine. When the memory
used by the branch and bound tree exceeds this limit, the optimizer will try to reduce thememory usage by writing lower-rated sections of the tree to a file called the "global file".
Though the solve can continue if it cannot bring the tree memory usage below the specified
limit, performance will be inhibited and a message will be printed to the log.

Type

Integer

Default value

0 (calculate limit automatically)

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

TREEMEMORYSAVINGTARGET, TREECOMPRESSION, TREEDIAGNOSTICS.

Fair Isaac Corporation Proprietary Information

479

Chapter 8: Control Parameters

TREEMEMORYSAVINGTARGET
Description

When the memory used by the branch-and-bound search tree exceeds the limit specified by the
TREEMEMORYLIMIT control, the optimizer will try to save memory by writing lower-rated
sections of the tree to the global file. The target amount of memory to save will be enough tobring memory usage back below the limit, plus enough extra to give the tree room to grow. The
TREEMEMORYSAVINGTARGET control specifies the extra proportion of the tree’s size to try tosave; for example, if the tree memory limit is 1000Mb and TREEMEMORYSAVINGTARGET is 0.1,
when the tree size exceeds 1000Mb the optimizer will try to reduce the tree size to 900Mb.
Reducing the value of TREEMEMORYSAVINGTARGET will cause less extra nodes of the tree tobe written to the global file, but will result in the memory saving routine being triggered more
often (as the tree will have less room in which to grow), which can reduce performance.
Increasing the value of TREEMEMORYSAVINGTARGET will cause additional, more highly-rated
nodes, of the tree to be written to the global file, which can cause performance issues if thesenodes are required later in the solve.

Type

DoubleDefault value

0.4

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

TREEMEMORYLIMITTREEQCCUTS
Description

Branch and Bound: Limit on the number of rounds of outer approximation cuts generated fornodes other than the root node, when solving a mixed integer quadratic constrained or mixed
integer second order conic problem with outer approximation.

Type

Integer

Default value-1 — determined automatically.

Note

This control only has an effect for problems with quadratic or second order cone constraints,
and only if outer approximation has not been disabled by setting MIQCPALG to 0.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

QCCUTS.

TUNERHISTORY
Description

Tuner: Whether to reuse and append to previous tuner results of the same problem.

Type

Integer

Values0
1
2

Default value

2

Notes

Please refer to Section 5.12.5 for more information about reusing tuner results.

Discard any previous tuner results.
Append new results to the previous tuner results, but do not reuse them.
Reuse the previous results and append new results to it.

This control only has an effect on the tuner. This control cannot be tuned.
Affects routines

XPRStune (TUNE).

Fair Isaac Corporation Proprietary Information

480

Chapter 8: Control Parameters

TUNERMAXTIME
Description

Tuner: The maximum time in seconds that the tuner will run before it terminates.

Type

Integer

Values0n>0Default value

0

Note

This control only has an effect on the tuner. This control cannot be tuned.

Affects routines

XPRStune (TUNE).

No time limit.
Stop the tuner after n seconds.

TUNERMETHOD
Description

Tuner: Selects a factory tuner method. A tuner method consists of a list of controls withdifferent settings that the tuner will evaluate and try to combine.

Type

Integer

Values

-1
0
1
2
3
4
5
6
7
8

Automatically determined. The tuner will select the default method based on the
problem type.
Select the default LP tuner method.
Select the default MIP tuner method.
Select a more comprehensive MIP tuner method.
Select a root-focus MIP tuner method.
Select a tree-focus MIP tuner method.
Select a simple MIP tuner method.
Select the default SLP tuner method.
Select the default MISLP tuner method.
Select a MIP tuner method focussed on primal heuristics.

Default value

-1

Notes

If the tuner has already loaded a user-defined tuner method, then it will not load any factory
tuner method.
Please refer to Section 5.12.2 for more information about the tuner method, and Appendix A.8
for the format of the tuner method file.
This control only has an effect on the tuner. This control cannot be tuned.

Affects routines

XPRStune (TUNE).

TUNERMETHODFILE
Description

Tuner: Defines a file from which the tuner can read user-defined tuner method.

Type

StringDefault value(empty)Fair Isaac Corporation Proprietary Information

481

Chapter 8: Control Parameters

Notes

If the tuner has already loaded a tuner method via XPRStunerreadmethod, then it will notcheck this control. Otherwise, when this control is defined and a tuner method can be
succesfully loaded from this file, then the tuner will not load any factory tuner method.
Please refer to Section 5.12.2 for more information about the tuner method, and Appendix A.8
for the format of the tuner method file.
This control only has an effect on the tuner. This control cannot be tuned.

Affects routines

XPRStune (TUNE).

TUNERMODE
Description

Tuner: Whether to always enable the tuner or disable it.

Type

Integer

Values-1
01

Default value

-1

Note

This control cannot be tuned.

Affects routines

XPRStune (TUNE), XPRSmipoptimize (MIPOPTIMIZE), XPRSlpoptimize (LPOPTIMIZE).

No effect.
Always disable the tuner. XPRStune (TUNE) will have no effect.
Always enable the tuner. XPRSmipoptimize (MIPOPTIMIZE), XPRSlpoptimize(LPOPTIMIZE), etc. will call the tuner before solving the problem.

TUNEROUTPUT
Description

Tuner: Whether to output tuner results and logs to the file system.

Type

Integer

Values0
1

Default value

1

Notes

Please refer to Section 5.12.3 for more information about the tuner output.

Don’t output to the file system.
Output results and logs to the file system.

This control only has an effect on the tuner. This control cannot be tuned.
Affects routines

XPRStune (TUNE).

TUNEROUTPUTPATH
Description

Tuner: Defines a root path to which the tuner writes the result file and logs.

Type

StringDefault value

tuneroutput

Notes

This control only defines the root path for the tuner output. For each problem, the tuner result
will be output to a subfolder underneath this path. For example, by default, the tuner result for a
problem called prob will be located at tuneroutput/prob/
Please refer to Section 5.12.3 for more information about the tuner output.
This control only has an effect on the tuner. This control cannot be tuned.

Fair Isaac Corporation Proprietary Information

482

Chapter 8: Control Parameters

Affects routines

XPRStune (TUNE).

TUNERPERMUTE
Description

Tuner: Defines the number of permutations to solve for each control setting.

Type

Integer

Values0n>0Default value

0

Notes

Please refer to Section 5.12.7 for more information about tuner problem permutations.

Solve the original problem only for each setting.
Solve the original problem and n permuted problems for each setting.

This control only has an effect on the tuner. This control cannot be tuned.
Affects routines

XPRStune (TUNE).

TUNERROOTALG
Description

This parameter is deprecated and will be removed in a future release. This control is provided forcompatibility purposes. Please use LPFLAGS instead.
It is a bit-vector control which defines the algorithm for solving an LP problem or the initial LP
relaxation of a MIP problem within the tuner specifically.

Type

Integer

Values

Bit
0
1
2
3

Default value

0

Notes

Setting bit 0, 1, 2, 3 of this control will have the same effect of passing flags d, p, b, n to
XPRSmipoptimize or XPRSlpoptimize. When more than one bit are set, then the LP
problem will be solved with the concurrent solver.

Meaning
Use the dual simplex method.
Use the primal simplex method.
Use the barrier method.
Use the network simplex method.

This control only has an effect on the tuner.
This control can be tuned.
Affects routines

XPRStune (TUNE).

TUNERSESSIONNAME
Description

Tuner: Defines a session name for the tuner.

Type

StringDefault value(empty)Fair Isaac Corporation Proprietary Information

483

Chapter 8: Control Parameters

Notes

When defined, the session name will override the problem name within the tuner. For example,
if this control is set to session, then the tuner result for a problem will be located attuneroutput/session/
This control can be useful when the problem name is randomly generated.
Please refer to Section 5.12.3 for more information about the tuner output.
This control only has an effect on the tuner. This control cannot be tuned.

Affects routines

XPRStune (TUNE).

TUNERTARGET
Description

Tuner: Defines the tuner target – what should be evaluated when comparing two runs withdifferent control settings.

Type

Integer

Values

-1
0
1
2
3
4
5
6
7
8
9
10

Automatically determined. The tuner will choose the default target based on problem
type.
Solution time then gap. (MIP/MISLP default)
Solution time then best bound.
Solution time then best integer solution.
The primal dual integral.
Time only. (LP/SLP default)
SLP objective only. (SLP/MISLP choice)
SLP validation number only. (SLP/MISLP choice)Gap only.
Best bound only.
Best integer solution only.
Best primal integral. (Only for individual instances, not for problem sets)

Default value

-1

Notes

Please refer to Section 5.12.4 for more information about tuner targets.
This control only has an effect on the tuner. This control cannot be tuned.

Affects routines

XPRStune (TUNE).

TUNERTHREADS
Description

Tuner: the number of threads used by the tuner.

Type

Integer

Values-1
1n>1

Default value

1

Choose automaticlly.
The tuner will run in sequential.
The tuner will run in parallel with n threads.

Fair Isaac Corporation Proprietary Information

484

Chapter 8: Control Parameters

Notes

Setting this control will not affect number of threads used by each individual run. It is
recommended to have the product of TUNERTHREADS and THREADS less or equal to thenumber of system threads.
When setting TUNERTHREADS=-1, the tuner will automatically use as many threads as thenumber of logical processors detected.
Please refer to Section 5.12.6 for more information about tuner with multiple threads.
This control only has an effect on the tuner. This control cannot be tuned.

Affects routines

XPRStune (TUNE).

TUNERVERBOSE
Description

Tuner: whether the tuner should prints detailed information for each run.

Type

Integer

Values10

Default value

1

Notes

Please refer to Section 5.12.6 for more information about tuner with multiple threads.

Print extra information.
Print less information.

This control only has an effect on the tuner. This control cannot be tuned.
Affects routines

XPRStune (TUNE).

USERSOLHEURISTIC
Description

Determines how much effort to put into running a local search heuristic to find a feasible
integer solution from a partial or infeasible user solution.

Type

Integer

Values-1
0
1
2
3Default value

-1

Note

When a partial or infeasible user solution is added with XPRSaddmipsol, a local searchheuristic will be applied to the problem in an attempt to find a feasible, integer solution thateither completes the partial solution or is close to the infeasible solution. Whether to run such aheuristic, or how much effort to put into the heuristic can be controlled by this
USERSOLHEURISTIC parameter.

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

HEURSEARCHROOTSELECT, HEURSEARCHTREESELECT.

Automatically determined.
Search heuristic disabled.
Light effort.
Moderate effort.
High effort.

Fair Isaac Corporation Proprietary Information

485

Chapter 8: Control Parameters

VARSELECTION
Description

Branch and Bound: This determines the formula used to calculate the estimate of each integer
variable, and thus which integer variable is selected to be branched on at a given node. The
variable selected to be branched on is the one with the maximum estimate.

Type

Integer

Values

-1
1
2
3
4
5
6
7
8

Determined automatically.
The minimum of the ’up’ and ’down’ pseudo costs.
The ’up’ pseudo cost plus the ’down’ pseudo cost.
The maximum of the ’up’ and ’down’ pseudo costs, plus twice the minimum of the ’up’
and ’down’ pseudo costs.
The maximum of the ’up’ and ’down’ pseudo costs.
The ’down’ pseudo cost.
The ’up’ pseudo cost.
A weighted combination of the ’up’ and ’down’ pseudo costs, where the weights
depend on how fractional the variable is.
The product of the ’up’ and ’down’ pseudo costs.

Default value-1

Affects routines

XPRSmipoptimize (MIPOPTIMIZE).

VERSION
Description

The Optimizer version number, e.g. 1301 meaning release 13.01.

Type

Integer

Default value

Software version dependent

Fair Isaac Corporation Proprietary Information

486

CHAPTER 9

Problem Attributes
During the optimization process, various properties of the problem being solved are stored and madeavailable to users of the FICO Xpress Libraries in the form of problem attributes. These can be accessedin much the same manner as for the controls. Examples of problem attributes include the sizes of arrays,
for which library users may need to allocate space before the arrays themselves are retrieved. A full list of
the attributes available and their types may be found in this chapter.

9.1 Retrieving Problem Attributes
Library users are provided with the following three functions for obtaining the values of attributes:
XPRSgetintattrib

XPRSgetdblattrib

XPRSgetstrattrib

Much as for the controls previously, it should be noted that the attributes as listed in this chapter must be
prefixed with XPRS_ to be used with the FICO Xpress Libraries and failure to do so will result in an error.
An example of their usage is the following which returns and prints the optimal value of the objectivefunction after the linear problem has been solved:
XPRSgetdblattrib(prob, XPRS_LPOBJVAL, &lpobjval);printf("The objective value is %2.1f\n", lpobjval);

ACTIVENODES
Description

Number of outstanding nodes.

Type

Integer

Set by routines

XPRSmipoptimize (MIPOPTIMIZE), XPRSinitglobal.

ALGORITHM
Description

The algorithm the optimizer currently is running / was running just before completition.

Type

Integer

Values

12
3
45

No LP optimization yet.
Dual simplex.
Primal simplex.
Newton barrier.
Network simplex.

Fair Isaac Corporation Proprietary Information

487

Chapter 9: Problem Attributes

Note

If the barrier with crossover is used, the value of ALGORITHM during the crossover and the final
clean up will reflect the algorithm used, but will be reset to barrier once the optimization iscomplete.

ATTENTIONLEVEL
Description

A measure between 0 and 1 for how numerically unstable the problem is. The attention level isbased on a weighted combination of the number of basis condition numbers exceeding certain
thresholds. It considers all nodes sampled by MIPKAPPAFREQ, with a setting of 1 being themost frequent sampling rate. The higher the attention level, the worse conditioned is the
problem.

Type

DoubleSet by routines

XPRSmipoptimize.

See also

MAXKAPPA, MIPKAPPAFREQ, PREDICTEDATTLEVEL.

AVAILABLEMEMORY
Description

The amount of heap memory detected by Xpress as free.

TypeIntegerNote

On 64bit systems this is a 64bit integer, use XPRSgetintattrib64 to retrieve its value.

See also

PEAKMEMORY, CURRENTMEMORY, TOTALMEMORYBARAASIZE
Description

Number of nonzeros in AAT .

Type

Integer

Set by routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARCGAP
Description

Convergence criterion for the Newton barrier algorithm.

Type

DoubleSet by routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARCONDA
Description

Absolute condition measure calculated in the last iteration of the barrier algorithm.

Type

DoubleSet by routines

The barrier algorithm.

Fair Isaac Corporation Proprietary Information

488

Chapter 9: Problem Attributes

BARCONDD
Description

Condition measure calculated in the last iteration of the barrier algorithm.

Type

DoubleSet by routines

The barrier algorithm.

BARCROSSOVER
Description

Indicates whether or not the basis crossover phase has been entered.

Type

Integer

Values0
1

Set by routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

the crossover phase has not been entered.
the crossover phase has been entered.

BARDENSECOL
Description

Number of dense columns found in the matrix.

Type

Integer

Set by routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARDUALINF
Description

Sum of the dual infeasibilities for the Newton barrier algorithm.

Type

DoubleSet by routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARDUALOBJ
Description

Dual objective value calculated by the Newton barrier algorithm.

Type

DoubleSet by routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARITER
Description

Number of Newton barrier iterations.

Type

Integer

Set by routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Fair Isaac Corporation Proprietary Information489

Chapter 9: Problem Attributes

BARLSIZE
Description

Number of nonzeros in L resulting from the Cholesky factorization.

Type

Integer

Set by routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARPRIMALINF
Description

Sum of the primal infeasibilities for the Newton barrier algorithm.

Type

DoubleSet by routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARPRIMALOBJ
Description

Primal objective value calculated by the Newton barrier algorithm.

Type

DoubleSet by routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

BARSING
Description

Number of linearly dependent binding constraints at the optimal barrier solution. These resultsin singularities in the Cholesky decomposition during the barrier that may cause numericaltroubles. Larger dependence means more chance for numerical difficulties.

Type

DoubleSet by routines

The barrier algorithm.

BARSINGR
Description

Regularized number of linearly dependent binding constraints at the optimal barrier solution.
These results in singularities in the Cholesky decomposition during the barrier that may cause
numerical troubles. Larger dependence means more chance for numerical difficulties.

Type

DoubleSet by routines

The barrier algorithm.

BESTBOUND
Description

Value of the best bound determined so far by the global search.

Type

DoubleSet by routines

XPRSmipoptimize (MIPOPTIMIZE).

Fair Isaac Corporation Proprietary Information

490

Chapter 9: Problem Attributes

BOUNDNAME
Description

Active bound name.

Type

StringSet by routines

XPRSreadprob.

BRANCHVALUE
Description

The value of the branching variable at a node of the Branch and Bound tree.

Type

DoubleSet by routines

XPRSmipoptimize (MIPOPTIMIZE).

BRANCHVAR
Description

The branching variable at a node of the Branch and Bound tree.

Type

Integer

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

CALLBACKCOUNT_CUTMGR
Description

This attribute counts the number of times the cut manager callback set by XPRSaddcbcutmgr
has been called for the current node, including the current callback call. The value of this
attribute should only be used from within the cut manager callback.

Type

Integer

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

CALLBACKCOUNT_OPTNODE
Description

This attribute counts the number of times the optimal node callback set by
XPRSaddcboptnode has been called for the current node, including the current callback call.
The value of this attribute should only be used from within the optimal node callback.

Type

Integer

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

CHECKSONMAXCUTTIME
Description

This attribute is used to set the value of the MAXCHECKSONMAXCUTTIME control. Its value isthe number of times the optimizer checked the MAXCUTTIME criterion during the last call to the
optimization routine XPRSmipoptimize. If a run terminates cutting operations on the
MAXCUTTIME criterion then the attribute is the negative of the number of times the optimizer
checked the MAXCUTTIME criterion up to and including the check when the termination was
activated. Note that the attribute is set to zero at the beginning of each call to an optimization
routine.

Fair Isaac Corporation Proprietary Information

491

Chapter 9: Problem Attributes

Type

Integer

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

CHECKSONMAXTIME
Description

This attribute is used to set the value of the MAXCHECKSONMAXTIME control. Its value is thenumber of times the optimizer checked the MAXTIME criterion during the last call to the
optimization routine XPRSmipoptimize. If a run terminates on the MAXTIME criterion thenthe attribute is the negative of the number of times the optimizer checked the MAXTIME
criterion up to and including the check when the termination was activated. Note that the
attribute is set to zero at the beginning of each call to an optimization routine.

Type

Integer

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

COLS
Description

Number of columns (i.e. variables) in the matrix.

Type

Integer

Note

If the matrix is in a presolved state, this attribute returns the number of columns in thepresolved matrix. If you require the value for the original matrix then use the ORIGINALCOLS
attribute instead. The PRESOLVESTATE attribute can be used to test if the matrix is presolved
or not. See also 5.3.

Set by routines

XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSlpoptimize(LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE) XPRSreadprob.

COMPUTEEXECUTIONS
Description

The number of solves executed on a compute server.

Type

Integer

Set by routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE), XPRStune,
XPRSrepairinfeas, XPRSiisfirst, XPRSiisnext, XPRSiisall.

CONEELEMS
Description

Number of second order cone coefficients in the problem.

Type

Integer

Note

If the matrix is in a presolved state, this attribute returns the number of the second order(including rotated second order) cone coefficients in the presolved matrix. Second order conic
quadratic constraints are automaticly detected at optimization time, and this attribute is not set
before optimizing the problem.

Set by routines

Optimizing the problem.

Fair Isaac Corporation Proprietary Information

492

Chapter 9: Problem Attributes

CONES
Description

Number of second order and rotated second order cones in the problem.

Type

Integer

Note

If the matrix is in a presolved state, this attribute returns the number of second order (including
rotated second order) cones in the presolved matrix. Conic quadratic constraints areautomaticly detected at optimization time, and this attribute is not set before optimizing the
problem.

Set by routines

Optimizing the problem.

CORESDETECTED
Description

Number of logical cores detected by the optimizer, which is the total number of threads the
hardware can execute across all CPUs.

Type

Integer

Values>=1

Notes

If Xpress is running in a container and the container limits the number of cores then this limit isapplied to the attribute value by default. This clipping can be disabled by setting
IGNORECONTAINERCPULIMIT to 1.

Detected number of logical cores.

The optimizer will automatically use as many solver threads as the number of logical cores
detected.
If the detection fails, the optimizer will default to using a single thread only.
Set by routines

XPRSinit.

See also

THREADS, CORESPERCPUDETECTED, CPUSDETECTED, PHYSICALCORESDETECTED,PHYSICALCORESPERCPUDETECTED.

CORESPERCPUDETECTED
Description

Number of logical cores per CPU unit detected by the optimizer, which is the number of threads
each CPU can execute.

TypeInteger

Values

>=1

Set by routines

XPRSinit.

See also

THREADS, CORESDETECTED, CPUSDETECTED, PHYSICALCORESDETECTED,PHYSICALCORESPERCPUDETECTED.

Detected number of logical cores per CPU unit.

CPISCALEFACTOR
Description

scale factor from primal integral computation.

Type

DoubleFair Isaac Corporation Proprietary Information

493

Chapter 9: Problem Attributes

NoteThis attribute represents the scaling factor that was used when computing the primal integral.
It can be used to compute an updated (or correlated) primal integral with respect to a newreference solution. For details see Berthold and Csizmadia: The confined primal integral,
Mathematical Programming volume 188(2), pp. 523–537, 2021.

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

OBSERVEDPRIMALINTEGRAL, CPIALPHA.

CPUSDETECTED
Description

Number of CPU units detected by the optimizer.

Type

Integer

Values

>=1

Set by routines

XPRSinit.

See also

THREADS, CORESDETECTED, CORESPERCPUDETECTED, PHYSICALCORESDETECTED,PHYSICALCORESPERCPUDETECTED.

Detected number of CPU units.

CURRENTMEMORY
Description

The amount of dynamically allocated heap memory by the problem being solved.

Type

IntegerNote

On 64bit systems this is a 64bit integer, use XPRSgetintattrib64 to retrieve its value.

See also

PEAKMEMORY, CURRENTMEMORY, TOTALMEMORYCURRENTNODE
Description

The unique identifier of the current node in the tree search.

Type

Integer

Note

The root node is always identified as node 1.

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

PARENTNODE.

CURRMIPCUTOFF
Description

The current MIP cut off.

Type

DoubleSet by routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPABSCUTOFF.

Fair Isaac Corporation Proprietary Information

494

Chapter 9: Problem Attributes

CUTS
Description

Number of cuts being added to the matrix.

Type

Integer

Set by routines

XPRSaddcuts, XPRSdelcpcuts, XPRSdelcuts, XPRSloadcuts, XPRSloadmodelcuts.

DUALINFEAS
Description

Number of dual infeasibilities.

Type

Integer

Note

If the matrix is in a presolved state, this attribute returns the number of dual infeasibilities in thepresolved matrix. If you require the value for the original matrix, make sure you obtain the value
when the matrix is not presolved. The PRESOLVESTATE attribute can be used to test if thematrix is presolved or not. See also 5.3.

Set by routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

PRIMALINFEAS.

ELEMS
Description

Number of matrix nonzeros (elements).

Type

Integer

Note

If the matrix is in a presolved state, this attribute returns the number of matrix nonzeros in thepresolved matrix. If you require the value for the original matrix, make sure you obtain the value
when the matrix is not presolved. The PRESOLVESTATE attribute can be used to test if thematrix is presolved or not. See also 5.3.

Set by routines

XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSlpoptimize(LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE), XPRSreadprob.

ERRORCODE
Description

The most recent Optimizer error number that occurred. This is useful to determine the precise
error or warning that has occurred, after an Optimizer function has signalled an error by
returning a non-zero value. The return value itself is not the error number. Refer to the section
10.2 for a list of possible error numbers, the errors and warnings that they indicate, and advice
on what they mean and how to resolve them. A short error message may be obtained using
XPRSgetlasterror, and all messages may be intercepted using the user output callback
function; see XPRSaddcbmessage.

Type

Integer

Set by routines

Any.

Fair Isaac Corporation Proprietary Information

495

Chapter 9: Problem Attributes

GENCONCOLS
Description

Number of input variables in general constraints in the problem.

Type

IntegerNote

The total number of input variables in MIN/MAX/AND/OR/ABS constraints in the problem.

Set by routines

XPRSaddgencons

GENCONS
Description

Number of general constraints in the problem.

Type

IntegerNote

The total number of MIN/MAX/AND/OR/ABS constraints in the problem.

Set by routines

XPRSaddgencons

GENCONVALS
Description

Number of constant values in general constraints in the problem.

Type

IntegerNote

The total number of constant values in MIN/MAX constraints in the problem.

Set by routines

XPRSaddgencons

GLOBALFILESIZE
Description

The allocated size of the global file, in megabytes. Because data can be removed from theglobal file during the branch and bound search, the size of the global file is usually greater than
the amount of data currently within it (represented by the GLOBALFILEUSAGE attribute).

Type

Integer

See also

GLOBALFILEUSAGE.

GLOBALFILEUSAGE
Description

The number of megabytes of data from the branch-and-bound tree that have been saved to theglobal file. Note that the actual allocated size of the global file (represented by the
GLOBALFILESIZE control) may be greater than this value.

Type

Integer

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

GLOBALFILESIZE, GLOBALFILEBIAS, TREEMEMORYLIMIT.

Fair Isaac Corporation Proprietary Information

496

Chapter 9: Problem Attributes

INDICATORS
Description

Number of indicator constrains in the problem.

Type

Integer

Note

When the matrix is in a presolved state, the indicator constraints are stored in a special pooland not part of the matrix. Otherwise the indicator constraints are rows of the matrix and theirdetails can be retrieved with the XPRSgetindicators function. The PRESOLVESTATE
attribute can be used to test if the matrix is presolved or not. See also 5.3.

Set by routines

XPRSsetindicators, XPRSdelindicators, XPRSreadprob.

LPOBJVAL
Description

Value of the objective function of the last LP solved.

Type

DoubleSet by routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPOBJVAL, OBJRHS.

LPSTATUS
Description

LP solution status.

Type

Integer

Values

0
1
2
3
4
5
6
7
8

Note

The possible return values are defined as constants in the Optimizer C header file and VB .bas
file.

Set by routines

XPRSlpoptimize (LPOPTIMIZE).

See also

MIPSTATUS.

Unstarted (XPRS_LP_UNSTARTED).
Optimal (XPRS_LP_OPTIMAL).
Infeasible (XPRS_LP_INFEAS).
Objective worse than cutoff (XPRS_LP_CUTOFF).
Unfinished (XPRS_LP_UNFINISHED).
Unbounded (XPRS_LP_UNBOUNDED).
Cutoff in dual (XPRS_LP_CUTOFF_IN_DUAL).
Problem could not be solved due to numerical issues. (XPRS_LP_UNSOLVED).
Problem contains quadratic data, which is not convex (XPRS_LP_NONCONVEX).

MATRIXNAMEDescription

The matrix name.

Type

String

Note

This is the name read from the MATRIX field in an MPS matrix, and is not related to the problem
name used in the Optimizer. Use XPRSgetprobname to get the problem name.

Set by routines

XPRSreadprob, XPRSsetprobname.

Fair Isaac Corporation Proprietary Information

497

Chapter 9: Problem Attributes

MAXABSDUALINFEAS
Description

Maximum calculated absolute dual infeasibility in the unscaled original problem.

Type

DoubleSet by routines

XPRSlpoptimize, XPRSmipoptimize.

MAXABSPRIMALINFEAS
Description

Maximum calculated absolute primal infeasibility in the unscaled original problem.

Type

DoubleSet by routines

XPRSlpoptimize, XPRSmipoptimize, XPRSrefinemipsol.

MAXKAPPA
Description

Largest basis condition number (also known as kappa) calculated through all nodes sampled
by MIPKAPPAFREQ.

Type

DoubleSet by routines

XPRSmipoptimize.

See also

MIPKAPPAFREQ.

MAXMIPINFEAS
Description

Maximum integer fractionality in the solution.

Type

DoubleSet by routines

XPRSmipoptimize.

MAXPROBNAMELENGTH
Description

Maximum size of the problem name and also the maximum allowed length of the file or pathstring for any function that accepts such an argument.

Type

Integer

Set by routines

XPRSgetprobname, XPRSsetprobname.

MAXRELDUALINFEAS
Description

Maximum calculated relative dual infeasibility in the unscaled original problem.

Type

DoubleSet by routines

XPRSlpoptimize, XPRSmipoptimize.

Fair Isaac Corporation Proprietary Information

498

Chapter 9: Problem Attributes

MAXRELPRIMALINFEAS
Description

Maximum calculated relative primal infeasibility in the unscaled original problem.

Type

DoubleSet by routines

XPRSlpoptimize, XPRSmipoptimize.

MEMORYLIMITDETECTED
Description

The detected amount of memory accessible to the solver process, in megabytes. This is theminimum of physical memory, virtual memory limitations, and detected container limitations(Linux only).

Type

Integer

Set by routines

XPRSinit.

See also

CORESDETECTED, CORESPERCPUDETECTED, CPUSDETECTED, PHYSICALCORESDETECTED,PHYSICALCORESPERCPUDETECTED, PEAKMEMORY, CURRENTMEMORY, TOTALMEMORY.

MIPBESTOBJVAL
Description

Objective function value of the best integer solution found.

Type

DoubleSet by routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPOBJVAL.

MIPENTS
Description

Number of global entities (i.e. binary, integer, semi-continuous, partial integer, andsemi-continuous integer variables) but excluding the number of special ordered sets.

Type

Integer

Note

If the matrix is in a presolved state, this attribute returns the number of global entities in thepresolved matrix. If you require the value for the original matrix, make sure you obtain the value
when the matrix is not presolved. The PRESOLVESTATE attribute can be used to test if thematrix is presolved or not. See also 5.3.

Set by routines

XPRSaddcols, XPRSchgcoltype, XPRSdelcols, XPRSloadglobal, XPRSloadqglobal,
XPRSreadprob.

See also

SETS.

MIPINFEAS
Description

Number of integer infeasibilities, including violations of special ordered sets, at the current
node.

Type

Integer

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

PRIMALINFEAS.

Fair Isaac Corporation Proprietary Information

499

Chapter 9: Problem Attributes

MIPOBJVAL
Description

Objective function value of the last integer solution found.

Type

DoubleSet by routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPBESTOBJVAL.

MIPSOLNODE
Description

Node at which the last integer feasible solution was found.

Type

Integer

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPSOLTIME.

MIPSOLS
Description

Number of integer solutions that have been found.

Type

Integer

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

MIPSOLTIME
Description

Time at which the last integer feasible solution was found.

Type

Integer

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPSOLNODE, MAXSTALLTIME.

MIPSTATUS
Description

Global (MIP) solution status.

Type

Integer

Fair Isaac Corporation Proprietary Information

500

Chapter 9: Problem Attributes

Values

0
1
2
3
4
5
6
7

Problem has not been loaded (XPRS_MIP_NOT_LOADED).
Global search incomplete - the initial continuous relaxation has not been solved and no
integer solution has been found (XPRS_MIP_LP_NOT_OPTIMAL).
Global search incomplete - the initial continuous relaxation has been solved and no
integer solution has been found (XPRS_MIP_LP_OPTIMAL).
Global search incomplete - no integer solution found (XPRS_MIP_NO_SOL_FOUND).
Global search incomplete - an integer solution has been found(XPRS_MIP_SOLUTION).
Global search complete - no integer solution found (XPRS_MIP_INFEAS).
Global search complete - integer solution found (XPRS_MIP_OPTIMAL).
Global search incomplete - the initial continuous relaxation was found to be
unbounded. A solution may have been found (XPRS_MIP_UNBOUNDED).

Note

The possible return values are defined as constants in the Optimizer C header file and VB .bas
file.

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

LPSTATUS.

MIPTHREADID
Description

The ID for the MIP thread.

Type

Integer

Note

The first MIP thread has ID 0 and is the same as the main thread. All other threads are new
threads and are destroyed when the global search is halted.

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

MIPTHREADS.

NAMELENGTH
Description

The length (in 8 character units) of row and column names in the matrix. To allocate acharacter array to store names, you must allow 8⁎NAMELENGTH+1 characters per name (the+1 allows for the string terminator character).

Type

Integer

Set by routines

XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.

NODEDEPTH
Description

Depth of the current node.

Type

Integer

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

Fair Isaac Corporation Proprietary Information

501

Chapter 9: Problem Attributes

NODES
Description

Number of nodes solved so far in the global search. A node is counted as solved when it iseither dropped or branched on.

Type

Integer

Note

The root node has depth 1.

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

NUMIIS
Description

Number of IISs found.

Type

Integer

Set by routines

IIS, XPRSiisfirst, XPRSiisnext, XPRSiisall.

OBJNAME
Description

Active objective function row name.

Type

StringSet by routines

XPRSreadprob.

OBJRHS
Description

Fixed part of the objective function.

Type

DoubleNote

If the matrix is in a presolved state, this attribute returns the fixed part of the objective in thepresolved matrix. If you require the value for the original matrix, make sure you obtain the value
when the matrix is not presolved. The PRESOLVESTATE attribute can be used to test if thematrix is presolved or not. See also 5.3. If an MPS file contains an objective function coefficientin the RHS then the negative of this will become OBJRHS.

Set by routines

XPRSchgobj.

See also

LPOBJVAL.

OBSERVEDPRIMALINTEGRAL
Description

Value of the (observed) primal integral.

Type

DoubleNote

This attribute represents the integral of the primal gap over time. It measures the convergenceof the primal bound MIPBESTOBJVAL over the whole solving time. The observed primal
integral uses the best MIP solution found in a solve as a reference value. Consequently,
different solves might use different reference values, and the observed primal integral values
might not be readily comparable. If they do finish with the same MIPBESTOBJVAL (e.g.,
because both solved to optimality), the primal integrals are comparable, and the lower value

Fair Isaac Corporation Proprietary Information502

Chapter 9: Problem Attributes

indicates a better convergence of the best solution value. For details on the primal integral see
Berthold: Measuring the impact of primal heuristics, OR Letters 41(6), pp. 611-614, 2013 as well
as Berthold and Csizmadia: The confined primal integral, Mathematical Programming volume188(2), pp. 523–537, 2021.
Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

PRIMALDUALINTEGRAL, CPIALPHA, CPISCALEFACTOR, MIPBESTOBJVAL.

OBJSENSE
Description

Sense of the optimization being performed.

Type

DoubleValues

-1.0
1.0

Note

The objective sense of a problem can be changed using XPRSchgobjsense.

Set by routines

XPRSchgobjsense (CHGOBJSENSE).

For maximization problems.
For minimization problems.

ORIGINALCOLS
Description

Number of columns (i.e. variables) in the original matrix before presolving.

Type

IntegerNote

If you require the value for the presolved matrix then use the COLS attribute.

Set by routines

XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.

ORIGINALGENCONS
Description

Number of general constraints in the original problem before presolving.

Type

IntegerNote

If you require the value for the presolved problem then use the GENCONS attribute.

Set by routines

XPRSaddgencons.

ORIGINALGENCONCOLS
Description

Number of input variables in general constraints in the original problem before presolving.

Type

IntegerNote

If you require the value for the presolved problem then use the GENCONCOLS attribute.

Set by routines

XPRSaddgencons.

Fair Isaac Corporation Proprietary Information503

Chapter 9: Problem Attributes

ORIGINALGENCONVALS
Description

Number of constant values in general constraints in the original problem before presolving.

Type

IntegerNote

If you require the value for the presolved problem then use the GENCONVALS attribute.

Set by routines

XPRSaddgencons.

ORIGINALINDICATORS
Description

Number of indicator constraints in the original matrix before presolving.

Type

IntegerNote

If you require the value for the presolved matrix then use the INDICATORS attribute.

Set by routines

XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.

ORIGINALMIPENTS
Description

Number of global entities (i.e. binary, integer, semi-continuous, partial integer, andsemi-continuous integer variables) but excluding the number of special ordered sets in theoriginal matrix before presolving.

Type

IntegerNote

If you require the value for the presolved matrix then use the MIPENTS attribute. .

Set by routines

XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.

ORIGINALPWLS
Description

Number of piecewise linear constraints in the original problem before presolving.

Type

IntegerNote

If you require the value for the presolved problem then use the PWLCONS attribute.

Set by routines

XPRSaddpwlcons.

ORIGINALPWLPOINTS
Description

Number of breakpoints of piecewise linear constraints in the original problem before presolving.

Type

IntegerNote

If you require the value for the presolved problem then use the PWLPOINTS attribute.

Set by routines

XPRSaddpwlcons.

Fair Isaac Corporation Proprietary Information504

Chapter 9: Problem Attributes

ORIGINALQCONSTRAINTS
Description

Number of rows with quadratic coefficients in the original matrix before presolving.

Type

IntegerNote

If you require the value for the presolved matrix then use the QCONSTRAINTS attribute.

Set by routines

XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.

ORIGINALQCELEMS
Description

Number of quadratic row coefficients in the original matrix before presolving.

Type

IntegerNote

If you require the value for the presolved matrix then use the QCELEMS attribute.

Set by routines

XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.

ORIGINALQELEMS
Description

Number of quadratic elements in the original matrix before presolving.

Type

IntegerNote

If you require the value for the presolved matrix then use the QELEMS attribute.

Set by routines

XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.

ORIGINALSETMEMBERS
Description

Number of variables within special ordered sets (set members) in the original matrix before
presolving.

Type

IntegerNote

If you require the value for the presolved matrix then use the SETMEMBERS attribute.

Set by routines

XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.

ORIGINALSETS
Description

Number of special ordered sets in the original matrix before presolving.

Type

IntegerNote

If you require the value for the presolved matrix then use the SETS attribute.

Set by routines

XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.

Fair Isaac Corporation Proprietary Information505

Chapter 9: Problem Attributes

ORIGINALROWS
Description

Number of rows (i.e. constraints) in the original matrix before presolving.

Type

IntegerNote

If you require the value for the presolved matrix then use the ROWS attribute.

Set by routines

XPRSaddrows, XPRSdelrows, XPRSloadglobal, XPRSloadlp, XPRSloadqglobal,
XPRSloadlp, XPRSreadprob.

PARENTNODE
Description

The parent node of the current node in the tree search.

Type

Integer

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

PEAKMEMORY
Description

An estimate of the peak amount of dynamically allocated heap memory by the problem.

Type

IntegerNote

On 64bit systems this is a 64bit integer, use XPRSgetintattrib64 to retrieve its value.

See also

CURRENTMEMORY,SYSTEMMEMORYPEAKTOTALTREEMEMORYUSAGE
Description

The peak size, in megabytes, that the branch-and-bound search tree reached during the solve.
Note that this value will include the uncompressed size of any compressed data and the size ofany data saved to the global file.

Type

Integer

Set by routines

XPRSmipoptimize.

See also

TREEMEMORYUSAGE.

PENALTYVALUE
Description

The weighted sum of violations in the solution to the relaxed problem identified by theinfeasibility repair function.

Type

DoubleSet by routines

XPRSrepairinfeas (REPAIRINFEAS), XPRSrepairweightedinfeas.

Fair Isaac Corporation Proprietary Information

506

Chapter 9: Problem Attributes

PHYSICALCORESDETECTED
Description

The total number of physical cores across all CPUs detected by the optimizer.

Type

Integer

Values

>=1

Set by routines

XPRSinit.

See also

CORESDETECTED, CORESPERCPUDETECTED, CPUSDETECTED,PHYSICALCORESPERCPUDETECTED.

Detected number of physical cores.

PHYSICALCORESPERCPUDETECTED
Description

The number of physical cores per CPU detected by the optimizer.

Type

Integer

Values

>=1

Set by routines

XPRSinit.

See also

CORESDETECTED, CORESPERCPUDETECTED, CPUSDETECTED,PHYSICALCORESPERCPUDETECTED.

Detected number of physical cores per CPU.

PREDICTEDATTLEVEL
Description

A measure between 0 and 1 to predict how numerically unstable the current MIP solve can be
expected to be. After the root LP solve, a machine learning model is used to predict the actual
ATTENTIONLEVEL which will only be computed if MIPKAPPAFREQ is set to a nonzero value. If
the predicted attention level exceeds a value of 0.1, a message will be printed to the log.

Type

DoubleSet by routines

XPRSmipoptimize.

See also

ATTENTIONLEVEL, MAXKAPPA.

PRESOLVEINDEX
Description

Presolve: The row or column index on which presolve detected a problem to be infeasible orunbounded.

Type

IntegerNote

Row indices are in the range 0 to ROWS-1, and column indices are in the range
ROWS+SPAREROWS to ROWS+SPAREROWS+COLS-1.

Set by routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Fair Isaac Corporation Proprietary Information

507

Chapter 9: Problem Attributes

PRESOLVESTATE
Description

Problem status as a bit map.

Type

Integer

Values

Bit
0
1
2
7

Note

Other bits are reserved.

Set by routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

Meaning
Problem has been loaded.
Problem has been LP presolved.
Problem has been MIP presolved.
Solution in memory is valid.

PRIMALDUALINTEGRAL
Description

Value of the primal-dual integral.

Type

DoubleNote

This attribute represents the integral of the primal-dual gap over time. It measures theconvergence of the best (dual) bound BESTBOUND and the primal bound MIPBESTOBJVAL
over the whole solving time. Lower values are better. For details on the primal(-dual) integral
see Berthold: Measuring the impact of primal heuristics, OR Letters 41(6), pp. 611-614, 2013.

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

BESTBOUND, MIPBESTOBJVAL.

PRIMALINFEAS
Description

Number of primal infeasibilities.

Type

Integer

Note

If the matrix is in a presolved state, this attribute returns the number of primal infeasibilities in
the presolved matrix. If you require the value for the original matrix, make sure you obtain thevalue when the matrix is not presolved. The PRESOLVESTATE attribute can be used to test if
the matrix is presolved or not. See also 5.3.

Set by routines

XPRSlpoptimize (LPOPTIMIZE).

See also

SUMPRIMALINF, DUALINFEAS, MIPINFEAS.

PWLCONS
Description

Number of piecewise linear constraints in the problem.

Type

Integer

Set by routines

XPRSaddpwlcons

Fair Isaac Corporation Proprietary Information

508

Chapter 9: Problem Attributes

PWLPOINTS
Description

Number of breakpoints of piecewise linear constraints in the problem.

Type

IntegerNote

The total number of breakpoints over all piecewise linear constraints.

Set by routines

XPRSaddpwlcons

QCELEMS
Description

Number of quadratic row coefficients in the matrix.

Type

Integer

Note

If the matrix is in a presolved state, this attribute returns the number of quadratic row
coefficients in the presolved matrix.

Set by routines

XPRSaddqmatrix, XPRSchgqrowcoeff, XPRSgetqrowqmatrixtriplets,
XPRSloadqcqp.

QCONSTRAINTS
Description

Number of rows with quadratic coefficients in the matrix.

Type

Integer

Note

If the matrix is in a presolved state, this attribute returns the number of rows with quadraticcoefficients in the presolved matrix.

Set by routines

XPRSaddqmatrix, XPRSchgqrowcoeff, XPRSgetqrowqmatrixtriplets,
XPRSloadqcqp.

QELEMS
Description

Number of quadratic elements in the matrix.

Type

Integer

Note

If the matrix is in a presolved state, this attribute returns the number of quadratic elements inthe presolved matrix. If you require the value for the original matrix, make sure you obtain thevalue when the matrix is not presolved. The PRESOLVESTATE attribute can be used to test if
the matrix is presolved or not. See also 5.3.

Set by routines

XPRSchgmqobj, XPRSchgqobj, XPRSloadqglobal, XPRSloadqp.

RANGENAME
Description

Active range name.

Type

StringSet by routines

XPRSreadprob.

Fair Isaac Corporation Proprietary Information509

Chapter 9: Problem Attributes

RESTARTS
Description

Total number of restarts performed.

Type

Integer

Note

As opposed to TREERESTARTS this not only includes the number of times thebranch-and-bound tree is reset to the root node, but also includes the number of times presolve
is repeated at the root node. If your application caches information about the presolved model
then it has to refresh this information whenever the value of this attribute changed.

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

TREERESTARTS

RHSNAME
Description

Active right hand side name.

Type

StringSet by routines

XPRSreadprob.

ROWS
Description

Number of rows (i.e. constraints) in the matrix.

Type

Integer

Note

If the matrix is in a presolved state, this attribute returns the number of rows in the presolved
matrix. If you require the value for the original matrix then use the ORIGINALROWS attribute
instead. The PRESOLVESTATE attribute can be used to test if the matrix is presolved or not.
See also 5.3.

Set by routines

XPRSaddrows, XPRSdelrows, XPRSloadglobal, XPRSloadlp, XPRSloadqglobal,
XPRSloadlp, XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE),XPRSreadprob.

SIMPLEXITER
Description

Number of simplex iterations performed.

Type

Integer

Set by routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

SETMEMBERS
Description

Number of variables within special ordered sets (set members) in the matrix.

Type

Integer

Note

If the matrix is in a presolved state, this attribute returns the number of variables within special
ordered sets in the presolved matrix. If you require the value for the original matrix, make sure
you obtain the value when the matrix is not presolved. The PRESOLVESTATE attribute can beused to test if the matrix is presolved or not. See also 5.3.

Fair Isaac Corporation Proprietary Information

510

Chapter 9: Problem Attributes

Set by routines

XPRSloadglobal, XPRSloadqglobal, XPRSreadprob.

See also

SETS.

SETS
Description

Number of special ordered sets in the matrix.

Type

Integer

Note

If the matrix is in a presolved state, this attribute returns the number of special ordered sets inthe presolved matrix. If you require the value for the original matrix, make sure you obtain thevalue when the matrix is not presolved. The PRESOLVESTATE attribute can be used to test if
the matrix is presolved or not. See also 5.3.

Set by routines

XPRSloadglobal, XPRSloadqglobal, XPRSreadprob.

See also

SETMEMBERS, MIPENTS.

SPARECOLS
Description

Number of spare columns in the matrix.

Type

Integer

Set by routines

XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.

SPAREELEMS
Description

Number of spare matrix elements in the matrix.

Type

Integer

Set by routines

XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.

SPAREMIPENTS
Description

Number of spare global entities in the matrix.

Type

Integer

Set by routines

XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.

SPAREROWS
Description

Number of spare rows in the matrix.

Type

Integer

Set by routines

XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.

Fair Isaac Corporation Proprietary Information

511

Chapter 9: Problem Attributes

SPARESETELEMS
Description

Number of spare set elements in the matrix.

Type

Integer

Set by routines

XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.

SPARESETS
Description

Number of spare sets in the matrix.

Type

Integer

Set by routines

XPRSloadglobal, XPRSloadlp, XPRSloadqglobal, XPRSloadqp, XPRSreadprob.

STOPSTATUS
Description

Status of the optimization process.

Type

Integer

Note

Possible values are:Set by routines

Value

Description

XPRS_STOP_NONE

no interruption - the solve completed normally

XPRS_STOP_TIMELIMIT

time limit hit

XPRS_STOP_CTRLC

control C hit

XPRS_STOP_NODELIMIT

node limit hit

XPRS_STOP_ITERLIMIT

iteration limit hit

XPRS_STOP_MIPGAPMIP gap is sufficiently small

XPRS_STOP_SOLLIMIT

solution limit hit

XPRS_STOP_USER

user interrupt.

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

SUMPRIMALINF
Description

Scaled sum of primal infeasibilities.

Type

DoubleNote

If the matrix is in a presolved state, this attribute returns the scaled sum of primal infeasibilities
in the presolved matrix. If you require the value for the original matrix, make sure you obtain thevalue when the matrix is not presolved. The PRESOLVESTATE attribute can be used to test if
the matrix is presolved or not. See also 5.3.

Set by routines

XPRSlpoptimize (LPOPTIMIZE).

See also

PRIMALINFEAS.

Fair Isaac Corporation Proprietary Information

512Chapter 9: Problem Attributes

SYSTEMMEMORY
Description

The amount of non problem specific memory used by the solver.

Type

IntegerNote

On 64bit systems this is a 64bit integer, use XPRSgetintattrib64 to retrieve its value.

See also

CURRENTMEMORY, PEAKMEMORY

TIME
Description

Time spent solving the problem as measured by the optimizer.

Type

Integer

Set by routines

XPRSlpoptimize (LPOPTIMIZE), XPRSmipoptimize (MIPOPTIMIZE).

TOTALMEMORY
Description

The amount of dynamically allocated heap memory by the optimizer, including all problems
currently exsisting.

Type

IntegerNote

On 64bit systems this is a 64bit integer, use XPRSgetintattrib64 to retrieve its value.

See also

PEAKMEMORY, CURRENTMEMORYTREECOMPLETION
Description

Estimation of the relative completion of the search tree as fraction between 0 and 1. Its
accuracy mainly depends on the level of degeneracy of a problem and the balancedness of thesearch tree.

Type

DoubleSet by routines

XPRSmipoptimize (MIPOPTIMIZE).

TREEMEMORYUSAGE
Description

The amount of physical memory, in megabytes, currently being used to store thebranch-and-bound search tree.

Type

Integer

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

TREEMEMORYLIMIT, GLOBALFILEUSAGE.

Fair Isaac Corporation Proprietary Information

513

Chapter 9: Problem Attributes

TREERESTARTS
Description

Number of in-tree restarts performed.

Type

Integer

Set by routines

XPRSmipoptimize (MIPOPTIMIZE).

See also

RESTARTS

UUID
Description

Universally Unique Identifier for the problem instance.

Type

StringXPRESSVERSION
Description

The Xpress version number.

Type

StringNote

The version number of Xpress.

Fair Isaac Corporation Proprietary Information

514

CHAPTER 10

Return Codes and Error Messages
10.1 Optimizer Return Codes
The table below shows the possible return codes from the subroutine library functions. See also the**MIP Solution Pool Reference Manual** for MIP Solution Pool Errors.
Return CodeDescription0

Subroutine completed successfully.

1a

Bad input encountered.

2a

Bad or corrupt file - unrecoverable.

4aMemory error.

8aCorrupt use.

16a

Program error.

32

Subroutine not completed successfully, possibly due to invalid argument.

128

Too many users.

a - Unrecoverable error.
When the Optimizer terminates after the STOP command, it may set an exit code that can be tested by
the operating system or by the calling program. The exit code is set as follows:
Return CodeDescription0

Program terminated normally (with STOP).

63

LP optimization unfinished.

64

LP feasible and optimal.

65

LP infeasible.

66

LP unbounded.

67

IP optimal solution found.

68

IP search incomplete but an IP solution has been found.

69

IP search incomplete, no IP solution found.

70

IP infeasible.

99

LP optimization not started.

255

Xpress Optimizer has not been initialized.

10.2 Optimizer Error and Warning Messages
Following a premature exit, the Optimizer can be interrogated as necessary to obtain more information
about the specific error or warning which occurred. Library users may return a description of errors orFair Isaac Corporation Proprietary Information

515

Chapter 10: Return Codes and Error Messages

warnings as they are encountered using the function XPRSgetlasterror. This function returns
information related to the error code, held in the problem attribute ERRORCODE. For Console users thevalue of this attribute is output to the screen as errors or warnings are encountered. For Library users it
must be retrieved using:
XPRSgetintattrib(prob,XPRS_ERRORCODE,&errorcode);

The following list contains values of ERRORCODE and a possible resolution of the error or warning.
3

Extension not allowed - ignored.
The specified extension is not allowed. The Optimizer ignores the extension and truncates thefilename.

4

Column <col> has no upper bound.
Column <col> cannot be at its upper bound in the supplied basis since it does not have one. A newbasis will be created internally where column <col> will be at its lower bound while the rest of thecolumns and rows maintain their basic/non-basic status.

5

Error on .<ext> file.
An error has occurred on the . <ext> file. Please make sure that there is adequate disk space forthe file and that it has not become corrupted.

6

No match for column <col> in matrix.
Column <col> has not been defined in the COLUMNS section of the matrix and cannot be used insubsequent sections. Please check that the spelling of <col> is correct and that it is not written
outside the field reserved for column names.

7

Empty matrix. Please increase EXTRAROWS.
There are too few rows or columns. Please increase EXTRAROWS before input, or make sure there
is at least one row in your matrix and try to read it again.

9

Error on read of basis file.
The basis file .BSS is corrupt. Please make sure that there is adequate disk space for the file andthat it has not been corrupted.

11

Not allowed - solution not optimal.
The operation you are trying to perform is not allowed unless the solution is optimal. Please call
XPRSmaxim (MAXIM) or XPRSminim (MINIM) to optimize the problem and make sure the process
is completed. If the control LPITERLIMIT has been set, make sure that the optimal solution canbe found within the maximum number of iterations allowed.

18

Bound conflict for column <col>.
Specified upper bound for column <col> is smaller that the specified lower bound. Please change
one or both bounds to solve the conflict and try again.

19

Eta overflow straight after invert - unrecoverable.
There is not enough memory for eta arrays. Either increase the virtual paging space or the physicalmemory.

20

Insufficient memory for array <array>.
There is not enough memory for an internal data structure. Either increase the virtual paging spaceor the physical memory.

21

Unidentified section The command is not recognized by the Optimizer.
Please check the spelling and try again. Please refer to the Reference Manual for a list of valid
commands.

Fair Isaac Corporation Proprietary Information

516

Chapter 10: Return Codes and Error Messages

29

Input aborted.
Input has encountered too many problems in reading your matrix and it has been aborted. Thismessage will be preceded by other error messages whose error numbers will give information
about the nature of each of the problems. Please correct all errors and try again.

36

Linear Optimizer only
You are only authorized to use the Linear Optimizer. Please contact your local sales office todiscuss upgrading to the IP Optimizer if you wish to use this command.

38

Invalid option.
One of the options you have specified is incorrect. Please check the input option and retype thecommand. A list of valid options for each command can be found in 7.

41

Global error - contact the Xpress support team.
Internal error. Please contact your local support office.

45

Failure to open global file - aborting. (Perhaps disk is full).
The Optimizer cannot open the .GLB file. This usually occurs when your disk is full. If this is not
the case it means that the .GLB file has been corrupted.

50

Inconsistent basis.
Internal basis held in memory has been corrupted. Please contact your local support office.

52

Too many nonzero elements.
The number of matrix elements exceeds the maximum allowed. If you have the Hyper version thenincrease your virtual page space or physical memory. If you have purchased any other version of
the software please contact your local sales office to discuss upgrading if you wish to readmatrices with this number of elements.

56

Reference row entries too close for set <set> member <col>.
The coefficient of column <col> in the constraint being used as reference row for set <set> is too
close to the coefficient of some other column in the reference row. Please make sure thecoefficients in the reference row differ enough from one another. One way of doing this is tocreate a non computational constraint (N type) that contains all the variables members of the set<set> and then assign coefficients whose distance from each other is of at least 1 unit.

58

Duplicate element for column <col> row <row>.
The coefficient for column <col> appears more than once in row <row>. The elements are added
together but please make sure column <col> only has one coefficient in <row> to avoid thiswarning message.

61

Unexpected EOF on workfile.
An internal workfile has been corrupted. Please make sure that there is adequate disk space andtry again. If the problem persists please contact your local support office.

64

Error closing file <file>.
The Optimizer could not close file <file>. Please make sure that the file exists and that it is not
being used by another application.

65

Fatal error on read from workfile <file> - program aborted.
An internal workfile has been corrupted. Please make sure that your disk has enough space andtry again. If the problem persists please contact your local support office.

66

Unable to open file <file>.
The Optimizer has failed to open the file <file>. Please make sure that the file exists and there isadequate disk space.

Fair Isaac Corporation Proprietary Information

517

Chapter 10: Return Codes and Error Messages

67

Error on read of file <file>.
The Optimizer has failed to read the file <file>. Please make sure that the file exists and that it has
not been corrupted.

68

Error on write of file <file>.
The Optimizer has failed to write the file <file>. Please make sure that there is adequate disk
space, that the volume is not corrupt, and that the directory is not write-protected.

69

Path is too long: <path>.
The path <path> cannot be opened in the filesystem because it is too long.

71

Not a basic vector: <vector>.
Dual value of row or column <vector> cannot be analyzed because the vector is not basic.

72

Not a non-basic vector: <vector>.
Activity of row or column <vector> cannot be analyzed because the vector is basic.

73

Problem has too many rows. The maximum is <num>.
The Optimizer cannot input your problem since the number of rows exceeds <num>, the maximum
allowed. If you have purchased any other than the Hyper version of the software please contact
your local sales office to discuss upgrading it to solve larger problems.

76

Illegal priority: entity <ent> value <num>.
Entity <ent> has been assigned an invalid priority value of <num> in the directives files and thispriority will be ignored. Please make sure that the priority value lies between 0 and 1000 and that it
is written inside the corresponding field in the .DIR file.

77

Illegal set card <line>.
The set definition in line <line> of the .MAT or .MPS file creates a conflict. Please make sure thatthe set has a correct type and has not been already defined. Please refer to the Reference Manual
for a list of valid set types.

80File creation error.
The Optimizer cannot create a file. Please make sure that these is adequate disk space and thatthe volume is not corrupt.

81

Fatal error on write to workfile <file> - program aborted.
The Optimizer cannot write to the file <file>. Please make sure that there is adequate disk space
and that the volume is not corrupt.

83

Fatal error on write to file - program aborted.
The Optimizer cannot write to an internal file. Please make sure that there is adequate disk space
and that the volume is not corrupt.

84

Input line too long. Maximum line length is <num>A line in the .MAT or .MPS file has been found to be too long. Please reduce the length to be lessor equal than <num> and input again.

85

File not found: <file>.
The Optimizer cannot find the file <file>. Please check the spelling and that the file exists. If thisfile has to be created by the Optimizer, make sure that the process which creates the file has been
performed.

Fair Isaac Corporation Proprietary Information

518

Chapter 10: Return Codes and Error Messages

89

No optimization has been attempted.
The operation you are trying to perform is not allowed unless the solution is optimal. Please call
XPRSmaxim (MAXIM) or XPRSminim (MINIM) to optimize the problem and make sure the process
is completed. If you have set the control
LPITERLIMIT make sure that the optimal solution can be found within the maximum number of
iterations allowed.

91

No problem has been input.
An operation has been attempted that requires a problem to have been input. Please make surethat XPRSreadprob (READPROB) is called and that the problem has been loaded successfully
before trying again.

97

Split vector <vector>.
The declaration of column <vector> in the COLUMN section of the .MAT or .MPS file must be donein contiguous line. It is not possible to interrupt the declaration of a column with lines
corresponding to a different vector.

98

At line <num> no match for row <row>.
A non existing row <row> is being used at line number <num> of the .MAT or .MPS file. Pleasecheck spelling and make sure that <row> is defined in the ROWS section.

102

Eta file space exceeded - optimization aborted.
The Optimizer requires more memory. Please increase your virtual paging space or physicalmemory and try to optimize again.

107

Too many global entities at column <col>.
The Optimizer cannot input your problem since the number of global entities exceeds the
maximum allowed. If you have the Hyper version then increase your virtual page space or physicalmemory. If you have purchased any other version of the software please contact your local sales
office to discuss upgrading it to solve larger problems.

111

Duplicate row <row> - ignored.
Row <row> is used more than once in the same section. Only the first use is kept and subsequentones are ignored.

112

Postoptimal analysis not permitted on presolved problems.
Re-optimize with PRESOLVE = 0. An operation has been attempted on the presolved problem.
Please optimize again calling XPRSmaxim (MAXIM), XPRSminim (MINIM) with the l flag or
turning presolve off by setting PRESOLVE to 0.

113

Unable to restore version <ver> save files.
The svf file was created by a different version of the Optimizer and cannot be restored with thisversion.

114

Fatal error - pool hash table full at vector <vector>.
Internal error. Please contact your local support office.

120

Problem has too many rows and columns. The maximum is <num>
The Optimizer cannot input your problem since the number of rows plus columns exceeds the
maximum allowed. If you have purchased any other than the Hyper version of the software pleasecontact your local sales office to discuss upgrading it to solver larger problems.

122

Corrupt solution file.
Solution file .SOL could not be accessed. Please make sure that there is adequate disk space andthat the file is not being used by another process.

Fair Isaac Corporation Proprietary Information

519

Chapter 10: Return Codes and Error Messages

124

Invalid parameter value passed to <function>. Parameter value <param_name> is not allowed
A parameter lookup by name has failed. The provided parameter name does not match any
parameters in Xpress.

127

Not found: <vector>.
An attempt has been made to use a row or column <vector> that cannot be found in the problem.
Please check spelling and try again.

128

Cannot load directives for problem with no global entities.
The problem does not have global entities and so directives cannot be loaded.

129

Access denied to problem state : ’<name>’ (<routine>).
The user is not licensed to have set or get access to problem control (or attribute) <name>. The
routine used for access was <routine>.

130

Bound type illegal <type>.
Illegal bound type <type> has been used in the basis file .BSS. A new basis will be createdinternally where the column with the illegal bound type will be at its lower bound and the rest of thecolumns and rows will maintain their basic/non-basic status. Please check that you are using
XPRSreadbasis (READBASIS) with the t flag to read compact format basis.

131

No column: <col>.
Column <col> used in basis file .BSS does not exist in the problem. A new basis will be createdinternally from where column <col> will have been removed and the rest of columns and rows will
maintain their basic/non-basic status.

132

No row: <row>.
Row <row> used in basis file .BSS does not exist in the problem. A new basis will be createdinternally from where row <row> will have been removed and the rest of columns and rows will
maintain their basic/non-basic status.

136

Cannot access control <control_name> via attribute routine <function>
When accessing controls and attributes, the API function called must be matched appropriately tothe type (double, int, string) and access type (control / attribute) of the parameter.

137

Bad internal state found in ‘Struct’ lookup : <parameter_table> (<parameter_name>)
A parameter provided could not be found in the parameters table. This is an internal error, pleasecontact FICO support.

140

Basis lost - recovering.
The number of rows in the problem is not equal to the number of basic rows + columns in the
problem, which means that the existing basis is no longer valid. This will be detected when
re-optimizing a problem that has been altered in some way since it was last optimized (see below).
A correct basis is generated automatically and no action needs to be taken. The basis can be lostin two ways: (1) if a row is deleted for which the slack is non-basic: the number of rows will
decrease by one, but the number of basic rows + columns will be unchanged. (2) if a basic column
is deleted: the number of basic rows + columns will decrease by one, but the number of rows will
be unchanged. You can avoid losing the basis by only deleting rows for which the slack is basic,
and columns which are non-basic. (The XPRSgetbasis function can be used to determine thebasis status.) To delete a non-basic row without losing the basis, bring it into the basis first, and todelete a basic column without losing the basis, take it out of the basis first - the functions
XPRSgetpivots and XPRSpivot may be useful here. However, remember that the message isonly a warning and the Optimizer will generate a new basis automatically if necessary.

Fair Isaac Corporation Proprietary Information

520

Chapter 10: Return Codes and Error Messages

142

Type illegal <type>.
An illegal priority type <type> has been found in the directives file .DIR and will be ignored. Pleaserefer to Appendix A for a description of valid priority types.

143

No entity <ent>.
Entity <ent> used in directives file .DIR cannot be found in the problem and its corresponding
priority will be ignored. Please check spelling and that the column <ent> is actually declared as anentity in the BOUNDS section or is a set member.

151

Illegal MARKER.
The line marking the start of a set of integer columns or a set of columns belonging to a Special
Ordered Set in the .MPS file is incorrect.

152

Unexpected EOF.
The Optimizer has found an unexpected EOF marker character. Please check that the input file iscorrect and input again.

153

Illegal card at line <line>.
Line <line> of the .MPS file could not be interpreted. Please refer to the Reference Manual for
information about the valid MPS format.

155

Cannot access control ’<id>’ via attribute routine <routine>.
Controls cannot be accessed from attribute access routines.

156

Cannot access attribute ’<id>’ via control routine <routine>.
Attributes cannot be accessed from control access routines.

157

Cannot access attribute <attribute_name> via control routine <routine>.
Attributes cannot be accessed from control access routines.

158

Unrecognized callback name <callback> (<function>)
The callback name provided to the API function is not recognized.

159

Failed to set default controls.
Attempt failed to set controls to their defaults.

160

Cannot access <typename> type ’<id>’ via routine <routine>.
Accessing an attribute or control requires using a routine with matching type.

161

Cannot access <typename> type ’<name>’ via routine <routine>.
Accessing an attribute or control requires using a routine with matching type.

162

Recording and playback error : <info>.
An error occurred in the recording and playback tool.

163

Failed to copy controls.
Attempt failed to copy controls defined for one problem to another.

164

Problem is not presolved.
Action requires problem to be presolved and the problem is not presolved.

167

Failed to allocate memory of size <bytes> bytes.
The Optimizer failed to allocate required memory of size <bytes>.

168

Required resource not currently available : ’<name>’.
The resource <name> is required by an action but is unavailable.

Fair Isaac Corporation Proprietary Information

521

Chapter 10: Return Codes and Error Messages

169

Failed to create resource : ’<name>’.
The resource <name> failed to create.

170

Corrupt global file.
Global file .GLB cannot be accessed. Please make sure that there is adequate disk space and thatthe file is not being used by another process.

171

Invalid row type for row <row>.
XPRSalter (ALTER) cannot change the row type of <row> because the new type is invalid.
Please correct and try again.

173

Name not recognized : <name>.
The control name cannot be recognized.

178

Not enough spare rows to remove all violations.
The Optimizer could not add more cuts to the matrix because there is not enough space. Please
increase EXTRAROWS before input to improve performance.

179

Load MIP solution failed : ’<status description>’.
Attempt failed to load MIP solution into the Optimizer. See <status description» for details of the
failure.

180

No change to this control allowed.
The Optimizer does not allow changes to this control.

181

Cannot alter bound on BV, SC, UI, PI, or set member.
XPRSalter (ALTER) cannot be used to change the upper or lower bound of a variable if its
variable type is binary, semi-continuous, integer, partial integer, semi-continuous integer, or if it is aset member.

186

Inconsistent number of variables in problem.
A compact format basis is being read into a problem with a different number of variables than the
one for which the basis was created.

187

Unable to restore alternative system <system> save files.
The svf file was created on a different operating system and cannot be restored on the current
system.

188

Unable to restore - save file is invalid.
The svf file was not in the expected format. It may have been corrupted.

191

Solution in file ’<file>’ (rows:<nrow>, cols:<ncol>) not compatible with problem.
The size of the loaded problem is not compatible with problem size from the solution file.

192

Bad flags <flag string>.
A flag string passed into a command line call is invalid.

193

Possible unexpected results from XPRSreadbinsol (READBINSOL) : <message>.
A call to the XPRSreadbinsol (READBINSOL) may produce unexpected results. See <message>
for details.

195

Cannot read LP solution into presolved problem.
An LP solution cannot be read into a problem in a presolved state.

197

Failed to register callback for event : ’<event>’.
Registering callback for an event failed.

Fair Isaac Corporation Proprietary Information

522

Chapter 10: Return Codes and Error Messages

199

Network simplex not authorized
The Optimizer cannot use the network algorithm. Please contact your local sales office to upgrade
your authorization if you wish to use it.

202

Control parser: <error>.
A generic control parser error, for example a memory allocation failure.

243

The Optimizer requires a newer version of the XPRL library.
You are using the XPRS library from one Xpress distribution and the XPRS library from a previous
Xpress distribution. You should remove all other Xpress distributions from your system librarypath environment variable.

245

Not enough memory to presolve matrix.
The Optimizer required more memory to presolve the matrix. Please increase your virtual paging
space or physical memory. If this is not possible try setting PRESOLVE to 0 before optimizing, sothat the presolve procedure is not performed.

247

Directive on non-global entity not allowed: <col>.
Column <col> used in directives file .DIR is not a global entity and its corresponding priority willbe ignored. A variable is a ’global entity’ it is type is not continuous or if it is a set member. Pleaserefer to Appendix A for details about valid entities and set types.

249

Insufficient improvement found.
Insufficient improvement was found between barrier iterations which has caused the barrier
algorithm to terminate.

250

Too many numerical errors.
Too many numerical errors have been encountered by the barrier algorithm and this has caused
the barrier algorithm to terminate.

251

Out of memory.
There is not enough memory for the barrier algorithm to continue.

256

Simplex Optimizer only
The Optimizer can only use the simplex algorithm. Please contact your local sales office toupgrade your authorization if you wish to use this command.

257

Simplex Optimizer only
The Optimizer can only use the simplex algorithm. Please contact your local sales office toupgrade your authorization if you wish to use this command.

259

Warning: The Q matrix may not be semi-definite.
The Q matrix must be positive (negative) semi-definite for a minimization (maximization) problem
in order for the problem to be convex. The barrier algorithm has encountered numerical problems
which indicate that the problem is not convex.

261<ent> already declared as a global entity - old declaration ignored.
Entity <ent> has already been declared as global entity. The new declaration prevails and the old
declaration prevails and the old declaration will be disregarded.

262

Unable to remove shift infeasibilities of &.
Perturbations to the right hand side of the constraints which have been applied to enable problem
to be solved cannot be removed. It may be due to round off errors in the input data or to the
problem being badly scaled.

Fair Isaac Corporation Proprietary Information

523

Chapter 10: Return Codes and Error Messages

263

The problem has been presolved.
The problem in memory is the presolved one. An operation has been attempted on the presolved
problem. Please optimize again calling XPRSmaxim (MAXIM),
XPRSminim (MINIM) with the l flag or tuning presolve off by setting PRESOLVE to 0. If theoperation does not need to be performed on an optimized problem just load the problem again.

264

Not enough spare matrix elements to remove all violations.
The Optimizer could not add more cuts to the matrix because there is not enough space. Please
increase EXTRAELEMS before input to improve performance.

266

Cannot read basis for presolved problem. Re-input matrix.
The basis cannot be read because the problem in memory is the presolved one. Please reload the
problem with XPRSreadprob (READPROB) and try to read the basis again.

268

Cannot perform operation on presolved matrix. Please postsolve or re-input matrix.
The problem in memory is the presolved one. Please postsolve or reload the problem and try theoperation again.

279

The Optimizer has not been initialized.
The Optimizer could not be initialized successfully. Please initialize it before attempting any
operation and try again.

287

Cannot read in directives after the problem has been presolved.
Directives cannot be read if the problem in memory is the presolved one. Please reload the
problem and read the directives file .DIR before optimizing. Alternatively, re-optimize using the -lflag or set PRESOLVE to 0 and try again.

293

This license file does not specify the permitted problem size. Contact your vendor to obtain a valid
license.
The license file is invalid as it doesn’t specify the permitted problem size. Please contact yourlocal sales office.

314

Invalid number.
The input is not a number. Please check spelling and try again.

319

No Optimizer license found. Please contact your vendor to obtain a license.
Your license does not authorize the direct use of the Optimizer. You probably have a license that
authorizes other Xpress products, for example Mosel or BCL.

320

An internal error has occured. Please report to " SUPPORT_CONTACT_NAME " the circumstances
under which this happened.
An internal error has occured. Please report to " SUPPORT_CONTACT_NAME " the circumstances
under which this happened.

324

Not enough extra matrix elements to complete elimination phase.
Increase EXTRAPRESOLVE before input to improve performance. The elimination phase
performed by the presolve procedure created extra matrix elements. If the number of suchelements is larger than allowed by the EXTRAPRESOLVE parameter, the elimination phase willstop. Please increase EXTRAPRESOLVE before loading the problem to improve performance.

326

Linear Optimizer only
You are not authorized to use the Quadratic Programming Optimizer. Please contact your local
sales office to discuss upgrading to the QP Optimizer if you wish to use this command.

Fair Isaac Corporation Proprietary Information

524

Chapter 10: Return Codes and Error Messages

352

Command not authorized in this version.
There has been an attempt to use a command for which your Optimizer is not authorized. Pleasecontact your local sales office to upgrade your authorization if you wish to use this command.

361

QMATRIX or QUADOBJ section must be after COLUMN section.
Error in matrix file. Please make sure that the QMATRIX or QUADOBJ sections are after the
COLUMNS section and try again.

362

Duplicate elements not allowed in QUADOBJ section.
The coefficient of a column appears more than once in the QUADOBJ section. Please make sure
all columns have only one coefficient in this section.

363

Quadratic matrix must be symmetric in QMATRIX section.
Only symmetric matrices can be input in the QMATRIX section of the .MAT or .MPS file. Pleasecorrect and try again.

368

QSECTION second element in line ignored: <line>.
The second element in line <line> will be ignored.

381

Bug in lifting of cover inequalities.
Internal error. Please contact you local support office.

392

This version is not authorized to be called from BCL.
This version of the Optimizer cannot be called from the subroutine library BCL. Please contact yourlocal sales office to upgrade your authorization if you wish to run the Optimizer from BCL.

394

Fatal communications error.
There has been a communication error between the master and the slave processes. Please checkthe network and try again.

395This version is not authorized to be called from the Optimizer library.
This version of the Optimizer cannot be called from the Optimizer library. Please contact your local
sales office to upgrade your authorization if you wish to run the Optimizer using the libraries.

401

Invalid row type passed to <function>.
Elements <num> of your array has invalid row type <type>. There has been an error in one of thearguments of function <function>. The row type corresponding to element <num> of the array isinvalid. Please refer to the section corresponding to function <function> in 7 for further
information about the row types that can be used.

402

Invalid row number passed to <function>.
Row number <num> is invalid. There has been an error in one of the arguments of function<function>. The row number corresponding to element <num> of the array is invalid. Please makesure that the row numbers are not smaller than 0 and not larger than the total number of rows in
the problem.

403

Invalid global entity passed to <function>.
Element <num> of your array has invalid entity type <type>. There has been an error in one of thearguments of function <function>. The column type <type> corresponding to element <num> ofthe array is invalid for a global entity.

404

Invalid set type passed to <function>.
Element <num> of your array has invalid set type <type>. There has been an error in one of thearguments of function <function>. The set type <type> corresponding to element <num> of thearray is invalid for a set entity.

Fair Isaac Corporation Proprietary Information

525

Chapter 10: Return Codes and Error Messages

405

Invalid column number passed to <function>.
Column number <num> is invalid. There has been an error in one of the arguments of function<function>. The column number corresponding to element <num> of the array is invalid. Please
make sure that the column numbers are not smaller than 0 and not larger than the total number ofcolumns in the problem, COLS, minus 1. If the function being called is XPRSgetobj or
XPRSchgobj a column number of -1 is valid and refers to the constant in the objective function.

406

Invalid row range passed to <function>.
Limit <lim> is out of range. There has been an error in one of the arguments of function <function>.
The row numbers lie between 0 and the total number of rows of the problem. Limit <lim> is outside
this range and therefore is not valid.

407

Invalid column range passed to <function>.
Limit <lim> is out of range. There has been an error in one of the arguments of function <function>.
The column numbers lie between 0 and the total number of columns of the problem. Limit <lim> isoutside this range and therefore is not valid.

409

Invalid directive passed to <function>.
Element <num> of your array has invalid directive <type>. There has been an error in one of thearguments of function <function>. The directive type <type> corresponding to element <num> ofthe array is invalid. Please refer to the Reference Manual for a list of valid directive types.

410

Invalid row basis type passed to <function>.
Element <num> of your array has invalid row basis type <type>. There has been an error in one of
the arguments of function <function>. The row basis type corresponding to element <num> of thearray is invalid.

411

Invalid column basis type passed to <function>.
Element <num> of your array has invalid column basis type <type>. There has been an error in oneof the arguments of function <function>. The column basis type corresponding to element <num>of the array is invalid.

412

Invalid parameter number passed to <function>.
Parameter number <num> is out of range. LP or MIP parameters and controls can be used infunctions by passing the parameter or control name as the first argument or by passing an
associated number. In this case number <num> is an invalid argument for function <function>
because it does not correspond to an existing parameter or control. If you are passing a number
as the first argument, please substitute it with the name of the parameter or control whose value
you wish to set or get. If you are already passing the parameter or control name, please check 7 tomake sure that is valid for function <function>.

413

Not enough spare rows in <function>.
Increase EXTRAROWS before input. There are not enough spare rows to complete function<function> successfully. Please increase EXTRAROWS before XPRSreadprob (READPROB) and try
again.

414

Not enough spare columns in <function>.
Increase EXTRACOLS before input. There are not enough spare columns to complete function<function> successfully. Please increase EXTRACOLS before
XPRSreadprob (READPROB) and try again.

415

Not enough spare matrix elements in <function>.
Increase EXTRAELEMS before input. There are not enough spare matrix elements to complete
function <function> successfully. Please increase EXTRAELEMS before XPRSreadprob(READPROB) and try again.

Fair Isaac Corporation Proprietary Information

526

Chapter 10: Return Codes and Error Messages

416

Invalid bound type passed to <function>.
Element <elem> of your array has invalid bound type <type>. There has been an error in one of thearguments of function <function>. The bound type <type> of element number <num> of the arrayis invalid.

417

Invalid complement flag passed to <function>. Element <elem> of your array has invalid
complement flag <flag>.
Element <elem> of your array has an invalid complement flag <flag>. There has been an error in
one of the arguments of function <function>. The complement flag corresponding to indicator
constraint <num> of the array is invalid.

418

Invalid cut number passed to <function>.
Element <num1> of your array has invalid cut number <num2>. Element number <num1> of yourarray contains a cut which is not stored in the cut pool. Please check that <num2> is a valid cut
number.

419

Not enough space to store cuts in <function>.
There is not enough space to complete function <function> successfully.

420

Too many saved matrices in savmat
Version 12 compatibility interface only. There is a hard limit of at most 64 matrices that can besaved with savmat or cpymat

421

Matrix no. <mat> has not been saved. Cannot restore in resmat
Version 12 compatibility interface only. No matrix with number <mat> has been saved withsavmat or cpymat.

422

Solution is not available.
There is no solution available. This could be because the problem in memory has been changed or
optimization has not been performed. Please optimize and try again.

423

Duplicate rows/columns passed to <function>.
Element <elem> of your array has duplicate row/col number <num>. There has been an error in
one of the arguments of function <function>. The element number <elem> of the argument array is
a row or column whose sequence number <num> is repeated.

424

Not enough space to store cuts in <function>.
There is not enough space to complete function <function> successfully.

425

Column already basic.
The column cannot be pivoted into the basis since it is already basic. Please make sure thevariable is non-basic before pivoting it into the basis.

426

Column not eligible to leave basis.
The column cannot be chosen to leave the basis since it is already non-basic. Please make surethe variable is basic before forcing it to leave the basis.

427

Invalid column type passed to <function>.
Element <num> of your array has invalid column type <type>. There has been an error in one of thearguments of function <function>. The column type <type> corresponding to element <num> ofthe array is invalid.

429

No basis is available.
No basis is available.

Fair Isaac Corporation Proprietary Information

527

Chapter 10: Return Codes and Error Messages

430

Column types cannot be changed during the global search.
The Optimizer does not allow changes to the column type while the global search is in progress.
Please call this function before starting the global search or after the global search has been
completed. You can call XPRSmaxim (MAXIM) or XPRSminim (MINIM) with the l flag if you do
not want to start the global search automatically after finding the LP solution of a problem with
global entities.

434

Invalid name passed to XPRSgetindex.
A name has been passed to XPRSgetindex which is not the name of a row or column in thematrix.

436

Cannot trace infeasibilities when integer presolve is turned on.
Try XPRSmaxim (XPRSmaxim) / XPRSminim (MINIM) with the l flag. Integer presolve can set
upper or lower bounds imposed by the column type as well as those created by the interaction of
the problem constraints. The infeasibility tracing facility can only explain infeasibilities due toproblem constraints.

459

Not enough memory for branch and bound tree
Not enough resources for branch and bound tree (<type>)
Failure locking branch and bound tree (probably out of memory)
Failure in handling of branch and bound tree (<type>)
Functions to signal that an unexpected error happened during the management of the
branch-and-bound tree for storing information from a global solve. The string <type> will provide
more information about the particular failure. These errors are typical of running out of memory.

473

Row classification not available.

474

Column passed to <routine> has inconsistent bounds. See column <index> of <count>.
The bounds are inconsistent for column <index> of the <count> columns passed into routine<routine>.

475

Inconsistent bounds [<lb>,<ub>] for column <column name> in call to <routine>.
The lower bound <lb> is greater than the upper bound <ub> in the bound pair given for column<column name> passed into routine <routine>.

476

Unable to round bounds [<lb>,<ub>] for integral column <column name> in call to <routine>.
Either the lower bound <lb> is greater than the upper bound <ub> in the bound pair given for the
integer column <column name> passed into routine <routine> or the interval defined by <lb> and<ub> does not contain an integer value.

501

Error at <line> Empty file.
Read aborted. The Optimizer cannot read the problem because the file is empty.

502

Warning: ’min’ or ’max’ not found at <line.col>. No objective assumed.
An objective function specifier has not been found at column <col>, line <line> of the LP file. If you
wish to specify an objective function please make sure that ’max’, ’maximize’, ’maximum’, ’min’,’minimize’ or ’minimum’ appear.

503

Objective not correctly formed at <line.col>. Aborting.
The Optimizer has aborted the reading of the problem because the objective specified at line <line>of the LP file is incorrect.

504

No keyword or empty problem at <line.col>.
There is an error in column <col> at line <line> of the LP file. Neither ’Subject to’, ’subject to:’,’subject to’, ’such that’ ’s.t.’, or ’st’ can be found. Please correct and try again.

Fair Isaac Corporation Proprietary Information

528

Chapter 10: Return Codes and Error Messages

505

A keyword was expected at <line.col>.
A keyword was expected in column <col> at line <line> pf the LP file. Please correct and try again.

506

The constraint at <line.col> has no term.
A variable name is expected at line <line> column <col>: either an invalid character (like ’+’ or adigit) was encountered or the identifier provided is unknown (new variable names are declared inconstraint section only).

507

RHS at <line.col> is not a constant number.
Line <line> of the LP file will be ignored since the right hand side is not a constant.

508

The constraint at <line> has no term.
The LP file contains a constraint with no terms.

509

The type of the constraint at <line.col> has not been specified.
The constraint defined in column <col> at line <line> of the LP file is not a constant and will beignored.

510

Upper bound at <line.col> is not a numeric constant.
The upper bound declared in column <col> at line <line> of the LP file is not a constant and will beignored.

511

Bound at <line.col> is not a numeric constant.
The bound declared in column <col> at line <line> of the LP file is not a constant and will beignored.

512

Unknown word starting with an ’f’ at <line.col>. Treated as ’free’.
A word starting with an ’f’ and not known to the Optimizer has been found in column <col> at line
<line> of the LP file. The word will be read into the Optimizer as ’free’.

513

Wrong bound statement at <line.col>.
The bound statement in column <col> at line <line> is invalid and will be ignored.

514

Lower bound at <line.col> is not a numeric constant. Treated as -inf.
The lower bound declared in column <col> at line <line> of the LP file is not a constant. It will betranslated into the Optimizer as the lowest possible bound.

515

Sign ’<’ expected at <line.col>.
A character other than the expected sign ’<’ has been found in column <col> at line <line> of the LP
file. This line will be ignored.

516

Problem has not been loaded.
The problem could not be loaded into the Optimizer. Please check the other error messages
appearing with this message for more information.

517

Row names have not been loaded.
The name of the rows could not be loaded into the Optimizer. Please check the other error
messages appearing with this message for more information.

518

Column names have not been loaded.
The name of the columns could not be loaded into the Optimizer. Please check the other error
messages appearing with this message for more information.

Fair Isaac Corporation Proprietary Information

529

Chapter 10: Return Codes and Error Messages

519

Not enough memory at <line.col>.
The information in column <col> at line <line> of the LP file cannot be read because all the
allocated memory has already been used. Please increase your virtual page space or physicalmemory and try again.

520

Unexpected EOF at <line.col>.
An unexpected EOF marker character has been found at line <line> of the LP file and the loading of
the problem into the Optimizer has been aborted. Please correct and try again.

521

Number expected for exponent at <line.col>.
The entry in column <col> at line <line> of the LP file is not a properly expressed real number andwill be ignored.

522

Line <line> too long (length>255).
Line <line> of the LP file is too long and the loading of the problem into the Optimizer has beenaborted. Please check that the length of the lines is less than 255 and try again.

523

The Optimizer cannot reach line <line.col>.
The reading of the LP file has failed due to an internal problem. Please contact your local support
office.

524

Constraints could not be read into the Optimizer. Error found at <line.col>.
The reading of the LP constraints has failed due to an internal problem. Please contact your local
support office.

525

Bounds could not be set into the Optimizer. Error found at <line.col>.
The setting of the LP bounds has failed due to an internal problem. Please contact your local
support office.

526

LP problem could not be loaded into the Optimizer. Error found at <line.col>.
The reading of the LP file has failed due to an internal problem. Please contact your local support
office.

527

Copying of rows unsuccessful.
The copying of the LP rows has failed due to an internal problem. Please contact your local
support office.

528

Copying of columns unsuccessful.
The copying of the LP columns has failed due to an internal problem. Please contact your local
support office.

529

Redefinition of constraint at <line.col>.
A constraint is redefined in column <col> at line <line> of the LP file. This repeated definition is
ignored.

530

Name too long. Truncating it.
The LP file contains an identifier longer than 64 characters: it will be truncated to respect the
maximum size.

531

Sign ’>’ expected here <line>.
A greater than sign was expected in the LP file.

532

Quadratic term expected here <pos>
The LP file reader expected to read a quadratic term at position <pos>: a variable name and ˆ’2’ orthe product of two variables. Please check the quadratic part of the objective in the LP file.

Fair Isaac Corporation Proprietary Information

530

Chapter 10: Return Codes and Error Messages

533

Wrong exponent value. Treated as 2 <pos>
The LP file reader encountered an exponent different than 2 at position <pos>. Such exponents areautomatically replaced by 2.

535

A constraint name was expected here.
The LP file reader expected to read a row name in the ranges section.

536

Wrong range statement at <pos>.
The LP file reader expected to read a range type in the ranges section.

538

Error when loading the SOS names
The LP format file reader failed to create the SOS names. The previous error should explain why
this failed.

539

Invalid indicator constraint condition at <line.col>
The condition part in column <col> of the indicator constraint at line <line> is invalid.

545

A variable name was found but ignored at <pos> due to not appearing before.
The LP file reader read a variable in bounds or integer type sections that does not appear in thematrix.

552’S1|2:’ expected here. Skipping <pos>Unknown set type read while reading the LP file at position <pos>. Please use set type ’S1’ or ’S2’.

553

This set has no member. Ignoring it <pos>An empty set encountered while reading the LP file at position <pos>. The set has been ignored.

554

Weight expected here. Skipping <pos>
A missing weight encountered while reading sets in the LP file at position <pos>. Please checkdefinitions of the sets in the file.

555

Cannot presolve cut with PRESOLVEOPS bits 0, 5 or 8 set or bit 11 cleared.
Can not presolve cut with PRESOLVEOPS bits 0, 5 or 8 set or bit 11 cleared.
No cuts can be presolved if the following presolve options are turned on:
bit 0: singleton column removal,
bit 5: duplicate column removal,
bit 8: variable eliminations
or if the option
bit 11: No advanced IP reductions is turned off. Please check the presolve settings.

557

Integer solution is not available
Failed to retrieve an integer solution because no integer solution has been identified yet.

558

Column <col> duplicated in basis file - new entry ignored.
Column <col> is defined in the basis file more than once. Any repeated definitions are ignored.

559

The old feature <feature> is no longer supported
The feature <feature> is no longer supported and has been removed. Please contact Xpress
support for help about replacement functionality.

602

Values must be specified for all columns when column indices are not provided.
In a call to XPRSaddmipsol the column index array is optional. When this argument is omitted(given as NULL), the length of the solution value array must match ORIGINALCOLS.

604

String passed as parameter is too long
The file name passed to XPRSsetlogfile can be at most 200 characters long.

Fair Isaac Corporation Proprietary Information

531

Chapter 10: Return Codes and Error Messages

606

Failed to parse list of diving heuristic strategies at position <pos>Invalid diving heuristic strategy number provided in position <pos> of the string controls
HEURDIVEUSE or HEURDIVETEST. Please check control HEURDIVESTRATEGY for valid strategy
numbers.

706

Not enough memory to add sets.
Insufficient memory while allocating memory for the new sets. Please free up some memory, andtry again.

707

Function can not be called during the global search
The function being called cannot be used during the global search. Please call the function before
starting the global search.

708

Invalid input passed to <function>
Must specify mstart or mnel when creating matrix with columns
No column information is available when calling function <function>. If no columns were meant tobe passed to the function, then please set the column number to zero. Note, that mstart andmnel should be set up for empty columns as well.

710

MIPTOL (FEASTOL) <val1> must not be less than FEASTOL (MATRIXTOL) <val2>
The integer tolerance MIPTOL, feasibility tolerance FEASTOL, and zero tolerance MATRIXTOL
should be ordered as MIPTOL >= FEASTOL >= MATRIXTOL. Please increase MIPTOL or decrease
MATRIXTOL before setting FEASTOL.

711

MIPTOL (FEASTOL) <val1> must not be less than FEASTOL (MATRIXTOL) <val2>. Adjusting
MIPTOL (FEASTOL)
The integer tolerance MIPTOL, feasibility tolerance FEASTOL, and zero tolerance MATRIXTOL
should be ordered as MIPTOL >= FEASTOL >= MATRIXTOL. The value of MIPTOL or FEASTOL has
been increased to (val2) for the search.

712

Function not permitted when problem is presolved: <func>
The problem is currently in a presolved state and the function <func> can only be called when the
problem is in its original state. XPRSpostsolve can be called to return the problem to its originalstate.

713<row/column> index out of bounds calling <function>. <index1> is ’<’ or ’>’ <bound>
An index is out of its bounds when calling function <function>. Please check the indices.

715

Invalid objective sense passed to <function>. Must be XPRS_OBJ_MINIMIZE or
XPRS_OBJ_MAXIMIZE.
Invalid objective sense was passed to function <function>. Please use either
XPRS_OBJ_MINIMIZE or XPRS_OBJ_MAXIMIZE.

716

Invalid names type passed to XPRSgetnamelist.
Type code <num> is unrecognized.
An invalid name type was passed to XPRSgetnamelist.

717

Generic error.
Used to promote license manager errors.

721

No IIS has been identified yet
No irreducible infeasible set (IIS) has been found yet. Before running the function, please use IIS-f, IIS -n or IIS -a to identify an IIS.

Fair Isaac Corporation Proprietary Information

532

Chapter 10: Return Codes and Error Messages

722

IIS number <num> is not yet identified
Irreducible infeasible set (IIS) with number <num> is not available. The number <num> stands forthe ordinal number of the IIS. The value of <num> should not be larger than NUMIIS.

723

Unable to create an IIS sub-problem
The irreducible infeasible set (IIS) procedure is unable to create the IIS approximation. Pleasecheck that there is enough free memory.

724

Error while optimizing the IIS sub-problem
An error occurred while minimizing an irreducible infeasible set (IIS) sub-problem. Please checkthe return code set by the Optimizer.

725

Problems with variables for which shift infeasibilities cannot be removed are considered infeasible
in the IIS
The irreducible infeasible set (IIS) sub-problem being solved by the IIS procedure is on theboundary of being feasible or infeasible. For problems that are only very slightly infeasible, theOptimizer applies a technique called infeasibility shifting to produce a solution. Such solutions are
considered feasible, although if solved as a separate problem, a warning message is given. For
consistency reasons however, in the case of the IIS procedure such problems are treated as being
infeasible.

726

This function is not valid for the IIS approximation. Please specify an IIS with count number > 0
Irreducible infeasible set (IIS) number 0 (the ordinal number of the IIS) refers to the IIS
approximation, but the functionality called is not available for the IIS approximation. Please use an
IIS number between 1 and NUMIIS.

727

Bound conflict on column <col>; IIS will not continue
There is a bound conflict on column <col>. Please check the bounds on the column, and remove
any conflicts before running the irreducible infeasible set (IIS) procedure again (bound conflicts
are trivial IISs by themselves).

728

Unknown file type specification <type>
Unknown file type was passed to the irreducible infeasible set (IIS) sub-problem writer. Pleaserefer to XPRSiiswrite for the valid file types.

729

Writing the IIS failed
Failed to write the irreducible infeasible set (IIS) sub-problem or the comma separated file (.csv)
containing the IIS information to disk. Please check access permissions.

730

Failed to retrieve data for IIS <num>
The irreducible infeasible set (IIS) procedure failed to retrieve the internal description for IIS
number <num>. This may be an internal error, please contact your local support office.

731

IIS stability error: reduced or modified problem appears feasible
Some problems are on the boundary of being feasible or infeasible. For such problems, it may
happen that the irreducible infeasible set (IIS) working problem becomes feasible unexpectedly. If
the problem persists, please contact your local support office.

732

Unknown parameter or wrong parameter combination
The wrong parameter or parameter combination was used when calling the irreducible infeasible
set (IIS) console command. Please refer to the IIS command documentation for possiblecombinations.

733

Filename parameter missing
No filename is provided for the IIS -w or IIS -e console command. Please provide a file namethat should contain the irreducible infeasible set (IIS) information.

Fair Isaac Corporation Proprietary Information

533

Chapter 10: Return Codes and Error Messages

734

Problem data relevant to IISs is changed
This failure is due to the problem being changed between iterative calls to IIS functions. Pleasestart the IIS analysis from the beginning.

735

IIS function aborted
The irreducible infeasible set (IIS) procedure was aborted by either hitting CTRL-C or by reaching atime limit.

736

Initial infeasible subproblem is not available. Run IIS -f to set it up
The initial infeasible subproblem requested is not available. Please use the IIS -f function to
generate it.

738

The approximation may be inaccurate. Please use IIS or IIS -n instead.
The irreducible infeasible set (IIS) procedure was run with the option of generating theapproximation of an IIS only. However, ambiguous duals or reduces costs are present in the initial
infeasible subproblem. This message is always preceded by warning 737. Please continue withgenerating IISs to resolve the ambiguities.

739

Bound conflict on column <col>; Repairinfeas will not continue
There is a bound conflict on column <col>. Please check the bounds on the column, and remove
any conflicts before running the XPRSrepairinfeas procedure again (bound conflicts are trivial
causes of infeasibility).

740

Unable to create relaxed problem
The Optimizer is unable to create the relaxed problem. The relaxed problem may requiresignificantly more memory than the base problem if many of the preferences are set to a positive
value. Please check that there is enough free memory.

741

Relaxed problem is infeasible. Please increase freedom by introducing new nonzero preferences
The relaxed problem remains infeasible. Zero preference values indicate constraints (or bounds)
that will not be relaxed. Try introducing new nonzero preferences to allow the problem to become
feasible.

742

Repairinfeas stability error: relaxed problem is infeasible. You may want to increase the value ofdelta
The relaxed problem is reported to be infeasible by the Optimizer in the second phase of therepairinfeas procedure. Try increasing the value of the parameter delta to improve stability.

743

Optimization aborted, repairinfeas unfinishedThe optimization was aborted by CTRL-C or by hitting a time limit. The relaxed solution is notavailable.

744

Optimization aborted, MIP solution may be sub-optimal
The MIP optimization was aborted by either CTRL-C or by hitting a time limit. The relaxed solution
may not be optimal.

745

Optimization of the relaxed problem is sub-optimal
The relaxed solution may not be optimal due to early termination.

746

All preferences are zero, repairinfeas will not continue
Use options -a -b -r -lbp -ubp -lrp or -grp to add nonzero preferences
Zero preference values indicate constraints (or bounds) that will not be relaxed. In case when all
preferences are zero, the problem cannot be relaxed at all. Try introducing nonzero preferences
and run XPRSrepairinfeas again.

Fair Isaac Corporation Proprietary Information

534

Chapter 10: Return Codes and Error Messages

748

Negative preference given for a <sense> bound on <row/column> <name>
A negative preference value is set for constraint or bound <name>. Preference values should be
non-negative. The preferences describe the modeler’s willingness to relax a given constraint orbound, with zero preferences interpreted as the corresponding constraints or bounds not being
allowed to be relaxed. Please provide a zero preference if the constraint or bound is not meant tobe relaxed. Also note, that very small preferences lead to very large penalty values, and thus may
increase the numerical difficulty of the problem.

749

Relaxed problem is infeasible due to cutoff
A user defined cutoff value makes the relaxed problem infeasible. Please check the cutoff value
CURRMIPCUTOFF.

750

Empty matrix file : <name>
The MPS file <name> is empty. Please check the name of the file and the file itself.

751

Invalid column marker type found : <text>
The marker type <text> is not supported by the MPS reader. Please refer to the Appendix A.2 forsupported marker types.

752

Invalid floating point value : <text>
The reader is unable to interpret the string <text> as a numerical value.

753<num> lines ignored
The MPS reader has ignored <num> number of lines. This may happen for example if an
unidentified section was found (in which case warning 785 is also invoked).

754

Insufficient memory
Insufficient memory was available while reading in an MPS file.

755

Column name is missing
A column name field was expected while reading an mps file. Please add a column name to therow. If the MPSFORMAT control is set to 0 (fixed format) then please check that the name fieldcontains a column name, and is positioned correctly.

756

Row name is missing in section OBJNAMENo row name is provided in the OBJNAME section. If no user defined objective name is provided,
the reader uses the first neutral row (if any) as the objective row. However, to avoid ambiguity, if nouser defined objective row was meant to be supplied, then please exclude the OBJNAME section
from the MPS file.

757

Missing objective sense in section OBJSENSE
No objective sense is provided in section OBJSENSE. If no user defined objective sense isprovided, the reader sets the objective sense to minimization by default. However, to avoid
ambiguity, if no user defined objective sense was meant to be supplied, then please exclude the
OBJSENSE section from the MPS file.

758

No SETS and SOS sections are allowed in the same file
The Optimizer expects special order sets to be defined in the SETS section. However, forcompatibility considerations, the Optimizer can also interpret the SOS section. The two formats
differ only in syntax, and feature the same expressive power. Both a SETS and a SOS section are
not expected to be present in the same matrix file.

759

File not in fixed format : <file>
The Optimizer control MPSFORMAT was set to 0 to indicate that the mps file <file> being read is in
fixed format, but it violates the MPS field specifications.

Fair Isaac Corporation Proprietary Information

535

Chapter 10: Return Codes and Error Messages

760

Objective row <row> defined in section OBJNAME or in MPSOBJNAME was not foundThe user supplied objective row <row> is not found in the MPS file. If the MPS file contains an
OBJNAME section please check the row name provided, otherwise please check the value of thecontrol MPSOBJNAME.

761

Problem name is not provided
The NAME section is present in the MPS file, but contains no problem name (not even blanks), andthe MPSFORMAT control is set to 0 (fixed format) preventing the reader to look for the problem
name in the next line. Please make sure that a problem name is present, or if it’s positioned in thenext line (in which case the first column in the line should be a whitespace) then please set
MPSFORMAT to 1 (free format) or -1 (autodetect format).

762

Missing problem name in section NAME
Unexpected end of file while looking for the problem name in section NAME. The file is likely to becorrupted. Please check the file.

763

Ignoring range value for free row : <row>
A range value is defined for free row <row>. Range values have no effect on free rows. Please
make sure that the type of the row in the ROWS section and the row name in the RANGE section areboth correct.

764<sec> section is not yet supported in an MPS file, skipping section
The section <sec> is not allowed in an MPS file. Sections like "SOLUTION" and "BASIS" must
appear in separate ".slx" and ".bas" files.

765

Ignoring repeated specification for column : <col>Column <col> is defined more than once in the MPS file. Any repeated definitions are ignored.
Please make sure to use unique column names. If the column names are unique, then please
make sure that the COLUMNS section is organized in a contiguous order.

766

Ignoring repeated coefficients for row <row> found in RANGE <range>
The range value for row <row> in range vector <range> in the RANGE section is defined more thanonce. Any repeated definitions are ignored. Please make sure that the row names in the RANGE
section are correct.

767

Ignoring repeated coefficients for row <row> found in RHS <rhs>
The value for row <row> in right hand side vector <rhs> is defined more than once in the RHS
section. Any repeated definitions are ignored. Please make sure that the row names in the RHS
section are correct.

768

Ignoring repeated specification for row : lt;rowgt;
Row <row> is defined more than once in the MPS file. Any repeated definitions are ignored. Please
make sure to use unique row names.

769

Unexpected bound type : <type>
The BOUNDS section contains the unknown bound type <type>. If the MPSFORMAT control is set to
0 (fixed format) then please make sure that the type of the bound is correct and positioned
properly.

770

Missing prerequisite section <sec1> for section <sec2>
Section <sec2> must be defined before section <sec1> in the MPS file being read. Please checkthe order of the sections.

771

Unable to open file : <file>
Please make sure that file <file> exists and is not locked.

Fair Isaac Corporation Proprietary Information

536

Chapter 10: Return Codes and Error Messages

772

Unexpected column type : <type> : <column>
The COLUMNS section contains the unknown column type <type>. If the MPSFORMAT control is set
to 0 (fixed format) then please make sure that the type of the column is correct and positioned
properly.

773

Unexpected number of fields in section : <sec>Unexpected number of fields was read by the reader in section <sec>. Please check the format of
the line. If the MPSFORMAT control is set to 0 (fixed format) then please make sure that the fields
are positioned correctly. This error is often caused by names containing spaces in free format, orby name containing spaces in fixed format but positioned incorrectly.

774

Unexpected row type : <type>
The ROWS section contains the unknown row type <type>. If the MPSFORMAT control is set to 0
(fixed format) then please make sure that the type of the row is correct and positioned properly.

775

Unexpected set type : <type>
The SETS or SOS section contains the unknown set type <type>. If the MPSFORMAT control is set to
0 (fixed format) then please make sure that the type of the row is correct and positioned properly.

776

Ignoring unknown column name <col> found in BOUNDS
Column <col> found in the BOUNDS section is not defined in the COLUMNS section. Please checkthe name of the column.

777

Ignoring quadratic coefficient for unknown column : <col>Column <col> found in the QUADOBJ section is not defined in the COLUMNS section. Please checkthe name of the column.

778

Ignoring unknown column name <col> found in set <set>Column <col> found in the definition of set <set> in the SETS or SOS section is not defined in the
COLUMNS section. Please check the name of the column.

779

Wrong objective sense: <sense>
The reader is unable to interpret the string <sense> in the OBJSENSE section as a valid objective
sense. The objective sense should be either MAXIMIZE or MINIMIZE. The reader accepts
sub-strings of these if they uniquely define the objective sense and are at least 3 characters long.
Note that if no OBJSENSE section is present, the sense of the objective is set to minimization bydefault. Please provide a valid objective sense.

780

Ignoring unknown row name <row> found in column <column>
Row <row> found in the column <column> in the COLUMNS section is not defined in the ROWS
section. Please check the name of the row.

781

Ignoring unknown row name <row> found in RANGE
Row <row> found in the RANGE section is not defined in the ROWS section. Please check the nameof the row.

782

Ignoring unknown row name <row> found in RHS
Row <row> found in the RHS section is not defined in the ROWS section. Please check the name of
the row.

783

Expecting numerical value
A numerical value field was expected while reading an MPS file. Please add the missing numericalentry. If the MPSFORMAT control is set to 0 (fixed format) then please check that the value fieldcontains a numerical value and is positioned correctly.

Fair Isaac Corporation Proprietary Information

537

Chapter 10: Return Codes and Error Messages

784

Null char in text file
A null char (’\0’) encountered in the MPS file. An MPS file is designed to be a text file and a nullchar indicates possible errors. Null chars are treated as spaces ’ ’ by the reader, but please checkthe origin of the null char.

785

Unrecognized section <sec> skipped
The section <sec> is not recognized as an MPS section. Please check the section identifier stringin the MPS file. In such cases, the reader stops reading to avoid unexpected results after reading.

787

Empty set: <set>
No set members are defined for set <set> in the MPS file. Please check if the set is empty byintention.

788

Repeated definition of section <sec> ignored
Section <sec> is defined more than once in the mps file. Any repeated definitions are ignored.
Many sections may include various versions of the described part if the problem (like different
RHS values, BOUNDS or RANGES), but please include those in the same section.

790

Wrong section in the basis file: <section>
Unrecognized section <section> found in the basis file. Please check the format of the file.

791

ENDATA is missing. File is possibly corrupted
The ENDATA section is missing from the end of the file. This possible indicates that part of the fileis missing. Please check the file.

792

Ignoring BS fieldBS fields are not supported by the Optimizer, and are ignored. Basis files containing BS fields may
be created by external software. Please convert BS fields to either XU or XL fields.

793

Superbasic variable outside bounds. Value moved to closest boundA superbasic variable in the basis file are outside its bounds. The value of the variable has been
modified to satisfy its bounds. Please check that the value in the basis file is correct. In case thevariable should be set to the value given by the basis file, please modify the bounds on the variable.

794

Value of fixed binary column <col> changed to <val>
The lower and upper bound for binary variable <col> was to <val>. Binaries may only be fixed at
level 0 or 1.

795

Xpress/Mosel extensions: number of opening and closing brackets mismatch
The LP file appears to be created by Mosel, using the Xpress MPS extensions to include variablenames with whitespaces, however the file seems to be broken due to a mismatch in opening andclosing brackets.

796

Char <c> is not supported in a name by file format. It may not be possible to read such files backcorrectly. Please set FORCEOUTPUT to 1 to write the file anyway, or use scrambled names.
Certain names in the problem object may be incompatible with different file formats (like names
containing spaces for LP files). If the Optimizer might be unable to read back a problem becauseof non-standard names, it will give an error message and won’t create the file. However, you may
force output using control FORCEOUTPUT or change the names by using scrambled names (-soption for XPRSwriteprob).

797

Wrong section in the solution file: <sec>Section <sec> is not supported in .slx MPS solution files.

Fair Isaac Corporation Proprietary Information

538

Chapter 10: Return Codes and Error Messages

798

Empty <type> file : <file>
File <file> of type <type> is empty.

799

Ignoring quadratic coefficients for unknown row name <row>
No row with name <row> was defined in the ROWS sections. All rows having a QCMATRIX section
must be defined as a row with type ’L’ or ’G’ in the ROWS section.

835

Given solution column count does not match given problem
The given solution contains a different column count compared to the loaded problem.

843

Delayed row (lazy constraint) <row> is not allowed to be of type ’N’. Row ignored
Delayed rows cannot be neutral. Please define all neutral rows as ordinary ones in the ROWS
section.

847

Model cut (user cut) <row> is not allowed to be of type ’N’. Row ignored
Model cuts cannot be neutral. Please define all neutral rows as ordinary ones in the ROWS section.

862

Quadratic constraint rows must be of type ’L’ or ’G’. Wrong row type for row <row>
All quadratic rows must be of type ’L’ or ’G’ in the ROWS section of the MPS file (and thecorresponding quadratic matrix be positive semi-definite).

863

The current version of the Optimizer does not yet support MIQCQP problems
The current version of the Optimizer does not yet support mixed integer quadratically constrained
problems.

864

Quadratic constraint rows must be of type ’L’ or ’G’. Wrong row type for row <row>
A library function was trying to define (or change to) a row with type ’L’ having quadraticcoefficients. All quadratic rows are required to be of type ’L’ (and the corresponding quadratic
matrix be positive semi-definite).

865

Row <row> is already quadratic
Cannot add quadratic constraint matrices together. To change an already existing matrix, either
use the XPRSchgqrowcoeff library function, or delete the old matrix first.

866

The divider of the quadratic objective at <pos> must be 2 or omitted
The LP file format expects, tough may be omitted, an "/2" after the each quadratic objective term
defined between square brackets. No other divider is accepted. The role of the "/2" is to notify theuser of the implied division in the quadratic objective (that does not apply to quadratic
constraints).

867

Not enough memory for tree search
There is not enough memory for one of the nodes in the tree search.

884

Fatal user error detected in callback
An error occurred during a user callback.

898

Cannot define range for quadratic rows. Range for row <row> ignored
Quadratic constraints are required to be convex, and thus it is not allowed to set a range on
quadratic rows. Each quadratic row should have a type of ’L’ or ’G’.

899

The quadratic objective is not convex. Set IFCHECKCONVEXITY=0 to disable check
The quadratic objective is not convex. Please check that the proper sense of optimization(minimization or maximization) is used.

Fair Isaac Corporation Proprietary Information

539

Chapter 10: Return Codes and Error Messages

900

The quadratic part of row <row> defines a non-convex region. Set IFCHECKCONVEXITY=0 to
disable check.
The quadratic in <row> is not convex. Please check that the proper sense of constraint is defined(less or equal or greater or equal constraint).

901

901 Duplicated QCMATRIX section for row <row> ignored.
The MPS file may contain one Q matrix for each row. In case of duplicates, only the first is loaded
into the matrix

902

Calling function <func> is not supported from the current context.
This XPRS function cannot be called from this callback.

903

Row <row> with right hand side value larger than infinity ignored.
The matrix file being read contains a right hand side that is larger than the predefined infinity
constant XPRS_PLUSINFINITY. Row is made neutral.

904

Function is not allowed outside optnode callback.
The used function of the branching manager is not allowed to call outside optnode.

905

Bad index passed to function.
The index passed to function is not in range of the attribute.

906

Global entity cannot be branched further.
The selected global entity is fixed and cannot be branched further.

907

Column is continuous and cannot be branched.
The given column is of continuous type. The used function does not support branching on
continuous columns.

909

Limit exceeded.
The limit of a certain object is exceeded.

910

Empty branch or branching object.
The given branch or branching object is empty.

911

Invalid information provided for branching object.
The given branching object contains invalid information.

912

Branching object(s) cannot be changed/used at this time.
The branching object is not fix yet. Hence, it cannot be changed/used.

913

Required data missing in function call for branching object.
Data is missing in function call for branching object.

914

Unexpected error triggered for branching object.
Unexpected error happened on a branching object.

915

Branching object (ID=<id>) rejected because it is empty or contains empty branches.
Improper branching object.

918

Module error.
Model can not be modified.

Fair Isaac Corporation Proprietary Information

540

Chapter 10: Return Codes and Error Messages

919

Column must be of type semi-continuous, semi-integer or partial integer to change its global
bound.
The global bound can be modified only for semi-continuous, semi-integer or partial integer column.

920

Semi-continuous lower bound for column <column> must be non-negative.
Only non-negative lower bounds can be specified for semi-continuos columns.

921

Partial integer limit for column <column> is outside the allowed range of 0 to 22 8 – 1.
The give limit for the column is out of the allowed range.

932

Unknown column name <column> found in piecewise linear term.
One of the columns given in the PWLOBJ or PWLCON section of the MPS file was not defined in
the COLUMNS section.

933

Breakpoints for piecewise linear constraint <index> not sorted and contradicting points (<x>,<y1>)and (<x>,<y2>) given.
The breakpoints for this piecewise linear function were not given as a sorted list, and due tocontradicting points this cannot be fixed by sorting (since it is unclear what the left- and right-limitof the discontinuity would be).

934

Breakpoints for piecewise linear constraint <index> not sorted, will be sorted internally.
The breakpoints for the piecewise linear function were not given as a sorted list, these will bereordered internally.

935

Piecewise linear breakpoints not given consecutively for variable <column>, will reorder them.
The breakpoints for this column were not given consecutively but with breakpoints for anothervariable in between, will be fixed internally.

936

Ignoring duplicate piecewise linear breakpoint (<x>,<y>) for piecewise linear constraint <index>.
The same breakpoint was given twice for this piecewise linear constrant, the second one will be
dropped.

937

Piecewise linear section for column <column> contained at most one breakpoint.
The piecewise linear function over this column only contained a single breakpoint or no
breakpoints at all, which is not enough to define the function.

938

Discontinuity at the <beginning/end> of piecewise linear constraint <index> without a matchingbound.
The first or last two breakpoints of the piecewise linear function shared the same value for the
input variable. While this is allowed to model discontinuous functions, it is only allowed for the
first or last points if they match the corresponding bound and do not leave the function undefined
before or after them.

939

Non-convex piecewise linear function with unbounded domain for column <column>, may lead tounbounded LP relaxation for reformulation even if MIP is bounded.
The piecewise linear function over the unbounded variable was non-convex and the sum of slopes
for the lower and upper limit is negative, potentially leading to an unbounded LP relaxation for thereformulation even though the MIP might be bounded. Consider giving explicit bounds for thisvariable if possible.

940

General constraint type <type> for constraint <name> not supported, should be one of MAX, MIN,
AND, OR, ABS, PWL
The general constraint <name> was assigned the type <type>, which is not supported. The typeshould be "MAX", "MIN", "AND", "OR", "ABS", or "PWL".

Fair Isaac Corporation Proprietary Information

541

Chapter 10: Return Codes and Error Messages

941

Entry <entry> of general constraint <name> neither a column nor a constant
One of the lines in general constraints section for constraint <name> consisted of <entry>, which isneither a column name nor a valid constant (and in case of free-format MPS-format also not a
GENCONS-type).

942<type> constraint <index> includes non-binary variable <name>. Only binaries allowed in AND/OR
general constraints.
The <index>-th general constraint, which is either an "AND" or an "OR" constraint, includes variable<name> which is not binary.

943

The absolute value constraint <index> includes <number> variables. ABS-constraints should
consist of exactly 2 variables.
The <index>-th general constraint, which is an "ABS" constraint, includes more than two variables.

944

The general constraint <index> consists of <number> elements. General constraints need to haveat least two elements.
The <index>-th general constraint consists of less than two elements. All general constraints must
include at least two elements ("abs" exactly two).

945

Error when loading the piecewise linear constraint names.
The LP format file reader failed to create the piecewise linear constraint names. The previous error
should explain why this failed.

946

Error when loading the general constraint names.
The LP format file reader failed to create the general constraint names. The previous error should
explain why this failed.

947

PWLCON section refers to piecewise linear constraint <name>, which was not defined in the
PWLNAM section.
In the MPS format, all piecewise linear constraints must first be defined in the PWLNAM section
before adding extreme points in the PWLCON section.

948

Missing bracket or comma in piecewise linear function or general constraint
Piecewise linear functions should be given as (<val1>, <val2>), general constraints as <keyword>(<col1>, <col2>, ..., <colk>). In this case one of the commas or brackets was missing.

949

Invalid piecewise linear constraint number passed to <function>.Piecewise linear constraint
number <val1> is invalid <val2>
There has been an error in one of the arguments of function <function>. The <val1>th given
piecewise linear constraint number <val2> is invalid. Please make sure that the piecewise linear
constraint numbers are not smaller than 0 and not larger than the total number of piecewise linear
constraints in the current problem, given by attribute PWLCONS.

950

Invalid general constraint number passed to <function>. <val1>-th General constraint number<val2> is invalid
There has been an error in one of the arguments of function <function>. The <val1>-th given
general constraint number <val2> is invalid. Please make sure that the general constraint numbers
are not smaller than 0 and not larger than the total number of general constraints in the current
problem, given by attribute GENCONS.

951

Input column or resultant of <name> deleted, piecewise linear constraint is also dropped
An <XPRSdelcols> call left the piecewise linear constraint <name> without input column or without
resultant. Thus the piecewise linear constraint is dropped.

Fair Isaac Corporation Proprietary Information

542

Chapter 10: Return Codes and Error Messages

952

Column deletion left <name> with no resultant or no inputs, general constraint is also dropped
An <XPRSdelcols> call left the general constraint <name> without resultant or without any inputs(either columns or constant values in case of <MIN>/<MAX>). Thus the general constraint is
dropped.

953

Column <index> appears as both resultant and input variable in piecewise linear/general constraint<index>.
The resultant of the piecewise linear or general constraint is equal to one of the input columns.
These need to be distinct.

954__pwlobj() appearing outside of objective.
The keyword __pwlobj(<col>) may be used inside the linear objective function to declare that theobjective contribution of this variable will later be defined in the pwlobj section, but it should neverappear in any other section.

955

Adjusting extremal breakpoints of piecewise linear constraint <index> to match bounds of input.
The first/last breakpoint of piecewise linear constraint <index> (and potentially further ones
afterwards) did not match the bound of the input variable and needed to be adjusted, even withpresolve disabled. Note that this change will persist after the solve.

956

Given breakpoint (<val1>, <val2>) for piecewise linear constraint <index> with infinite values andnon-constant slope.
The piecewise linear constraint contained a breakpoint with infinite values. All breakpoints shouldhave finite value, for piecewise linear constraints with unbounded rays a finite point along that ray
should be given as the first/last breakpoint and the solver will extend that ray in a way that ensuresnumerical stability of the formulation.

957

Non-numerical value in problem definition as <name> of <name>.
A non-numerical value (inf/nan) was given as a matrix or objective coefficient, right-hand side orcolumn bound. The only allowed exceptions are lower bounds or right-hand sides of ’G’
constraints with value -inf and upper bounds or right-hand sides of ’L’ constraints at +inf.

958

Name missing from initial general constraint of type <type>.
The first given general constraint of type <type> is missing a name, which is required in the MPS
format.

1001 Solution value redefined for column: <col>: <val1> -> <val2>
Multiple definition of variable <col> is not allowed. Please use separate SOLUTION sections todefine multiple solutions.
1002

Missing solution values in section <sec>. Only <val1> of <val2> definedNot all values were defined in the SOLUTIONS section. Variables with undefined values are set to
0.

1003

Please postsolve the problem first with XPRSpostsolve (postsolve).
Not all values were defined in the SOLUTIONS section. Variables with undefined values are set to
0.

1004

Negative semi-continuous lower bound (<val>) for column <col> replaced with zeroWrong input parameter for the lower bound of a semi-continuous variable was modified to 0.

1005

Unrecognized column name : <col>No column with name <col> is present in the problem object while loading solution.

1006

Failed to capture solution information.
Solution information is not available.

Fair Isaac Corporation Proprietary Information

543

Chapter 10: Return Codes and Error Messages

1020

Function <function> cannot be called here.
The specified function can not be called.

1022

Error (<error>) while trying to run branching script.
Branching script error.

1028

Unable to keep branch and bound tree memory usage below <val>Gb - currently using <val>Gb;
The Optimizer was unable to keep the tree memory usage below the limit defined by the
TREEMEMORYLIMIT control - the solve will continue but performance will be impaired.

1030

Duplicate names are not allowed - row/column/set/constraint <row1> would have same name as
row/column/set/constraint <row2>.
Each row, column, special ordered set, piecewise linear constraint and general constraint shouldhave unique name.

1034

Unknown column name <col> found in indicators
Columns <col> found in the INDICATORS section is not defined in the COLUMNS section. Pleasecheck the name of the column.

1035

Unknown row name <row> found in indicators
Row <row> found in the INDICATORS section is not defined in the ROWS section. Please check thename of the row.

1036

Unexpected indicator type : <type>
Indicator type <type> found in the INDICATORS section is invalid. The type should be ’IF’.

1037 Unexpected indicator active value : <value> for row <row>
The value <value> found in the INDICATORS section is invalid. Values in this section should beeither 0 and 1.
1038

Unsupported row type for indicator constraint <row>Rows configured as indicator constraints should have a type of ’L’ or ’G’.

1039 Non-binary variable <col> used as an indicator binary
The variable used in the condition part of an indicator constraint should be of type binary.
1054

Please use the FICO-SLP solver for general nonlinear problems. Contact "LICENSING_CONTACT_NAME " for a license.
To solve general nonlinear problems the FICO-SLP solver can be used.

1055

Can not resume global search - not currently solving a MIP.
The global search can not be resumed, the current problem is not mixed integer optimization.

1059 Unrecognized string identifier <id> passed to function <func>
The string <id> given as input to the function <func> does not match any expected identifiers.
Double-check spelling of <id> and consult documentation of function <func>, if available.
1071

Unable to dualize problems with quadratic coefficients
The current version of the Optimizer only supports dualization of linear problems. Remove
quadratic terms.

1074 Could not write tree to global file.
Branch-and-bound tree memory saving is disabled; re-enable this feature to allow the tree to becompressed and saved to the global file.

Fair Isaac Corporation Proprietary Information

544

Chapter 10: Return Codes and Error Messages

1075 Message too long: message <mes> must be shorter than <maxlen> characters
Could not write an error/info/warning message, due to a problem, row, column or set name being
too long. Shorten all names s.t. they consist of at most <maxlen> characters.
1081 The Xpress-Optimizer license has been lost; this may be because of a connection failure with thelicense server.
The connection to the Xpress license server has been lost and attempts to re-establish theconnection failed. Check for network issues between client and license server.
1082

Tree heap create failed.
Failed to create private heap for branch-and-bound tree; probably due to insufficient memory. If
possible, try to free up memory on your system, reduce the problem size or set appropriate
working limits.

1090 No license capacity.
The FICO Xpress license file does not specify an Optimizer capacity; license has been incorrectly
generated, please contact support@fico.com .
1092 Invalid scale factor
An invalid scale factor was given for a row or a column. Scale factors are provided as the
exponents of powers of two, and must be between 0 and MAXSCALEFACTOR
1093 Column scaling not allowed.
Scaling of binary, integer and partial integer columns is not allowed.
1094 Invalid SOCP constraint detected.
The Optimizer has detected an invalid SOCP constraint: a quadratic row has incorrectly been
identified as a second order cone. Please contact support.
1097

The dependent variable of row (e.g. variable z in z2 ≥ x2 + y2 ) must be defined non-negative,
otherwise the constraint is non-convex.
The problem is not formulated in a standard second order conic formulation.

1098 Both dependent variables of row (e.g. variables u and v in u ∗ v ≥ x2 + y2 ) must be defined
non-negative.
The problem is not formulated in a standard second order conic formulation.
1100 Cut limit reached
Failed to create cut, since the limit of storable cuts was reached. Please restart your solve with aless aggressive cutting strategy.
1101

Cannot call optimization routine recursively
You cannot call XPRSglobal, XPRSminim or XPRSmaxim within a call of XPRSglobal,
XPRSminim or XPRSmaxim on the same problem pointer. Either terminate the running
optimization process or use a separate problem pointer. See also error code 1101.

1102 Presolve detected infeasibility on non-convex quadratic row
All quadratic matrices in the quadratic constraints must be positive semi-definite or asecond-order cone.
1103 Insufficient name buffer
The supplied name buffer is too small. Allocate more memory for the buffer or use shorter names.
1104 No row/column/set names
Tried to access a group of names that do not exist. Provide names to columns/rows/sets before
doing so.

Fair Isaac Corporation Proprietary Information

545

Chapter 10: Return Codes and Error Messages

1105 Cannot create remote server session
Creating the remote compute server session failed. This may have multiple reasons, the error
message will specify the cause.
1106 Corrupt Xpress compute server interface
There appears to be a mismatch between the libraries of Xpress. Please reinstall Xpress.
1107

Connection to remote server lost
Connection to the compute Insight server was lost.

1108 Unable to create remote server job data package (disk full?)Solves using the compute server rely on creating temporary files.
1109

Remote server returned an error.
...

1111

Remote server returned a warningThis warning forwards a warningreported by the compute server.

1112 Remote server temporary directory provided creates a path too long.
Names used during a compute server solve is directed from the probname and a unique identifier.
Please shorten the probname.
1113 Limiting parallel MIP tasks
When control RESOURCESTRATEGY is enabled, this warning notifies that the number of maximum
MIP tasks have been limited to preserve memory.
1114 Error encountered during a sub-MIP solve. Please check the log for the cause.
When the error message from the sub-MIP is available, it will be included. Otherwise, please checkthe solve log for details.
1115 Calling <function> is not supported during a solve.
The <function> cannot be called during a solve.
1116 Paranthesis error in <name>.
Names including parantheses are checked to include the same number of opening and closing
parantheses.
1118 Ignoring unexpected flag ’<flag>’.
The flag <flag> passed into a command line call or API function was not understood and was
ignored.
1119 Solves with Xpress compute server interface are not allowed in this application
Integration with the Insight Compute interface has been enabled by setting the XPRESS_COMPUTE
environment variable, but is not permitted for this application.
1120 Cannot disable compute mode when compute is enabled by the XPRS_COMPUTE environment
variable.
When Xpress is in compute mode as the environment variable XPRS_COMPUTE is set, it does notconsume an Xpress license, hence local solves are not allowed.
1121 An error message produced when connecting to a compute server fails.
This error is specific to when a connection fails when attempting to set the XPRS_COMPUTE
control.

Fair Isaac Corporation Proprietary Information

546

Chapter 10: Return Codes and Error Messages

1122

Cannot use compute due to compute incompatible callbacks or controls set: ’reason’.
When compute mode is enabled using the control XPRS_COMPUTE, problem setup compatiblity
with copute mode is checked at the time a solve is initiated (as opposed to when enabled byenvironment variables, when the check is immediate).

1123

Cannot change the value of the COMPUTE control in a callback.
It is not allowed to try to enter or leave compute mode while solving a problem, so in particularfrom a callback.

1124

An illegal escaped char is found: ’illegal sequence’.
When the ESCAPE_NAMES control is enabled, character illegal to an mps or lp file are secaped,that is if an escape sequence @HH is encountered, where HH is not a valid hexadecimal number.

1125

Row <name> declared as both delayed row/indicator/model cut and delayed
row/indicator/modelcut.
A row was declared as more than one of delayed row / indicator constraint / model cut. These
three options are mutually exclusive. An indicator constraint will always be part of the problem(with enforcement depending of the value of the indicator variable) and cannot be declared
delayed or as a model cut. A row can also only be either delayed (in case it needs to be satisfied)or a model cut (if it is redundant).

1126

Row <name> flagged as indicator twice.
A row was declared an indicator twice (for potentially different columns and values). A single row
can only be implied by a single variable/term, if the same constraint should be implied by different
terms, the row should be duplicated with each different term implying its own copy. If the indicatorvariable needs to be changed via the API, the old one first needs to be removed by a call to
XPRSdelindicators before the new one can be added in XPRSsetindicators.

1127 The requested operation requires executing a subprocess, which is forbidden by security
restrictions.
In order to execute the command or function, the Optimizer needed to execute an subprocess, e.g.,
an external compression tool. This is forbidden when security restrictions have been enabled,which includes all FICO cloud environments.
9999 Generic error message
Please contact support@fico.com.

Fair Isaac Corporation Proprietary Information

547

Appendix

APPENDIX A

Log and File Formats
A.1 File Types
The Optimizer generates or inputs a number of files of various types as part of the solution process. By
default these all take file names governed by the problem name (problem_name), but distinguished bytheir three letter extension. The file types associated with the Optimizer are as follows:
Extension

Description

File
Type

.alt

Matrix alteration file, input by XPRSalter (ALTER).

ASCII

.asc

CSV format solution file, output by XPRSwritesol (WRITESOL).

ASCII

.bss

Basis file, output by XPRSwritebasis (WRITEBASIS), input by
XPRSreadbasis (READBASIS).

ASCII

.csv

Output file, output by XPRSiiswrite.

ASCII

.dir

Directives file (MIP only), input by XPRSreaddirs (READDIRS).

ASCII

.glb

Global file (MIP only), used by XPRSglobal (GLOBAL).

Binary.hdr

Solution header file, output by XPRSwritesol (WRITESOL).

ASCII

.lp

LP format matrix file, input by XPRSreadprob (READPROB).

ASCII

.mps

MPS / XMPS format matrix file, input by XPRSreadprob (READPROB).

ASCII

.prt

Fixed format solution file, output by XPRSwriteprtsol (WRITEPRTSOL).

ASCII

.sol

Solution file created by XPRSwritebinsol (WRITEBINSOL).

Binary.slx

Solution file created by XPRSwriteslxsol (WRITESLXSOL).

ASCII

.xtm

Tuner method created by XPRStunerwritemethod.

ASCII

.xtr

Tuner result created by XPRStune.

XML

.json

Remote Solving Configuration file

JSON

In the following sections we describe the formats for a number of these.
Note that CSV stands for comma-separated-values text file format.

A.1.1 File Compression
Many Optimizer commands support reading and writing compressed files. Support for Gzip compression
is built in, so commands like the following will work as expected:
readprob problem.mat.gz
writeprob problem.gz

Fair Isaac Corporation Proprietary Information

549

Appendix A: Log and File Formats

The Optimizer can also support additional compression formats, as long as the necessary command-line
tools are available in the PATH environment variable. The following table shows the supported
compression formats along with the required tools:
Extension

Required Toolgz

Built-in support

zip

zip / unzip

tar, tgz

tarbz2, bzip2

bzip2

7z

7z / 7za / 7zr

xz

xz

lz4

lz4

Z

compress / decompress

In addition, the 7z tool can be used to read and write most of the formats listed above.
NB: compression using external tools is not supported in cloud environments due to security restrictions.

A.2 XMPS Matrix Files
The FICO Xpress Optimizer accepts matrix files in LP or MPS format, and an extension of this, XMPS
format. In that the latter represents a slight modification of the industry-standard, we provide details of it
here.
XMPS format defines the following fields:
Field

1

2

3

4

5

6

Columns

2-3

5-12

15-22

25-36

40-47

50-61

The following sections are defined:NAME

the matrix name;ROWS

introduces the rows;

COLUMNS

introduces the columns;

QUADOBJ / QMATRIX

introduces a quadratic objective function;

QCMATRIX

introduces the quadratic constraints;

DELAYEDROWS

introduces the delayed rows;

MODELCUTS

introduces the model cuts;

INDICATORS

introduces the indicator contraints;

SETS

introduces SOS definitions;

RHS

introduces the right hand side(s);RANGES

introduces the row ranges;

BOUNDS

introduces the bounds;

GENCONS

introduces general constraints;

ENDATAsignals the end of the matrix.

compatibility

additional sections for extensions of the MPS format that can be read but not written.

All section definitions start in column 1.

Fair Isaac Corporation Proprietary Information

550

Appendix A: Log and File Formats

A.2.1 NAME section
Format:Cols 1-4

Field 3

NAME

model_nameA.2.2 ROWS section
Format:Cols 1-4
ROWS

followed by row definitions in the format:
Field 1

Field 2

type

row_name

The row types (Field 1) are:N

unconstrained (for objective functions);L

less than or equal to;GE

greater than or equal to;equality.

A.2.3 COLUMNS section
Format:Cols 1-7
COLUMNS

followed by columns in the matrix in column order, i.e. all entries for one column must finish before those
for another column start, where:
Field 1

Field 2

Field 3

Field 4

Field 5

Field 6

blank

col

row1

value1

row2

value2

specifies an entry of value1 in column col and row row1 (and value2 in col and row row2). The Field
5/Field 6 pair is optional.

A.2.4 QUADOBJ / QMATRIX section (Quadratic Programming only)
A quadratic objective function can be specified in an MPS file by including a QUADOBJ or QMATRIX
section. For fixed format XMPS files, the section format is as follows:
Format:Cols 1-7
QUADOBJor
Format:Cols 1-7
QMATRIX

Fair Isaac Corporation Proprietary Information

551

Appendix A: Log and File Formats

followed by a description of the quadratic terms. For each quadratic term, we have:
Field 1

Field 2

Field 3

Field 4

blank

col1

col2

value

where col1 is the first variable in the quadratic term, col2 is the second variable and value is the associatedcoefficient from the Q matrix. In the QMATRIX section all nonzero Q elements must be specified. In the
QUADOBJ section only the nonzero elements in the upper (or lower) triangular part of Q should bespecified. In the QMATRIX section the user must ensure that the Q matrix is symmetric, whereas in the
QUADOBJ section the symmetry of Q is assumed and the missing part is generated automatically.
Note that the Q matrix has an implicit factors of 0.5 when included in the objective function.
This means, for instance that an objective function of the form
5x2 + 7xy + 9y2
is represented in a QUADOBJ section as:
QUADOBJ
x
x
x
y
y
y

10
7
18

(The additional term ’y x 7’ is assumed which is why the coefficient is not doubled); and in a QMATRIX
section as:
QMATRIX
x
x
x
y
y
x
y
y

10
7
7
18

The QUADOBJ and QMATRIX sections must appear somewhere after the COLUMNS section and must only
contain columns previously defined in the columns section. Columns with no elements in the problem
matrix must be defined in the COLUMNS section by specifying a (possibly zero) cost coefficient.

A.2.5 QCMATRIX section (Quadratic Constraint Programming only)
Quadratic constraints may be added using QCMATRIX sections.
Format:Cols 1-8

Field 3

QCMATRIX

row_name

Each constraint having quadratic terms should have it’s own QCMATRIX section. The QCMATRIX section
exactly follows the description of the QMATRIX section, i.e. for each quadratic term, we have:
Field 1

Field 2

Field 3

Field 4

blank

col1

col2

value

where col1 is the first variable in the quadratic term, col2 is the second variable and value is theassociated coefficient from the Q matrix. All nonzero Q elements must be specified. The user mustensure that the Q matrix is symmetric. For instance a constraint of the form

Fair Isaac Corporation Proprietary Information

552

Appendix A: Log and File Formats

qc1 : x + 5x2 + 7xy + 9y2 <= 2is represented as:
NAME example
ROWS
L qc1
COLUMNSxqc1
yqc1
QCMATRIX qc1
x
x
x
y
y
x
y
y
RHS
RHS1
qc1
END

1
0
5
3.5
3.5
9
2

The QCMATRIX sections must appear somewhere after the COLUMNS section and must only containcolumns previously defined in the columns section. Columns with no elements in the problem matrix
must be defined in the COLUMNS section by specifying a (possibly zero) cost coefficient. QCMATRICES
must be defined only for rows of type L or G and must have no range value defined in the RANGE section.
Note that the FICO Xpress Optimizer can only solve convex (MI)QPs. Thus the quadratic matrix should bepositive semi-definite for <= rows and negative semi-definite for >= rows so that the defined region isconvex. Otherwise the problem will need to be solved by the nonlinear solver.
NOTE: technically, there is one exception for the restriction on the row type being L or G. If the row is thefirst nonbinding row (type N) then the section is treated as a QMATRIX section instead. Please be aware,that this also means that the objective specific implied divider of 2 will be assumed (Q matrix has animplicit factors of 0.5 when included in the objective function, see the QMATRIX section). It’s probably
much better to use the QMATRIX or QUADOBJ sections to define quadratic objectives.
NOTE:

A.2.6 DELAYEDROWS section
This specifies a set of rows in the matrix that will be treated as delayed rows during a global search.
These are rows that must be satisfied for any integer solution, but will not be loaded into the active set of
constraints until required.
This section should be placed between the ROWS and COLUMNS sections. A delayed row may be of type L,
G or E. Each row should appear either in the ROWS or the DELAYEDROWS section, not in both. Otherwise,
the format used is the same as of the ROWS section.
Format:Cols 1-11
DELAYEDROWS

followed by row definitions in the format:
Field 1

Field 2

type

row_name

NOTE: For compatibility reasons, section names DELAYEDROWS and LAZYCONS are treated as synonyms.

Fair Isaac Corporation Proprietary Information

553

Appendix A: Log and File Formats

A.2.7 MODELCUTS section
This specifies a set of rows in the matrix that will be treated as model cuts during a global search. During
presolve the model cuts are removed from the matrix. Following optimization, the violated model cuts areadded back into the matrix and the matrix is re-optimized. This continues until no violated cuts remain.
This section should be placed between the ROWS and COLUMNS sections. Model cuts may be of type L, G
or E. The model cuts must be "true" model cuts, in the sense that they are redundant at the optimal MIP
solution. The Optimizer does not guarantee to add all violated model cuts, so they must not be required
to define the optimal MIP solution.
Each row should appear either in the ROWS, DELAYEDROWS or in the MODELCUTS section, not in any twoor three of them. Otherwise, the format used is the same as of the ROWS section.
Format:Cols 1-9
MODELCUTS

followed by row definitions in the format:
Field 1

Field 2

type

row_name

NOTE: A problem is not allowed to consists solely from model cuts. For compatibility reasons, section
names MODELCUTS and USERCUTS are treated as synonyms.

A.2.8 INDICATORS section
This specifies that a set of rows in the matrix will be treated as indicator constraints during a global
search. These are constraints that must be satisfied only when their associated controlling binary
variables have specified values (either 0 or 1).
This section should be placed after any QUADOBJ, QMATRIX or QCMATRIX sections. The section format
is as follows:
Format:Cols 1-10
INDICATORS

Subsequent records give the associations between rows and the controlling binary columns, with thefollowing form:
Field 1

Field 2

Field 3

Field 4

type

row_name

col_name

value

which specifies that the row row_name must be satisfied only when column col_name has value
value. Here type must always be IF and value can be either 0 or 1. Also referenced rows must be oftype L or G only, and referenced columns must be binary.

A.2.9 SETS section (Integer Programming only)
Format:Cols 1-4
SETS

Fair Isaac Corporation Proprietary Information

554

Appendix A: Log and File Formats

This record introduces the section which specifies any Special Ordered Sets. If present it must appear
after the COLUMNS section and before the RHS section. It is followed by a record which specifies the typeand name of each set, as defined below.
Field 1

Field 2

type

set

Where type is S1 for a Special Ordered Set of type 1 or S2 for a Special Ordered Set of type 2 and set isthe name of the set.
Subsequent records give the set members for the set and are of the form:
Field 1

Field 2

Field 3

Field 4

Field 5

Field 6

blank

set

col1

value1

col2

value2

which specifies a set member col1 with reference value value1 (and col2 with reference value value2). The
Field 5/Field 6 pair is optional.

A.2.10 RHS section
Format:Col 1-3
RHS

followed by the right hand side as defined below:
Field 1

Field 2

Field 3

Field 4

Field 5

Field 6

blank

rhs

row1

value1

row2

value2

specifies that the right hand side column is called rhs and has a value of value1 in row row1 (and a valueof value2 in row row2). The Field 5/Field 6 pair is optional.

A.2.11 RANGES section
Format:Cols 1-6
RANGES

followed by the right hand side ranges defined as follows:
Field 1

Field 2

Field 3

Field 4

Field 5

Field 6

blank

rng

row1

value1

row2

value2

specifies that the right hand side range column is called rng and has a value of value1 in row row1 (and avalue of value2 in row row2). The Field 5/Field 6 pair is optional.
For any row, if b is the value given in the RHS section and r the value given in the RANGES section, thenthe activity limits below are applied:

Fair Isaac Corporation Proprietary Information

555

Appendix A: Log and File Formats

Row Type

Sign of r

Upper Limit

Lower Limit

G

+

b+r

b

L

+

b

b-r

E

+

b+r

b

E

-

b

b+r

A.2.12 BOUNDS section
Format:Cols 1-6
BOUNDS

followed by the bounds acting on the variables:
Field 1

Field 2

Field 3

Field 4

type

blank

col

value

The Linear Programming bound types are:UP

for an upper bound;LO

for a lower bound;FX

for a fixed value of the variable;

FRfor a free variable;MIfor a non-positive (’minus’) variable;

PLfor a non-negative (’plus’) variable (the default).

There are six additional bound types specific to Integer Programming:
UI

for an upper bounded general integer variable;LI

for a lower bounded general integer variable;

BV

for a binary variable;SCfor a semi-continuous variable;SI

for a semi-continuous integer variable;PI

for a partial integer variable.

The value specified is an upper bound on the largest value the variable can take for types UP, FR, UI, SC
and SI; a lower bound for types LO and LI; a fixed value for type FX; and ignored for types BV, MI and PL.
For type PI it is the switching value: below which the variable must be integer, and above which thevariable is continuous. If a non-integer value is given with a UI or LI type, only the integer part of thevalue is used.
■■■

Integer variables may only take integer values between 0 and the upper bound. Integer variables
with an upper bound of unity are treated as binary variables.
Binary variables may only take the values 0 and 1. Sometimes called 0/1 variables.
Partial integer variables must be integral when they lie below the stated value, above that value
they are treated as continuous variables.

Fair Isaac Corporation Proprietary Information

556

Appendix A: Log and File Formats■

Semi-continuous variables may take the value zero or any value between a lower bound and somefinite upper bound. By default, this lower bound is 1.0. Other positive values can be specified as an
explicit lower bound. For example
BOUNDSLO x 0.8
SC x 12.3

means that x can take the value zero or any value between 0.8 and 12.3.
■

Semi-continuous integer variables may take the value zero or any integer value between a lower
bound and some finite upper bound.

A.2.13 GENCONS section
Format:Cols 1-7
GENCONSThis record introduces the section which specifies any general constraints, namely min, max, and, or, abs,
pwl constraints. If present it must appear after the COLUMNS section. It is followed by a record which
specifies the type and name of each general constraint, as defined below.
Field 1

Field 2

type

name

Where type is MAX for a maximum-constraint, MIN for a minimum-constraint, AND for an and-constraint,
OR for an or-constraint, ABS for an absolute-value-constraint or PWL for a piecewise linear constraint andname is the name of the general constraint.
Subsequent records for min/max/and/or/abs give the elements for the constraint and are of the form:
Field 1

Field 2blankcol/valFor all general constraints, the first given element (which needs to be the name of a column) will be theso-called "resultant". For the max- and min-constraints, the resultant is followed by an arbitrary number offurther column names or values, and the resultant should be the maximum/minimum of the remainingcolumns and values. For the and- and or-constraints the resultant is followed by an arbitrary number offurther column names, where all the columns (including the resultant) need to be binary, and the resultant
will be one if and only if all (and) or at least one (or) of the remaining variables are one. For theabs-constraint, the resultant should be followed by exactly one futher column name, and the resultant willtake the absolute value of the other column.
As an example, the constraint z = max x, y, 5.0 could be written as
GENCONSMAX m1zxy
5.0

For piecewise linear constraints the format is slightly different, consisting of exactly one line of the form:

Fair Isaac Corporation Proprietary Information

557

Appendix A: Log and File Formats

Field 1

Field 2

col1

col2

and at least three lines of the form:
Field 1

Field 2

val1

val2

The first line defines the two variables that should be restricted by a piecewise linear relationship and thepoints given in the remaining lines will define the piecewise linear function, which is extended beyond thefirst and last point according to the slope of the previous ones. For instance the piecewise linear
constraint
y = 0, if x < 0y = x, if 0 <= x <= 5y = 2x - 5, if 5 < x <= 10
y = 15, if x > 10

could be represented as:
GENCONSPWL p1
x y
-1 0
0 0
5 5
10 15
11 15

A.2.14 ENDATA section
Format:Cols 1-6
ENDATA

is the last record of the file.

A.2.15 Compatibility
The optimizer is also able to read in some further sections defined by extensions of the LP format. This
includes the SOS section, which is a different way of writing down special ordered sets, and the following
sections that offer different ways of formulating piecewise linear constraints and objectives:

A.2.16 PWLOBJ section
Piecewise linear objective functions may be added using PWLOBJ sections.
Format:Cols 1-6
PWLOBJ

The piecewise linear objective function is defined via its extreme points, i.e., the function itself is given by
all convex combinations of neighboring extreme points as well as the infinite rays defined by the first twoand last two points. Each row of the PWLOBJ section defines one extreme point for one column.

Fair Isaac Corporation Proprietary Information

558

Appendix A: Log and File Formats

Field 1

Field 2

Field 3

Field 4

blank

col

value1value2where col is the variable whose objective contribution is defined through the piecewise linear function
and value2 is the objective contribution if the variable takes value1. For instance the piecewise linear
objective function
0, if x < 0x, if 0 <= x <= 5
2x - 5, if 5 < x <= 10
15, if x > 10

could be represented as:
PWLOBJ
x
x
x
x
x

-1 0
0 0
5 5
10 15
11 15

If there are piecewise linear objective functions for multiple variables, these should be given
consecutively (i.e., first all extreme points for x, then all for y). Furthermore, for each variable, the extreme
points should be sorted according to non-decreasing value1. The piecewise linear functions do notnecessarily need to be continuous, in this case two extreme points with identical value1 and different
value2 can be given and the first one will be used as the lefthand-limit and the second one as therighthand-limit. Note that for value1 itself, both value2 can appear in the solution due to tolerances.

A.2.17 PWLNAM section
PWLNAM is the first of the two sections defining piecewise linear constraints.
Format:Cols 1-6
PWLNAM

Similar to the piecewise linear objective, the piecewise linear constraints will mainly be defined throughits extreme points, which happens in the PWLCON section. In addition to that, however, the two variables
involved in the restriction y = f(x), with piecewise linear function f, need to be specified, and additionally apre- and postslope are given, defining the slope of the piecewise linear function before the first and after
the last extreme point. Each piecewise linear function needs to be named, to later refer to it in the
PWLCON section when specifying the extreme points.
Field 1

Field 2

Field 3

Field 4

Field 5

Field 6

blank

name

col1

col2

value1value2where col1 is the resulting variable (y above), col2 is the input variable (x above), value1 is thepreslope defining the piecewise linear function up to the first extreme point and value1 is the postslope
defining it after the last extreme point.

A.2.18 PWLCON section
PWLCON is the second of the two sections defining piecewise linear constraints.

Fair Isaac Corporation Proprietary Information

559

Appendix A: Log and File Formats

Format:Cols 1-6
PWLCON

Each piecewise linear constraint introduced in the PWLNAM section needs to be further specified throughits extreme points, defining the behaviour between the pre- and postlope. Each line consists of the nameof a piecewise linear constraint introduced in the PWLNAM followed by a list of extreme points. Similar to
the PWLOBJ section, the functions can be discontinuous, in which case the extreme points have to begiven in the correct order.
Field 1

Field 2

Field 3

Field 4

blank

name

value1value2where name is the name of a piecewise linear function introduced in the PWLNAM section and value1
and value2 define an extreme point, where value1 is the value of the input variable and value1 is thecorresponding output value. For instance the piecewise linear constraint
y = 0, if x < 0y = x, if 0 <= x <= 5y = 2x - 5, if 5 < x <= 10
y = 15, if x > 10

could be represented as:
PWLNAM
pwc1 yx1
PWLCON
pwc1
0 0
pwc1
5 5
pwc1
10 15

0 0

A.3 LP File Format
Matrices can be represented in text files using either the MPS file format (.mps or .mat files) or the LP
file format (.lp files). The LP file format represents matrices more intuitively than the MPS format in thatit expresses the constraints in a row-oriented, algebraic way. For this reason, matrices are often written to
LP files to be examined and edited manually in a text editor. Note that because the variables are ’declared’
as they appear in the constraints during file parsing the variables may not be stored in the FICO Xpress
Optimizer memory in the way you would expect from your enumeration of the variable names. For
example, the following file:
Minimizeobj: - 2 x3
Subject To
c1: x2 - x1 <= 10
c2: x1 + x2 + x3 <= 20
Boundsx1 <= 30End

after being read and rewritten to file would be:\Problem name:Minimize

Fair Isaac Corporation Proprietary Information

560

Appendix A: Log and File Formats- 2 x3
Subject To
c1: x2 - x1 <= 10
c2: x3 + x2 + x1 <= 20
Boundsx1 <= 30End

Note that the last constraint in the output .lp file has the variables in reverse order to those in the input.lp file. The ordering of variables in the last constraint of the rewritten file is the order that the variables
were encountered during file reading. Also note that although the optimal solution is unique for thisparticular problem in other problems with many equal optimal solutions the path taken by the solver may
depend on the variable ordering and therefore by changing the ordering of your constraints in the .lp file
may lead to different solution values for the variables.

A.3.1 Rules for the LP file format
The following rules can be used when you are writing your own .lp files to be read by the FICO Xpress
Optimizer.

A.3.2 Comments and blank lines
Text following a backslash (\) and up to the subsequent carriage return is treated as a comment. Blanklines are ignored. Blank lines and comments may be inserted anywhere in an .lp file. For example, acommon comment to put in LP files is the name of the problem:\Problem name:prob01

A.3.3 File lines, white space and identifiersWhite space and carriage returns delimit variable names and keywords from other identifiers. Keywords
are case insensitive. Variable names are case sensitive. Although it is not strictly necessary, for clarity ofyour LP files it is perhaps best to put your section keywords on their own lines starting at the firstcharacter position on the line. There is no maximum on the length names of on the length of input lines.
Lines may be broken for continuation wherever you may use white space.

A.3.4 Sections
The LP file is broken up into sections separated by section keywords. The following are a list of section
keywords you can use in your LP files. A section started by a keyword is terminated with another section
keyword indicating the start of the subsequent section.

Fair Isaac Corporation Proprietary Information

561

Appendix A: Log and File Formats

Section keywords

Synonyms

Section contents

maximize or minimize

maximum max minimummin

One linear expression describing the objective function.

subject to

A list of constraint expressions.

boundssubject to:such that st s.t. st.
subjectto
suchthatsubject suchboundintegers

integer ints int

generals

general gens gen

A list of variable names of integer variables. Unless otherwise specified in thebounds section, the default relaxationinterval of the variables is [0, XPRS_PLUSINFINITY].

binaries

binary bins bin

A list of variable names of binary variables.

semi-continuous

semi continuous
semis semi s.c.

A list of variable names of semicontinuous variables.

semi integers

s.i.

A list of semi-integer bound expressions
for variables.

partial integerp.i.

A list of variable names of partial integer
variables.

general constraints

general constraint
gencons g.c.

A list of min/max/and/or/abs and piecewise linear constraints.

rangesrange

A list of constraint ranges.

A list of bounds expressions for variables.
A list of variable names of integer variables. Unless otherwise specified in thebounds section, the default relaxation interval of the variables is [0, 1].

Variables that do not appear in any of the variable type registration sections (i.e., integers, generals,
binaries, semi-continuous, semi integer, partial integer) are defined to be continuous
variables by default. That is, there is no section defining variables to be continuous variables.
With the exception of the objective function section (maximize or minimize) and the constraints
section (subject to), which must appear as the first and second sections respectively, the sections
may appear in any order in the file. The only mandatory section is the objective function section. Notethat you can define the objective function to be a constant in which case the problem is a so-called
constraint satisfaction problem. The following two examples of LP file contents express empty problems
with constant objective functions and no variables or constraints.
Empty problem 1:
MinimizeEnd

Empty problem 2:
Minimize
0End

The end of a matrix description in an LP file can be indicated with the keyword end entered on a line by

Fair Isaac Corporation Proprietary Information

562

Appendix A: Log and File Formats

itself. This can be useful for allowing the remainder of the file for storage of comments, unused matrix
definition information or other data that may be of interest to be kept together with the LP file.

A.3.5 Names
Variable, constraint and other names can use any of the alphanumeric characters (a-z, A-Z, 0-9) and anyof the following symbols:!"#$%&/,.;?@_`'{}()|~'

A name can not begin with a number or a period and should not be the same as any of the section orsubsection names. Care should be taken using the characters E or e since these may be interpreted as
exponential notation for numbers.

A.3.6 Linear expressions
Linear expressions are used to define the objective function and constraints. Terms in a linear expression
must be separated by either a + or a - indicating addition or subtraction of the following term in theexpression. A term in a linear expression is either a variable name or a numerical coefficient followed bya variable name. It is not necessary to separate the coefficient and its variable with white space or acarriage return although it is advisable to do so since this can lead to confusion. For example, the string "2e3x" in an LP file is interpreted using exponential notation as 2000 multiplied by variable x rather than 2
multiplied by variable e3x. Coefficients must precede their associated variable names. If a coefficient isomitted it is assumed to be 1.

A.3.7 Objective function
The objective function section can be written in a similar way to the following examples using either of
the keywords maximize or minimize. Note that the keywords maximize and minimize are not used
for anything other than to indicate the following linear expression to be the objective function. Note thefollowing two examples of an LP file objective definition:
Maximize- 1 x1 + 2 x2 + 3x + 4yor
Minimize- 1 x1 + 2 x2 + 3x + 4y

No line continuation character is required to break the objective function across multiple lines and it canbe broken wherever you may use white space.
The objective function can be named in the same way as for constraints (see later) although this name isignored internally by the FICO Xpress Optimizer. Internally the objective function is always named__OBJ___.

A.3.8 Constraints
The section of the LP file defining the constraints is preceded by the keyword subject to. Each
constraint definition must begin on a new line. A constraint may be named with an identifier followed by acolon before the constraint expression. Constraint names must follow the same rules as variable names.
If no constraint name is specified for a constraint then a default name is assigned of the form C0000001,
C0000002, C0000003, etc. Constraint names are trimmed of white space before being stored.

Fair Isaac Corporation Proprietary Information

563

Appendix A: Log and File Formats

The constraints are defined as a linear expression in the variables followed by an indicator of theconstraint’s sense and a numerical right-hand side coefficient. The constraint sense is indicatedintuitively using one of the tokens: >=, <=, or =. For example, here is a named constraint:
depot01: - x1 + 1.6 x2 - 1.7 x3 <= 40

Note that tokens > and < can be used, respectively, in place of the tokens >= and <=.
No line continuation character is required when breaking a constraint across multiple lines, and lines may
be broken for continuation wherever you may use white space.

A.3.9 Delayed rows
Delayed rows are defined in the same way as general constraints, but after the delayed rows keyword.
Note that delayed rows shall not include quadratic terms. The definition of constraints, delayed rows andmodel cuts should be sequentially after each other.
For example:
Minimizeobj: x1 + x2
subject tox1 <= 10x1 + x2 >= 1
delayed rows
x1 >= 2end

For compatibility reasons, the term lazy constraints is used as a synonym to delayed rows.

A.3.10 Model cuts
Model cuts are defined in the same way as general constraints, but after the model cuts keyword. Notethat model cuts shall not include quadratic terms. The definition of constraints, delayed rows and modelcuts should be sequentially after each other.
For example:
Minimizeobj: x1 + x2
subject tox1 <= 10x1 + x2 >= 1
model cuts
x1 >= 2end

For compatibility reasons, the term user cuts is used as a synonym to model cuts.

A.3.11 Indicator contraints
Indicator constraints are defined in the constraints section together with general constraints (that is,under the keyword subject to). The syntax is as follows:
constraint_name: col_name = value -> linear_inequality

which means that the constraint linear_inequality should be enforced only when the variable
col_name has value value.

Fair Isaac Corporation Proprietary Information

564

Appendix A: Log and File Formats

As for general constraints, the constraint_name: part is optional; col_name is the name of thecontrolling binary variable (it must be declared as binary in the binaries section); and value may beeither 0 or 1. Finally the linear_inequality is defined in the same way as for general constraints.
For example:
Minimizeobj: x1 + x2
subject tox1 + 2 x2 >= 2
x1 = 0 -> x2 >= 2binaryx1
end

A.3.12 Bounds
The list of bounds in the bounds section are preceded by the keyword bounds. Each bound definition
must begin on a new line. Single or double bounds can be defined for variables. Double bounds can be
defined on the same line as 10 <= x <= 15 or on separate lines in the following ways:
10 <= x15 >= xor
x >= 10x <= 15

If no bounds are defined for a variable the FICO Xpress Optimizer uses default lower and upper bounds.
An important point to note is that the default bounds are different for different types of variables. For
continuous variables and variables declared in the generals section, the interval defined by the default
bounds is [0, XPRS_PLUSINFINITY], while for variables declared in the integers section (see later)
the relaxation interval defined by the default bounds is [0, 1]. Note that the constant
XPRS_PLUSINFINITY is defined in the FICO Xpress Optimizer header files in your FICO Xpress
Optimizer libraries package.
If a single bound is defined for a variable the FICO Xpress Optimizer uses the appropriate default boundas the second bound. Note that negative upper bounds on variables must be declared together with an
explicit definition of the lower bound for the variable. Also note that variables can not be declared in thebounds section. That is, a variable appearing in a bounds section that does not appear in the objective
section or in the constraint section is ignored.
Bounds that fix a variable can be entered as simple equalities. For example, x6 = 7.8 is equivalent to 7.8<= x6 <= 7.8. The bounds +∞ (positive infinity) and –∞ (negative infinity) must be entered as strings(case insensitive):+infinity, -infinity, +inf, -inf.

Note that the keywords infinity and inf may not be used as a right-hand side coefficient of aconstraint.
A variable with a negative infinity lower bound and positive infinity upper bound may be entered as free(case insensitive). For example, x9 free in an LP file bounds section is equivalent to:- infinity <= x9 <= + infinity

or

Fair Isaac Corporation Proprietary Information

565

Appendix A: Log and File Formats- infinity <= x9

In the last example here, which uses a single bound is used for x9 (which is positive infinity forcontinuous example variable x9).

A.3.13 Generals, Integers and binaries
The generals, integers and binaries sections of an LP file is used to indicate the variables thatmust have integer values in a feasible solution. The difference between the variables registered in eachof these sections is in the definition of the default bounds that the variables will have. For variables
registered in the generals section the default bounds are 0 and XPRS_PLUSINFINITY. For variables
registered in the integers section the default bounds are 0 and 1. The bounds for variables registeredin the binaries section are 0 and 1.
The lines in the generals, integers and binaries sections are a list of white space or carriage
return delimited variable names. Note that variables can not be declared in these sections. That is, avariable appearing in one of these sections that does not appear in the objective section or in a constraint
in the constraint section is ignored.
It is important to note that you will only be able to use these sections if your FICO Xpress Optimizer islicensed for Mixed Integer Programming.

A.3.14 Semi-continuous and semi-integer
The semi-continuous and semi integers sections of an LP file relate to two similar classes ofvariables and so their details are documented here simultaneously.
The semi-continuous (or semi integers) section of an LP file are used to specify variables assemi-continuous (or semi-integer) variables, that is, as variables that may take either (a) value 0 or (b)real (or integer) values from specified thresholds and up to the variables’ upper bounds.
The lines in a semi-continuous (or semi integers) section are a list of white space or carriage
return delimited entries that are variable name-number pair. For the semi-continuous secion it is also
possible to provide a variable name only. The following example shows the format of entries in thesemi-continuous section.
Semi-continuousx7 >= 2.3x8x9 > 4.5

The following example shows the format of entries in the semi integer section.
Semi integers
x7 >= 3x9 > 5Note that it is possible to use either the >= token or the > token. The resulting threshold will be identicalfor both cases. It is not possible to use the <= token.
The threshold of the interval within which a variable may have real (or integer) values is defined in two
ways depending on whether the entry for the variable is (i) a variable name or (ii) a variable name-number
pair. If the entry is just a variable name, then the variable’s threshold is the variable’s lower bound, definedin the bounds section (see earlier). If the entry for a variable is a variable name-number pair, then thevariable’s threshold is the number value in the pair.
It is important to note that if (a) the threshold of a variable is defined by a variable name-number pair and(b) a lower bound on the variable is defined in the bounds section, then:

Fair Isaac Corporation Proprietary Information

566

Appendix A: Log and File Formats

Case 1) If the lower bound is less then zero, then the lower bound is zero.
Case 2) If the lower bound is greater than zero but less than the threshold, then the value of zero isessentially cut off the domain of the semi-continuous (or semi-integer) variable and the variable becomesa simple bounded continuous (or integer) variable.
Case 3) If the lower bound is greater than the threshold, then the variable becomes a simple lower
bounded continuous (or integer) variable.
If no upper bound is defined in the bounds section for a semi-continuous (or semi-integer) variable, thenthe default upper bound that is used is the same as for continuous variables, for semi-continuous
variables, and generals section variables, for semi-integer variables.
It is important to note that you will only be able to use this section if your FICO Xpress Optimizer islicensed for Mixed Integer Programming.

A.3.15 Partial integers
The partial integers section of an LP file is used to specify variables as partial integer variables,that is, as variables that can only take integer values from their lower bounds up to specified thresholds
and then take continuous values from the specified thresholds up to the variables’ upper bounds.
The lines in a partial integers section are a list of white space or carriage return delimited variable
name-integer pairs. The integer value in the pair is the threshold below which the variable must haveinteger values and above which the variable can have real values. Note that lower bounds and upperbounds can be defined in the bounds section (see earlier). If only one bound is defined in the bounds
section for a variable or no bounds are defined then the default bounds that are used are the same as forcontinuous variables.
The following example shows the format of the variable name-integer pairs in the partial integers
section.
Partial integers
x11 >= 8
x12 >= 9Note that you can not use the <= token in place of the >= token.
It is important to note that you will only be able to use this section if your FICO Xpress Optimizer islicensed for Mixed Integer Programming.

A.3.16 Special ordered sets
Special ordered sets are defined as part of the constraints section of the LP file. The definition ofeach special ordered set looks the same as a constraint except that the sense is always = and the righthand side is either S1 or S2 (case sensitive) depending on whether the set is to be of type 1 or 2,
respectively. Special ordered sets of type 1 require that, of the non-negative variables in the set, one at
most may be non-zero. Special ordered sets of type 2 require that at most two variables in the set may be
non-zero, and if there are two non-zeros, they must be adjacent. Adjacency is defined by the weights,
which must be unique within a set given to the variables. The weights are defined as the coefficients on
the variables in the set constraint. The sorted weights define the order of the special ordered set. It isperhaps best practice to keep the special order sets definitions together in the LP file to indicate (for yourbenefit) the start of the special ordered sets definition with the comment line \Special Ordered
Sets as is done when a problem is written to an LP file by the FICO Xpress Optimizer. The following
example shows the definition of a type 1 and type 2 special ordered set.
Sos101: 1.2 x1 + 1.3 x2 + 1.4 x4 = S1
Sos201: 1.2 x5 + 1.3 x6 + 1.4 x7 = S2

Fair Isaac Corporation Proprietary Information

567

Appendix A: Log and File Formats

It is important to note that you will only be able to use special ordered sets if your FICO Xpress Optimizer
is licensed for Mixed Integer Programming.

A.3.17 Quadratic programming problems
Quadratic programming problems (QPs) with quadratic objective functions are defined using a special
format within the objective function description. The algebraic coefficients of the function x’Qx
appearing in the objective for QP problems are specified inside square brackets []. All quadraticcoefficients must appear inside square brackets. Multiple square bracket sections may be used andquadratic terms in the same variable(s) may appear more than once in quadratic expressions.
Division by two of the QP objective is either implicit, or expressed by a /2 after the square brackets, thus[...] and [...]/2 are equivalent.
Within a square bracket pair, a quadratic term in two different variables is indicated by the two variablenames separated by an asterisk (*). A squared quadratic term is indicated with the variable namefollowed by a carat (ˆ) and then a 2.
For example, the LP file objective function section:
Minimizeobj: x1 + x2 + [ x12 + 4 x1 ⁎ x2 + 3 x22 ] /2

Note that if in a solution the variables x1 and x2 both have value 1 then value of the objective function is
1 + 1 + (1⁎1 + 4⁎1⁎1 + 3⁎1⁎1) / 2 = 2 + (8) / 2 = 6.
It is important to note that you will only be able to use quadratic objective function components if your
FICO Xpress Optimizer is licensed for Quadratic Programming.

A.3.18 Quadratic Constraints
Quadratic terms in constraints are introduced using the same format and rules as for the quadratic
objective, but without the implied or explicit /2 after the square brackets.
For example:
Minimizeobj: x1 + x2
s.t.
x1 + [ x1^2 + 4 x1 ⁎ x2 + 3 x2^2 ] <= 10
x1 >= 1end

Please be aware of the differences of the default behaviour of the square brackets in the objective
compared to the constraints. For example problem:
min y + [ x^2 ]st.
x >= 1y >= 1end

Has an optimal objective function value of 1.5, while problem:
min t
s.t.
-t + y + [ x^2 ] <= 0x >= 1y >= 1end

Fair Isaac Corporation Proprietary Information

568

Appendix A: Log and File Formats

has an optimum of 2. The user is suggested to use the explicit /2 in the objective function like:min y + [ x^2 ] / 2
st.
x >= 1y >= 1end

to make sure that the model represents what the modeller meant.
Note that the FICO Xpress Optimizer can only solve convex (MI)QPs. Thus quadratic rows must be oftype <= or >=, and the quadratic matrix should be positive semi-definite for <= rows and negative
semi-definite for >= rows so that the defined region is convex. Otherwise the problem will need to besolved by the nonlinear solver.

A.3.19 General Constraints
The general constraints section started by the record General Constraints specifies min, max, and,or, abs and piecewise linear constraints. Each line defines one such constraint, beginning with a name,followed by a colon, a resultant variable, a sign, a keyword and further variables (or breakpoints for thepiecewise linear constraints) in brackets with spaces and commas. The keywords are MAX for a
maximum-constraint, MIN for a minimum-constraint, AND for an and-constraint, OR for an or-constraint,
ABS for an absolute-value-constraint and PWL for a piecewise linear constraint. For the max- andmin-constraints, the resultant is followed by an arbitrary number of further column names or values, andthe resultant should be the maximum/minimum of the remaining columns and values. For the and- andor-constraints the resultant is followed by an arbitrary number of further column names, where all thecolumns (including the resultant) need to be binary, and the resultant will be one if and only if all (and) orat least one (or) of the remaining variables are one. For the abs-constraint, the resultant should be
followed by exactly one further column name, and the resultant will take the absolute value of the othercolumn. For the piecewise linear constraints, there needs to be exactly one input variable, followed by acolon and a list of breakpoints. Note that general constraints may only introduce new variables if they areplaced immediately after the subject to (or delayed rows, model cuts or pwl) sections. An example for a
max-constraint would be
myCons: m = MAX ( x , y , 0.0 )An example for a piecewise linear constraint would be
myPwl: y = PWL ( x ): (-1,-1) (0,0) (10,20) (10,0) (11,0)

defining that y = f(x), where f is a piecewise linear function with value x if x is negative, y = 2x if 0<= x <= 10 and y = 0 if x is larger than 10.

A.3.20 Constraint ranges
Constraint ranges may be defined in a section beginning with the keyword ranges. Each range definition
must be on a separate line, and must specify an upper and lower range for a named constraint that has
previously been defined in the constraints section.
For example:
Minimizex1 + x2
subject to
c1: x + y <= 10
ranges1 <= c1 <= 10

Fair Isaac Corporation Proprietary Information

569

Appendix A: Log and File Formats
end

A.3.21 Extended naming convention
If the names in the problem do not comply with the LP file format, the optimizer will automatically check
if uniqueness and reproducibility of the names could be preserved by prepending x( and appending ) to
all names, i.e. the parenthesis inside the original names are always presented in pairs. In these cases, theoptimizer will create an LP file with the extended naming convention format. Use control FORCEOUTPUT
to force the optimizer to write the names in the problem out as they are.

A.3.22 Compatibility to other extensions
The FICO Xpress Optimizer is also able to read (but not write) further sections defined by extensions of
the LP format. These include the SOS section, as a different way of defining special orderred sets, and
the PWLObj and PWL sections for piecewise linear objective and constraints.
The piecewise linear objective section is started by the PWLObj line. It is followed by lines consisting of
one variable name and a list of extreme points defining the piecewise linear objective function for thisvariable. For example the line
x: (-1,-1) (0,0) (10,20) (10,0) (11,0)

defines that if x is negative, the objective contribution is x. If x is between 0 and 10, then the objective
contribution is 2x and if x is larger than 10, then the objective contribution is 0. For each variable, theextreme points should be sorted according to non-decreasing variable value. The piecewise linear
functions do not necessarily need to be continuous, in this case two extreme points with identicalvariable values and different function values can be given and the first one will be used as thelefthand-limit and the second one as the righthand-limit. Note that for the point where the discontinuity
appears, both function values can appear in the solution due to tolerances.
The piecewise linear constraint section is started by the PWL keyword. Each piecewise linear constraint
defines a restriction y = f(x), where f is a piecewise linear function. The lines in the input format consist ofa name, the input variable, a preslope, the extreme points and a postslope. The preslope defines thefunction before the first extreme point and the postslope defines it after the last one. Discontinuities are
possible as for the objective function. Note that pwl sections may only introduce new variables if they areplaced immediately after the subject to (or delayed rows, model cuts or general constraints) sections.
Above example would look as follows, assuming that instead of the objective it now defines the value ofa variable y :pwlc1: y = x 1 (0,0) (10,20) (10,0) 0

A.4 ASCII Solution Files
Solution information is available from the Optimizer in a number of different file formats depending on
the intended use. The XPRSwritesol (WRITESOL) command produces two files, problem_name.hdr
and problem_name.asc, whose output has comma separated fields and is primarily intended for input
into another program. By contrast, the command
XPRSwriteprtsol (WRITEPRTSOL) produces fixed format output intended to be sent directly to a
printer, the file problem_name.prt. All three of these files are described below.

A.4.1 Solution Header .hdr Files
This file only contains one line of characters comprising header information which may be used forcontrolling the reading of the .asc file (which contains data on each row and column in the problem).

Fair Isaac Corporation Proprietary Information

570

Appendix A: Log and File Formats

The single line is divided into fourteen fields, separated by commas, as follows:
Field

Type

Width

1

string10

matrix name;

Description2

integer4

number of rows in problem;

3

integer

6

number of structural columns in problem;

4integer4

sequence number of the objective row;5

string3

problem status (see notes below);6

integer4

direction of optimization (0=none, 1=min, 2=max);

7

integer

6

number of iterations taken;

8integer4

final number of infeasibilities;

9

real

12

final object function value;

10

real

12

final sum of infeasibilities;

11

string10

objective row name;12

string10

right hand side row name;13

integer1

flag: integer solution found (1), otherwise 0;

14

integer4matrix version number.

■

Character fields contain character strings enclosed in double quotes.

■

Integer fields contain right justified decimal digits.

■

Fields of type real contain a decimal character representation of a real number, right justified, with
six digits to the right of the decimal point.

■ The status of the problem (field 5) is a single character as follows:C

optimization interrupted (like ctrl-c);O

optimal;N

infeasible;S

stability problems;U

unbounded;Z

unfinished.

A.4.2 CSV Format Solution .asc Files
The bulk of the solution information is contained in this file. One line of characters is used for each row
and column in the problem, starting with the rows, ordered according to input sequence number. Eachline contains ten fields, separated by commas, as follows:

Fair Isaac Corporation Proprietary Information

571

Appendix A: Log and File Formats

Field

Type

Width

Description1

integer

6

input sequence number of variable;

2

string10variable (row or column) name;3string3variable type (C=column; N, L, G, E for rows);

4

string4variable status (LL, BS, UL, EQ or ⁎⁎);

5

real

12

value of activity;

6

real

12

slack activity (rows) or input cost (columns;)

7

real

12

lower bound (-1000000000 if none);

8

real

12

upper bound (1000000000 if none);

9

real

12

dual activity (rows) or reduced cost (columns);

10

real

12

right hand side value (rows) or blank (columns).

■ The field Type is as for the .hdr file.
■ The variable type (field 3) is defined by:

C
N
L
G
E

structural column;
N type row;
L type row;
G type row;
E type row;

■ The variable status (field 4) is defined by:

LL
⁎⁎
BS
UL
EQ
SB
??

non-basic at lower bound;basic and infeasible;
basic and feasible;
non-basic at upper bound;equality row;
variable is super-basic;
unknown.

A.4.3 Fixed Format Solution (.prt) Files
This file is the output of the XPRSwriteprtsol (WRITEPRTSOL) command and has the same format
as is displayed to the console by PRINTSOL. The format of the display is described below by way of an
example, for which the simple example of the FICO Xpress Getting Started manual will be used.
The first section contains summary statistics about the solution process and the optimal solution thathas been found. It gives the matrix (problem) name (simple) and the names of the objective function
and right hand sides that have been used. Then follows the number of rows and columns, the fact that it
was a maximization problem, that it took two iterations (simplex pivots) to solve and that the bestsolution has a value of 171.428571.
Problem Statistics
Matrix simple
Objective ⁎OBJ⁎
RHS ⁎RHS⁎
Problem has
3 rows and2 structural columns

Solution Statistics
Maximization performed
Optimal solution found after
Objective function value is3 iterations
171.428571

Next, the Rows Section presents the solution for the rows, or constraints, of the problem.

Fair Isaac Corporation Proprietary Information

572

Appendix A: Log and File Formats
Rows Section
Number Row
AtN
1⁎OBJ⁎ BSL2
second UL
L
3
first UL

Value
Slack Value Dual Value
171.428571 -171.428571 .000000
200.000000.000000 .571429
400.000000.000000 .142857

RHS.000000
200.000000
400.000000

The first column shows the constraint type: L means a ’less than or equal to’ constrain; E indicates an’equality’ constraint; G refers to a ’greater than or equal to’ constraint; N means a ’nonbinding’ constraint –this is the objective function.
The sequence numbers are in the next column, followed by the name of the constraint. The At column
displays the status of the constraint. A UL indicator shows that the row is at its upper limit. In this case a≤ row is hard up against the right hand side that is constraining it. BS means that the constraint is not
active and could be removed from the problem without changing the optimal value. If there were ≥constraints then we might see LL indicators, meaning that the constraint was at its lower limit. Other
possible values include:**

basic and infeasible;

EQ

equality row;??

unknown.

The RHS column is the right hand side of the original constraint and the Slack Value is the amount bywhich the constraint is away from its right hand side. If we are tight up against a constraint (the status is
UL or LL) then the slack will be 0.
The Dual Value is a measure of how tightly a constraint is acting. If a row is hard up against a ≤constraint then it might be expected that a greater profit would result if the constraint were relaxed a little.
The dual value gives a precise numerical measure to this intuitive feeling. In general terms, if the righthand side of a ≤ row is increased by 1 then the profit will increase by the dual value of the row. Morespecifically, if the right hand side increases by a sufficiently small δ then the profit will increase by δ x dual
value, since the dual value is a marginal concept. Dual values are sometimes known as shadow prices.
Finally, the Columns Section gives the solution for the columns, or variables.
Columns Section
Number Column At
C
4
a
BS
C
5
b
BS

Value
Input Cost
Reduced Cost
114.285714
1.000000 .000000
28.571429
2.000000 .000000

The first column contains a C meaning column (compare with the rows section above). The number is asequence number. The name of the decision variable is given under the Column heading. Under At is thestatus of the column: BS means it is away from its lower or upper bound, LL means that it is at its lower
bound and UL means that the column is limited by its upper bound. Other possible values include:**

basic and infeasible;

EQ

equality row;SBvariable is super-basic;??

unknown.

The Value column gives the optimal value of the variable. For instance, the best value for the variable ais 114.285714 and for variable b it is 28.571429. The Input Cost column tells you the coefficient of
the variable in the objective function.
The final column in the solution print gives the Reduced Cost of the variable, which is always zero forvariables that are away from their bounds – in this case, away from zero. For variables which are zero, it
may be assumed that the per unit contribution is not high enough to make production viable. The reduced

Fair Isaac Corporation Proprietary Information

573

Appendix A: Log and File Formats

cost shows how much the per unit profitability of a variable would have to increase before it would
become worthwhile to produce this product. Alternatively, and this is where the name reduced costcomes from, the cost of production would have to fall by this amount before any production could include
this without reducing the best profit.
In case there is a basis available, sensitivity analysis values may be included in the output by passing thes flag.
The rows section is extended with two new columns, presenting the range of the RHS in which it can bechanged before it affects the optimality or feasibiltiy of the current basis.
Rows Section
Number
G
1

Row
third

At
LL

Value
15.000000

Slack Value.000000

Dual Value
10.571428

RHS
15.000000

RHS Sensitivi
Lower Range
Uppe
10.199999
25

For the columns section, objective ranges are added.
Columns Section
NumberC
58

Column
c

At
BS

Value
2.742857

Input Cost
5.849999

Reduced Cost
.000000

Objective Sensitivity
Lower Range
Upper Range.999998
8.350002

A third section presents the sensitivity values for the column bounds.
Bound sensitivity
NumberC
58

Columnd

At
BS

Lower Bound Sensitivity
Lower Range
Bound
Upper Range-1.00000E+20.000000
2.742857

Upper Bound Sensitivity
Lower Range
Bound
Uppe
2.742857
10.000000
1.00

A.4.4 ASCII Solution (.slx) Files
These files provide an easy to read format for storing solutions. An .slx file has a header NAME
containing the name of the matrix the solution belongs to. Each line contains three fields as follows:
Field

Type

Width

Description

1

char

1

2

stringvariablename of variable;

3

real

variablevalue of activity.

variable type;The variable type (field 1) is defined by:
C structural column;
S LP solution only: slack variables;
D LP solution only: dual variables;
R LP solution only: reduced costs.
The file is closed by ENDATA.
It is possible to store multiple solutions in the same .slx file by repeating the NAME field following by theadditional solution information.
ExampleNAME solution 1
C x1 0C x2 1
NAME solution 2
C x1 1

Fair Isaac Corporation Proprietary Information

574

Appendix A: Log and File Formats
C x2 0ENDATA

A.5 The Directives (.dir) File
This consists of an unordered sequence of records which specify branching priorities, forced branchingdirections and pseudo costs, read into the Optimizer using the XPRSreaddirs (READDIRS) command.
By default its name is of the form problem_name.dir.
Directive file records have the format:
type

name

value

type is one of:PR

implying a priority entry (the value gives the priority, which must be an integer between 0 and
1000. Values greater than 1000 are rejected, and real values are rounded down to the next
integer. A low value means that the entity is more likely to be selected for branching.)UPthe entity is to be forced up (value is not used)DN

the entity is to be forced down (value is not used)PU

an up pseudo cost entry (the value gives the cost)PD

a down pseudo cost entry (the value gives the cost)MCa model cut entry (value is not used)DR

a delayed row entry (value is not used)BR

force the optimizer to branch on the entity even if it is satisfied. If a node solution is global
feasible, the optimizer will first branch on any branchable entity flagged with BR before returning
the solution.

name is the name of a global entity (column or special ordered set), a row (for types MC and DR), or amask. A mask may comprise ordinary characters which match the given character; a ?, which matches
any single character; or a ⁎, which matches any string or characters. A ⁎ can only appear at the end of amask. Note that a whitespace character encountered within the name field will signal the end of thename field and the start of the value field. To match an entity or row whose name contains whitespacecharacters, convert the name into a mask by replacing each whitespace character with by a ?.
value is the value to accompany the type.
For example:
PR x1* 2gives global entities (integer variables etc.) whose names start with x1 a priority of 2. Note that the useof a mask: a ⁎ matches all possible strings after the initial x1.

A.6 IIS description file in CSV format
This file contains information on a single IIS of an infeasible LP.

Fair Isaac Corporation Proprietary Information

575

Appendix A: Log and File Formats

Field

Description

Name

Name of a row or column in conflict.

Type

Type of conflicting variable (row or column).

Sense

Sense of conflicting variable: (LE or GE) to indicate or rows. (LO or UP) to indicate lower orupper bounds for columns.
Value associated with the variable, i.e. RHS for rows and bound values for columns.

Bound
Dual value

The dual multipliers corresponding to the contradiction deducible from the IIS. Summingup all the rows and columns in the IIS multiplied by these values yields a contradicting
constraint. This value is negative for <= rows and upper bounds, and positive for >= rows
and lower bounds.

In isoIndicates if the row or column is in isolation.

Note that each IIS may contain a row or column with only on one of its possible senses. This also meansthat equality rows and columns with both lower and upper bounds, only one side of the restriction may bepresent. Range constraints in an IIS are converted to greater than or equal constraints.
An IIS often contains other columns than those listed in the IIS. Such columns are free, and have noassociated conflicting bounds.
The information contained in these files is the same as returned by the XPRSgetiisdata function, or
displayed by (IIS -p).

A.7 The Matrix Alteration (.alt) File
The Alter File is an ASCII file containing matrix revision statements, read in by use of the XPRSalter(ALTER) command, and should be named problem_name.alt by default. Each statement occupies aseparate line of the file and the final line is always empty. The statements consist of identifiers specifying
the object to be altered and actions to be applied to the specified object. Typically the identifier may
specify just a row, for example R2, specifying the second row if that name has been assigned to row 2. If
a coefficient is to be altered, the associated variable must also be specified. For example:
RRRRRRRR
CCRider
2.087changes the coefficient of CCRider in row RRRRRRRR to 2.087. The action may be one of the following
possibilities.

A.7.1 Changing Upper or Lower Bounds
An upper or lower bound of a column may be altered by specifying the special ’rows’ ⁎⁎LO and ⁎⁎UP forlower and upper bounds respectively.To change the objective coefficient of a column use the string⁎⁎OBJ. For example, to change the lower bound (to 1.234), upper bound (to 5.678) and the objective(to 1234.0) of column x___0305 would look like:⁎⁎LO
x___0305
1.234⁎⁎UP
x___0305
5.678
⁎⁎OBJ
x___0305
1234.0Fair Isaac Corporation Proprietary Information

576

Appendix A: Log and File Formats

A.7.2 Changing Right Hand Side Coefficients
Right hand side coefficients of a row may be altered by changing values in the ’column’ with the name of
the right hand side.

A.7.3 Changing Constraint Types
The direction of a constraint may be altered. The row name is given first, followed by an action of ⁎⁎NTx,
where x is one of:Nfor the new row type to be unconstrained;Lfor the new row type to be ’less than or equal to’;Gfor the new row type to be ’greater than or equal to’;Efor the new row type to be an equality.

R

for the new row type to be a range row.

Note that N type rows will not be present in the matrix in memory if the control KEEPNROWS has been set
to zero before XPRSreadprob (READPROB).
When turning a row to ranged row, a third entry, the range, is expected to be defined following ⁎⁎NTR. The
rules for changing a row to a ranged row follow that of XPRSchgrhsrange.

A.8 The Tuner Method (.xtm) File
The tuner method file is in a straightforward plain text format. For example, when the two controls
MAXTIME and THREADS are set by the user on the current problem and then XPRStunerwritemethod
is called, the generated xtm file will look similar to the following:
FIXED-CONTROLSMAXTIME= 100
THREADS= 1
TUNABLE-CONTROLSSBEFFORT= 0.25, 4
HEURSEARCHEFFORT= 0.5, 2
CUTFACTOR= 0.5, 1, 5
SCALING= 0
PRESOLVE= 0
VARSELECTION= 2, 7CUTFREQ= 2
SYMMETRY= 0, 1, 2
COVERCUTS= 0, 2
GOMCUTS= 0, 2, 10
TREECOVERCUTS= 0
TREEGOMCUTS= 0
HEUREMPHASIS= 0,1
SBESTIMATE= 1, 2, 3, 4, 5, 6
HEURSEARCHROOTCUTFREQ= 2, 5
HEURSEARCHROOTSELECT = 0, 3, 5
HEURSEARCHTREESELECT = 0, 3, 5
ROOTPRESOLVE= 1
PREPROBING= 3
BRANCHDISJ= 0

The tuner method file consists of a section of fixed controls and a section of tunable controls.

Fair Isaac Corporation Proprietary Information

577

Appendix A: Log and File Formats

A.8.1 The fixed controls
The fixed controls section starts with FIXED-CONTROLS, followed by control setting lines in assignment
form. Each control in this section can only be assigned to one value. If the same control appears several
times in this section, its first appearance will be used.
When writting out the tuner method file, all the controls set for the current problem will be included in the
fixed control section. When reading in the tuner method file using XPRStunerreadmethod, thesecontrols won’t be applied to the current problem immediately, they will only be applied to the worker
problem used in the tuner.
This section can be empty.

A.8.2 The tunable controls
The tunable controls section starts with TUNABLE-CONTROLS, followed by control setting lines inassignment form. Each control in this section can be assigned to one value, or multiple values seperated
by commas. A control may appear multiple times in this section.
When reading in a tuner method file and writing it out again, the tunable controls may appear in a different
order. If there is a control appearing multiple times in the original tuner method file, when written out, it
will be combined into a single line with multiple values.
For bit vector controls, such as PRESOLVEOPS, SCALING, or HEURSEARCHROOTSELECT, it is possible toeither specify concrete assignments to the control or to specify individual bits that should be used fortuning. In the latter case, one has to use a colon instead of an equals sign. For example, "SCALING = 24,675" will tune using the two given concrete values 24 and 675, while "SCALING : 3, 4, 9" will individually
toggle bits 3, 4, and 9 of the default value for SCALING and potentially also try combinations of thoselater during tuning.
This section can be empty. When both the fixed and the tunable secitons are empty, the tuner will thenuse a pre-defined factory tuner method.

A.9 The Simplex Log
During the simplex optimization, a summary log is displayed at regular time intervals, determined by aninternal deterministic timer. This summary log has the form:
Its

The number of iterations or steps taken so far.

Obj Value

The objective function value.

S

The current solution method (p primal; d dual).

Ninf

The number of infeasibilities.

Nneg

The number of variables which may improve the current solution if assigned a value awayfrom their current bounds.

Sum inf

The scaled sum of infeasibilities. For the dual algorithm this is the scaled sum of dual
infeasibilities when the number of negative dj’s is non-zero.

Time

The number of seconds spent iterating.

A more detailed log can be displayed every n iterations by setting LPLOGSTYLE to 0 and LPLOG to -n.
The detailed log has the form:

Fair Isaac Corporation Proprietary Information

578

Appendix A: Log and File Formats

Its

The number of iterations or steps taken so far.

S

The current solution method (p primal; d dual).

Ninf

The number of infeasibilities.

Obj Value

If the solution is infeasible, the scaled sum of infeasibilities, otherwise: the objective value.

In

The sequence number of the variable entering the basis (negative if from upper bound).

Out

The sequence number of the variable leaving the basis (negative if to upper bound).

Nneg

The number of variables which may prove the current solution if assigned a value awayfrom their current bounds.

Dj
Neta

The scaled rate at which the most promising variable would improve the solution if assigned
a value away from its current bound (reduced cost).
A measure of the size of the inverse.

Nelem

Another measure of the size of the inverse.

Time

The number of seconds spent iterating.

If LPLOG is set to 0, no log is displayed until the optimization finishes.

A.10 The Barrier Log
The first line of the barrier log displays statistics about the Cholesky decomposition needed by the barrier
algorithm. This line contains the following values:
Dense
cols

The number of dense columns identified in the factorization.

NZ(L)The number of nonzero elements in the Cholesky factorization.

Flops

The number of floating point operations needed to perform one factorization.

During the barrier optimization, a summary log is displayed in every iteration. This summary log has the
form:
Its

The number of iterations taken so far.

P.inf

Maximal violation of primal constraints.

D.inf

Maximal violation of dual constraints.

U.inf

Maximal violation of upper bounds.

Primal obj

Value of the primal objective function.

Dual obj

Value of the dual objective function.

Compl

Value of the average complementarity.

After the barrier algorithm a crossover procedure may be applied. This process prints at most 3 log lines
about the different phases of the crossover procedure. The structure of these lines follows The Simplex
Log described in the section above.
If BAROUTPUT is set to 0, no log is displayed until the barrier algorithm finishes.

A.11 The Global Log
During the branch and bound tree search (see XPRSglobal (GLOBAL)), a summary log of nine columnsof information is frequently printed. By default, the printing frequency increases over time. If MIPLOG is
explicitly set to a negative value -n, a log line will be printed every n nodes. The nine columns consist of:Fair Isaac Corporation Proprietary Information

579

Appendix A: Log and File Formats

Node

A sequential node number.

BestSoln

The value of the best integer solution found so far.

BestBoundA bound on the value of the optimal integer solution.

Sols

The number of integer solutions that have been found.

ActiveThe number of active (unsolved) nodes in the branch and bound tree search.

Depth

The depth of the current node in the branch and bound tree.

Gap

The percentage gap between the best solution and the best bound.

GInf

The number of global infeasibilities at the current node.

Time

The time taken.

This log is also printed when an integer feasible solution is found. An asterisk (⁎) printed in front of thenode number indicates that a solution has been found by an integral LP relaxation. Single characters
indicate that a heuristic solution has been found. Lower case characters stand for different strategies of
the Optimizer’s diving heuristic: the letter a corresponds to strategy 1, the letter b to strategy 2, and soforth. Compare control HEURDIVESTRATEGY. By default, several strategies are applied. Upper caseletters stand for special search heuristics. More precisely, R, L, M, C, U, and Z stand for the different
modes of local search that can be selected by controls HEURSEARCHROOTSELECT and
HEURSEARCHTREESELECT. For technical reasons, a U might also appear after a restart. The letter F
represents the feasibility pump, T stands for a trivial heuristic. S, G, and B are reserved for special purpose
heuristics for problems with set packing/partitioning constraints, GUBs, and branching on constraints,
respectively. An E indicates that a solution has been found during the calculation of branching estimates.
Note that heuristic solutions found before the global search (and thereby the global log) starts, arereported with a special log line of the form:⁎⁎⁎ Solution found:<SolVal>Time:<Time>

Heuristic: <DispChar> ⁎⁎⁎Here <SolVal> and <Time> are numeric values indicating the solution value of the found heuristic solution
and the run time after which it was found, respectively. The single <DispChar> character indicates which
heuristic found the solution.
During root node cutting, the column Node is replaced by two columns Its and Type, columns Active andDepth are replaced by Add and Del, respectively. These have the following meaning:Its

A counter for the number of cutting plane separation loops.

Type

The type of cuts that have been generated this round: G – Gomory cuts, M – model cuts, O– outer approximation cuts (only for nonlinear problems), N – network-based cuts, K – anyother type of cuts

Add

Number of cuts added to the LP relaxation in this iteration

Del

Number of cuts deleted from the LP relaxation in this iteration

If MIPLOG is set to 3, a detailed log of eight columns of search information is printed for each node:

Fair Isaac Corporation Proprietary Information

580

Appendix A: Log and File Formats

BranchA sequential node number.

Parent

The node number of the parent of the current node. A D or a U marks whether the current
node is the down child or the up child, respectively, of its parent.

Solution

The optimal value of the LP relaxation at the current node.

EntityThe global entity on which the Optimizer will branch after this node.

Value
Active

The current value of the entity chosen for branching.
The number of active nodes in the tree search.

GInf

The number of global infeasibilities.

Time

The time taken.

Not all the information described above is present for all nodes. If the LP relaxation is cut off, only Branch
and Parent (and possibly Solution) are displayed. If the LP relaxation is infeasible, only Branch and Parent
appear. The rest of the line will consist of a text message relaxation exceeds cutoff orrelaxation infeasible. If an integer solution is discovered, this is highlighted before the log line isprinted.
If MIPLOG is set to 2, the detailed log is printed at integer feasible solutions only. When MIPLOG is set to1, the tree node logs are surpressed, but cutting loop logs will still be displayed. If MIPLOG is set to 0,
neither cut nor node log wil be pritned. In any case, LP logs and intermediate status messages might still
be printed.

A.12 The Tuner Log
While the tuner evaluates various control settings, it prints a summary log for each finished run. Whentuning a MIP problem, the summary log consists of eight columns of information:
RunID

A sequential tuner run number.

Stat

Status of a finished run: S - Solved, T - Timeout, U - Unsolved and C - Cancelled.

Solution

The best integer solution.

Bound

The best bound.

Integral

The primal dual integral.

Gap

The relative MIP gap.

RunTime

The time spent for solving with this control setting.

TotTime

The total time spent for the tuner.

When tuning an LP problem, the summary log consists of five columns of information:
RunID

A sequential tuner run number.

Stat

Status of a finished run: S - Solved, T - Timeout, U - Unsolved and C - Cancelled.

Solution

The LP objective.

RunTime

The time spent for solving with this control setting.

TotTime

The total time spent for the tuner.

When the tuner finds an improving control setting, it will highlight the run with an asterisk (*) at the
beginning of the log line. The tuner will also specify the control parameters and the log file name for the
improving run.
If a control setting has been evaluated in previous tuner runs, its result can be reused. In this case, thetuner will print an extra H in the Stat column.

Fair Isaac Corporation Proprietary Information

581

Appendix A: Log and File Formats

A.13 The Remote Solving Configuration file
This configuration file allows the user to control some of the ways the Xpress solver interacts with theremote Insight Compute Interface. It contains advanced configuration settings; it is expected that mostusers will not need to use these configuration options.
To use the configuration file, set the environment variable XPRESS_COMPUTE_CONFIG to the full path of
the file including the file name itself; you must also set the XPRESS_COMPUTE and
XPRESS_COMPUTE_URL environment variables to activate remote solving in the usual way. Changes tothe configuration are only read when the Optimizer is first initialized with XPRSinit.
The configuration file must be a valid JSON document, containing a single object with key-value pairs. All
keys are optional and Xpress will use sensible defaults for anything you do not specify. For example:{}"logLevel": 101,
"caCertsPath": "C:/xpressmp/ssl/ca-bundle.crt"

The remainder of this section details the individual keys that can be set.

A.13.1 caCertsPath
This field can be set to the absolute path of the certificate bundle file to use for authenticating SSL
certificates when communicating with a remote server using HTTPS. If unspecified, Xpress will look for afile ca-bundle.crt in the path specified by the MOSEL_SSL environment variable (if set), or the.mmssl folder of the user’s home directory (if not). If this file does not exist, it can be created in thedefault location by executing the command mmssl setup
For example:{}"caCertsPath": "C:/xpressmp/ssl/ca-bundle.crt"

A.13.2 cleanupJobs
This field controls whether Xpress should delete a compute job from the remote server when it
successfully completes or is interrupted. The default is false. Set to true to automatically delete
successfully completed jobs from the Insight Compute Interface.
For example:{}"cleanupJobs": true

A.13.3 executionService
This field contains the name of the Insight execution service that will be used for jobs. If unset, theInsight server’s default execution service is used. Where the execution service name is set in theconfiguration file and the COMPUTEEXECSERVICE control, the value from the control will be used.
For example:{}"executionService": "SECONDARY"Fair Isaac Corporation Proprietary Information

582

Appendix A: Log and File Formats

A.13.4 logLevel
This field controls additional lines written to the problem’s log that describe communication between thelocal Xpress application and the remote Insight Compute Interface. (Note it doesn’t affect lines written by
the remote Insight Compute Interface itself.) Supported levels are:■0 - write no extra log lines■

1 - write error and warning messages only■

2 - write error, warning and notification messages (the default)■■

101 - as 2, but also write lines for every HTTP request made and event message received from theserver102 - as 101, but include extra debugging output. Should be set on the advice of FICO productsupport only.

For example:{}"logLevel": 0

A.13.5 maxRetries
This field controls how many times a failed request to the remote server will be retried before we show anerror to the user. There will be an exponentially increasing delay before each retry (0ms, 200ms, 400ms,
800ms, etc) - the default setting of 9 means we try each request for about 51 seconds before the user isinformed of an error. Set to a lower value if you want to see errors quicker, or 0 to disable retries entirely.
For example:{}"maxRetries": 2

A.13.6 priority
This field controls the default priority of compute jobs created on the Xpress Insight Compute Interface. It
should be a number between -100 and 100, with priority 0 used if not specified. If the priority is set to anonzero value in both the configuration file and the COMPUTEJOBPRIORITY control, the value from thecontrol will be used.
For example:{}"priority": 90

A.13.7 trustSrv
This field controls whether Xpress should trust the remote server without checking its certificate, when
an HTTPS URL is used. If set to false, the authenticity of the remote server is checked using the list oftrusted certification authorities and the operation will be aborted if the verification fails. Set to true if
you want to use a server that has a known invalid or self-signed certificate, and acknowledge the security
risks this brings. Default is false.

Fair Isaac Corporation Proprietary Information

583

Appendix A: Log and File Formats

For example:{}"trustSrv": true

Fair Isaac Corporation Proprietary Information

584

APPENDIX B

Contacting FICO
FICO provides clients with support and services for all our products. Refer to the following sections formore information.

Product support
FICO offers technical support and services ranging from self-help tools to direct assistance with a FICO
technical support engineer. Support is available to all clients who have purchased a FICO product andhave an active support or maintenance contract. You can find support contact information and a link to
the Customer Self Service Portal (online support) on the Product Support home page(www.fico.com/en/product-support).
The FICO Customer Self Service Portal is a secure web portal that is available 24 hours a day, 7 days aweek from the Product Support home page. The portal allows you to open, review, update, and close
cases, as well as find solutions to common problems in the FICO Knowledge Base.
Please include ’Xpress’ in the subject line of your support queries.

Product education
FICO Product Education is the principal provider of product training for our clients and partners. Product
Education offers instructor-led classroom courses, web-based training, seminars, and training tools forboth new user enablement and ongoing performance support. For additional information, visit theProduct Education home page at www.fico.com/en/product-training or email
producteducation@fico.com.

Product documentation
FICO continually looks for new ways to improve and enhance the value of the products and services weprovide. If you have comments or suggestions regarding how we can improve this documentation, let us
know by sending your suggestions to techpubs@fico.com.
Please include your contact information (name, company, email address, and optionally, your phone
number) so we may reach you if we have questions.

Fair Isaac Corporation Proprietary Information

585

Contacting FICO

Sales and maintenanceIf you need information on other Xpress Optimization products, or you need to discuss maintenancecontracts or other sales-related items, contact FICO by:■

Phone: +1 (408) 535-1500 or +44 207 940 8718

■ Web: www.fico.com/optimization and use the available contact forms

Related services
Strategy Consulting: Included in your contract with FICO may be a specified amount of consulting time toassist you in using FICO Optimization Modeler to meet your business needs. Additional consulting time
can be arranged by contract.
Conferences and Seminars: FICO offers conferences and seminars on our products and services. For
announcements concerning these events, go to www.fico.com or contact your FICO accountrepresentative.

FICO Community
The FICO Community is a great resource to find the experts and information you need to collaborate,
support your business, and solve common business challenges. You can get informal technical support,
build relationships with local and remote professionals, and improve your business practices. For
additional information, visit the FICO Community (community.fico.com/welcome).

About FICO
FICO (NYSE:FICO) powers decisions that help people and businesses around the world prosper. Founded
in 1956 and based in Silicon Valley, the company is a pioneer in the use of predictive analytics and data
science to improve operational decisions. FICO holds more than 165 US and foreign patents ontechnologies that increase profitability, customer satisfaction, and growth for businesses in financial
services, telecommunications, health care, retail, and many other industries. Using FICO solutions,businesses in more than 100 countries do everything from protecting 2.6 billion payment cards fromfraud, to helping people get credit, to ensuring that millions of airplanes and rental cars are in the rightplace at the right time. Learn more at www.fico.com.

Fair Isaac Corporation Proprietary Information

586

IndexNumbers
3, 516
4, 516
5, 516
6, 516
7, 516
9, 516
11, 516
18, 516
19, 516
20, 516
21, 51629, 51736, 51738, 51741, 51745, 51750, 51752, 51756, 51758, 51761, 51764, 51765, 51766, 51767, 51868, 51869, 51871, 51872, 51873, 51876, 51877, 51880, 518
81, 51883, 51884, 51885, 51889, 51991, 51997, 51998, 519
102, 519
107, 519
111, 519
112, 519
113, 519
114, 519
120, 519
122, 519
124, 520
127, 520

Fair Isaac Corporation Proprietary Information

128, 520
129, 520
130, 520
131, 520
132, 520
136, 520
137, 520
140, 520
142, 521
143, 521
151, 521
152, 521
153, 521
155, 521
156, 521
157, 521
158, 521
159, 521
160, 521
161, 521
162, 521
163, 521
164, 521
167, 521
168, 521
169, 522
170, 522
171, 522
173, 522
178, 522
179, 522
180, 522
181, 522
186, 522
187, 522
188, 522
191, 522
192, 522
193, 522
195, 522
197, 522
199, 523
202, 523
243, 523
245, 523
247, 523
249, 523
250, 523
251, 523
256, 523
257, 523
259, 523

587

Index261, 523
262, 523
263, 524
264, 524
266, 524
268, 524
279, 524
287, 524
293, 524
314, 524
319, 524
320, 524
324, 524
326, 524
352, 525
361, 525
362, 525
363, 525
368, 525
381, 525
392, 525
394, 525
395, 525
401, 525
402, 525
403, 525
404, 525
405, 526
406, 526
407, 526
409, 526
410, 526
411, 526
412, 526
413, 526
414, 526
415, 526
416, 527
417, 527
418, 527
419, 527
420, 527
421, 527
422, 527
423, 527
424, 527
425, 527
426, 527
427, 527
429, 527
430, 528
434, 528
436, 528
459, 528
473, 528
474, 528
475, 528
476, 528
501, 528
502, 528

Fair Isaac Corporation Proprietary Information

503, 528
504, 528
505, 529
506, 529
507, 529
508, 529
509, 529
510, 529
511, 529
512, 529
513, 529
514, 529
515, 529
516, 529
517, 529
518, 529
519, 530
520, 530
521, 530
522, 530
523, 530
524, 530
525, 530
526, 530
527, 530
528, 530
529, 530
530, 530
531, 530
532, 530
533, 531
535, 531
536, 531
538, 531
539, 531
545, 531
552, 531
553, 531
554, 531
555, 531
557, 531
558, 531
559, 531
602, 531
604, 531
606, 532
706, 532
707, 532
708, 532
710, 532
711, 532
712, 532
713, 532
715, 532
716, 532
717, 532
721, 532
722, 533
723, 533
724, 533

588

Index725, 533
726, 533
727, 533
728, 533
729, 533
730, 533
731, 533
732, 533
733, 533
734, 534
735, 534
736, 534
738, 534
739, 534
740, 534
741, 534
742, 534
743, 534
744, 534
745, 534
746, 534
748, 535
749, 535
750, 535
751, 535
752, 535
753, 535
754, 535
755, 535
756, 535
757, 535
758, 535
759, 535
760, 536
761, 536
762, 536
763, 536
764, 536
765, 536
766, 536
767, 536
768, 536
769, 536
770, 536
771, 536
772, 537
773, 537
774, 537
775, 537
776, 537
777, 537
778, 537
779, 537
780, 537
781, 537
782, 537
783, 537
784, 538
785, 538
787, 538

Fair Isaac Corporation Proprietary Information

788, 538
790, 538
791, 538
792, 538
793, 538
794, 538
795, 538
796, 538
797, 538
798, 539
799, 539
835, 539
843, 539
847, 539
862, 539
863, 539
864, 539
865, 539
866, 539
867, 539
884, 539
898, 539
899, 539
900, 540
901, 540
902, 540
903, 540
904, 540
905, 540
906, 540
907, 540
909, 540
910, 540
911, 540
912, 540
913, 540
914, 540
915, 540
918, 540
919, 541
920, 541
921, 541
932, 541
933, 541
934, 541
935, 541
936, 541
937, 541
938, 541
939, 541
940, 541
941, 542
942, 542
943, 542
944, 542
945, 542
946, 542
947, 542
948, 542
949, 542

589

Index950, 542
951, 542
952, 543
953, 543
954, 543
955, 543
956, 543
957, 543
958, 543
1001, 543
1002, 543
1003, 543
1004, 543
1005, 543
1006, 543
1020, 544
1022, 544
1028, 544
1030, 544
1034, 544
1035, 544
1036, 544
1037, 544
1038, 544
1039, 544
1054, 544
1055, 544
1059, 544
1071, 544
1074, 544
1075, 545
1081, 545
1082, 545
1090, 545
1092, 545
1093, 545
1094, 545
1097, 545
1098, 545
1100, 545
1101, 545
1102, 545
1103, 545
1104, 545
1105, 546
1106, 546
1107, 546
1108, 546
1109, 546
1111, 546
1112, 546
1113, 546
1114, 546
1115, 546
1116, 546
1118, 546
1119, 546
1120, 546
1121, 546
1122, 547

Fair Isaac Corporation Proprietary Information

1123, 547
1124, 547
1125, 547
1126, 547
1127, 547
9999, 547A
ACTIVENODES, 487
Advanced Mode, 51
ALGAFTERCROSSOVER, 389
ALGAFTERNETWORK, 390
ALGORITHM, 487
algorithms, 1
default, 18
ALTER, 134, 522, 576
array numbering, 410
ATTENTIONLEVEL, 488
AUTOCUTTING, 390
AUTOPERTURB, 391
AUTOSCALING, 390
AVAILABLEMEMORY, 488
B
BACKTRACK, 391
BACKTRACKTIE, 391
BARAASIZE, 488
BARALG, 392
BARCGAP, 488
BARCONDA, 488
BARCONDD, 489
BARCORES, 400
BARCRASH, 392
BARCROSSOVER, 489
BARDENSECOL, 489
BARDUALINF, 489
BARDUALOBJ, 489
BARDUALSTOP, 393
BARFAILITERLIMIT, 394
BARFREESCALE, 393
BARGAPSTOP, 393, 399
BARGAPTARGET, 393
BARINDEFLIMIT, 394
BARITER, 489
BARITERLIMIT, 9, 394
BARKERNEL, 395
BARLSIZE, 490
BAROBJPERTURB, 395
BAROBJSCALE, 395
BARORDER, 396
BARORDERTHREADS, 396
BAROUTPUT, 20, 34, 396
BARPERTURB, 396
BARPRESOLVEOPS, 397
BARPRIMALINF, 490
BARPRIMALOBJ, 490
BARPRIMALSTOP, 397
BARREFITER, 397
BARREGULARIZE, 397
BARRHSSCALE, 398

590

IndexBARSING, 490
BARSINGR, 490
BARSOLUTION, 398
BARSTART, 399
BARSTARTWEIGHT, 399
BARSTEPSTOP, 399
BARTHREADS, 399
basis, 52, 381, 430
inversion, 430loading, 271, 284
reading from file, 52, 312
BASISCONDITION, 135
BASISSTABILITY, 136
batch mode, 369
BCL, 1BESTBOUND, 490
BIGM, 400, 456
BIGMMETHOD, 400
bitmaps, 212, 364
BOUNDNAME, 491
bounds, 117, 144, 215, 576
Branch and Bound, 20
BRANCHCHOICE, 401
BRANCHDISJ, 401
branching, 20, 100
directions, 199, 315, 575
variable, 94
BRANCHSTRUCTURAL, 401
BRANCHVALUE, 491
BRANCHVAR, 491
BREADTHFIRST, 402
C
CACHESIZE, 402
CALLBACKCOUNT_CUTMGR, 491
CALLBACKCOUNT_OPTNODE, 491
CALLBACKFROMMASTERTHREAD, 403
callbacks, 33
barrier log, 90
branching variable, 94
copying between problems, 157
estimate function, 100
global log, 103, 333
node cutoff, 112
optimal node, 113
preprocess node, 116
separate, 117
simplex log, 107, 336
CHECKCONVEXITY, 143
CHECKSONMAXCUTTIME, 491
CHECKSONMAXTIME, 492
CHGOBJSENSE, 151
Cholesky factorization, 396, 403, 412, 490
CHOLESKYALG, 403
CHOLESKYTOL, 404
CLAMPING, 404
COLS, 492
columns
density, 412, 489
nonzeros, 187

Fair Isaac Corporation Proprietary Information

returning bounds, 215, 253
returning indices, 207
returning names, 226
types, 188comments, 451
COMPUTE, 404
COMPUTEEXECSERVICE, 405
COMPUTEEXECUTIONS, 492
COMPUTEJOBPRIORITY, 405
COMPUTELOG, 405
CONCURRENTTHREADS, 406
CONEELEMS, 492
CONES, 493
CONFLICTCUTS, 406
Console Mode, 1, 51
Console Optimizer
command line options, 2
Console Xpress, 1
termination, 369
controls, 53
changing values, 389
copying between problems, 159
retrieve values, 252
retrieving values, 198, 212
setting values, 360, 364, 368
convex region, 15
CORESDETECTED, 493
CORESPERCPU, 406
CORESPERCPUDETECTED, 493
COVERCUTS, 406, 478
CPIALPHA, 407
CPISCALEFACTOR, 493
CPUPLATFORM, 407
CPUSDETECTED, 494
CPUTIME, 407
CRASH, 408
CROSSOVER, 19, 408
crossover, 408, 489
CROSSOVERACCURACYTOL, 409
CROSSOVERITERLIMIT, 409
CROSSOVEROPS, 409
CROSSOVERTHREADS, 410
CSTYLE, 410
CSV, 549
CURRENTMEMORY, 494
CURRENTNODE, 494
CURRMIPCUTOFF, 494
cut manager, 35
routines, 36, 98
cut pool, 35, 98, 117, 122, 164, 191
cuts, 273, 371
lifted cover inequalities, 406
list of indices, 190
outer approximation cuts, 468, 480
cut strategy, 411
CUTDEPTH, 410
CUTFACTOR, 410
CUTFREQ, 411
cutoff, 21, 112, 114, 440, 448
CUTS, 495

591

Indexcuts, 35, 117, 122, 522, 524
deleting, 165
generation, 410
Gomory cuts, 421, 479
list of active cuts, 193
model cuts, 283
CUTSELECT, 411
CUTSTRATEGY, 411
cutting planes, see cutsD
default algorithm, 412
DEFAULTALG, 18, 303, 412
degradation, 100, 467
DENSECOLLIMIT, 412
DETERMINISTIC, 413
directives, 199, 285, 523, 524
loading, 275
read from file, 52, 314
dongles, 2dual values, 10
DUALGRADIENT, 413
DUALINFEAS, 495
DUALIZE, 413
DUALIZEOPS, 414
DUALPERTURB, 414
DUALSTRATEGY, 414
DUALTHREADS, 415
DUMPCONTROLS, 173. bss, 520.alt, 134, 549.asc, 549
.bss, 27, 549.dir, 22, 549.glb, 517, 549.hdr, 549
.iis, 549
.ini, 3.lp, 1, 316, 549.lp.gz, 27.mat, 316
.mat.gz, 27.mps, 549
.mps.gz, 27.prt, 52, 385, 549.slx, 549
.sol, 519, 549.svf, 353, 355.xpr, 2
.xtm, 549
.xtr, 549
CSV, 549
FIXGLOBALS, 177
FORCEOUTPUT, 419
FORCEPARALLELDUAL, 420Eearly termination, 9
EIGENVALUETOL, 415
ELEMS, 495
ELIMFILLIN, 415
ELIMTOL, 415
ERRORCODE, 495, 516
errors, 109, 365, 495
checking, 268
ESCAPENAMES, 416
ETATOL, 416
EXIT, 174
EXTRACOLS, 416, 526
EXTRAELEMS, 416, 524, 526
EXTRAMIPENTS, 417
EXTRAPRESOLVE, 417, 524
EXTRAQCELEMENTS, 417
EXTRAQCROWS, 417
EXTRAROWS, 417, 522, 526
EXTRASETELEMS, 418
EXTRASETS, 418

G
GENCONCOLS, 496
GENCONS, 496
GENCONSABSTRANSFORMATION, 420
GENCONSDUALREDUCTIONS, 420
GENCONVALS, 496
general constraints, 14
GLOBAL, 256
global entities, 499, 511
branching, 357, 358
extra entities, 417
fixing, 51, 177loading, 276
global log, 103
global search, 20, 502, 528
callbacks, 34
directives, 52, 314
MIP solution status, 500
termination, 441, 449
GLOBALFILEBIAS, 421
GLOBALFILELOGINTERVAL, 421
GLOBALFILESIZE, 496
GLOBALFILEUSAGE, 496
GOMCUTS, 421, 479

Ffathoming, 20
FEASIBILITYPUMP, 418
feasible region, 19
FEASTOL, 419
FEASTOLPERTURB, 419
FEASTOLTARGET, 419
files

H
HELP, 258
Hessian matrix, 152, 238
HEURBEFORELP, 421
HEURDEPTH, 422
HEURDIVEITERLIMIT, 422
HEURDIVERANDOMIZE, 422
HEURDIVESOFTROUNDING, 423

Fair Isaac Corporation Proprietary Information

592

IndexHEURDIVESPEEDUP, 423
HEURDIVESTRATEGY, 423, 580
HEUREMPHASIS, 424
HEURFORCESPECIALOBJ, 424
HEURFREQ, 424
HEURMAXSOL, 424
HEURNODES, 425
HEURSEARCHEFFORT, 425
HEURSEARCHFREQ, 425
HEURSEARCHROOTCUTFREQ, 426
HEURSEARCHROOTSELECT, 426, 580
HEURSEARCHTREESELECT, 427, 580
HEURSTRATEGY, 427
HEURTHREADS, 428
HISTORYCOSTS, 428
I
IFCHECKCONVEXITY, 428
IIS, 259
indicator constraints, 14
INDICATORS, 497
INDLINBIGM, 429
INDPRELINBIGM, 429
infeasibility, 18, 44, 254, 463, 528
diagnosis, 477
integer, 47, 499
node, 104
infeasibility repair, 46
infinity, 121
initialization, 268, 524
INPUTTOL, 429
integer preprocessing, 446
integer presolve, 528
integer programming, 13, 20, 29
integer solutions, 439, 499, 500
begin search, 51, 256
branching variable, 94
callback, 105
cutoff, 112
reinitialize search, 269
retrieving information, 203interfaces, 1interior point, see Newton barrier
INVERTFREQ, 430
INVERTMIN, 430
IOTIMEOUT, 430
irreducible infeasible sets, 45, 436, 502
IVE, 1
K
Karush-Kuhn-Tucker conditions, 10
KEEPBASIS, 430
KEEPNROWS, 431, 577
L
L1CACHE, 431
license, 6
lifted cover inequalities, 478
line length, 530
LINELENGTH, 431

Fair Isaac Corporation Proprietary Information

LNPBEST, 431
LNPITERLIMIT, 432
LOCALCHOICE, 433
log file, 52, 365
LP relaxation, 581
LPFLAGS, 432
LPFOLDING, 433
LPITERLIMIT, 9, 432, 516
LPLOG, 34, 107, 433
LPLOGDELAY, 434
LPLOGSTYLE, 434
LPOBJVAL, 10, 497
LPOPTIMIZE, 8, 301
LPREFINEITERLIMIT, 432
LPSTATUS, 497
LPTHREADS, 434
MMarkowitz tolerance, 415, 434
MARKOWITZTOL, 434
matrixadding names, 8changing coefficients, 51, 134, 145, 148, 154
column bounds, 144
columns, 28, 120, 163, 492, 503
constraint senses, 51, 134
cuts, 495
deleting cuts, 165
elements, 456
extra elements, 416
input, 279
modifying, 28
nonzeros, 187
quadratic elements, 509
range, 155reading, 27
rows, 28
scaling, 52, 248, 356
size, 29
spare columns, 511
spare elements, 511, 526
spare global entities, 511
MATRIXNAME, 497
MATRIXTOL, 435
MAXABSDUALINFEAS, 498
MAXABSPRIMALINFEAS, 498
MAXCHECKSONMAXCUTTIME, 435
MAXCHECKSONMAXTIME, 435
MAXCUTTIME, 436
MAXGLOBALFILESIZE, 436
MAXIIS, 436
MAXIM, 302
MAXIMPLIEDBOUND, 437
MAXKAPPA, 498
MAXLOCALBACKTRACK, 437
MAXMCOEFFBUFFERELEMS, 436
MAXMEMORYHARD, 437
MAXMEMORYSOFT, 438
MAXMIPINFEAS, 498
MAXMIPSOL, 439

593

IndexMAXMIPTASKS, 438
MAXNODE, 439
MAXPAGELINES, 439
MAXPROBNAMELENGTH, 498
MAXRELDUALINFEAS, 498
MAXRELPRIMALINFEAS, 499
MAXSCALEFACTOR, 439
MAXSTALLTIME, 440
MAXTIME, 9, 440
memory, 172, 179, 464, 516, 523
MEMORYLIMITDETECTED, 499
MINIM, 302
MIPABSCUTOFF, 440
MIPABSGAPNOTIFY, 441
MIPABSGAPNOTIFYBOUND, 441
MIPABSGAPNOTIFYOBJ, 441
MIPABSSTOP, 441
MIPADDCUTOFF, 24, 442
MIPBESTOBJVAL, 499
MIPCOMPONENTS, 442
MIPCONCURRENTNODES, 443
MIPCONCURRENTSOLVES, 443
MIPDUALREDUCTIONS, 444
MIPENTS, 499
MIPFRACREDUCE, 444
MIPINFEAS, 499
MIPKAPPAFREQ, 445
MIPLOG, 35, 445, 579
MIPOBJVAL, 10, 500
MIPOPTIMIZE, 8, 304
MIPPRESOLVE, 24, 446
MIPRAMPUP, 446
MIPREFINEITERLIMIT, 448
MIPRELCUTOFF, 448
MIPRELGAPNOTIFY, 448
MIPRELSTOP, 449
MIPRESTART, 447
MIPRESTARTFACTOR, 447
MIPRESTARTGAPTHRESHOLD, 447
MIPSOLNODE, 500
MIPSOLS, 500
MIPSOLTIME, 500
MIPSTATUS, 500
MIPTERMINATIONMETHOD, 449
MIPTHREADID, 501
MIPTHREADS, 450
MIPTOL, 450
MIPTOLTARGET, 450
MIQCPALG, 448
model cuts, 315
Mosel, 1
MPS file format, see files
MPS18COMPATIBLE, 450
MPSBOUNDNAME, 451
MPSECHO, 451
MPSFORMAT, 451
MPSOBJNAME, 451
MPSRANGENAME, 452
MPSRHSNAME, 452
MUTEXCALLBACKS, 452

Fair Isaac Corporation Proprietary InformationN
NAMELENGTH, 501
NETCUTS, 452
NETSTALLLIMIT, 453
Newton barrier, 19
convergence criterion, 488
crossover, 19
log callback, 90
number of iterations, 9, 19, 394
output, 34
NODEDEPTH, 501
NODEPROBINGEFFORT, 453
NODES, 502
nodes, 21
active cuts, 193, 273
cut routines, 98
deleting cuts, 165
infeasibility, 104
maximum number, 439
number solved, 502
optimal, 113
outstanding, 487
parent node, 165, 506
prior to optimization, 116
selection, 453
separation, 117
NODESELECTION, 402, 453
NUMERICALEMPHASIS, 454
NUMIIS, 502O
objective function, 19, 28, 451, 502
changing coefficients, 150
dual value, 489
optimum value, 497, 499, 500
primal value, 490
quadratic, 28, 149, 152, 294, 297
retrieving coefficients, 227
OBJNAME, 502
OBJRHS, 502
OBJSCALEFACTOR, 454
OBJSENSE, 503
OBSERVEDPRIMALINTEGRAL, 502
optimal basis, 35
OPTIMALITYTOL, 454
OPTIMALITYTOLTARGET, 454
optimization sense, 503
Optimizer output, 7, 20, 72, 108
ORIGINALCOLS, 503
ORIGINALGENCONCOLS, 503
ORIGINALGENCONS, 503
ORIGINALGENCONVALS, 504
ORIGINALINDICATORS, 504
ORIGINALMIPENTS, 504
ORIGINALPWLPOINTS, 504
ORIGINALPWLS, 504
ORIGINALQCELEMS, 505
ORIGINALQCONSTRAINTS, 505
ORIGINALQELEMS, 505
ORIGINALROWS, 506

594

IndexORIGINALSETMEMBERS, 505
ORIGINALSETS, 505
OUTPUTCONTROLS, 455
OUTPUTLOG, 365, 455
OUTPUTMASK, 388, 455
OUTPUTTOL, 456
P
PARENTNODE, 506
PEAKMEMORY, 506
PEAKTOTALTREEMEMORYUSAGE, 506
PENALTY, 456
PENALTYVALUE, 506
performance, 29, 522, 524
PERTURB, 456
PHYSICALCORESDETECTED, 507
PHYSICALCORESPERCPUDETECTED, 507
piecewise linear constraints, 14
pivot, 471, 527
list of variables, 230
order of basic variables, 229
PIVOTTOL, 456
positive semi-definite matrix, 16
POSTSOLVE, 307
postsolve, 29
PPFACTOR, 456
PREANALYTICCENTER, 457
PREBASISRED, 457
PREBNDREDCONE, 457
PREBNDREDQUAD, 457
PRECLIQUESTRATEGY, 458
PRECOEFELIM, 458
PRECOMPONENTS, 458
PRECOMPONENTSEFFORT, 459
PRECONEDECOMP, 459
PRECONVERTSEPARABLE, 459
PREDICTEDATTLEVEL, 507
PREDOMCOL, 460
PREDOMROW, 460
PREDUPROW, 460
PREELIMQUAD, 461
PREFOLDING, 461
PREIMPLICATIONS, 461
PRELINDEP, 462
PREOBJCUTDETECT, 462
PREPERMUTE, 462
PREPERMUTESEED, 463
PREPROBING, 463
PREPROTECTDUAL, 463
PRESOLVE, 29, 463, 519, 523
presolve, 29, 300, 415, 463, 477, 523, 524
diagnosing infeasibility, 44
integer, 24
presolved problem, 249
basis, 231, 284
directives, 199, 285
PRESOLVEINDEX, 507
PRESOLVEMAXGROW, 464
PRESOLVEOPS, 464
PRESOLVEPASSES, 465

Fair Isaac Corporation Proprietary Information

PRESOLVESTATE, 508
PRESORT, 465
pricing, 465
Devex, 465
partial, 456, 465
PRICINGALG, 465
primal infeasibilities, 490, 512
PRIMALDUALINTEGRAL, 508
PRIMALINFEAS, 508
PRIMALOPS, 466
PRIMALPERTURB, 466
PRIMALUNSHIFT, 466
PRINTSOL, 310, 385
priorities, 199, 315, 518, 575
problemfile access, 52, 316, 384
input, 8, 279
name, 27, 52, 235, 367
pointers, 7
problem attributes, 10prefix, 487
retrieving values, 197, 211, 251
problem pointers, 161
copying, 160
deletion, 172
pseudo cost, 199, 315, 467, 575
PSEUDOCOST, 467
PWLCONS, 508
PWLDUALREDUCTIONS, 467
PWLNONCONVEXTRANSFORMATION, 467
PWLPOINTS, 509
Q
QCCUTS, 468
QCELEMS, 509
QCONSTRAINTS, 509
QCROOTALG, 468
QELEMS, 509
QSIMPLEXOPS, 468
quadratic programming, 524
coefficients, 149, 152, 238, 509
loading global problem, 294
loading problem, 297
QUADRATICUNSHIFT, 469
QUIT, 311, 369
R
RANDOMSEED, 469
RANGENAME, 509
ranging, 155, 156, 509
name, 452
READBASIS, 312
READBINSOL, 313
READDIRS, 314, 575
READPROB, 316
READSLXSOL, 318
reduced costs, 10, 51, 177, 454
REFACTOR, 469
REFINEMIPSOL, 319
REFINEOPS, 470595

Indexrelaxation, see LP relaxation
RELAXTREEMEMORYLIMIT, 470
RELPIVOTTOL, 471
REPAIRINDEFINITEQ, 471
REPAIRINFEAS, 350
REPAIRINFEASMAXTIME, 471
RESOURCESTRATEGY, 472
RESTARTS, 510
RESTORE, 353
return codes, 53, 174, 311, 369
RHSNAME, 510
right hand side, 154, 243
name, 452
retrieve range values, 244
ROOTPRESOLVE, 472
ROWS, 510
rows
addition, 130deletion, 170
extra rows, 417, 511
indices, 207
model cuts, 283
names, 126, 226
nonzeros, 246
number, 506, 510
types, 156, 247
running time, 440

log callback, 107, 336
number of iterations, 9, 510
output, 19, 34
perturbation, 391, 414, 456, 466
type of crash, 408
simplex log, 433
simplex pivot, see pivot
SIMPLEXITER, 510
SLEEPONTHREADWAIT, 476
solution, 8, 10, 15, 220
beginning search, 52, 302
output, 52, 310, 385, 387
SOSREFTOL, 476
SPARECOLS, 511
SPAREELEMS, 511
SPAREMIPENTS, 511
SPAREROWS, 511
SPARESETELEMS, 512
SPARESETS, 512
special order sets
branching, 21
special ordered sets, 14, 276, 294
STOP, 174, 311, 369
STOPSTATUS, 512
SUMPRIMALINF, 512
supported APIs, 1
SYMMETRY, 476
SYMSELECT, 477
SYSTEMMEMORY, 513

S
SAVE, 52, 353, 355
SBBEST, 472
SBEFFORT, 473
SBESTIMATE, 473
SBITERLIMIT, 473
SBSELECT, 473
SCALE, 49, 356
SCALING, 48, 356, 474
scaling, 48, 52, 356, 523
security system, 6
sensitivity analysis, 177
SERIALIZEPREINTSOL, 475
setreturning names, 226
SETARCHCONSISTENCY, 76
SETDEFAULTCONTROL, 361
SETDEFAULTS, 362
SETLOGFILE, 365
SETMEMBERS, 510
SETPROBNAME, 367
SETS, 511
sets, 499, 511
addition, 132deletion, 171
names, 133
SIFTING, 475
SIFTPASSES, 475
SIFTPRESOLVEOPS, 475
SIFTSWITCH, 476
simplexcrossover, 19

T
THREADS, 477
tightening
bound, 29coefficient, 29
TIME, 513
tolerance, 419, 429, 434, 435, 441, 450, 454, 456, 471
TOTALMEMORY, 513
TRACE, 45, 477
tracing, 528
tree, see global search
TREECOMPLETION, 513
TREECOMPRESSION, 478
TREECOVERCUTS, 478
TREECUTSELECT, 478
TREEDIAGNOSTICS, 479
TREEGOMCUTS, 479
TREEMEMORYLIMIT, 479
TREEMEMORYSAVINGTARGET, 480
TREEMEMORYUSAGE, 513
TREEQCCUTS, 480
TREERESTARTS, 514
TUNE, 375
TUNERHISTORY, 480
TUNERMAXTIME, 481
TUNERMETHOD, 481
TUNERMETHODFILE, 481
TUNERMODE, 482
TUNEROUTPUT, 482
TUNEROUTPUTPATH, 482

Fair Isaac Corporation Proprietary Information

596

IndexTUNERPERMUTE, 483
TUNERROOTALG, 483
TUNERSESSIONNAME, 483
TUNERTARGET, 484
TUNERTHREADS, 484
TUNERVERBOSE, 485Uunboundedness, 21, 47, 254
USERSOLHEURISTIC, 485
UUID, 514
V
variables
binary, 13, 17, 276, 294, 556
continuous, 276, 294, 557
continuous integer, 276, 294
infeasible, 249
integer, 13, 276, 294, 556
partial integer, 14, 276, 294, 556
primal, 209
selection, 22
semi-continuous, 13
semi-continuous integer, 14
slack, 10, 165
VARSELECTION, 486
VERSION, 486
version number, 486
Wwarning messages, 34
WRITEBASIS, 381
WRITEBINSOL, 382
WRITEDIRS, 383
WRITEPROB, 384
WRITEPRTSOL, 10, 385
WRITESLXSOL, 386
WRITESOL, 387, 570
X
XPRESSVERSION, 514
XPRS_bo_addbounds, 54
XPRS_bo_addbranches, 55
XPRS_bo_addcuts, 56
XPRS_bo_addrows, 57
XPRS_bo_create, 59
XPRS_bo_destroy, 62
XPRS_bo_getbounds, 63
XPRS_bo_getbranches, 64
XPRS_bo_getid, 65
XPRS_bo_getlasterror, 66
XPRS_bo_getrows, 67
XPRS_bo_setpreferredbranch, 68
XPRS_bo_setpriority, 69
XPRS_bo_store, 70
XPRS_bo_validate, 71
XPRS_ge_addcbmsghandler, 72
XPRS_ge_getcomputeallowed, 73
XPRS_ge_getlasterror, 74
XPRS_ge_removecbmsghandler, 75
XPRS_ge_setarchconsistency, 76

Fair Isaac Corporation Proprietary Information

XPRS_ge_setcomputeallowed, 77
XPRS_nml_addnames, 78
XPRS_nml_copynames, 79
XPRS_nml_create, 80
XPRS_nml_destroy, 81
XPRS_nml_findname, 82
XPRS_nml_getlasterror, 83
XPRS_nml_getmaxnamelen, 84
XPRS_nml_getnamecount, 85
XPRS_nml_getnames, 86
XPRS_nml_removenames, 87
XPRS_MINUSINFINITY, 121, 190
XPRS_PLUSINFINITY, 121
XPRSaddcbbariteration, 88
XPRSaddcbbarlog, 20, 34, 90
XPRSaddcbchecktime, 93
XPRSaddcbchgbranch, 35, 94
XPRSaddcbchgbranchobject, 95
XPRSaddcbchgnode, 34, 96
XPRSaddcbcomputerestart, 91
XPRSaddcbcutlog, 97
XPRSaddcbcutmgr, 98
XPRSaddcbdestroymt, 99
XPRSaddcbestimate, 100
XPRSaddcbgapnotify, 101
XPRSaddcbgloballog, 35, 103
XPRSaddcbinfnode, 34, 104
XPRSaddcbintsol, 34, 105
XPRSaddcblplog, 19, 34, 107
XPRSaddcbmessage, 7, 34, 108, 365
XPRSaddcbmessageVB, 109
XPRSaddcbmipthread, 110
XPRSaddcbnewnode, 34, 111
XPRSaddcbnodecutoff, 35, 112
XPRSaddcboptnode, 34, 113
XPRSaddcbpreintsol, 34, 114
XPRSaddcbprenode, 34, 116
XPRSaddcbpresolve, 92
XPRSaddcbsepnode, 117
XPRSaddcbusersolnotify, 119
XPRSaddcols, 28, 120
XPRSaddcols64, 120
XPRSaddcuts, 35, 122
XPRSaddcuts64, 122
XPRSaddgencons, 123
XPRSaddgencons64, 123
XPRSaddmipsol, 125
XPRSaddnames, 8, 120, 126
XPRSaddpwlcons, 127
XPRSaddpwlcons64, 127
XPRSaddqmatrix, 129
XPRSaddqmatrix64, 129
XPRSaddrows, 28, 130
XPRSaddrows64, 130
XPRSaddsetnames, 133
XPRSaddsets, 132
XPRSaddsets64, 132
XPRSalter, 134, 522, 576
XPRSbasiscondition, 135
XPRSbasisstability, 136597

IndexXPRSbndsa, 137
XPRSbtran, 138
XPRScalcobjective, 139
XPRScalcreducedcosts, 140
XPRScalcslacks, 141
XPRScalcsolinfo, 142
XPRSchgbounds, 144
XPRSchgcoef, 28, 145
XPRSchgcoltype, 28, 146
XPRSchgglblimit, 147
XPRSchgmcoef, 28, 145, 148
XPRSchgmcoef64, 148
XPRSchgmqobj, 28, 149
XPRSchgmqobj64, 149
XPRSchgobj, 28, 150, 526
XPRSchgobjsense, 151
XPRSchgqobj, 28, 152
XPRSchgqrowcoeff, 28, 153
XPRSchgrhs, 28, 154
XPRSchgrhsrange, 28, 155
XPRSchgrowtype, 28, 156
XPRSclearrowflags, 158
XPRScopycallbacks, 157, 160
XPRScopycontrols, 159, 160
XPRScopyprob, 160
XPRScreateprob, 7, 161
XPRScrossoverlpsol, 162
XPRSdelcols, 28, 163
XPRSdelcpcuts, 36, 164
XPRSdelcuts, 35, 164, 165
XPRSdelgencons, 166
XPRSdelindicators, 167
XPRSdelpwlcons, 168
XPRSdelqmatrix, 169
XPRSdelrows, 28, 170
XPRSdelsets, 171
XPRSdestroyprob, 7, 161, 172
XPRSdumpcontrols, 173
XPRSestimaterowdualranges, 175
XPRSfeaturequery, 176
XPRSfixglobals, 177
XPRSfree, 6, 179
XPRSftran, 180
XPRSgetattribinfo, 181
XPRSgetbanner, 182
XPRSgetbasis, 183
XPRSgetbasisval, 184
XPRSgetcheckedmode, 185
XPRSgetcoef, 186
XPRSgetcols, 28, 187
XPRSgetcols64, 187
XPRSgetcoltype, 28, 188
XPRSgetcontrolinfo, 189
XPRSgetcpcutlist, 36, 190
XPRSgetcpcuts, 36, 191
XPRSgetcpcuts64, 191
XPRSgetcutlist, 36, 193
XPRSgetcutmap, 194
XPRSgetcutslack, 195
XPRSgetdaysleft, 196

Fair Isaac Corporation Proprietary Information

XPRSgetdblattrib, 10, 197, 487
XPRSgetdblcontrol, 198
XPRSgetdirs, 199
XPRSgetdualray, 200
XPRSgetgencons, 201
XPRSgetgencons64, 201
XPRSgetglobal, 203
XPRSgetglobal64, 203
XPRSgetiisdata, 205
XPRSgetindex, 207, 528
XPRSgetindicators, 208
XPRSgetinfeas, 209
XPRSgetintattrib, 10, 211, 487
XPRSgetintattrib64, 211
XPRSgetintcontrol, 9, 212, 389
XPRSgetintcontrol64, 212
XPRSgetlastbarsol, 213
XPRSgetlasterror, 214
XPRSgetlb, 28, 215
XPRSgetlicerrmsg, 216
XPRSgetlpsol, 10, 217
XPRSgetlpsolval, 218
XPRSgetmessagestatus, 219
XPRSgetmipsol, 220
XPRSgetmipsolval, 221
XPRSgetmqobj, 222
XPRSgetmqobj64, 222
XPRSgetnamelist, 223
XPRSgetnamelistobject, 225
XPRSgetnames, 28, 226
XPRSgetobj, 28, 227, 526
XPRSgetobjecttypename, 228
XPRSgetpivotorder, 229
XPRSgetpivots, 230
XPRSgetpresolvebasis, 33, 231
XPRSgetpresolvemap, 232
XPRSgetpresolvesol, 33, 233
XPRSgetprimalray, 234
XPRSgetprobname, 235
XPRSgetpwlcons, 236
XPRSgetpwlcons64, 236
XPRSgetqobj, 28, 238
XPRSgetqrowcoeff, 239
XPRSgetqrowqmatrix, 28, 240
XPRSgetqrowqmatrixtriplets, 28, 241
XPRSgetqrows, 242
XPRSgetrhs, 28, 243
XPRSgetrhsrange, 28, 244
XPRSgetrowflags, 245
XPRSgetrows, 28, 246
XPRSgetrows64, 246
XPRSgetrowtype, 28, 247
XPRSgetscale, 248
XPRSgetscaledinfeas, 33, 249
XPRSgetstrattrib, 10, 251, 487
XPRSgetstrcontrol, 252
XPRSgetstringattrib, 251
XPRSgetstringcontrol, 252
XPRSgetub, 28, 253
XPRSgetunbvec, 254

598

IndexXPRSgetversion, 255
XPRSglobal, 256
XPRSiisall, 261
XPRSiisclear, 262
XPRSiisfirst, 263
XPRSiisisolations, 264
XPRSiisnext, 265
XPRSiisstatus, 266
XPRSiiswrite, 267
XPRSinit, 6, 161, 179, 182, 268
XPRSinitglobal, 257, 269
XPRSinterrupt, 270
XPRSloadbasis, 271
XPRSloadbranchdirs, 272
XPRSloadcuts, 35, 273
XPRSloaddelayedrows, 274
XPRSloaddirs, 275
XPRSloadglobal, 8, 276
XPRSloadglobal64, 276
XPRSloadlp, 8, 279
XPRSloadlp64, 279
XPRSloadlpsol, 281
XPRSloadmipsol, 282
XPRSloadmodelcuts, 283
XPRSloadpresolvebasis, 33, 284
XPRSloadpresolvedirs, 33, 285
XPRSloadqcqp, 8, 286
XPRSloadqcqp64, 286
XPRSloadqcqpglobal, 290
XPRSloadqcqpglobal64, 290
XPRSloadqglobal, 8, 294
XPRSloadqglobal64, 294
XPRSloadqp, 8, 297
XPRSloadqp64, 297
XPRSloadsecurevecs, 300
XPRSlpoptimize, 8, 301
XPRSmaxim, 302
XPRSminim, 302
XPRSmipoptimize, 8, 304
XPRSobjsa, 305
XPRSpivot, 306
XPRSpostsolve, 257, 307
XPRSpresolverow, 308
XPRSreadbasis, 312
XPRSreadbinsol, 313
XPRSreaddirs, 314, 575
XPRSreadprob, 8, 316
XPRSreadslxsol, 318
XPRSrefinemipsol, 319
XPRSremovecbbariteration, 320
XPRSremovecbbarlog, 323
XPRSremovecbchecktime, 326
XPRSremovecbchgbranch, 324
XPRSremovecbchgbranchobject, 325
XPRSremovecbchgnode, 327
XPRSremovecbcomputerestart, 321
XPRSremovecbcutlog, 328
XPRSremovecbcutmgr, 329
XPRSremovecbdestroymt, 330
XPRSremovecbestimate, 331

Fair Isaac Corporation Proprietary Information

XPRSremovecbgapnotify, 332
XPRSremovecbgloballog, 333
XPRSremovecbinfnode, 334
XPRSremovecbintsol, 335
XPRSremovecblplog, 336
XPRSremovecbmessage, 337
XPRSremovecbmipthread, 338
XPRSremovecbnewnode, 339
XPRSremovecbnodecutoff, 340
XPRSremovecboptnode, 341
XPRSremovecbpreintsol, 342
XPRSremovecbprenode, 343
XPRSremovecbpresolve, 322
XPRSremovecbsepnode, 344
XPRSremovecbusersolnotify, 345
XPRSrepairinfeas, 346
XPRSrepairweightedinfeas, 348
XPRSrepairweightedinfeasbounds, 350
XPRSrestore, 353
XPRSrhssa, 354
XPRSsave, 52, 353, 355
XPRSsaveas, 355
XPRSscale, 49, 356
XPRSsetbranchbounds, 357
XPRSsetbranchcuts, 358
XPRSsetcheckedmode, 359
XPRSsetdblcontrol, 360
XPRSsetdefaultcontrol, 361
XPRSsetdefaults, 362
XPRSsetindicators, 363
XPRSsetintcontrol, 9, 364, 389
XPRSsetintcontrol64, 364
XPRSsetlogfile, 19, 20, 365
XPRSsetmessagestatus, 366
XPRSsetprobname, 367
XPRSsetstrcontrol, 368
XPRSstorebounds, 370
XPRSstorecuts, 36, 371
XPRSstorecuts64, 371
XPRSstrongbranch, 373
XPRSstrongbranchcb, 374
XPRStune, 377
XPRStunerreadmethod, 378
XPRStunerwritemethod, 379
XPRSunloadprob, 380
XPRSwritebasis, 381
XPRSwritebinsol, 382
XPRSwritedirs, 383
XPRSwriteprob, 384
XPRSwriteprtsol, 10, 385
XPRSwriteslxsol, 10, 386
XPRSwritesol, 10, 387, 570

599