The last days, we had our semi-annual meeting to discuss the state of open energy system modelling. This time in the flavour of a user meeting with a special 10-year celebration event. I am so happy that I can tell that the concept worked out: We had almost 40 guests, some of them were on their first oemof meeting. Still, they dynamically formed sub-groups for parallel sessions, had fruitful discussions, shared experiences, and eventually started implementing something together. To kick this off, we asked every participant to give a short pitch at the first day. This was quite a ride, but due to coffee breaks and a poster session in the DLR entry hall, it was possible to identify many persons you wanted to talk to later.
Continue reading “Report from the anniversary meeting”Interactive solph graph using Dash
Modelling energy systems as graphs, as we do it for oemof, is a rather clear approach. It can help understanding energy flows and the overall network structure. However, in highly complex systems keeping of all the components track becomes increasingly difficult. To tackle this, Tobias Hörter and Andreas Wunsch from Fraunhofer IOSB have created an interactive plotting tool.
The example can be found as a Snippet at the Faunhofer GitLab. The code enables visualization of the system and representation of the component’s parameters upon the model-creation. They use a combination of NetworkX and Plotly DASH Cytoscape for this purpose. The parameters of the model components are first extracted and a NetworkX model is created from the solph energy system afterwards. This network is then used to make cytoscape elements, which are necessary to enable DASH-Plotly to visualize the network.
When running the Dash-App, the user can rearrange the system via drag and drop. Additionally, when clicking on the system components, the parameters of the respective component are displayed. Do you like this approach? How do you draw the energy system graph if you need it?
New solph release: v0.5.4
We released two new versions of solph. One is a stable maintenance release (solph 0.5.4 at PyPI, solph v0.5.4 at GitHub), the other is a packaged preview for the next release (solph 0.6.0a1 at PyPI). In the actual release features the following changes:
- Consistency
- Allow sinks/sources to have multiple inputs/outputs
- Allow lower limit for generic_integral_limit
- Fixes
- Display inline math correctly and hint towards the usage of the inbuilt slope and offset calculation methods (
OffsetConverter
) - Adapt to new Pandas API and fix warnings
- Formulate
full_load_time
docstring specific for energy
- Display inline math correctly and hint towards the usage of the inbuilt slope and offset calculation methods (
- Improvements “under the hood”
- Introduce variable for storage losses
- Replace _Sequence by _FakeSequence
We decided to have an alpha version packaged as well, which mostly changes the way storage_costs
are considered. Before, we took into account every time step, which eventually leads to double weighting of the initial/last time step if the storage is balanced (i.e. first and last time step are the same). As the previous implementation wasn’t really broken in all cases, the new way is not strictly a fix. And as it will lead to different results compared to the previous implementation, the change shouldn’t be part of the v0.5 release. So, if you want to consider storage costs, this release is just for you.
Solph v0.5.3 has landed
Today, we released a new version of solph (solph 0.5.3 at PyPI, solph v0.5.3 at GitHub). It adds one important feature, the OffsetConverter
now allows multiple inputs and multiple outputs. Still, it is mostly a maintenance release. As discussed in my thoughts on software maintenance, we are currently changing stuff “under the hood” to prepare for future changes. The decision to have a release was because we wanted to make sure that new installations do not have problems due to incompatible dependencies. As the latest versions of Pyomo and numpy are currently incompatible, we skipped a beta release. So in case you experience issues, please speak up.
Details on the new OffsetConverter
can be found in the documentation. The component makes it possible to create a Converter
with efficiencies depending on the part load condition. With the new formulation, the Flow
with the NonConvex
property is taken as reference, all other Flow
s are constrained with respect to this one. For consistence with “normal” Converter
s, the proportionality factor is called conversion_factor
, while the offset to model part-load efficiencies is expressed as a normed_offset
to facilitate investment optimisation.
Thoughts on Software Maintenance
Many projects focus on adding features, often neglecting measures to maintain software quality. One reason for this is financing, may it because new features can sell new licenses or because project funding is connected with them. On the long run, of course, easy-to-maintain code also facilitates adding new features.
Currently, we are rewriting stuff “under the hood” of solph to prepare for future additions, including time-series aggregation. Also, experimental features are removed if they do not mature. (This includes the approach for cellular energy systems, we recommend to use named tuples as labels instead.) Every now and then we try to change our code to eliminate deprecation warnings in time. The release of NumPy 2.0 shows that maintaining compatibility is not always easy. Although it is actually an evolutionary milestone, Pyomo first seemed to be hit between the eyes. In particular, it does not check compatibility of installed dependencies. Never version state to be compatible to numpy<2.0 only, but at least sometimes incompatible versions are installed by pip.
Thus, software relying on Pyomo – such as solph – currently looks broken when latest versions of NumPy are installed. The only option is to downgrade NumPy and wait for Pyomo to update. Not only because this is not the first time Pyomo effectively breaks solph without a warning, we are considering other back-ends. Alternatives also promise faster processing. But this is a big maintenance job, and hard to fund using the current funding scheme of research projects.
Save the date: 10th Anniversary Meeting in Oldenburg
At the end of this year, the open energy modelling framework will turn 10. The anniversary meeting will be held in Oldenburg from the 20th to the 22nd of November, 2024. The style will deviate from the standard developer meetings we typically have by the end of the year; it will be more like a user meeting.
To celebrate this special occasion, there will be three different locations, we will be visiting. Wednesday, we will be in the big seminar room of the DLR Institute of Networked Energy Systems, next to Campus Wechloy of Oldenburg University. This is the right place to give presentations for a bigger audience. For Thursday, we will move to the DLR site in down-town Oldenburg. We have several rooms reserved there to work in breakout groups. On Friday, we celebrate the developer part in the Mainframe Oldenburg, located next to Oldenburg central station. This place offers the perfect atmosphere for hands-on coding experiences.
More details will be collected at the corresponding Page GitHub:oemof/wiki/Meeting-2024.11:-10-years-of-oemof. We also have a preliminary agenda at the page already. Registration will open soon. To get to know each other, we agreed that everybody should be part of a contribution. This includes a wide range of possibilities:
- Pitch (one static slide, one minute)
- Presentation (five minutes up to 15 minutes)
- Poster (A3 to A0), please do also give a pitch
- Co-authorship (be named in a contribution of someone else)
To register, please write an email to meetings@oemof.org before 1st of November. Please tell your name, your institution, what kind of contribution you plan, the title of your planned contribution, and your nationality. (The latter is needed due to DLR regulations.) If you do not tell us something different, we will assume that listing your name, institute and contribution on a publicly available list will be okay for you. (Registration deadline has passed.)
2024 user meeting in Nordhausen: Thanks for joining!
The last user meeting was the biggest we ever had. We had very productive and inspiring discussions about using oemof (especially solph). Because of the size we gathered opinions in subgroups instead of making decisions about future developments in the plenary. Another reason for this also led to some other changes: Typically, we start with user presentations showing use-cases as well as open questions. This, however was scheduled as a point of the agenda of the parallel RET.Con. So, instead of gradually going to the core, we started with developer topics.
Continue reading “2024 user meeting in Nordhausen: Thanks for joining!”solph v0.5.2: Next Network
Today, we had two new releases, oemof.network 0.5.0 (GitHub, PyPI) and oemof.solph 0.5.2 (GitHub, PyPI). The release of the first includes a lot of refactoring and cleaning. The code should now be a lot easier to understand and to maintain. We now use explicit keyword arguments also for network, so typos will be easy to find. Secondly, there is a (still experimental) API to get Nodes by label. At last, we now officially support an API to add Flows between existing Nodes. Using this API in solph, the Nodes might e.g. be Buses:
Continue reading “solph v0.5.2: Next Network”oemof user meeting 2024.02
From 7th to 9th of Februar 2024, we will have our annual user meeting, this time held in Nordhausen. It is set in the framework of the to the 7th Regenerative Energy Technology Conference (RET.Con) and the 20th anniversary celebrations of the course renewable energy technology (“Regenerative Energietechnik”) at the Nordhausen University of Applied Sciences.
With the program of the RET.Con being released, we now also created a (tentative) agenda for the oemof meeting 2024.02. In contrast to previous years, we will have the topics targeting more experienced users (like planning the development roadmap) at the first day. This allows to have topics also targeting beginners (e.g. the user presentations) open for visitors to the RET.Con.
If you plan to come, please register writing an email to usermeeting@oemof.org, telling your name and (if applicable) your institution. We still have open slot for user presentations and tutorials. So if you want to present what you are doing using oemof or even share some hands-on experience, we will try to fit your contribution in. Note that it is okay to give a presentation in German. If possible, we prefer to have at least slides or spoken word in English. In the past, user presentations were also used for problem statements to find help on a particular topic and to have “reversed tutorials” asking for guidance. Both are options also for this user meeting.
As always, there are no fees for the oemof user meeting. You have to organise the trip (travel and accommodation) by yourself, meals are self-paid (and optional, you are free to organise something separate). So, don’t be confused by the RET.Con conference fee, this one does not apply for us.
2023-11 dev days: Retrospective
In the last days, we intensively discussed the next steps in the development of oemof. It was very intense and exciting to see other enthusiastic developers in person, drafting solutions at the white board and reviewing code in the presence of the persons who wrote it. We discussed long-term plans but also very particular problems, e.g. how to rewrite up-times in solph so that they are meaningful in models with time-steps of varying length. The most noticeable topics were mostly considering solph:
Continue reading “2023-11 dev days: Retrospective”