A Platform for Scalable Modeling and Optimization
Author zavalab
56 Stars
Updated Last
2 Years Ago
Started In
July 2017


Build Status codecov coveralls


Plasmo.jl (Platform for Scalable Modeling and Optimization) is a graph-based algebraic modeling framework. It builds upon JuMP and adopts a modular style to model optimization problems in a hierarchical fashion. The defining notion of the package is that it uses graph-based concepts to both construct and partition optimization problems which provides a natural interface to implement distributed optimization algorithms.


The core object in Plasmo.jl is the OptiGraph wherein a user can add OptiNodes which represent individual optimization problems. OptiNodes can be linked to each-other using linking constraints, which induces the underlying graph structure. An OptiGraph can also be embedded in another OptiGraph to induce hierarchical structures. These hierarchical structures provide a natural framework to harness distributed optimization solvers such as PIPS-NLP.


Documentation is available through GitHub Pages. Additional examples can be found in the examples folder.


using Pkg

Simple Example

using Plasmo
using Ipopt

graph = OptiGraph()

#Add nodes to a ModelGraph

#Add variables, constraints, and objective functions to nodes
@variable(n1,0 <= x <= 2)
@variable(n1,0 <= y <= 3)
@constraint(n1,x+y <= 4)

@NLnodeconstraint(n2,exp(x) >= 2)

#Add a linkconstraint to couple modelnodes
@linkconstraint(graph,n1[:x] == n2[:x])

#Optimize with Ipopt
ipopt = Ipopt.Optimizer

#Print solution values
println("n1[:x]= ",value(n1,n1[:x]))
println("n2[:x]= ",value(n2,n2[:x]))


This code is based on work supported by the following funding agencies:

  • U.S. Department of Energy (DOE), Office of Science, under Contract No. DE-AC02-06CH11357
  • DOE Office of Electricity Delivery and Energy Reliability’s Advanced Grid Research and Development program at Argonne National Laboratory
  • National Science Foundation under award NSF-EECS-1609183 and under award CBET-1748516

The primary developer is Jordan Jalving (@jalving) with support from the following contributors.

  • Victor Zavala (University of Wisconsin-Madison)
  • Yankai Cao (University of British Columbia)
  • Kibaek Kim (Argonne National Laboratory)
  • Sungho Shin (University of Wisconsin-Madison)

Citing Plasmo.jl

If you find Plasmo.jl useful for your work, you may cite the current pre-print:

title = {A Graph-Based Modeling Abstraction for Optimization: Concepts and Implementation in Plasmo.jl},
author = {Jordan Jalving and Sungho Shin and Victor M. Zavala},
year = {2020},
eprint = {2006.05378},
archivePrefix = {arXiv},
primaryClass = {math.OC}

There is also an earlier manuscript where we presented the initial ideas behind Plasmo.jl which you can find here:

author = {Jalving, Jordan and Cao, Yankai and Zavala, Victor M},
journal = {Computers {\&} Chemical Engineering},
pages = {134--154},
title = {Graph-based modeling and simulation of complex systems},
volume = {125},
year = {2019},
doi = {}

A pre-print of this paper can also be found here