| Optimization Programming Language | |
|---|---|
| Paradigm | Algebraic modeling, Constraint programming, Constraint logic |
| Designed by | Pascal Van Hentenryck |
| Developer | IBM (originally ILOG) |
| First appeared | 1998 |
| Stable release | 22.1.1 (within CPLEX Studio)
/ December 2022 |
| Typing discipline | Strong, static |
| OS | Windows, Linux, macOS, AIX |
| License | Proprietary |
| Website | www |
| Major implementations | |
| IBM ILOG CPLEX Optimization Studio | |
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.
OPL allows users to define models using high-level mathematical notation. Its primary features include:
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 = 10
While OPL is typically used within the CPLEX Studio IDE, it can also be deployed in production environments. IBM provides APIs (such as the Concert Technology) that allow OPL models to be called from Java, C++, .NET, and Python.
{{Cite Q}}: Missing first/last names in Wikidata for Kevin Ruland (help)