Recent Releases of FINE

FINE - Version 2.7.1

This patch release improves installation and solver compatibility.

Fixed

  • FINE can now be imported and used without gurobipy installed. Gurobi
    availability is checked lazily when solver detection runs.
  • Improved the numerical robustness of the ConversionDynamic minimum-downtime
    test when using the HiGHS solver.
  • Skip performance summary test when Gurobi is unavailable

Documentation

  • Updated the recommended Conda installation command to install Gurobi from its
    dedicated channel with strict channel priority.
  • Updated the README logo links to use centrally hosted assets.

Maintenance

  • Bumped the package version from 2.7.0 to 2.7.1.
  • Added Ruff annotations for the intentional lazy import.

Full changelog: v2.7.0...v2.7.1

Energy Systems - Energy System Modeling Frameworks - Python
Published by JohannesBehrens 9 days ago

FINE - Version 2.7.1

This patch release improves installation and solver compatibility.

Fixed

  • FINE can now be imported and used without gurobipy installed. Gurobi
    availability is checked lazily when solver detection runs.
  • Improved the numerical robustness of the ConversionDynamic minimum-downtime
    test when using the HiGHS solver.

Documentation

  • Updated the recommended Conda installation command to install Gurobi from its
    dedicated channel with strict channel priority.
  • Updated the README logo links to use centrally hosted assets.

Maintenance

  • Bumped the package version from 2.7.0 to 2.7.1.
  • Added Ruff annotations for the intentional lazy import.

Full changelog: v2.7.0...v2.7.1

Energy Systems - Energy System Modeling Frameworks - Python
Published by JohannesBehrens 12 days ago

FINE - Version 2.7.0

Release date: 2026-08-11 · 188 commits since v2.6.0 (2fa3ba9b541a88b8)

This release adds ramping and downtime modelling, location-specific conversion factors and shadow-price output, removes the Excel-based input path, and moves the documentation from Sphinx to MkDocs.

