|
PIPS-IPM++ Solver and Tools
a parallel interior-point method for doubly bordered block diagonal linear programs
|
A Docker image for PIPS-IPM++ is available in the container registry registry.gitlab.com/pips-ipmpp/pips-ipmpp. Based on debian:stable, it includes a pre-built version of PIPS-IPM++ located in /pips-ipmpp/build and a Python-based controller to orchestrate complex decomposition workflows. The build specifically utilizes the MUMPS linear system solver.
The PIPS-IPM++ Docker image provides a specialized environment for annotating, splitting, and solving large-scale linear programming instances. The container offers users two primary interfaces: a command-line interface (CLI) for direct automation and a stateful interactive shell for step-by-step session management.
To use the PIPS-IPM++ Docker container effectively, you must mount a local directory to the container so that the application can access your problem files and save results.
Basic Syntax:
Without a command, the container defaults to starting the Interactive Shell. The available commands are interactive and cli.
The CLI and interactive shell of the image both provide three primary features to manage the PIPS-IPM++ pipeline:
Three different input types are accepted by the container: MPS (and MPS.GZ), GDX and a file stem. In order for PIPS-IPM++ to read the instance, it must have a block structure annotation. The annotation can be performed automatically or, in the case of an MPS file, given by supplying a DEC file. An annotated GDX file can be solved directly using PIPS-IPM++. All annotated GDX files can be split into separate GDX files per block. When solving the split problem, the solve command must be supplied the file stem.
The interactive shell provides a stateful environment that remembers your loaded files and block counts across commands.
Launch:
| Action | Interactive Shell Commands |
|---|---|
| Annotate a GDX with 10 blocks | read prob.gdx → blocks 10 → annotate |
| Split a GDX with 10 blocks | read prob.gdx → blocks 10 → split |
| Solve a GDX with 10 blocks | read prob.gdx → blocks 10 → solve |
| Solve from a filestem (10 blocks) | read prob_stem → solve --blocks 10 |
| Annotate an MPS with 5 blocks | read model.mps → annotate --blocks 5 (Result: model_5b.gdx) |
| Annotate using a DEC file | read model.mps model.dec → annotate (Result: annotated GDX file) |
An instance is provided as an MPS file small.mps
If a DEC file is available
The CLI is designed for non-interactive automation and direct commands.
| Action | CLI Command |
|---|---|
| Annotate a GDX with 10 blocks | cli annotate prob.gdx --blocks 10 |
| Split a GDX with 10 blocks | cli split prob_10b.gdx --blocks 10 |
| Solve a GDX with 10 blocks | cli solve prob_10b.gdx --blocks 10 |
| Solve from a filestem (10 blocks) | cli solve prob_stem --blocks 10 |
| Annotate an MPS with 5 blocks | cli annotate model.mps --blocks 5 |
| Annotate an MPS using a DEC file | cli annotate model.mps --dec-file model.dec |
The solve command can automate different segments of the PIPS-IPM++ pipeline based on the input provided.
| Input Type | Command Variant | Action Taken |
|---|---|---|
| Filestem | cli solve stem --blocks 10 | Directly solves pre-split GDX files (stem0.gdx...stem9.gdx). |
| GDX | cli solve prob.gdx --blocks 10 | Attempts to solve the unsplit GDX file. |
| GDX + Split | cli solve prob.gdx --blocks 10 --split | Forces a split step on the GDX before solving. |
| GDX + Full | cli solve prob.gdx --blocks 10 --annotate --split | Re-annotates, splits, and then solves. |
| MPS | cli solve model.mps --blocks 10 | Automatically performs annotate → split → solve. |
| MPS + DEC | cli solve model.mps --dec-file model.dec | Annotates via DEC file, then splits and solves. |
Note: All commands above support the --mpi <n> flag for parallel execution and --hsl-lib <path> for HSL solvers.
To use HSL solvers (e.g., MA57), you must provide a library named libcoinhsl.so. Mount the library and use the --hsl-lib flag:
Required PIPSIPMpp.opt settings for MA57:
Advanced users can bypass the Python controller and call the PIPS-IPM++ binaries directly:
gmschk
gmspips
Access pipstools directly for advanced annotation and model analysis: docker run pips-ipmpp pipstools --help