# Implementing Advanced Algorithms for Mathematical Programs¶

Control over the solution process

The `SOLVE`

statement discussed in The SOLVE Statement offers a
convenient way to execute all necessary steps to generate and solve a
single instance of a mathematical program in one simple statement. For
most applications, this level of control over the individual steps
required to execute the generation and solution process is sufficient.
However, for advanced applications, you may need a finer-grained level
of control, e.g. to

work with multiple, differing, instances of a single symbolic mathematical program,

manipulate the individual rows and columns and the coefficient matrix of a mathematical program instance, for example to efficiently implement a column generation scheme,

work with a repository of solutions associated with a mathematical program instance, for instance as a means to store multiple starting solutions or, within a solver callback, to setup and update a collection of incumbents of a mixed integer model, or

start multiple solver sessions for a mathematical program instance, either locally or remotely.

This chapter

This chapter describes a library of procedures that offers you
fine-grained control over the generation, manipulation and solution of a
mathematical program instance, and allows you to manage a collection of
solutions and solver sessions associated with such mathematical program
instances. As you will see later on, the `SOLVE`

statement can be
completely expressed in terms of the procedures in this library.

- Introduction to the GMP Library
- Managing Generated Mathematical Program Instances
- Matrix Manipulation Procedures
- Managing the Solution Repository
- Using Solver Sessions
- Synchronization Events
- Multi-objective Optimization
- Supporting Functions for Stochastic Programs
- Supporting Functions for Robust Optimization Models
- Supporting Functions for Benders’ Decomposition
- Creating and Managing Linearizations
- Customizing the Progress Window
- Examples of Use