Introduction

Welcome to the documentation of the TimeStruct package!

What is TimeStruct?

TimeStruct is a Julia package that supports the efficient development of optimization models with multi-horizon time modelling. The package is designed to be used in combination with the JuMP package for optimization modeling in Julia.

The main concept is a TimeStructure which is an abstract type that enables iteration over a sequence of time periods. These time periods can serve as indices for optimization variables and can also facilitate the lookup of associated data values from time-varying profiles. By having a well-defined interface that is supported by all time structures, optimization models that are valid for arbitrary time structures can be written. The following example shows how a small optimization model can be set up in a function that accepts a general time structure and cost profile.

    using JuMP, TimeStruct

    function(periods::TimeStructure, cost::TimeProfile)
        m = Model()
        @variable(m, x[periods] >= 0)
        @constraint(m, sum(x[t] for t in periods) >= 10)
        @objective(m, Min, sum(cost[t] * x[t] for t in periods))
    end

How to get started

The package is registered in the general registry and can be installed in standard fashion

] add TimeStruct

This documentation consists of a manual explaining concepts and giving examples as well as a complete API reference.

Cite

If you find TimeStruct useful in your work, we kindly request that you cite the following:

@misc{TimeStruct.jl,
  author       = {Flatberg, Truls and Hellemo, Lars},
  title        = {{TimeStruct.jl: Flexible time structures in optimization modelling}},
  month        = Jan,
  year         = 2024,
  doi          = {10.5281/zenodo.10511399},
  publisher    = {Zenodo},
  url          = {https://zenodo.org/records/10511399}
}

Acknowledgements

This material is based upon work supported by the Research Council of Norway through the projects ZeroKyst (328721), MaritimeNH3 (328679) and CleanExport (308811).