Changes

  • Excel-based input removed (#706). readEnergySystemModelFromExcel, energySystemModelRunFromExcel and readOptimizationOutputFromExcel are gone from fine.IOManagement.standardIO. Example 04 was removed and the remaining examples renumbered (11_Partload10_Partload). Use the xarray/netCDF IO instead. Excel output is unaffected.
  • Deprecated methods removed: exploitOutput / getSimultaneosChargeDischarge, Storage.intraSOCstart, utils.checkParamInput, utils.checkTimeUnit, utils.equalStrings, utils.setFormattedTimeSeries, utils.checkInvestmentPeriodsCommodityConversion.
  • Component: unused parameter isStateOfCharge removed (#650).
  • Dependency floors raised: pandas>=2.2.0,<3.0.0, tsam==3.4.2 (pinned because of a tsam bug), pyomo>=6.8.1, scikit-learn>=1.3.0, xarray>=2023.4.1, pwlf>=2.5.0, gurobi-logtools>=3.2.0. gurobipy and highspy are now regular runtime dependencies. Python >=3.10,<3.15.
  • Docs dependencies switched from Sphinx to the MkDocs stack in the develop extra.

Features

  • Ramping constraints (#511). Inter-period ramp limits for Conversion components via rampUpMax / rampDownMax, including support for time series aggregation.
  • Location-specific commodity conversion factors (#619). Conversion factors can now be given per location, optionally as time series and per investment period; they need only be defined for eligible locations.
  • Minimum downtime for ConversionDynamic (#804). New minimumDowntimeRequired flag: each eligible component/location must be offline for at least downTimeMin hours per investment period, reusing the existing binary operation status. Requires downTimeMin and cyclic temporal constraints; time series aggregation and segmentation are rejected for now.
  • Shadow prices in the xarray/netCDF output (#545). Shadow-price time series for a user-defined constraint can be written to the xarray result and via writeEnergySystemModelToNetCDF. Multi-investment-period models emit a warning.
  • Centralized solver selection with fallback (#627, #651–#657). Solver detection lives in fine.utils (set_standard_solver) and is applied from fine/__init__.py, so models and tests fall back to an available solver instead of failing on a hardcoded one.
  • Enums for string options (#747). New fine/enums.py with string-backed enums for component abbreviations, dimensions, variable/cost/function types and ramping types. Legacy string values are preserved, so saved models and IO stay compatible.
  • Plotting: plotPieChart is exposed at package level (#753) and no longer duplicated in __init__; plot functions gained test coverage (#708).
  • Validation: shared-potential check raises when fixed shared potentials exceed the maximum capacity (#705); a warning is issued when hasCapacityVariable=True together with an operation rate > 1 (#717).

Bug fixes

  • Cyclic lifetime constraint is now enforced per commissioning year in multi-period storage models (#685).
  • Fixed the binaryOperation2_ constraint (#522).
  • Fixed the piecewise-linear cost function module with multiple components (#516).
  • Fixed wrong coordinates in the xarray output of transmission components (#543) and further xarray output issues (#542).
  • Time series of regions with zero capacity or no eligibility are no longer passed to tsam (#541).
  • Missing solutions from GLPK are caught instead of failing opaquely (#689).
  • Fixed concurrent-write failure in the netCDF round-trip test (#621) and resolved test infeasibilities (#692, #667).
  • Fixed Renovate prefix collisions in the custom regex manager (#687) and the conda-forge routing for gurobi-logtools (#646).
  • Fixed the Read the Docs build (#537).

Code quality

  • assert statements removed from library code (#691); exception handling narrowed in the core modules (#720).
  • Wildcard imports reduced (#707); print replaced by the logging module (#665).
  • Dynamic getattr/setattr/hasattr with fixed names replaced by direct attribute access (#767).
  • xarray output functions simplified (#719); time series creation extracted from aggregateTemporally (#746).
  • Extended ruff coverage plus missing docstrings (#527), general codebase cleanup (#553), spelling fixes (#662), and fewer warnings in the test suite (#666).

Documentation

  • Migrated from Sphinx to MkDocs Material (#612), with branding and link cleanup (#793) and a new FINE logo (#637).
  • API documentation for the conversionPartLoad subclass (#688) and an improved balanceLimit docstring (#523).
  • Installation instructions now use the fine_env conda environment.
  • Added the JuRSE Code of the Month badge.

Infrastructure

  • Workflows migrated to uv and to the v1 workflow set (#651); Gurobi is used in CI for speed (#632).
  • Pytest markers allow long optimization tests to run in parallel (#641).
  • Dependency ranges are tested from a single source of truth with Renovate driving automatic range updates (#563), plus a dedicated scheduled workflow for dependency-version testing (#669).
  • GitLab/JuGit mirroring workflows consolidated; codecov configuration added.

Dependency updates

Notable bumps: numpy<=2.5.0, pandas>=2.2,<3, xarray<=2026.7.0, pyomo<=6.10.1, scikit-learn<=1.9.0, geopandas<=1.1.4, matplotlib<=3.11.1, scipy<=1.17.1, rasterio<=1.5.0, netcdf4<=1.7.4, tsam==3.4.2, pwlf<=2.6.0, gurobipy<=13.0.2, highspy<=1.15.1, gurobi-logtools<=4.0.1, psutil<=7.2.2, pytest<=9.1.1, pytest-cov<=7.1.0, pytest-xdist<=3.8.0, ipykernel<=7.2.0, ruff<=0.13.1.

Full Changelog: https://github.com/FZJ-IEK3-VSA/FINE/compare/v2.6.0...v2.7.0

Energy Systems - Energy System Modeling Frameworks - Python
Published by JohannesBehrens 22 days ago

FINE - v2.6.0

Energy Systems - Energy System Modeling Frameworks - Python
Published by julian-belina 6 months ago

FINE - Version 2.5.0

Release notes
Version 2.5.0 introduces the following changes:

  • yearlyLimit got removed from fine code in favor of balanceLimit, which allows formulation of lower and upper bounds and can be specified for all modelled regions.
  • Integrate Linting rules via ruff
  • Improve parameter checks to also check for np.nan values
  • Include economies of scale in the Piecewise Linear Cost Function expansion module
  • Improve documentation via docstrings
  • Include sos2 constraints for Endogenous Technological Learning
  • Include Speed Up Constraints for Endogenous Technological Learning
  • Use pathlib package instead of os
  • Improve ci test to run for different package versions of several dependencies

Furthermore, the following bugs were fixed:

  • Include missing variables optimum after export to xarray
  • Truncate sheet names to allow Excel export for all model classes
  • Update pyproject.toml to ensure installation of fine
  • Binary variables in conversion dynamic are not set up if only rampUpMax or rampDownMax are specified
  • Bug fix in export of transmission operation
  • Bug fix for legend in map plots
  • Bug fix for setOptimalValues method in pwlcf model

Energy Systems - Energy System Modeling Frameworks - Python
Published by JohannesBehrens 10 months ago

FINE - Version 2.4.1

Version 2.4.1 introduces the following changes:

  • Allow calculation of curtailment from xarray export if time series aggregation is used
  • Allow combination of part load min components and segmentation
  • Include operation per year into netCDF export
  • Improve mathematical description of framework
  • Allow investment period dependent time series for SOC Min/ Max
  • Introde endogenous technological learning for fine components as subclass
  • Add performance summary to netCDF export

Furthermore the following bugs were fixed:

  • Bug fix transmission components when exported to netCDF
  • Bug fix for netCDF export of flexible conversion components
  • Bug fix for discharge operation in storage optimization summary
  • Bug fix for multi-regional example

Energy Systems - Energy System Modeling Frameworks - Python
Published by JohannesBehrens over 1 year ago

FINE - Version 2.4.0

  • Introduces flexible components of the Conversion class. This allows for conversion components that can choose their input or output from different commodities. The share of each commodity can be limited by a flowShare. Emissions can be assigned by emissionFactors specific to a commodity.
  • Allow intermittent pathway parameters (e.g., capacityFix). Pathway parameters can now be defined only for single investment periods, while being None for others.
  • Fixes bug in models using gurobi.
  • Improves data type checking.

Energy Systems - Energy System Modeling Frameworks - Python
Published by JohannesBehrens almost 2 years ago

FINE - Version 2.3.8

  • Fixes bug for multi period data for Transmission components. Error message has been improved.
  • Fixes bug in Storage init. Handle empty dict for operationTimeSeries if no timeseries data is set by setting it to None.
  • Fixes bug for capexIfBuilt in optimization summary. Previously it displayed NPV, now it is TAC.

Energy Systems - Energy System Modeling Frameworks - Python
Published by k-knosala about 2 years ago

FINE - Version 2.3.7

  • Fixes a bug in the serialization to datasets of timeseries data in Transmission components
    • Treating the processing of Transmisison components separately when creating xrds input data in addDFVariablesToXarray
    • Updating addTimeSeriesVariableToDict to allow operationRates for Transmisison components
  • Adds solver_io="python" to the execution of Gurobi if gurobipy is installed
  • Adds the dimension parameter 2dim in checkAndSetInvestmentPeriodTimeSeries in transmission.py to fix operation time series for transmission components
  • Deletes doubled function in utils.py

Energy Systems - Energy System Modeling Frameworks - Python
Published by k-knosala over 2 years ago

FINE - Version 2.3.6

  • Allow for python>=3.10<3.13, limit dependencies to the next major version
  • Add dependencies to pyproject.toml for pip install
  • Update community guidelines, documentation, examples

Energy Systems - Energy System Modeling Frameworks - Python
Published by k-knosala over 2 years ago

FINE - Version 2.3.5

Version 2.3.5 adds the functionality to pass maximum, minium and fixed values to the commissioning variables and growth rates for comissioning constraints. Set CommissioningMin for a lower bound, CommissioningMax for an upper bound and CommissioningFix to set the lower and upper bounds to the same value.

Energy Systems - Energy System Modeling Frameworks - Python
Published by k-knosala over 2 years ago

FINE - Version 2.3.4

Version 2.3.4 introduces the following functionality:

  • operationRateMin for components

Furthermore, it introduces the following changes:

  • Installation
    • Remove the pip install from requirements.yml. It has to be run manually now.
  • Testing
    • Run Pytest in parallel with pytest-xdist
    • Add test workflows on GitHub actions to test the installtion on Windows, Mac and Ubuntu Linux
  • Documentation
    • Deprecate the news feed in the documentation in favor of GitHub release notes
  • Requirements
    • Fix Python version to 3.10
    • Restrict scikit-learn>=1.2 because of not backward compatible changes in that version
    • Remove GDAL since it is a secondary requirement
    • Adaptions to Pandas 2.2 in preparation of version 3.0, which will introduce breaking changes

Energy Systems - Energy System Modeling Frameworks - Python
Published by k-knosala over 2 years ago

FINE - Version 2.3.3

ETHOS.FINE release 2.3.3 provides the following changes:

Functionality

  • Add a the possibility to set a minimal operation rate in the Conversion class

Maintenance

  • Use relative paths in tests to prevent errors when using different working directories
  • Update scikitLearn in the requirements and adapt breaking changes in version >1.2

Energy Systems - Energy System Modeling Frameworks - Python
Published by k-knosala over 2 years ago

FINE - Version 2.3.2

IMPORTANT: The name of the package folder has been changed from FINE to fine in this release. If you still see a FINE folder locally after pulling the latest change, you might need to clone the repository to a new folder.

Further, FINE release 2.3.2 provides changes in the requirements:

  • Pin GDAL to version 3.4.3 because version 3.4.1 is not compatible with the latest Fiona versions.
  • Change the repository of gurobi-logtools from pypi to conda-forge.

Energy Systems - Energy System Modeling Frameworks - Python
Published by k-knosala over 2 years ago

FINE - Version 2.3.1

ETHOS.FINE release 2.3.1

  • Adds a performance summary as attribute EnergySystemModel.performanceSummary. The performance summary includes Data about RAM usage (assesed by the psutil package), Gurobi values (extracted from gurobi log with the grblogtools package) and other various parameters such as model buildtime, runtime and time series aggregation paramerters.
  • Fixes a bug in the stochastic optimization example.
  • Makes subclass conversionPartLoad usable again. The nSegments parameter has to be set manually depending on the form of the non-linear function.
  • Drops the constraint on the version of pandas to also work with versions lower than 2.

Energy Systems - Energy System Modeling Frameworks - Python
Published by k-knosala almost 3 years ago

FINE - Version 2.3.0

FINE release (2.3.0) provides new major functionalities:

  • Representation of multiple investment periods in a transformation pathway (perfect foresight) or for single year optimization (stochastic optimization)
  • Consideration of CO2 budgets for the full transformation pathway
  • Consideration of stock including techno-economic parameters depending on commissioning date
  • Variable efficiencies for conversion components depending on commissioning date and operation time
  • Additional or lowered costs for components which are not present for full investment periods

The ConversionPartLoad class is not supported in this release due to the deprecated package GPyOpt.
The installation method has been changed from setup.py to pyproject.toml.

Energy Systems - Energy System Modeling Frameworks - Python
Published by k-knosala almost 3 years ago

FINE - Version 2.2.3

FINE release (2.2.3) fixes installation problems due to changes in dependencies. This limits the versions of numpy, pandas and pyomo. The changes in these dependencies will be reflected in a future version.

Energy Systems - Energy System Modeling Frameworks - Python
Published by k-knosala about 3 years ago

FINE - Version 2.2.2

FINE release (2.2.2) provides new major functionalities:

  • Add netCDF compatibility for import and export of EnergySystemModel instances to store input and output data.
  • Add generic spatial aggregation and technology aggregation functions for complexity reduction of models with high spatial resolution

Black autoformatting was applied to make the source code easier to read and to simplify contributions.
Additionally, the installation guide was revised to make the installation easier to handle.

Energy Systems - Energy System Modeling Frameworks - Python
Published by k-knosala over 3 years ago

FINE - Version 2.2.1

FINE release (2.2.1) provides some changes in code including

  • compatibility to newer versions of pandas (bugs due to reading .xlsx files are fixed)
  • correct zlabel description for plotLocationalColorMap in standardIO.py
  • add some more documentation to functions

FINE release (2.2.1) fixes a bug in storage.py

  • constraints for chargeOperationMax, chargeOperationFix, disChargeOperationMax and dischargeOperationFix should be set up without an error message.

Energy Systems - Energy System Modeling Frameworks - Python
Published by k-knosala over 3 years ago

FINE - Version 2.2.0

FINE release (2.2.0) provides some changes in code including bug fixes for

  • plotOperationColorMap (issubclass error should not occur anymore)
  • default solver (default solver is changed to None; it is searched for an available solver if no solver is specified)
  • transmission components: capacityMin and opexPerOperation can be given as a pandas DataFrame
  • postprocessing: no ValueError occur if components are not chosen in the optimized solution
  • postprocessing: optimizationSummary is ordered correctly s.t. properties are assigned to the corresponding component.

New features were included:

  • New keyword argument linkedQuantityID: The number of different components can be forced to be the same.
  • Enable time-dependent conversion factors (e.g. for modeling heat pumps)
  • Add warning for simultaneous charge and discharge of storage components; users can check if and when simultaneous charge and discharge of storage components occur
  • Add operation value for considered time horizon in the optimizationSummary
  • Add new attribute objectiveValue to EnergySystemModel class

Energy Systems - Energy System Modeling Frameworks - Python
Published by t-gross over 5 years ago

FINE - Version 2.1.1

The FINE version 2.1.1 includes

  • bug fix: drop issubclass() - query
  • minor changes in documentation
  • bug fix: missing output labels
  • bug fix: operationRateFix and operationRateMax for transmission components

Energy Systems - Energy System Modeling Frameworks - Python
Published by t-gross almost 6 years ago

FINE - Version 2.1.0

FINE version 2.1.0 including

  • segmentation
  • bugfix for TAC (transmission components)
  • bugfix for yearlyLimitConstraints
  • Changes in the docs
  • Updated README.md (new links; logos)

Energy Systems - Energy System Modeling Frameworks - Python
Published by t-gross about 6 years ago

FINE - Version 1.0.2

Expanded documentation

Energy Systems - Energy System Modeling Frameworks - Python
Published by l-welder over 7 years ago

FINE - Version 1.0.1

Energy Systems - Energy System Modeling Frameworks - Python
Published by l-welder over 7 years ago

FINE - Version 1.0.0

First pypi version

Energy Systems - Energy System Modeling Frameworks - Python
Published by l-welder almost 8 years ago