Plasmo.jl - Platform for Scalable Modeling and Optimization
Plasmo.jl is a graph-based optimization framework written in Julia that builds upon the JuMP.jl modeling language to offer a modular style to construct and solve optimization problems. The package implements what is called an OptiGraph
abstraction to create graph-structured optimization models and facilitate graph-based processing functions. An OptiGraph
captures the underlying graph topology of an optimization problem using OptiNodes
(which represent stand-alone self-contained optimization models) that are coupled by means of OptiEdges
(which represent coupling constraints). The resulting topology can be used for tasks such as visualization, graph partitioning, and interfacing (and developing) decomposition-based solvers.
Installation
Plasmo.jl works for Julia versions 1.6 and later. From Julia, Plasmo.jl can be installed using the Pkg
module:
import Pkg
Pkg.add("Plasmo")
or alternatively from the Julia package manager by performing the following:
pkg> add Plasmo
Contents
Future Development
There are currently a few major development avenues for Plasmo.jl. Here is a list of some of the major features we intend to add for future releases:
- Distributed modeling capabilities
- Custom optigraph partitioning algorithms
- Decomposition-based solver development
- GraphOptInterface.jl development
- Interface with InfiniteOpt.jl
We are also looking for help from new contributors. If you would like to contribute to Plasmo.jl, please create a new issue or pull request on the GitHub page
Index
Plasmo.GraphProjection
Plasmo.OptiEdge
Plasmo.OptiGraph
Plasmo.OptiNode
Plasmo.Partition
Base.getindex
Graphs.all_neighbors
Graphs.induced_subgraph
Graphs.neighborhood
JuMP.add_constraint
JuMP.add_nonlinear_operator
JuMP.add_variable
JuMP.all_constraints
JuMP.all_variables
JuMP.backend
JuMP.constraint_ref_with_index
JuMP.dual_objective_value
JuMP.dual_status
JuMP.index
JuMP.list_of_constraint_types
JuMP.name
JuMP.num_constraints
JuMP.num_variables
JuMP.object_dictionary
JuMP.objective_bound
JuMP.objective_function
JuMP.objective_function_type
JuMP.objective_sense
JuMP.objective_value
JuMP.optimize!
JuMP.primal_status
JuMP.relative_gap
JuMP.set_name
JuMP.set_objective
JuMP.set_objective_coefficient
JuMP.set_objective_function
JuMP.set_objective_sense
JuMP.set_optimizer
JuMP.set_start_value
JuMP.start_value
JuMP.termination_status
JuMP.value
Plasmo.add_edge
Plasmo.add_node
Plasmo.add_subgraph
Plasmo.aggregate
Plasmo.aggregate_to_depth
Plasmo.aggregate_to_depth!
Plasmo.all_edges
Plasmo.all_elements
Plasmo.all_link_constraints
Plasmo.all_nodes
Plasmo.all_subgraphs
Plasmo.apply_partition!
Plasmo.assemble_optigraph
Plasmo.bipartite_projection
Plasmo.clique_projection
Plasmo.collect_nodes
Plasmo.edge_clique_projection
Plasmo.edge_hyper_projection
Plasmo.expand
Plasmo.get_edge
Plasmo.get_edge_by_index
Plasmo.get_node
Plasmo.graph_backend
Plasmo.graph_index
Plasmo.has_edge
Plasmo.hyper_projection
Plasmo.identify_edges
Plasmo.identify_nodes
Plasmo.incident_edges
Plasmo.induced_edges
Plasmo.local_constraints
Plasmo.local_edges
Plasmo.local_elements
Plasmo.local_link_constraints
Plasmo.local_nodes
Plasmo.local_subgraphs
Plasmo.num_edges
Plasmo.num_link_constraints
Plasmo.num_local_constraints
Plasmo.num_local_edges
Plasmo.num_local_link_constraints
Plasmo.num_local_nodes
Plasmo.num_local_subgraphs
Plasmo.num_local_variables
Plasmo.num_nodes
Plasmo.num_subgraphs
Plasmo.set_jump_model
Plasmo.set_to_node_objectives
Plasmo.source_graph
Plasmo.@linkconstraint
Plasmo.@nodevariables
Plasmo.@optinode
Citing Plasmo.jl
If you find Plasmo.jl useful for your work, we ask that you cite the manuscript:
@article{Jalving2022,
author = {Jalving, Jordan and Shin, Sungho and Zavala, Victor M.},
title = {A graph-based modeling abstraction for optimization: concepts and implementation in {Plasmo.jl}},
journal = {Mathematical Programming Computation},
volume = {14},
pages = {699--747},
year = {2022},
doi = {10.1007/s12532-022-00223-3}
}
You can access an earlier pre-print of this article.
There is also an earlier manuscript where we presented the initial ideas behind Plasmo.jl which you can find here:
@article{JalvingCaoZavala2019,
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 = {10.1016/j.compchemeng.2019.03.009}
}
A pre-print of this paper can also be found here