C ONTENTS
16 ILOG CPLEX 9.0 — USER’ S M ANUAL
Writing Callbacks with Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .480
Callback Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .482
The Continuous Callback. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .482
Example: Deriving the Simplex Callback ilolpex4.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . . .482
Implementing Callbacks in the Callable Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .486
Setting Callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .486
Callbacks for LP/QP/QCPs and for MIPs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .486
Return Values for Callbacks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .487
Interaction Between Callbacks and ILOG CPLEX Parallel Optimizers . . . . . . . . . . . . . . .487
Example: Using Callbacks lpex4.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .488
Control Callbacks for IloCplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .496
Example: Controlling Cuts iloadmipex5.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .497
Chapter 23 Goals and Callbacks: a Comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
Chapter 24 User Cut and Lazy Constraint Pools. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
What Are Pools of User Cuts or Lazy Constraints? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .507
Adding User Cuts and Lazy Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .509
Component Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .509
Reading LP and SAV Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .509
Writing LP and SAV Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .510
Using the Interactive Optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .510
Deleting User Cuts and Lazy Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .511
Chapter 25 Advanced MIP Control Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
Introduction to MIP Callbacks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .514
Heuristic Callback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .515
Cut Callback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .516
Branch Selection Callback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .517
Incumbent Callback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .518
Node Selection Callback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .519
Solve Callback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .519
Chapter 26 Advanced Presolve Routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521