A model generator for energy system modelling and optimisation.
Project description
Introduction
The oemof.solph package is part of the Open energy modelling framework (oemof). This an organisational framework to bundle tools for energy (system) modelling. oemof-solph is a model generator for energy system modelling and optimisation.
The oemof.solph package is very often called just oemof as it was part of the oemof meta package. Now you need to install oemof.solph separately, but everything else is still the same. Since v0.4.0. it is not possible to install just oemof, use pip install oemof.solph instead.
Everybody is welcome to use and/or develop oemof.solph. Read our contribution section.
Contribution is already possible on a low level by simply fixing typos in oemof’s documentation or rephrasing sections which are unclear. If you want to support us that way please fork the oemof repository to your own github account and make changes as described in the github guidelines: https://guides.github.com/activities/hello-world/
If you have questions regarding the use of oemof you can visit the forum at openmod-initiative.org and open a new thread if your questions hasn’t been already answered.
Keep in touch! - You can become a watcher at our github site, but this will bring you quite a few mails and might be more interesting for developers. If you just want to get the latest news, like when is the next oemof meeting, you can follow our news-blog at oemof.org.
Documentation
The oemof.solph documentation is powered by readthedocs. Use the project site of oemof.solph to choose the version of the documentation. Go to the download page to download different versions and formats (pdf, html, epub) of the documentation.
Installation
If you have a working Python3 environment, use pypi to install the latest oemof version. Python >= 3.6 is recommended. Lower versions may work but are not tested.
pip install oemof.solph
If you want to use the latest features, you might want to install the developer version. See section ‘Developing oemof’ for more information. The developer version is not recommended for productive use:
pip install https://github.com/oemof/oemof-solph/archive/dev.zip
For running an oemof-solph optimisation model, you need to install a solver. Following you will find guidelines for the installation process for different operation systems.
Installing a solver
There are various commercial and open-source solvers that can be used with oemof. There are two common OpenSource solvers available (CBC, GLPK), while oemof recommends CBC (Coin-or branch and cut). But sometimes its worth comparing the results of different solvers. Other commercial solvers like Gurobi or Cplex can be used as well. Have a look at the pyomo docs to learn about which solvers are supported.
Check the solver installation by executing the test_installation example below (section Installation test).
Linux
To install the solvers have a look at the package repository of your Linux distribution or search for precompiled packages. GLPK and CBC ares available at Debian, Feodora, Ubuntu and others.
Windows
Download GLPK (64/32 bit)
Unpack CBC/GLPK to any folder (e.g. C:/Users/Somebody/my_programs)
Add the path of the executable files of both solvers to the PATH variable using this tutorial
Restart Windows
Check the solver installation by executing the test_installation example (see the Installation test section).
Mac OSX
Please follow the installation instructions on the respective homepages for details.
CBC-solver: https://projects.coin-or.org/Cbc
GLPK-solver: http://arnab-deka.com/posts/2010/02/installing-glpk-on-a-mac/
If you install the CBC solver via brew (highly recommended), it should work without additional configuration.
Installation test
Test the installation and the installed solver by running the installation test in your virtual environment:
oemof_installation_test
If the installation was successful, you will receive something like this:
*********
Solver installed with oemof:
glpk: working
cplex: not working
cbc: working
gurobi: not working
*********
oemof.solph successfully installed.
as an output.
Contributing
A warm welcome to all who want to join the developers and contribute to oemof.solph. Information on the details and how to approach us can be found in the documentation .
Citing
The core ideas of oemof are described in DOI:10.1016/j.esr.2018.07.001 (preprint at arXiv:1808.0807). To allow citing specific versions of oemof, we use the zenodo project to get a DOI for each version.
Examples
The linkage of specific modules of the various packages is called an application (app) and depicts for example a concrete energy system model. You can find a large variety of helpful examples in oemof’s example repository on github to download or clone. The examples show optimisations of different energy systems and are supposed to help new users to understand the framework’s structure. There is some elaboration on the examples in the respective repository. The repository has sections for each major release.
You are welcome to contribute your own examples via a pull request or by sending us an e-mail (see here for contact information).
License
Copyright (c) 2019 oemof developer group
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
v0.2.0 (January 12, 2018)
API changes
The NodesFromCSV has been removed from the code base. An alternative excel (spreadsheet) reader is provided in the newly created excel example in the oemof_examples repository.
LinearTransformer and LinearN1Transformer classes are now combined within one Transformer class. The new class has n inputs and n outputs. Please note that the definition of the conversion factors (for N1) has changed. See the new docstring of ~oemof.solph.network.Transformer class to avoid errors (Issue #351).
The oemof.solph.network.Storage class has been renamed and moved to oemof.solph.components.GenericStorage.
As the example section has been moved to a new repository the oemof_example command was removed. Use oemof_installation_test to check your installation and the installed solvers.
OperationalModel has been renamed to Model. The es parameter was renamed to energysystem parameter.
Nodes <oemof.network.Node> are no longer automatically added to the most recently created energy system <oemof.energy_system.EnergySystem>. You can still restore the old automatic registration by manually assigning an energy system <oemof.energy_system.EnergySystem> to Node.registry <oemof.network.Node.registry>. On the other hand you can still explicitly add <oemof.energy_system.EnergySystem.add> nodes <oemof.network.Node> to an energy system <oemof.energy_system.EnergySystem>. This option has been made a bit more feature rich by the way, but see below for more on this. Also check the oemof_examples repository for more information on the usage.
The fixed_costs attribute of the nodes <oemof.solph.network.Flow> has been removed. See (Issue #407) for more information.
The classes DataFramePlot <outputlib.DataFramePlot> and ResultsDataFrame <outputlib.ResultsDataFrame> have been removed due to the redesign of the outputlib module.
New features
A new oemof_examples repository with some new examples was created.
A new outputlib module has been created to provide a convenient data structure for optimization results and enable quick analyses. All decision variables of a Node are now collected automatically which enables an easier development of custom components. See the revised oemof_outputlib_label documentation for more details or have a look at the oemof_examples repository for information on the usage. Keep your eyes open, some new functions will come soon that make the processing of the results easier. See the actual pull request or issues for detailed information.
The transformer class can now be used with n inputs and n outputs ( ~oemof.solph.network.Transformer)
A new module with useful additional constraints were created with these constraints global emission or investment limits can be set. Furthermore it is possible to connect investment variables. Please add your own additional constraints or let us know what is needed in the future.
A module to create a networkx graph from your energy system or your optimisation model was added. You can use networkx to plot and analyse graphs. See the graph module in the documentation of oemof-network for more information.
It’s now possible to modify a node’s <oemof.network.Node> inputs <oemof.network.Node.inputs> and outputs <oemof.network.Node.outputs> by inserting and removing nodes <oemof.network.Node> to and from the correspoding dictionaries. Outputs <oemof.network.Node.outputs> where already working previously, but due to an implementation quirk, inputs <oemof.network.Node.inputs> did not behave as expected. This is now fixed.
One can now explicitly add <oemof.energy_system.EnergySystem.add> nodes <oemof.network.Node> to an energy system <oemof.energy_system.EnergySystem> in bulk using * and ** syntax. For the latter case, the values <dict.values> of the dictionary passed in will be added.
New components can now be added to the custom.py module. Components in this module are indicated as in a testing state. Use them with care. This lowers the entry barriers to test new components within the solph structure and find other testers.
New components
The nodes ElectricalLine <oemof.solph.custom.ElectricalLine> and ElectricalBus <oemof.solph.custom.ElectricalBus> can be used for Linear Optimal Powerflow calculation based on angle formulations. These components have been added to the solph.custom module. Though it should work correctly, it is in a preliminary stage. Please check your results. Feedback is welcome!
The custom component Link <oemof.solph.custom.Link> can now be used to model a bidirectional connection within one component. Check out the example in the oemof_examples repository.
The component GenericCHP <oemof.solph.components.GenericCHP> can be used to model different CHP types such as extraction or back-pressure turbines and motoric plants. The component uses a mixed-integer linear formulation and can be adapted to different technical layouts with a high level of detail. Check out the example in the oemof_examples repository.
The component GenericCAES <oemof.solph.custom.GenericCAES> can be used to model different concepts of compressed air energy storage. Technical concepts such as diabatic or adiabatic layouts can be modelled at a high level of detail. The component uses a mixed-integer linear formulation.
The custom component GenericOffsetTransformer <oemof.solph.custom.GenericOffsetTransformer> can be used to model components with load ranges such as heat pumps and also uses a mixed-integer linear formulation.
Documentation
Large parts of the documentation have been proofread and improved since the last developer meeting in Flensburg.
The solph documentation has got an extra section with all existing components (oemof_solph_components_label).
The developer documentation has been developed to lower the barriers for new developers. Furthermore, a template for pull request was created.
Known issues
It is not possible to model one time step with oemof.solph. You have to model at least two timesteps (Issue #306). Please leave a comment if this bug affects you.
Bug fixes
LP-file tests are now invariant against sign changes in equations, because the equations are now normalized to always have non-negative right hand sides.
Testing
All known and newly created components are now tested within an independent testing environment which can be found in /tests/.
Other testing routines have been streamlined and reviewed and example tests have been integrated in the nosetest environment.
Other changes
The plot functionalities have been removed completely from the outputlib as they are less a necessary part but more an optional tool . Basic plotting examples that show how to quickly create plots from optimization results can now be found in the oemof_examples repository. You can still find the “old” standard plots within the oemof_visio repository as they are now maintained separately.
A user forum has been created to answer use questions.
Contributors
Cord Kaldemeyer
Jens-Olaf Delfs
Stephan Günther
Simon Hilpert
Uwe Krien
v0.0.1 (November 25, 2015)
First release by the oemof developing group.
v0.4.2 (???, 2020)
API changes
something
New features
something
New components/constraints
something
Documentation
something
Bug fixes
something
Known issues
something
Testing
something
Other changes
something
Contributors
something
v0.0.6 (April 29, 2016)
New features
It is now possible to choose whether or not the heat load profile generated with the BDEW heat load profile method should only include space heating or space heating and warm water combined. (Issue #130)
Add possibility to change the order of the columns of a DataFrame subset. This is useful to change the order of stacked plots. (Issue #148)
Documentation
Testing
Fix constraint tests (Issue #137)
Bug fixes
Use of wrong columns in generation of SF vector in BDEW heat load profile generation (Issue #129)
Use of wrong temperature vector in generation of h vector in BDEW heat load profile generation.
Other changes
Contributors
Uwe Krien
Stephan Günther
Simon Hilpert
Cord Kaldemeyer
Birgit Schachler
v0.4.0 (June 6, 2020)
API changes
- New package name
For installation via pypi use pip install oemof.solph.
- Change the import of oemof-solph due to unbundling oemof solph
The import statements have changed, for example from outputlib.views import processing –> from oemof.solph import processing. There are further changes for the modules views, helpers, economics, logger, network.
- Rename GenericStorage attributes
The attribute capacity of the GenericStorage describing the current absolute stored energy/material/water etc. has been renamed to storage_content. In the GenericStorageBlock and GenericInvestmentStorageBlock, the attribute init_cap has been renamed init_content. This change is intended to avoid confusion with nominal_storage_capacity or capacity in terms of installed capacity.
Rename the flow attribute ``actual_value`` to ``fix`` and remove ``fixed``
New features
- Allows having a non equidistant timeindex
By adding the calculate_timeincrement function to tools/helpers.py a non equidistant timeincrement can be calculated. The EnergySystem will now be defined by the timeindex and the calculated timeincrement.
- Allows non-convex investments for flows and storages.
With this feature, fix investment costs, which do not dependent on the nominal capacity, can be considered.
- Add user warnings for debugging.
A UserWarning is raised for untypical uses even though this kind of usage is valid if you really know what you are doing. This will help users to debug their code but can be turned of for experienced users.
- Add fixed losses to GenericStorage
~oemof.solph.GenericStorage can now have fixed_losses, that are independent from storage content.
New components/constraints
- Allows a generic limit for attribute weighted investment flows
InvestmentFlow, which share other limited resources (e.g. space), can be considered.
- Allow to limit count of concurrently active flows in group of flows
Flows have to be NonConvex, the limit can be an upper or lower one.
- New constraint shared_limit
Shared limit allows to restrict the weighted sum of arbitrary variables to a corridor. This can be used, e.g. to model shared space is used to store wood pallets and logs with their respective energy density.
Documentation
Restructure and clean-up documentation due to the unbundling
Improved documentation of ExtractionTurbineCHP
Known issues
- Results of one-time-step optimisation counterintuitive
If an optimisation with one time-step is performed, at the processing of the results, the scalars of the results is stored in the dict of the sequences. (See Issue #693)
Testing
- Use tox for testing
Now, pep8 tests and build of documentation are tested.
Skip github link checks when testing locally
Other changes
- Redefine loss_rate of GenericStorage
The loss_rate of ~oemof.solph.components.GenericStorage is now defined per time increment.
- Change parameters’ data type in the docstrings
The parameters’ data type is changed from numeric (sequence or scalar) to numeric (iterable or scalar) (Issue #673).
Add python 3.8 support, remove python 3.5 support
Contributors
Caterina Köhl
Jonathan Amme
Uwe Krien
Johannes Röder
Jann Launer
Daniel Rank
Patrik Schönfeldt
Stephan Günther
v0.2.1 (March 19, 2018)
API changes
The function create_nx_graph only takes an energysystem as argument, not a solph model. As it is not a major release you can still pass a Model but you should adapt your application as soon as possible. (Issue #439)
New features
It is now possible determine minimum up and downtimes for nonconvex flows. Check the oemof_examples repository for an exemplary usage.
Startup and shutdown costs can now be defined time-dependent.
The graph module has been revised. (Issue #439)
You can now store a graph to disc as .graphml file to open it in yEd with labels.
You can add weight to edges.
Labels are attached to the nodes.
Two functions get_node_by_name and filter_nodes have been added that allow to get specified nodes or nodes of one kind from the results dictionary. (Issue #426)
A new function param_results() collects all parameters of nodes and flows in a dictionary similar to the results dictionary. (Issue #445)
In outputlib.views.node(), an option for multiindex dataframe has been added.
Documentation
Some small fixes and corrected typos.
Known issues
It is not possible to model one time step with oemof.solph. You have to model at least two timesteps (Issue #306). Please leave a comment if this bug affects you.
Bug fixes
Shutdown costs for nonconvex flows are now accounted within the objective which was not the case before due to a naming error.
Console script oemof_test_installation has been fixed. (Issue #452)
Adapt solph to API change in the Pyomo package.
Deserializing a Node <oemof.network.Node> leads to an object which was no longer serializable. This is fixed now. Node <oemof.network.Node> instances should be able to be dumped and restored an arbitraty amount of times.
Adding timesteps to index of constraint for component el-line fixes an issue with pyomo.
Testing
New console script test_oemof has been added (experimental). (Issue #453)
Other changes
Internal change: Unnecessary list extensions while creating a model are avoided, which leads to a decrease in runtime. (Issue #438)
The negative/positive gradient attributes are dictionaries. In the constructor they moved from sequences to a new dictionaries argument. (Issue #437)
License agreement was adapted according to the reuse project (Issue #442)
Code of conduct was added. (Issue #440)
Version of required packages is now limited to the most actual version (Issue #464)
Contributors
Cord Kaldemeyer
Jann Launer
Simon Hilpert
Stephan Günther
Uwe Krien
v0.0.2 (December 22, 2015)
New features
Adding a definition of a default oemof logger (issue #28)
Revise the EnergySystem class according to the oemof developing meeting (issue #25)
Add a dump and restore method to the EnergySystem class to dump/restore its attributes (issue #31)
Functionality for minimum up- and downtime constraints (oemof.solph.linear_mixed_integer_constraints module)
Add relax option to simulation class for calculation of linear relaxed mixed integer problems
Instances of EnergySystem <oemof.core.energy_system.EnergySystem> now keep track of Entities <oemof.core.network.Entity> via the entities <oemof.core.energy_system.EnergySystem.entities> attribute. (issue #20)
There’s now a standard way of working with the results obtained via a call to OptimizationModel#results <oemof.solph.optimization_model.OptimizationModel.results>. See its documentation, the documentation of EnergySystem#optimize <oemof.core.energy_system.EnergySystem.optimize> and finally the discussion at issue #33 for more information.
New class VariableEfficiencyCHP <oemof.core.network.entities.components.transformers.VariableEfficiencyCHP> to model combined heat and power units with variable electrical efficiency.
New methods for VariableEfficiencyCHP <oemof.core.network.entities.components.transformers.VariableEfficiencyCHP> inside the solph-module:
MILP-constraint <oemof.solph.linear_mixed_integer_constraints.add_variable_linear_eta_relation>
Linear-constraint <oemof.solph.linear_constraints.add_eta_total_chp_relation>
Documentation
Testing
Bug fixes
now the api-docs can be read on readthedocs.org
a storage automically calculates its maximum output/input if the capacity and the c-rate is given (issue #27)
Fix error in accessing dual variables in oemof.solph.postprocessing
Other changes
Contributors
Uwe Krien
Simon Hilpert
Cord Kaldemeyer
Guido Pleßmann
Stephan Günther
v0.2.2 (July 1, 2018)
API changes
The storage API has been revised, even though it is still possible to use the old API. In that case a warning is raised (Issue #491).
The newly introduced parm_results are not results and therefore renamed to parameter_as_dict. The old name is still valid but raises a warning.
New features
We added a new attribute existing to the solph.options.Investement class. It will now be possible to run investment optimization based on already installed capacity of a component. Take a look on investment_mode_label for usage of this option. (Issue #489).
Investement variables for the capacity and the flows are now decoupled to enable more flexibility. It is possible to couple the flows to the capacity, the flows to itself or to not couple anything. The newly added attributes invest_relation_input_output, invest_relation_input_capacity and invest_relation_output_capacity replace the existing attributes nominal_input_capacity_ratio and nominal_input_capacity_ratio for the investment mode. In case of the dispatch mode one should use the nominal_value of the Flow classes. The attributes nominal_input_capacity_ratio and nominal_input_capacity_ratio will be removed in v0.3.0. Please adapt your application to avoid problems in the future (Issue #480).
We now have experimental support for deserializing an energy system from a tabular data package. Since we have to extend the datapackage format a bit, the specification is not yet finalized and documentation as well as tests range from sparse to nonexistent. But anyone who wishes to help with the code is welcome to check it out in the datapackage <oemof.tools.datapackage> module.
New components
Documentation
The documentation of the storage storage component has been improved.
The documentation of the Extraction Turbine has been improved.
Known issues
It is not possible to model one time step with oemof.solph. You have to model at least two timesteps (Issue #306). Please leave a comment if this bug affects you.
Bug fixes
Fix file extension check to dump a graph correctly as .graphml-file
The full constraint set of the ExtractionTurbineCHP class was only build for one object. If more than one object was present the input/output constraint was missing. This lead to wrong results.
In the solph constraints module the emission constraint did not include the timeincrement from the model which has now be fixed.
The parameter_as_dict (former: param_results) do work with the views functions now (Issue #494).
Testing
The test coverage has been increased (>80%). oemof has experimental areas to test new functions. These functions are marked as experimental and will not be tested. Therefore the real coverage is even higher.
Other changes
Subclasses of Node <oemof.network.Node> are no longer optimized using __slots__. The abstract parent class still defines __slots__ <oemof.network.Node.__slots__> so that custom subclasses still have the option of using it.
Contributors
Fabian Büllesbach
Guido Plessmann
Simon Hilpert
Stephan Günther
Uwe Krien
v0.0.7 (May 4, 2016)
Bug fixes
Exclude non working pyomo version
v0.1.0 (November 1, 2016)
The framework provides the basis for a great range of different energy system model types, ranging from LP bottom-up (power and heat) economic dispatch models with optional investment to MILP operational unit commitment models.
With v0.1.0 we refactored oemof (not backward compatible!) to bring the implementation in line with the general concept. Hence, the API of components has changed significantly and we introduced the new ‘Flow’ component. Besides an extensive grouping functionality for automatic creation of constraints based on component input data the documentation has been revised.
We provide examples to show the broad range of possible applications and the frameworks flexibility.
API changes
The demandlib is no longer part of the oemof package. It has its own package now: (demandlib)
New features
Solph’s EnergySystem <oemof.solph.network.EnergySystem> now automatically uses solph’s GROUPINGS <oemof.solph.groupings.GROUPINGS> in addition to any user supplied ones. See the API documentation for more information.
The groupings <oemof.groupings.Grouping> introduced in version 0.0.5 now have more features, more documentation and should generally be pretty usable:
They moved to their own module: oemof.groupings and deprecated constructs ensuring compatibility with prior versions have been removed.
It’s possible to assign a node to multiple groups from one Grouping <oemof.groupings.Grouping> by returning a list of group keys from key <oemof.groupings.Grouping.key>.
If you use a non callable object as the key <oemof.groupings.Grouping.key> parameter to Groupings <oemof.groupings.Grouping>, the constructor will not make an attempt to call them, but use the object directly as a key.
There’s now a filter <oemof.groupings.Grouping.filter> parameter, enabling a more concise way of filtering group contents than using value <oemof.groupings.Grouping.value>.
Documentation
Complete revision of the documentation. We hope it is now more intuitive and easier to understand.
Testing
Create a structure to use examples as system tests (issue #160)
Bug fixes
Fix relative path of logger (issue #201)
More path fixes regarding installation via pip
Other changes
Travis CI will now check PR’s automatically
Examples executable from command-line (issue #227)
Contributors
Stephan Günther
Simon Hilpert
Uwe Krien
Guido Pleßmann
Cord Kaldemeyer
v0.3.2 (November 29, 2019)
New features
Allow generic limits for integral over weighted flows. (This is a generalised version of <solph.constraints.emission_limit>.)
Allow time-dependent weights for integrated weighted limit.
New components
Custom component: ~oemof.solph.custom.SinkDSM. Demand Side Management component that allows to represent flexibile demand. How the component is used is shown in oemof_solph_custom_sinkdsm_label.
Documentation
Revision of the outputlib documentation.
Other changes
The license hase been changed from GPLv3 to the MIT license
The BaseModel has been revised (test, docstring, warnings, internal naming) (PR #605)
Style revision to meet pep8 and other pep rules.
Contributors
Guido Plessmann
Johannes Röder
Julian Endres
Patrik Schönfeldt
Uwe Krien
v0.0.4 (March 03, 2016)
New features
Documentation
Update developer notes
Testing
Described testing procedures in developer notes
New constraint tests for heating buses
Bug fixes
Use of pyomo fast build
Broken result-DataFrame in outputlib
Dumping of EnergySystem
Other changes
PEP8
Contributors
Cord Kaldemeyer
Uwe Krien
Simon Hilpert
Stephan Günther
Clemens Wingenbach
Elisa Papdis
Martin Soethe
Guido Plessmann
v0.0.5 (April 1, 2016)
New features
There’s now a flexible transformer <oemof.core.network.entities.components.transformers.TwoInputsOneOutput> with two inputs and one output. (Issue #116)
You now have the option create special groups of entities in your energy system. The feature is not yet fully implemented, but simple use cases are usable already. (Issue #60)
Documentation
The documentation of the electrical demand <oemof.demandlib.demand.electrical_demand> class has been cleaned up.
The API documentation now has its own section so it doesn’t clutter up the main navigation sidebar so much anymore.
Testing
There’s now a dedicated module/suite testing solph constraints.
This suite now has proper fixtures (i.e. setup/teardown methods) making them (hopefully) independent of the order in which they are run (which, previously, they where not).
Bug fixes
Searching for oemof’s configuration directory is now done in a platform independent manner. (Issue #122)
Weeks no longer have more than seven days. (Issue #126)
Other changes
Contributors
Uwe Krien
Stephan Günther
Guido Pleßmann
v0.1.2 (March 27, 2017)
New features
Revise examples - clearer naming, cleaner code, all examples work with cbc solver (issue #238, issue #247).
Add option to choose solver when executing the examples (issue #247).
Add new transformer class: VariableFractionTransformer (child class of LinearTransformer). This class represents transformers with a variable fraction between its output flows. In contrast to the LinearTransformer by now it is restricted to two output flows.(issue #248)
Add new transformer class: N1Transformer (counterpart of LinearTransformer). This class allows to have multiple inputflows that are converted into one output flow e.g. heat pumps or mixing-components.
Allow to set addtional flow attributes inside NodesFromCSV in solph inputlib
Add economics module to calculate investment annuities (more to come in future versions)
Add module to store input data in multiple csv files and merge by preprocessing
Allow to slice all information around busses via a new method of the ResultsDataFrame
Add the option to save formatted balances around busses as single csv files via a new method of the ResultsDataFrame
Documentation
Improve the installation guide.
Bug fixes
Allow conversion factors as a sequence in the CSV reader
Other changes
Speed up constraint-building process by removing unnecessary method call
Clean up the code according to pep8 and pylint
Contributors
Cord Kaldemeyer
Guido Plessmann
Uwe Krien
Simon Hilpert
Stephan Günther
v0.3.1 (June 11, 2019)
Other changes
The API of the GenericStorage changed. Due to the open structure of solph the old parameters are still accepted. Therefore users may not notice that the default value is used instead of the given value after an update from v0.2.x to v0.3.x. With this version an error is raised. We work on a structure to avoid such problems in the future.
Contributors
Patrik Schönfeldt
Stephan Günther
Uwe Krien
v0.1.1 (November 2, 2016)
Hot fix release to make examples executable.
Bug fixes
Fix copy of default logging.ini (issue #235)
Add matplotlib to requirements to make examples executable after installation (issue #236)
Contributors
Guido Plessmann
Uwe Krien
v0.4.1 (June 24, 2020)
Bug fixes
Fixed incompatibility with recent Pyomo release (5.7)
Known issues
- Results of one-time-step optimisation counterintuitive
If an optimisation with one time-step is performed, at the processing of the results, the scalars of the results is stored in the dict of the sequences. (See Issue #693)
Contributors
Uwe Krien
Patrik Schönfeldt
v0.3.0 (June 5, 2019)
API changes
The param_results function does not exist anymore. It has been renamed to parameter_as_dict (Issue #537).
The storage API has been revised. Please check the API documentation for all details.
The OffsetTransformer is now a regular oemof.solph component. It has been tested and the documentation has been improved. So it has been move from custom to components. Use oemof.solph.components.OffsetTransformer ( Issue #522).
New features
Now it is possible to model just one time step. This is important for time step based models and all other models with an outer loop (Issue #519).
The storage can be used unbalanced now, which means that the level at the end could be different to the level at the beginning of the modeled time period. See the storage documentation for more details.
NonConvexFlow <oemof.solph.blocks.NonConvexFlow> can now have activity_costs, maximum_startups, and maximum_shutdowns. This helps, to model e.g. terms of maintannace contracts for small CHP plants.
Namedtuples and tuples as labels work now without problems. This makes it much easier to find objects and results in large energy systems (Issue #507).
Groups are now fully lazy. This means that groups are only computed when they are accessed. Previously, whenever nodes where added to an energy system, groups where computed for all but the most recently added node. This node was then only grouped upon addition of another node or upon access of the groups property.
There is now an explicit Edge <oemof.network.Edge> class. This means that an energy system now consists of Buses <oemof.network.Bus>, Components <oemof.network.Component> and Edges <oemof.network.Edge>. For implementation reasons, Edges <oemof.network.Edge> are still Nodes <oemof.network.Node>. If you know a bit of graph theory and this seems strange to you, think of these Edges <oemof.network.Edge> as classical graph theoretic edges, reified as nodes with an in- and outdegree of one.
Energy systems <oemof.energy_system.EnergySystem> now support blinker signals. The first supported signal gets emitted, whenever a node <oemof.network.node> is added <oemof.energy_system.EnergySystem.add> to an energy system <oemof.energy_system.EnergySystem>. (blinker)
Documentation
The template for docstrings with equations (docstring of block classes) has been improved.
A lot of improvements on the documentation
Bug fixes
The timeincrement attribute of the model is not set to one anymore. In earlier versions the timeincrement was set to one by default. This was a problem if a wrong time index was passed. In that case the timeincrement was set to one without a warning. Now an error is raised if no timeincrement or valid time index is found (Issue #549).
Testing
Automatic test coverage control was implemented. Now a PR will not be accepted if it decreases the test coverage.
Test coverage was increased to over 90%. A badge was added to the oemof github page that shows the actual test coverage.
Test coverage on the groupings <oemof.groupings> and network <oemof.network> modules has significantly increased. These modules where historically very weakly tested and are now approaching 90% and 95% respectively with more tests being planned.
Contributors
(alphabetical order)
ajimenezUCLA
FranziPl
Johannes Röder
Jakob Wolf
Jann Launer
Lluis Millet
Patrik Schönfeldt
Simon Hilpert
Stephan Günther
Uwe Krien
v0.0.3 (January 29, 2016)
New features
Added a class to convert the results dictionary to a multiindex DataFrame (issue #36)
Added a basic plot library (issue #36)
Add logging functionalities (issue #28)
Add entities_from_csv functionality for creating of entities from csv-files
Add a time-depended upper bound for the output of a component (issue #65)
Add fast_build functionlity for pyomo models in solph module (issue #68)
The package is no longer named oemof_base but is now just called oemof.
The results dictionary stored in the energy system now contains an attribute for the objective function and for objects which have special result attributes, those are now accessible under the object keys, too. (issue #58)
Documentation
Added the Readme.rst as “Getting started” to the documentation.
Fixed installation description (issue #38)
Improved the developer notes.
Testing
Bug fixes
Fix contraints in solph
Fix pep8
Other changes
Contributors
Cord Kaldemeyer
Uwe Krien
Clemens Wingenbach
Simon Hilpert
Stephan Günther
v0.1.4 (March 28, 2017)
Bug fixes
fix examples (issue #298)
Documentation
Adapt installation guide.
Contributors
Uwe Krien
Stephan Günther
v0.2.3 (November 21, 2018)
Bug fixes
Some functions did not work with tuples as labels. It has been fixed for the ExtractionTurbineCHP, the graph module and the parameter_as_dict function. (Issue #507)
Contributors
Simon Hilpert
Stephan Günther
Uwe Krien
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for oemof.solph-0.4.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 583e5e7054b3488c18e642f521d4232670011687679398e9602555a9c6b0efe0 |
|
MD5 | 9c521ada26cd4a251f714c64f9328998 |
|
BLAKE2b-256 | 95b660d325a36947f674e2d62e4dbf22f5cfc1d3433039a145d3ce2f27b76f5b |