© 2020 Strange Loop
"Algebraic modeling languages" (AMLs) are domain-specific languages (DSLs) for modeling optimization and constraint-satisfaction problems. They enable a user to translate the mathematical statement of their problem to computer code in a natural way. There have been multiple standalone commercial AMLs that are very efficient (in both the time to turn the model into solver input and in their modeling expressiveness), but they suffer from the difficulty of embedding them in a larger application. Multiple open-source AMLs, that are embedded in languages like Python and MATLAB, can be combined with other code but are often slow and can be inelegant.
In this talk we will discuss the properties and functionalities desired in an AML and how JuMP, a new AML implemented as a package for the Julia language, achieves them. We begin be demonstrating examples of the optimization and prescriptive analytics problems that appear in a wide variety of domains, and show how they can be expressed with JuMP. We describe how the "metaprogramming" functionality of Julia enables users to create a high-performance DSL like JuMP, and the benefits over alternative approaches such as operator overloading. We provide details about how JuMP uses metaprogramming not only to rewrite user code but to generate entirely new functions to calculate useful things like the functions gradients in a way that is transparent to the user. Finally we demonstrate how Julia, JuMP, Jupyter/IJulia notebooks, and Julia's packages for visualization and interactivity can be composed to help us to explore the results of an optimization problem in a way not previously possible, and to implement novel tools like a "travelling-salesperson-problem-solver"-as-a-service.
Iain Dunning is a PhD candidate in the Massachusetts Institute of Technology's Operations Research Center. His research focuses on the mathematics of how to make optimal data-driven decisions across time in the presence of uncertainty. He is a co-founder of the JuliaOpt organization, which develops and hosts a group of optimization-related packages for the Julia programming language. He also contributes to Julia itself, and is the maintainer of the Julia package ecosystem testing infrastructure.