Optimization Programming Language
Algebraic modeling language
Optimization Programming Language (OPL) is an algebraic modeling language for mathematical optimization models, which makes the coding easier and shorter than with a general-purpose programming language.
It is part of the CPLEX software package and therefore tailored for the IBM ILOG CPLEX and IBM ILOG CPLEX CP Optimizers. The original author of OPL is Pascal Van Hentenryck.
01Characteristics
OPL allows users to define models using high-level mathematical notation. Its primary features include:
- Separation of Model and Data: OPL promotes a clean architecture where the optimization logic (stored in .mod files) is kept separate from the instance data (stored in .dat files).
- Hybrid Modeling: It is one of the few AMLs that natively supports both Mathematical Programming (MP) and Constraint Programming (CP) within the same environment.
- Scheduling Support: OPL includes specialized primitives for scheduling problems, such as interval variables, sequence variables, and cumulative functions.
- Scripting: It includes IBM ILOG Script, a JavaScript-based language used for data pre-processing, controlling the solving flow (e.g., solving a sequence of models), and post-processing results.
02Example
The following is a simple OPL model (.mod) for a Knapsack problem:
// Knapsack capacity, provided externally in the data file int capacity = ...; // Item index set range Items = 1..5; // Item parameters: one value and one weight per item in Items int value[Items] = [6, 7, 3, 9, 6]; int weight[Items] = [11, 7, 9, 13, 12]; // Decision variable: // x[i] = 1 if item i is selected // x[i] = 0 otherwise dvar boolean x[Items]; // obj: maximize total value of selected items maximize obj: sum(i in Items) value[i] * x[i]; subject to { // total weight of selected items cannot exceed capacity sum(i in Items) weight[i] * x[i] <= capacity; }The associated data (.dat) file is
capacity = 1003Integration
Sources and credits
This article is adapted from the Wikipedia article “Optimization Programming Language”, written by its contributors and licensed under CC BY-SA 4.0. Fathomly has changed the layout, removed citation markers, navigation and maintenance notices, and adjusted punctuation. This adapted version is shared under the same license. For references, see the original article.
Fathomly is not affiliated with or endorsed by the Wikimedia Foundation. Spotted a problem? Tell us.