Releases: oemof/oemof-solph
v0.6.4: Saturating Storage
API changes
Model.solve()now directly returns the optimisationResults. (For some time, they will be backwards compatible with the old meta_results.)
New features
- Mipgap is calculated in the meta results
- The
GenericStoragenow allows reducing the inflow based on the storage_level. The feature does not work with all investments, yet. See documentation for details.
Documentation
- Fix Furo error when displaying the table of contents of the result handling tutorial.
- Use
solph.Resultsin the Results section of the documentation, in examples (partally), and tutorials (all of them), where previouslysolph.processing.resultswas used. (Documentation of the processing module is still available as part of the API reference.)
Bug fixes
- Remove pydot usage from tutorial scripts. As pydot is not named as a dependency and the scripts do not actually use the generated dot-file, the only effect was that the scripts often do not work.
Contributors
- Jonas Freißmann
- Lena Rosin
- Patrik Schönfeldt
- Uwe Krien
Acknowledgements
Thanks to the participants of the seminar "Future Power Supply" at Oldenburg University for feedback about the tutorials.
Automatic Git changelog
- Fix Furo error when displaying ToC of result tutorial. by @jfreissmann in #1264
- Update Python version recommendation in README by @p-snft in #1267
- Revision/replace coveralls by @p-snft in #1266
- Add coverage badge to README by @p-snft in #1268
- Leroum feature add mipgap to meta results by @p-snft in #1271
- Feature/return results by @p-snft in #1274
- Fix GenericStorage investment documentation by @p-snft in #1282
- Maximum charging capacity depending on the storage level by @uvchik in #1273
- Replace processing.results by Results by @p-snft in #1275
Full Changelog: v0.6.3...v0.6.4
v0.6.3: Get Results
API changes
- You can now access results using Results.get(key, default).
This is planned to replace Results.to_df(key).
New features
- Introduced input validation for nominal_capacity.
- Argument infer_last_interval of EnergySystem now works even if freq of a
DatetimeIndex is not explicitly set. This is particularly the case if
equally sampled data is read in from a file.
Documentation
- A tutorial focusing on time indexes and aggregation is added.
Contributors
- Uwe Krien
- Patrik Schönfeldt
- Maximilian Hillen
- Eva Schischke
Automatic Git changelog
- Revision/remove external services by @p-snft in #1253
- Try to let workflows succeed if coveralls is unavailable by @p-snft in #1254
- Revision/improve results api by @p-snft in #1259
- Feature/infer freq by @p-snft in #1257
- Introduce input validation for nominal_capacity by @p-snft in #1256
- Set EnergySystem.timeindex at solph level by @p-snft in #1258
- Examples timeseries retcon paper by @uvchik in #1226
Full Changelog: v0.6.2...v0.6.3
v0.6.2: Robust Results
API changes
- The class
solph.Resultsis no longer marked as experimental. - The
Flowparameterbidirectionalnow raises aFutureWarning, as it is to be removed in a following version. (You can still set a negative minimum, which is now explicitly marked experimental - but has never been officially stable.) - The
Flowparametersminandmaxhave been renamed tominimumandmaximum, respectively. The old parameters are still available but raise aFutureWarning. Please use the new parameter names in future code.
New features
- Classes
Flow,NonConvex, andInvestmentnow usecustom_propertiesin the way thatNodeclasses (e.g.Bus, orConverter) do.
Documentation
- The
Flowparametersminimumandmaximumare now listed with their default values of 0 and 1, respectively, in theFlowAPI documentation.
Bug fixes
- Fixed that processing.results failed when using Pandas 3 with TSAM.
Other changes
- Support Python 3.14 instead of Python 3.10.
Contributors
- Patrik Schönfeldt
- Lennart Schürmann
- Stephan Günther
- Antonella Giannitelli
- Maximilian Hillen
Automatic Git changelog
- Harmonise usage of "custom_..." keywords by @p-snft in #1231
- Adapt to current APIs of dependencis by @p-snft in #1232
- Clarify the default values and behaviour of
minandmaxparameters in theflowclass by @lensum in #1233 - Fix/multi place variables by @p-snft in #1221
- Fix/clarify documentation of results class by @p-snft in #1236
- Merge streamlining the
ResultsAPI intodevby @gnn in #1239 - Fix/rename min and max attributes in the flow class by @AntonellaGia in #1244
- add myself to citation by @Maxhi77 in #1247
- Replace support for Python 3.10 by 3.14 by @p-snft in #1248
- Update warnings in solph.Results by @p-snft in #1249
- Release v0.6.2 by @p-snft in #1251
Full Changelog: v0.6.1...v0.6.2
v0.6.1: Fractal Fun
API changes
- GenericStorage requires explicitly set
Investmentobjects if theinvest_relation
keywords are used. Automatic creation of theInvestmentobjects is removed.
New features
- Two new keys added to
Resultsclass (experimental) to calculate variable costs and
investment costs viaresults["variable_costs"]andresults["investment_costs"]. - Nodes (buses and components) can now have a
parent_nodeand createsubnodes.
This allows constructing nested structures in the energy system graph.
Documentation
- Add documentation of Results class.
Bug fixes
- Setting
invest_relation_input_outputnow actually creates the relational constraint.
Other changes
- Experimental component
SinkDSM(unmaintained) has been removed - Unmaintained, non-working functionality for three-phase electricity has been removed.
- Make claer
InvestNonConvexFlowBlockandNonConvexFlowBlockare parallel structures and the former is no specialised version of the latter. In particular, the setNONCONVEX_FLOWSis now calledFIXED_CAPACITY_NONCONVEX_FLOWS.
Contributors
- Patrik Schönfeldt
- Eva Schischke
- Lennart Schürmann (UMSICHT)
- Uwe Krien
- Antonella Giannitelli
- Pierre Francois
- Francesco Witte
Acknowledgements
Work of PS was funded by the German Federal Ministry of Research, Technology
and Space (BMFTR) within the project "WärmewendeNordwest" (grant no 03SF0624L).
Automatic Git changelog
- Remove unmaintained and non-working code by @p-snft in #1204
- Add results properties to nex Results class by @uvchik in #1205
- Revision/cleanup ci by @p-snft in #1208
- Feature/automatic capex and opex by @esske in #1210
- Add subnetwork functionnality by @Bachibouzouk in #1215
- Update Contribution in case of fork by @Bachibouzouk in #1216
- Change fows to flows by @fwitte in #1218
- Bugfix/genericstorage relations by @lensum in #1217
- add docstring to methods keys, objective and timeindex of Results by @AntonellaGia in #1211
- Revision/separate nonconvex flow classes by @p-snft in #1220
- Feature/result class docs by @p-snft in #1222
- Add subnetwork example to docs by @p-snft in #1223
- Refactor and check examples by @p-snft in #1224
- Release v0.6.1 by @p-snft in #1227
Full Changelog: v0.6.0...v0.6.1
v0.6.0
API changes
- Costs for energy storage are now defined for N-1 points in time (initial time step is neglected). This is because with a balanced storage, content of the initial and the first time step (which is effectively the same) had double weight before. Also, if the initial storage level is defined, the costs just offset the objective value without changing anything else.
- Tansitional wrappers that still allowed to use
TransformerandOffsetTransformerhave been removed. Use of the new names (ConverterandOffsetConverter) is now obligatory. - Tansitional wrappers that still allowed to use
investment,summed_min, andsummed_maxas arguments to initialise aFlowhave been removed. Use of the new names (nominal_capacity,full_load_time_min, andfull_load_time_max) is now obligatory. - Rename
custom_attributestocustom_propertiesfor all Nodes. Setting theoemof.network.Node.custom_propertiesusing an argument called "custom_attributes" was rather confusing. Additionally, the class Bus already called the argument "custom_properties". - The parameters
GenericStorage.nominal_storage_capacityandFlow.nominal_valueare now both callednominal_capacity. - Initialisation of an
EnergySystemcan now be done using any index consisting of increasing numbers (not only timestamps). This is to prepare the removal of the parametertimeincrement(now deprecated). - The default of
EnergySystem(infer_last_interval)is now False. (This was required to allow arbitrary numeric intervals.)
New features
- Add a new
Resultsclass (experimental) - Add time-series-agrgregation mode (experimental)
Documentation
- Completely reworked the design of the documentation.
- Added introductory tutorials as getting started material.
Bug fixes
- Remove unneeded use of gurobi from examples.
- Fixed storage costs for initial storage level.
Other changes
Model.solve()will now fail, if solver status is nonoptimal. We added new keywordallow_nonoptimalto deactivate this behaviour.
Contributors
- Pierre Francois Bachibouzouk
- Uwe Krien
- Patrik Schönfeldt
- Cord Kaldemeyer
- Hendrik Huyskens
- Franscesco Witte
- Malte Fritz
- Julian Endres
- Julian Endres
- Lennart Schürmann
- Eva Schischke (fist contribution)
- Simon Günther
- Johannes Kochems
Acknowledgements
Work of PS was funded by the German Federal Ministry of Research, Technology
and Space (BMFTR) within the project "WärmewendeNordwest" (grant no 03SF0624L).
Automatic Git changelog
- Fix/storage costs for initial level by @p-snft in #1094
- Replace constraint tests by @p-snft in #1080
- Adjust indexing for content of InvestStorageBlock by @p-snft in #1039
- Remove internal discounting for NonConvexFlow by @p-snft in #1110
- Make invest relations iterable by @nailend in #1063
- Merge revision/include v0 5 fixes by @p-snft in #1120
- Change version from v2 to v4 for artifact upload by @fwitte in #1123
- Fix/v0.5 fixes in dev by @p-snft in #1125
- Contribution to refactoring of the Docs by @jfreissmann in #1134
- Add basic examples pages to new docs layout by @paulapreuss in #1137
- Contribution to refactoring of the Docs by @maltefritz in #1135
- Fix/links by @p-snft in #1144
- Revision/rename nominal value by @p-snft in #1114
- Rename custom_attributes to custom_properties for Nodes by @p-snft in #1145
- Revision/remove v0.4 compatibility wrappers by @p-snft in #1112
- Remove internal discounting functionality by @p-snft in #1111
- Fix LaTeX code in docstring of GenericStorageBlock by @lensum in #1149
- Fix bugs in parameter as dict by @uvchik in #1152
- add dynamic prices by @AntonellaGia in #1153
- Add kwarg fail_on_infeasable in model.solve by @esske in #1139
- Merge dev into integrate_TSAM by @p-snft in #1154
- Add new tutorial example (using NamedTuple as label) by @p-snft in #1041
- Docs/improve optimization section by @srhbrnds in #1162
- Docs/oemof classes by @Bachibouzouk in #1161
- Add current state of introductory district heating system tutorial by @jfreissmann in #1163
- Fiy typos and buggy references by @srhbrnds in #1165
- Docs/improve basic concepts section by @Bachibouzouk in #1166
- add the section best pratices to the docs and add the first entry (ep… by @leroum in #1164
- Improve documentation of examples for GenericStorage with Investment by @lensum in #1023
- Add SCIP open source solver by @ckaldemeyer in #927
- Integrate TSAM mode in oemof.solph by @henhuy in #980
- Produce images of examples energysystems and check that they run by @Bachibouzouk in #1170
- Remove GenericStorageBlock.init_content by @p-snft in #1180
- Fix bug where InvestNonConvexFlowBlock does not eliminate Investment offset when no investment is made by @maltefritz in #1173
- Add a new
Resultsclass by @p-snft in #1181 - Fix InvestNonConvexFlowBlock set definition by nonconvex parameter by @jfreissmann in #1184
- Rename storage content variables by @p-snft in #1182
- Integrate v0.5.7 by @p-snft in #1191
- Add ev tutorial by @p-snft in #1150
- Docs/fix reference warnings by @Bachibouzouk in #1167
- Docs/grid icons by @leroum in #1168
- Add introductory tutorial for district heating portfolio optimization by @maltefritz in #1194
- Prepare template documents for furo style docs by @fwitte in #1131
- Fix a couple of issues in the updated documentation by @fwitte in #1197
- Feature/allow numeric timeindex by @p-snft in #1200
- Allow local variable names for Results by @p-snft in #1203
- Release/v0.6 by @p-snft in #1201
Full Changelog: v0.5.7...v0.6.0
v0.6.0 RC1
API changes
- Costs for energy storage are now defined for N-1 points in time (initial time step is neglected). This is because with a balanced storage, content of the initial and the first time step (which is effectively the same) had double weight before. Also, if the initial storage level is defined, the costs just offset the objective value without changing anything else.
- Tansitional wrappers that still allowed to use
TransformerandOffsetTransformerhave been removed. Use of the new names (ConverterandOffsetConverter) is now obligatory. - Tansitional wrappers that still allowed to use
investment,summed_min, andsummed_maxas arguments to initialise aFlowhave been removed. Use of the new names (nominal_capacity,full_load_time_min, andfull_load_time_max) is now obligatory. - Rename
custom_attributestocustom_propertiesfor all Nodes. Setting theoemof.network.Node.custom_propertiesusing an argument called "custom_attributes" was rather confusing. Additionally, the class Bus already called the argument "custom_properties". - The parameters
GenericStorage.nominal_storage_capacityandFlow.nominal_valueare now both callednominal_capacity. - Initialisation of an
EnergySystemcan now be done using any index consisting of increasing numbers (not only timestamps). This is to prepare the removal of the parametertimeincrement(now deprecated). - The default of
EnergySystem(infer_last_interval)is now False. (This was required to allow arbitrary numeric intervals.)
New features
- Add a new
Resultsclass (experimental) - Add time-series-agrgregation mode (experimental)
Documentation
- Completely reworked the design of the documentation.
- Added introductory tutorials as getting started material.
Bug fixes
- Remove unneeded use of gurobi from examples.
- Fixed storage costs for initial storage level.
Other changes
Model.solve()will now fail, if solver status is nonoptimal. We added new keywordallow_nonoptimalto deactivate this behaviour.
Contributors
- Pierre Francois Bachibouzouk
- Uwe Krien
- Patrik Schönfeldt
- Cord Kaldemeyer
- Hendrik Huyskens
- Franscesco Witte
- Malte Fritz
- Julian Endres
- Julian Endres
- Lennart Schürmann
- Eva Schischke (fist contribution)
- Simon Günther
- Johannes Kochems
Acknowledgements
Work of PS was funded by the German Federal Ministry of Research, Technology
and Space (BMFTR) within the project "WärmewendeNordwest" (grant no 03SF0624L).
Automatic Git changelog
- Fix/storage costs for initial level by @p-snft in #1094
- Replace constraint tests by @p-snft in #1080
- Adjust indexing for content of InvestStorageBlock by @p-snft in #1039
- Remove internal discounting for NonConvexFlow by @p-snft in #1110
- Make invest relations iterable by @nailend in #1063
- Merge revision/include v0 5 fixes by @p-snft in #1120
- Change version from v2 to v4 for artifact upload by @fwitte in #1123
- Fix/v0.5 fixes in dev by @p-snft in #1125
- Contribution to refactoring of the Docs by @jfreissmann in #1134
- Add basic examples pages to new docs layout by @paulapreuss in #1137
- Contribution to refactoring of the Docs by @maltefritz in #1135
- Fix/links by @p-snft in #1144
- Revision/rename nominal value by @p-snft in #1114
- Rename custom_attributes to custom_properties for Nodes by @p-snft in #1145
- Revision/remove v0.4 compatibility wrappers by @p-snft in #1112
- Remove internal discounting functionality by @p-snft in #1111
- Fix LaTeX code in docstring of GenericStorageBlock by @lensum in #1149
- Fix bugs in parameter as dict by @uvchik in #1152
- add dynamic prices by @AntonellaGia in #1153
- Add kwarg fail_on_infeasable in model.solve by @esske in #1139
- Merge dev into integrate_TSAM by @p-snft in #1154
- Add new tutorial example (using NamedTuple as label) by @p-snft in #1041
- Docs/improve optimization section by @srhbrnds in #1162
- Docs/oemof classes by @Bachibouzouk in #1161
- Add current state of introductory district heating system tutorial by @jfreissmann in #1163
- Fiy typos and buggy references by @srhbrnds in #1165
- Docs/improve basic concepts section by @Bachibouzouk in #1166
- add the section best pratices to the docs and add the first entry (ep… by @leroum in #1164
- Improve documentation of examples for GenericStorage with Investment by @lensum in #1023
- Add SCIP open source solver by @ckaldemeyer in #927
- Integrate TSAM mode in oemof.solph by @henhuy in #980
- Produce images of examples energysystems and check that they run by @Bachibouzouk in #1170
- Remove GenericStorageBlock.init_content by @p-snft in #1180
- Fix bug where InvestNonConvexFlowBlock does not eliminate Investment offset when no investment is made by @maltefritz in #1173
- Add a new
Resultsclass by @p-snft in #1181 - Fix InvestNonConvexFlowBlock set definition by nonconvex parameter by @jfreissmann in #1184
- Rename storage content variables by @p-snft in #1182
- Integrate v0.5.7 by @p-snft in #1191
- Add ev tutorial by @p-snft in #1150
- Docs/fix reference warnings by @Bachibouzouk in #1167
- Docs/grid icons by @leroum in #1168
- Add introductory tutorial for district heating portfolio optimization by @maltefritz in #1194
- Prepare template documents for furo style docs by @fwitte in #1131
- Fix a couple of issues in the updated documentation by @fwitte in #1197
- Feature/allow numeric timeindex by @p-snft in #1200
- Allow local variable names for Results by @p-snft in #1203
- Release/v0.6 by @p-snft in #1201
Full Changelog: v0.5.7...v0.6.0
v0.6.0a4
What's Changed
- Fix/storage costs for initial level by @p-snft in #1094
- Replace constraint tests by @p-snft in #1080
- Adjust indexing for content of InvestStorageBlock by @p-snft in #1039
- Remove internal discounting for NonConvexFlow by @p-snft in #1110
- Make invest relations iterable by @nailend in #1063
- Merge revision/include v0 5 fixes by @p-snft in #1120
- Change version from v2 to v4 for artifact upload by @fwitte in #1123
- Fix/v0.5 fixes in dev by @p-snft in #1125
- Fix/links by @p-snft in #1144
- Revision/rename nominal value by @p-snft in #1114
- Rename custom_attributes to custom_properties for Nodes by @p-snft in #1145
- Revision/remove v0.4 compatibility wrappers by @p-snft in #1112
- Remove internal discounting functionality by @p-snft in #1111
- Fix LaTeX code in docstring of GenericStorageBlock by @lensum in #1149
- Fix bugs in parameter as dict by @uvchik in #1152
- Add kwarg fail_on_infeasable in model.solve by @esske in #1139
- Merge dev into integrate_TSAM by @p-snft in #1154
- Add new tutorial example (using NamedTuple as label) by @p-snft in #1041
- Improve documentation of examples for GenericStorage with Investment by @lensum in #1023
- Add SCIP open source solver by @ckaldemeyer in #927
- Integrate TSAM mode in oemof.solph by @henhuy in #980
- Produce images of examples energysystems and check that they run by @Bachibouzouk in #1170
- Remove GenericStorageBlock.init_content by @p-snft in #1180
- Fix bug where InvestNonConvexFlowBlock does not eliminate Investment offset when no investment is made by @maltefritz in #1173
- Add a new
Resultsclass by @p-snft in #1181 - Fix InvestNonConvexFlowBlock set definition by nonconvex parameter by @jfreissmann in #1184
- Rename storage content variables by @p-snft in #1182
- Integrate v0.5.7 by @p-snft in #1191
New Contributors
Full Changelog: v0.5.7...v0.6.0a4
v0.5.7
New features
- Introduce option Model.solve(allow_nonoptimal=False) that raises an error if no optimal solution is found. (Backported from v0.6.)
Bug fixes
- storage_costs are now considered also for GenericStorage with a capacity that is subject to an Investment.
Known issues
- Indexing of storage with capacity investment is off by one.
- Related: Storage limits not applied for last time step.
- Some links in the documentation are no longer valid.
Contributors
- Eva Schischke
- Patrik Schönfeldt
Full Changelog: v0.5.6...v0.5.7
v0.6.0a3
What's Changed
- Fix/numpy2 compatibility by @p-snft in #1113
- Fix/v0.5 fixes in dev by @p-snft in #1125
- Fix/links by @p-snft in #1144
- Revision/rename nominal value by @p-snft in #1114
- Rename custom_attributes to custom_properties for Nodes by @p-snft in #1145
- Revision/remove v0.4 compatibility wrappers by @p-snft in #1112
- Remove internal discounting functionality by @p-snft in #1111
- Fix LaTeX code in docstring of GenericStorageBlock by @lensum in #1149
- Fix bugs in parameter as dict by @uvchik in #1152
- Add kwarg fail_on_infeasable in model.solve by @esske in #1139
- Merge dev into integrate_TSAM by @p-snft in #1154
- Add new tutorial example (using NamedTuple as label) by @p-snft in #1041
- Improve documentation of examples for GenericStorage with Investment by @lensum in #1023
- Add SCIP open source solver by @ckaldemeyer in #927
- Integrate TSAM mode in oemof.solph by @henhuy in #980
- Produce images of examples energysystems and check that they run by @Bachibouzouk in #1170
- Remove GenericStorageBlock.init_content by @p-snft in #1180
- Fix bug where InvestNonConvexFlowBlock does not eliminate Investment offset when no investment is made by @maltefritz in #1173
- Add a new
Resultsclass by @p-snft in #1181
New Contributors
Full Changelog: v0.6.0a2...v0.6.0a3
v0.5.6: Numpy2 compatibility
What's Changed
(Note: This tag has been recreated to allow building the docs.)
Full Changelog: v0.5.5...v0.5.6