In this workshop, we would look at:
existing energy system optimisation frameworks in Julia (see tentative list below)
discuss best practices of implementation of energy system models in JuMP (for instance, how to write constraints while maintaining numerical performance)
discuss ways to cooperate development-wise between projects, including:
- common high-level specifications
- preferred Julia packages
- use of frictionless data packaging and also agreement on schemas
- perhaps the use of common or at least similar internal data structures
- some kind of component architecture, possibly heading towards a software framework that projects can draw upon as they wish
- preferred toolchain elements and software engineering practices
- preferred design and documentation practices, including the use of UML
- some agreement on coding and perhaps even naming conventions
thoughts on establishing a common codebase at some level, possibly well below that of a modeling framework
Terminology: the phrase "modeling framework" seems to be what people have settled on to describe the codebases underpinning projects such as OSeMOSYS or Calliope. Other terms including "modeling environment" or simply "model". The concept of "framework" as used in this context differs from that of a "software framework" in the computer science sense.
Existing open models
- PowerModels.jl — Julia/JuMP Package for Power Network Optimization; can do multi-period optimisation
- PSA.jl — a partial implementation of PyPSA in Julia (currently being rewritten, may also be renamed)
- Mimi — Integrated Assessment Modeling Framework
- DICE2016inJulia.jl — a reimplementation of the famous DICE model
- (DPSA.jl — dynamic power grid analysis library (also the subject of a talk at Zürich by Tim Kittel). This is not intended as a power system/grid optimization tool but will be used for dynamical stability analysis (e.g. frequency stability on second and subsecond scale).)
- CalliopeJuMP.jl — a partial implementation of Calliope in Julia. Intention to completely rewrite in near future.
- Joulia.jl partial implementation of former elmod (from TU Berlin) in Julia (currently in rewriting process) elmod is a dispatch model with DC-low flow
- JuMP package — listing at the Julia Observer
- JuliaOpt — a collection of optimization-related packages
Small warning: It’s probably best to install from the binaries; debian/ubuntu packages are out of date and compiling from source didn’t work for Tom Brown on Ubuntu 16.04 LTS.
Dunning, Iain, Joey Huchette, and Miles Lubin (2017). “JuMP: a modeling language for mathematical optimization”. SIAM Review. 59 (2): 295–320. ISSN 0036-1445. doi:10.1137/15M1020575.