Since there was quite some interest in PIPS-IPM++ and how to start using it in the different energy system models, I would like to point to some resources we finally were able to publish as open source. Unfortunately most of this work is focused on the modelling language GAMS. I still hope you can get at least some ideas and inspirations out of it. Currently there is also some work going on by the PyPSA people in creating an interface towards linopy, and some work by the FZ Jülich in creating an interface to Pyomo, so hopefully in the future there will be more modelling languages involved as well. If you currently work with a Julia based energy system model and are also looking into using PIPS-IPM++ I would like to get in contact as well, to see if that would also be a viable option in the future. Anyways, here are the tools:
First of all there is the solver PIPS-IPM++ itself. For the moment the latest version is hosted at https://github.com/NCKempke/PIPS-IPMpp. Currently it offers the possibility to use block-structured optimization problems inf the form of text files via the executable pipsipmPyomo or alternatively for the GAMS modelers among us block-structured gdx files. The installation itself can be a bit challenging, since you will need to have access to a MPI installation and properly link against some additional libraries such as PARDISO or MA57. So be ready to bribe your favorite IT person with some chocolate, coffee or other trifles.
This is a small demonstration model on how to model a highly simplified energy system via GAMS and write out properly annotated and structured gdx files for PIPS-IPM++. You can find it along a short README with additional information at https://gitlab.com/beam-me/simple-pips. There are several ways to build the block-structured optimization problem. The most straightforward approach is the monolithic generation, this means writing out one large gdx file and splitting it afterwards. For more advanced models there is also the possibility to write out individual blocks or all blocks in a parallel and distributed fashion – but for most purposes the monolithic approach works just fine. This repository also includes the tool checkanno.gms which is able to report whether the annotation is correct and some additional statistics on the block structure (e.g. counting linking variables and equations).
Especially when getting started in trying to properly annotate the model it can be a bit challenging to understand the general structure of the model and how variables and equations are linked to each other. For this purpose we developed a plotting library for annotated gdx files which is available at https://gitlab.com/beam-me/annotation-plotting. Those of you following the output of the BEAM-ME project in various conferences may already know the plots. The repository also includes a sample gdx generated via the SIMPLE-PIPS model to get started right away.
And just for completeness I would also like to mention the SIMPLE-methods repository at https://gitlab.com/beam-me/simple-methods. This is also a small demonstration model which focuses not on PIPS-IPM but on other decomposition approaches such as Benders decomposition and Lagrangian relaxation in various flavors including an MPI-based Benders decomposition which could also be quite suitable for application to high performance computing. This is work from the earlier stages of the project when we were still exploring different approaches and not sufficiently tested. Still it can give modelers some new ideas for decomposition approaches to look into.
Let me know if you have any problem or just general feedback on your experience with the tools – I’m always looking forward to hearing from you!
German Aerospace Center - Deutsches Zentrum für Luft- und Raumfahrt e.V. (DLR)