Table of Contents
Front Matter
Notices
Programming Interface Information
Trademarks and Service Marks
About this Book
How to Use This Book
General Information about This Book
Finding a Subroutine Description
Finding the Names of Related Publications
Looking Up a Reference
Understanding the Terminology
Interpreting the Abbreviated Names
Interpreting the Fonts
Interpreting the Special Characters, Symbols, and Expressions
Interpreting the Subroutine Descriptions
Guide Information
Introducing the Optimization Library
What Is the Optimization Library?
A Range of Operating Environments
Support for Several Areas of Mathematical Programming
Before Designing Your Application
Compatibility
Product Requirements
Storage
Processing Your Program
Thread-Safety
Compiling, Linking, and Executing your Application with the Optimization Library
Associating File Names with FORTRAN Unit Numbers
Handling Problems
Application Design Principles
OSL Terms and Concepts
Mathematical Programming and OSL
Linear Programming
Mixed-Integer Programming
Quadratic Programming
Quadratic Programming: Parametrics
Performance Tuning
Applications versus Models
OSL Data Structures
Problem Matrix
Sparse Matrices
Storage of
: by:
Indices
,
Columns
, or
Rows
Matrix Blocks
and
Vector Blocks
Passing Models to OSL
Controlling OSL
Control Variables
|
Bit Masks
|
Getting and Setting Values
Customizing Messages
User Exit Subroutines
Storage Allocation
What Is DSPACE?
How DSPACE Is Allocated
Selection Lists
Diagrams of Sample Application Programs
Strategies for Optimization Problems
Linear Programming
Simplex (EKKSSLV)
Interior-Point Barrier (EKKBSLV)
Network Programming (EKKNSLV)
Mixed-Integer Programming (EKKMPRE and EKKMSLV)
Branch-and-Bound
Preprocessing the Problem with EKKMPRE
Implementing the Data Structures
Choosing a Node
Branching
Supernode Processing
Related Control Variables
Quadratic Programming (EKKQSLV and EKKQPAR)
Related Control Variables
Post Solution Analysis of LP Problems
LP Sensitivity Analysis
Sensitivity to the Objective Function (EKKSOBJ)
Sensitivity to Bounds (EKKSBND)
LP Parametrics (EKKSPAR)
Infeasibility Analysis (EKKNFES)
Performance Considerations
Crash (EKKCRSH)
Presolve and Postsolve (EKKPRSL and EKKPSSL)
Scale (EKKSCAL)
Linear Programming Decomposition (EKKLPDC)
Using EKKLPDC
General Performance Considerations
Passing Your Model Using Library Data Structures
Linear Programming Model Data (EKKLMDL)
A Sample Problem
A Sample Problem Involving Basis Data
Mixed-Integer Programming Data (EKKIMDL)
Simplex Parametric Programming Data (EKKPMDL)
Network Programming Data (EKKNMDL)
Quadratic Programming Data (EKKQMDL)
Defining an "Empty" Linear Programming Model (EKKEMDL)
Passing Your Model Using Mathematical Programming System (MPS) Format
Using MPS Format
Types of Records
Order of Records
Fixed Format Input
Free Format Input
NAME and ENDATA Records
NAME Indicator Record Format
ENDATA Indicator Record Format
Examples
ROWS Section
Indicator Record
Data Record
Indicator Code
Example
COLUMNS Section
Indicator Record
Data Record
Examples
RHS Section
Indicator Record
Data Record
Example
RANGES Section
Indicator Record
Data Record
Effect of Range Value on the RHS
Example
BOUNDS Section
Indicator Record
Data Record
Bound Types
Default Bounds
Example
Integer Data
Indicator Records
General Integer Variables
Special Ordered Set (SOS)
Examples
QSECTION Section
Order of Records
Indicator Records
Data Record
Example
Optimization Library Compatibility with MPS Format
EKKBCDO
EKKMPS
EKKBASI
Indicator Code
EKKBASO
Optimization Library Extensions to MPS Format
Optimization Library Restrictions to MPS Format
Compatibility with MPSX
Programming Examples
Linear and Mixed-Integer Programming
Quadratic Programming
Related Control Variables
Passing Your Model to OSL Using Spreadsheet Format
Formulating Models with Lotus 1-2-3
Examples
Linear Programming
Quadratic Programming
Mixed-Integer Programming
Creating and Defining an Optimization Problem with Lotus 1-2-3
Using Range Sets
Creating and Defining Adjustable Cells
Creating and Defining Constraints
Creating and Defining an Objective Function
Creating and Defining Special Ordered Sets
Creating Names for Problem Variables and Constraints
Using EKKSMDL
OSL Restrictions to Lotus 1-2-3 Format
Utilities
Making Copies of the Matrix for Yourself (EKKCOPY)
Adding, Replacing, Getting, or Deleting Columns and Rows (EKKCOL and EKKROW)
Getting and Putting Model Data (EKKGTMD and EKKPTMD)
Controlling EKKGTMD and EKKPTMD
Using EKKGTMD and EKKPTMD
Other Considerations
Computing a Matrix Vector Product (EKKGEMV)
Solving a Basic System of Equations (EKKGES)
Invert: Create the Primal and Dual Solutions Corresponding to a Given Basis (EKKINVT)
Creating, Changing, or Retrieving Row and Column Names (EKKNAME)
Control Variables
Using EKKNAME
Retrieving Names Directly
Quadratic Input
Creating a Basis of All Logical Variables (EKKNLBS)
Creating a New Copy of a Matrix (EKKNWMT)
Printing the Solution (EKKPRTS)
Controlling the Output
Basic Output
Advanced Output
Additional Output from LP Sensitivity Analysis
Repeat an Existing Matrix Block As a New Block (EKKRPTB)
Using EKKRPTB
Control Variables
Creating or Changing Selection Lists (EKKSEL)
What Is a Selection List?
Format of a Selection List
How EKKSEL Works
Wildcard and Arbitrary Characters
Operating on Selection Lists Directly
Saving Selection Lists
Storage Management Subroutines
Saving and Restoring Model Information in Storage (EKKPSHS and EKKPOPS)
Reserving Some High Storage for Your Program (EKKHIS)
Finding the Starting Indices of Data in Storage (EKKNGET)
Getting and Putting Model Information (EKKGTMI and EKKPTMI)
Debugging Your Program
Using EKKSMAP for Debugging
Using EKKSTAT for Debugging
Explanation of EKKSTAT Output
Modifying Your Message Options
What Can You Do with the Message-Handling Subroutines?
Fragment 1, restricting log output
Fragment 2, suppressing message numbers
Fragment 3, suppressing ALL output
Understanding User Exit Subroutines
Overview
Informational User Exit Subroutines
Iteration User Exit Subroutine (EKKITRU)
Message User Exit Subroutine (EKKMSGU)
Using Mixed-Integer User Exit Subroutines
Branch-and-Bound User Exit Subroutines (EKKBRNU, EKKCHNU, EKKEVNU, EKKSLVU, and EKKNODU)
Sample EKKMSLV Program for Use with EKKBRNU, EKKCHNU, and EKKEVNU
Branch User Exit Subroutine (EKKBRNU)
Choose Node User Exit Subroutine (EKKCHNU)
Evaluate a Node User Exit Subroutine (EKKEVNU)
Solve Node User Exit Subroutine (EKKSLVU)
Save Node Information User Exit Subroutine (EKKNODU)
Supernode User Exit Subroutines (EKKCUTU and EKKHEUU)
Add Cuts User Exit Subroutine (EKKCUTU)
Use Heuristics User Exit Subroutine (EKKHEUU)
Row Ordering User Exit Subroutine (EKKORDU)
Advanced Topics
Helpful Hints
Declaring the Size of Your DSPACE Array
Execution Timing
Setting Control Variables
Specifying the Problem Name in Your Quadratic Input File
Default Column Bounds
Indexing into DSPACE and MSPACE
Resuming EKKMSLV
Suppressing Message Numbers
Severe Error Messages
Iteration Counts and EKKQSLV
Accessing Linear Programming Dual Variables
Special Topics related to MIP Problems
Adding Integer Variables
Resuming EKKMSLV
Defining MIP Problems and Special Ordered Sets with EKKIMDL
Identifying Special Ordered Sets of Types 1 and 3 with EKKSOS
Transforming General Integer MIP Problems into 0/1 MIP Problems
Writing Branch User Exits for EKKMSLV
Using EKKLPDC to Solve Block Structured Problems
Block Structured Problems
Getting Started with EKKLPDC
Solving Staircase Problems
Solving Dantzig-Wolfe Problems
Solving Completely Separable Problems
Other Useful Library Routines
Summary
Combining Input Data from Multiple Sources
Using Lotus 1-2-3 Workfiles
Reference
Optimization Library Subroutines
EKKBASI - Read a Basis in MPS Format from a File
EKKBASO - Write the Current Basis to a File in MPS Fixed Format
EKKBCDO - Write a Model in MPS Fixed Format to a File
EKKBMPR - Transform a General MIP Problem into a 0/1 MIP Problem
EKKBMPS - Map the 0/1 Solution Back to Original General Integer Variables
EKKBSLV - Solve a Linear Programming Problem Using an Interior-Point Method
EKKCGET - Request Current Values of Character Control Variables
EKKCLCB - Clear all Callback Functions
EKKCOL - Add, Replace, Get, or Delete a Column in the Problem Matrix
EKKCOPY - Copy the Problem Matrix Stored by Columns or by Rows
EKKCRSH - Crash: Produce a Starting Basis
EKKCSET - Set Character Control Variables
EKKDSCA - Describe a Mathematical Programming Application
EKKDSCB - Describe One Block of the Problem Matrix for a Model
EKKDSCM - Describe a Mathematical Programming Model
EKKEMDL - Specify an Empty Model
EKKFCLS - Close and Disconnect FORTRAN I/O Units
EKKFOPN - Open and Connect Files to FORTRAN I/O Units
EKKFREW - Rewind Files Associated with FORTRAN I/O Unit numbers
EKKGEMV - Compute a Matrix Vector Product
EKKGES - Solve a Basic System of Equations
EKKGTMD - Get a Model from a File
EKKGTMI - Get Model Information
EKKHIS - Reserve Permanent Space for the User
EKKIGET - Request Current Values of Integer Control Variables
EKKIMDL - Specify the Integer Parts of a Model
EKKINIT - Initialize OSL
EKKINVT - Invert: Create the Primal and Dual Solutions Corresponding to a Given Basis
EKKISET - Set Integer Control Variables
EKKLMDL - Specify the Linear Part of a Model
EKKLPDC - Perform Specialized Decomposition
EKKMPRE - Preprocess the MIP Branch-and-Bound Tree to Take Advantage of Structures
EKKMPS - Input a Model in MPS Format from a File
EKKMSAV - Save the Option Settings for a Message
EKKMSET - Set New Option Settings for a Message
EKKMSLV - Solve a Mixed-Integer Programming Problem
EKKMSTR - Restore the Saved Option Settings for a Message
EKKNAME - Specify or Retrieve Names for Rows and Columns in a Model
EKKNFES - Analyze an Infeasible Linear Programming Problem
EKKNGET - Request Current Start Indices of OSL Information
EKKNLBS - Create a Basis of All Logical Variables
EKKNMDL - Specify a Network Model
EKKNSLV - Solve a Network Flow Problem
EKKNWMT - Create a New Copy of the Problem Matrix
EKKPMDL - Specify a Parametric Model
EKKPOPS - Pop Storage: Restore Storage Pointers
EKKPRSL - Presolve: Reduce the Problem Size
EKKPRTS - Print the Problem Solution
EKKPSHS - Push Storage: Save Current Storage Pointers
EKKPSSL - Postsolve: Map the Solution Back to Original Variables
EKKPTMD - Put a Model into a File
EKKPTMI - Put Current Model Information
EKKQMDL - Specify the Quadratic Parts of a Model
EKKQMPS - Specify the Quadratic Parts of a Model in MPS Format from a File
EKKQPAR - Parametrically Analyze a Quadratic Programming Problem
EKKQRMD - Query Model Number
EKKQSLV - Solve a Quadratic Programming Problem
EKKRGCB - Register a Callback Function
EKKRGET - Request Current Values of Real Control Variables
EKKROW - Add, Replace, Get, or Delete a Row in the Problem Matrix
EKKRPTB - Repeat an Existing Matrix Block As a New Block in the Current Problem Matrix
EKKRSET - Set Real Control Variables
EKKSBND - Analyze the Sensitivity of a Solution to Row and Column Bounds
EKKSCAL - Scale the Coefficient Matrix
EKKSEL - Modify Selection Lists
EKKSMAP - Print the Storage Map
EKKSMDL - Specify a Model in Spreadsheet Format
EKKSOBJ - Analyze the Sensitivity of a Solution to Objective Function
EKKSOS - Identify Special Ordered Sets of Types 1 and 3
EKKSPAR - Parametrically Analyze a Linear Programming Problem
EKKSSLV - Solve a Linear Programming Problem Using the Simplex Method
EKKSTAT - Print Problem Statistics
Informational User Exit Subroutines and EKKORDU
EKKITRU - Iteration User Exit Subroutine
EKKMSGU - Message User Exit Subroutine
EKKORDU - Row Ordering User Exit Subroutine
The MIP User Exit Subroutines
EKKBRNU - Branch User Exit Subroutine
EKKCHNU - Choose Node User Exit Subroutine
EKKCUTU - Cut Generation User Exit Subroutine
EKKEVNU - Evaluate a Node User Exit Subroutine
EKKHEUU - Heuristic Fixing User Exit Subroutine
EKKNODU - Node User Exit Subroutine
EKKSLVU - Branch User Exit Subroutine
Appendix A. Optimization Library Messages
Message Conventions
and Return Codes
Message Option Table
List of OSL Messages
Appendix B. Sample Application Programs
, in
C
and
FORTRAN
, Sample
Include Files and User Exit Subroutines in
C
and
FORTRAN
, and
Sample
Data Sets
Sample C Application Programs
Sample C Program EXBMPR
Sample C Program EXMPS
Sample C Program EXNAME
Sample C Program EXPRSL
Sample C Program EXROW
Sample C Program EXSELNAM
Sample C Program EXIMDL6
Sample FORTRAN Application Programs
Sample FORTRAN Program EXBASI
Sample FORTRAN Program EXBASO
Sample FORTRAN Program EXBSLV
Sample FORTRAN Program EXCOPY
Sample FORTRAN Program EXDANWOL
Sample FORTRAN Program EXDSCB
Sample FORTRAN Program EXDSCM2
Sample FORTRAN Program EXDUAL
Sample FORTRAN Program EXFRONT
Sample FORTRAN Program EXGES
Sample FORTRAN Program EXIMDL
Sample FORTRAN Program EXIMDL2
Sample FORTRAN Program EXIMDL3
Sample FORTRAN Program EXIMDL4
Sample FORTRAN Program EXIMDL5
Sample FORTRAN Program EXINIT
Sample FORTRAN Program EXISET
Sample FORTRAN Program EXLMDL
Sample FORTRAN Program EXLPDC
Sample FORTRAN Program EXLPDC2
Sample FORTRAN Program EXMPRSL
Sample FORTRAN Program EXMPS
Sample FORTRAN Program EXMSAV
Sample FORTRAN Program EXMSLV
Sample FORTRAN Program EXMSLV2
Sample FORTRAN Program EXMSLV3
Sample FORTRAN Program EXNAME
Sample FORTRAN Program EXNAME2
Sample FORTRAN Program EXNFES
Sample FORTRAN Program EXNCRSH
Sample FORTRAN Program EXNGET
Sample FORTRAN Program EXNMDL
Sample FORTRAN Program EXNSLV
Sample FORTRAN Program EXOSLBAS
Sample FORTRAN Program EXPARA1
Sample FORTRAN Program EXPARA2
Sample FORTRAN Program EXPRSL
Sample FORTRAN Program EXPTMD
Sample FORTRAN Program EXQMDL
Sample FORTRAN Program EXQPAR
Sample FORTRAN Program EXQSLV
Sample FORTRAN Program EXROW
Sample FORTRAN Program EXRPTB
Sample FORTRAN Program EXRVIS
Sample FORTRAN Program EXSELNAM
Sample FORTRAN Program EXSELNM2
Sample FORTRAN Program EXSENS1
Sample FORTRAN Program EXSENS2
Sample FORTRAN Program EXSMDL
Sample FORTRAN Program EXSOS
Sample FORTRAN Application Program EXTOMPSX
C Include Files
Character Control Variable Mnemonics #include oslc.h
Integer Control Variable Mnemonics #include osli.h
Index Control Variable Mnemonics #include osln.h
Real Control Variable Mnemonics #include oslr.h
FORTRAN INCLUDE Files
Character Control Variable Mnemonics INCLUDE (OSLC)
Integer Control Variable Mnemonics INCLUDE (OSLI)
Index Control Variable Mnemonics INCLUDE (OSLN)
Real Control Variable Mnemonics INCLUDE (OSLR)
Sample Informational User Exits in
C
and
FORTRAN
A Sample EKKITRU in
C
and
FORTRAN
A Sample EKKITRU for parametric analysis
in FORTRAN
A Sample EKKMSGU in
C
and
FORTRAN
Sample Mixed-Integer User Exit Subroutines in
C
and
FORTRAN
A Sample EKKBRNU in
C
and
FORTRAN
A Second EKKBRNU in
FORTRAN
A Sample EKKCHNU in
C
and
FORTRAN
A Sample EKKCUTU in
C
and
FORTRAN
A Sample EKKEVNU in
C
and
FORTRAN
A Sample EKKHEUU in
C
and 
FORTRAN
A Sample EKKNODU in
C
and 
FORTRAN
A Sample EKKSLVU in
C
and 
FORTRAN
A Sample EKKORDU (Row Ordering User Exit) in
C
and 
FORTRAN
Sample MPS Input Files
Sample Basis Data
Sample LP Model Data 1
Sample LP Model Data 2
Sample LP Model Data 3
Sample LP Model Data 4
Sample LP Model Data 5
Sample LP Model Data 6
Sample LP Model Data 7
Sample LP Model Data 8
Sample LP Model Data 9
Sample MIP Model Data 1
Sample MI Model Data 2
Sample QP Model Data 1
Sample QP Model Data 2
Sample Spreadsheet Worksheet File 1
Appendix C. Control Variables
Integer Control Variables
Real Control Variables
Index Control Variables
Character Control Variables
Glossary
Bibliography
[
Top of Page
|
Previous Page
| There is no Next Page |
First Page
|
Library Overview
]