Skip to content
A mixed integer linear optimisation model for energy infrastructure networks
Branch: master
Clone or download
Latest commit b96937e Oct 11, 2017


rivus is a mixed integer linear programming optimisation model for capacity planning for energy infrastructure networks. Its name, latin for stream or canal, stems from its origin as a companion model for urbs, an optimisation model for urban energy systems. This model shares the same structure as urbs, so please refer to its introduction/tutorial for now or dive directly into the code.


  • rivus is a mixed integer linear programming model for multi-commodity energy infrastructure networks systems with a focus on high spatial resolution.
  • It finds the minimum cost energy infrastructure networks to satisfy a given energy distribution for possibly multiple commodities (e.g. electricity, heating, cooling, ...).
  • Time is represented by a (small) set of weighted time steps that represent peak or typical loads
  • Spatial data can be provided in form of shapefiles, while technical parameters can be edited in a spreadsheet.
  • The model itself is written using Pyomo and includes reporting and plotting functionality.


Electricity network capacities Heat network capacities Gas network capacities



  1. Anaconda (Python 3.6). Choose the 64-bit installer if possible.

  2. Pyomo and GLPK

    1. Launch a new command prompt (Win+R, type "cmd", Enter)
    2. Type conda install -c conda-forge pyomo glpk, hit Enter.
  3. Add shapefile support:

    conda install -c conda-forge pyshp shapely basemap
  4. Get geopandas and its dependencies:

    conda install -c conda-forge pyproj fiona geopy geopandas
  5. For interactive, 3-D plots with plotly:

    conda install -c conda-forge plotly
  6. For Postgres + PostGIS integration:

    conda install -c conda-forge psycopg2 sqlalchemy
  7. For graph-theoretical analysis:

    conda install -c conda-forge networkx

Documentation / Tutorials


Copyright (C) 2015-2017 Johannes Dorfner

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see

You can’t perform that action at this time.