Main News OPL MP CP JS Project Documentation Links FAQs

Optimization Programming Language

OPL is a modeling language for combinatorial optimization problems created by Pascal Van Hentenryck. It combines mathematical programming and constraint programming into a single language.

Linear programming, integer programming, and combinatorial optimization problems are useful for many practical applications including planning, scheduling, sequencing, resource allocation, vehicle routing, design, and configuration. However, many of the problems are considered NP-complete (essentially, incredibly difficult) and no general solution can be applied to solve all of them. Each problem requires considerable work to both model the problem accurately and create an algorithm to solve it.

OPL allows a developer to create model representations of linear programming, integer programming, and constraint programming problems. Models can also include high-level support for scheduling and resource applications. Variations of models for the same problem can be created with data that can be defined seperately and plugged into the problem.

OPL can then be used to search for possible solutions to problems or for the best (optimal) solution based on some criteria.

OPL Components

OPL consists of a number of modules:
  • OPL Engine - Standalone engine that processes OPL problems by delegating to a few main components
  • Modeling Language Parser - Parser implementation of the OPL language used to load source files for processing
  • MP Solver - A mathematical programming engine that is based on the simplex algorithm for solving LP (Linear Programming) and IP (Integer Programming) optimization problems
  • CSP Solver - A constraint solver with roots in the AI (Artificial Intelligence) and OR (Operations Research) communities used to solve non-linear optimization problems
  • Scheduling Solver - A specialized extension of the CSP solver that is optimized to handle scheduling and resource allocation problems
The following diagram shows the relationships between these components.

A stable, fully-functional version of the CSP Solver component has been released. There is also a version of the Scheduling Solver available for download. The MP Solver component is under development, and the remaining items are still on the drawing board.