|
2 | 2 |
|
3 | 3 | All notable changes to this project will be documented in this file. |
4 | 4 |
|
5 | | -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), |
| 5 | +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and [gitmoji](https://gitmoji.dev) |
6 | 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
7 | 7 |
|
8 | 8 | ## [Unreleased] |
9 | 9 |
|
10 | | -### Fixed |
11 | | -* Fixed formating issues in the yaml model documentation (line breaks) |
12 | | - |
13 | | -### Breaking Changes: |
14 | | -* Removed `kind` in favor of `style` in plotting functions. |
15 | | -* Renamed `TimeSeries.active_data` to `TimeSeries.selected_data` |
16 | | -* `CalculationResults.flow_system` now returns the restorded FlowSystem instead of the `xr.Dataset`. The data can be found under `flow_system_data`. |
| 10 | +### 🚨 Breaking Changes |
| 11 | +* **🚨 BREAKING**: Removed `kind` in favor of `style` in plotting functions |
| 12 | +* **🚨 BREAKING**: Renamed `TimeSeries.active_data` to `TimeSeries.selected_data` |
| 13 | +* **🚨 BREAKING**: `CalculationResults.flow_system` now returns the restored FlowSystem instead of the `xr.Dataset`. The data can be found under `flow_system_data` |
17 | 14 |
|
18 | 15 | ### Added |
19 | | -* **Scenarios:** |
20 | | - * Scenarios can now be used to model uncertainties in the flow system, such as: |
21 | | - * Scenarios are passed to a `FlowSystem`. The total objective effect of each scenario is multiplied by a `scenario_weight`. This forms the objective of the optimization. |
22 | | -* **`CalculationResults`:** |
23 | | - * New dedicated `FlowResults`. |
24 | | - * Dedicated xr.DataArrays for all **flow_rates**, **flow_hours**, and **sizes** of flows are availlable. |
25 | | - * Use `effects_per_component()` to retrieve all effects results for every Component. This includes indirect effects that hove their origin in an element, but are inflicted by another effect (ElementA --> CO2 --> Costs)) |
26 | | -* Balanced storage - Storage charging and discharging sizes can now be forced to be equal when optimizing their size by choosing `balanced=True`. |
27 | | -* Plotting styles can now be changed for all plots. (stacked_bar, line, area) |
28 | | -* Added plotting style `grouped_bar` |
29 | | -* Support for pandas.Series and pandas.DataFrame when setting parameters of Elements (internally converted to xarray.DataArrays) |
| 16 | +#### Major Features |
| 17 | +* **Scenarios**: Model uncertainties or **Multi-Period Transformations** |
| 18 | + * Scenarios are passed to a `FlowSystem` with `scenario_weight` multipliers |
| 19 | + * Total objective effect of each scenario forms the optimization objective |
| 20 | + * Sizes might be optimized for each scenario separately, globally or only for a subset of all scenarios (See `InvestmentParameters`). |
| 21 | +* **Balanced Storage**: Storage charging and discharging sizes can now be forced to be equal when optimizing by choosing `balanced=True` |
| 22 | + |
| 23 | +#### Results & Analysis |
| 24 | +* **New dedicated `FlowResults` class |
| 25 | + * Dedicated xr.DataArrays combining all **flow_rates**, **flow_hours**, or **sizes** of flows |
| 26 | + * Use `effects_per_component()` to retrieve all effects results for every Component, including indirect effects (ElementA → CO2 → Costs) |
| 27 | + |
| 28 | +#### API Improvements |
| 29 | +* Support for pandas.Series and pandas.DataFrame when setting Element parameters (internally converted to xarray.DataArrays) |
| 30 | +* Improved internal datatypes for clearer data format requirements: |
| 31 | + * `Scalar` for scalar values only |
| 32 | + * `TimestepData` for time-indexed data (with optional scenario dimension) |
| 33 | + * `ScenarioData` for scenario-dimensional data |
| 34 | + |
| 35 | +#### Plotting & Visualization |
| 36 | +* All plotting styles available for both plotly and matplotlib plots: `stacked_bar`, `line`, `area` |
| 37 | +* Added `grouped_bar` plotting style |
| 38 | +* Changed default legend location in plots (now on the right side) |
| 39 | + |
| 40 | +### Deprecated |
| 41 | +* `Calculation.active_timesteps` → Use `Calculation.selected_timesteps` instead |
| 42 | +* ⚠️ Loading Results from prior versions will raise warnings due to FlowResults incompatibility. Some new features cannot be used. |
30 | 43 |
|
31 | | -### Changed |
32 | | -* Improved internal Datatypes to make needed data format more obvious: `Scalar` for only scalar values, `TimestepData` for time-indexed data (which might have a scenario dimension), `ScenarioData` for data with a scenario dimension. |
33 | | -* `InvestmentParameters` now have a `investment_scenarios` parameter to define which scenarios to define how to optimize the size across scenarios |
34 | | -* Changed legend location in plots |
35 | | - |
36 | | -### Deprecations |
37 | | -* Renamed `Calculation.active_timesteps` to `Calculation.selected_timesteps` |
38 | | -* A warning is raised if Results prior ti this version are loaded, as this prevents the FLowResults from being created. |
| 44 | +### Fixed |
| 45 | +* Fixed formatting issues in YAML model documentation (line breaks) |
39 | 46 |
|
40 | 47 | ### Known Issues |
41 | 48 | * Scenarios are not yet supported in `AggregatedCalculation` and `SegmentedCalculation` |
42 | 49 |
|
43 | | -### Development |
44 | | -* Greatly improved testing by directly asserting for the correctness of the created equations and variables (and their bounds). |
45 | | - |
46 | 50 | ## [2.1.2] - 2025-06-14 |
47 | 51 |
|
48 | 52 | ### Fixed |
49 | | -- Storage losses per hour where not calculated correctly, as mentioned by @brokenwings01. This might have lead to issues with modeling large losses and long timesteps. |
50 | | - - Old implementation: $c(\text{t}_{i}) \cdot (1-\dot{\text{c}}_\text{rel,loss}(\text{t}_i)) \cdot \Delta \text{t}_{i}$ |
51 | | - - Correct implementation: $c(\text{t}_{i}) \cdot (1-\dot{\text{c}}_\text{rel,loss}(\text{t}_i)) ^{\Delta \text{t}_{i}}$ |
| 53 | +* **🐛 Critical Fix**: Storage losses per hour calculation corrected (thanks @brokenwings01) |
| 54 | + * **Impact**: Affects modeling of large losses and long timesteps |
| 55 | + * **Old**: `c(t_i) · (1-ċ_rel,loss(t_i)) · Δt_i` |
| 56 | + * **Correct**: `c(t_i) · (1-ċ_rel,loss(t_i))^Δt_i` |
52 | 57 |
|
53 | | -### Known issues |
54 | | -- Just to mention: Plotly >= 6 may raise errors if "nbformat" is not installed. We pinned plotly to <6, but this may be fixed in the future. |
| 58 | +### Known Issues |
| 59 | +* Plotly >= 6 may raise errors if "nbformat" is not installed (pinned to <6 for now) |
55 | 60 |
|
56 | 61 | ## [2.1.1] - 2025-05-08 |
57 | 62 |
|
58 | 63 | ### Fixed |
59 | | -- Fixed bug in the `_ElementResults.constraints` not returning the constraints but rather the variables |
| 64 | +* Fixed `_ElementResults.constraints` returning variables instead of constraints |
60 | 65 |
|
61 | 66 | ### Changed |
62 | | -- Improved docstring and tests |
| 67 | +* Improved docstrings and tests |
63 | 68 |
|
64 | 69 | ## [2.1.0] - 2025-04-11 |
65 | 70 |
|
| 71 | +### 🚨 Breaking Changes |
| 72 | +* **🚨 BREAKING**: Restructured On/Off state modeling for Flows and Components |
| 73 | + * Variable renaming: `...|consecutive_on_hours` → `...|ConsecutiveOn|hours` |
| 74 | + * Variable renaming: `...|consecutive_off_hours` → `...|ConsecutiveOff|hours` |
| 75 | + * Constraint renaming: `...|consecutive_on_hours_con1` → `...|ConsecutiveOn|con1` |
| 76 | + * Similar pattern applied to all consecutive on/off constraints |
| 77 | + |
66 | 78 | ### Added |
67 | | -- Python 3.13 support added |
68 | | -- Logger warning if relative_minimum is used without on_off_parameters in Flow |
69 | | -- Greatly improved internal testing infrastructure by leveraging linopy's testing framework |
| 79 | +* **Python 3.13 support** |
| 80 | +* Enhanced testing infrastructure leveraging linopy's testing framework |
| 81 | +* Logger warnings for `relative_minimum` usage without `on_off_parameters` in Flow |
70 | 82 |
|
71 | 83 | ### Fixed |
72 | | -- Fixed the lower bound of `flow_rate` when using optional investments without OnOffParameters |
73 | | -- Fixed bug that prevented divest effects from working |
74 | | -- Added lower bounds of 0 to two unbounded vars (numerical improvement) |
75 | | - |
76 | | -### Changed |
77 | | -- **BREAKING**: Restructured the modeling of the On/Off state of Flows or Components |
78 | | - - Variable renaming: `...|consecutive_on_hours` → `...|ConsecutiveOn|hours` |
79 | | - - Variable renaming: `...|consecutive_off_hours` → `...|ConsecutiveOff|hours` |
80 | | - - Constraint renaming: `...|consecutive_on_hours_con1` → `...|ConsecutiveOn|con1` |
81 | | - - Similar pattern for all consecutive on/off constraints |
| 84 | +* Fixed `flow_rate` lower bound issues with optional investments without OnOffParameters |
| 85 | +* Fixed divest effects functionality |
| 86 | +* Added missing lower bounds of 0 to unbounded variables (numerical stability improvement) |
82 | 87 |
|
83 | 88 | ## [2.0.1] - 2025-04-10 |
84 | 89 |
|
85 | | -### Added |
86 | | -- Logger warning if relative_minimum is used without on_off_parameters in Flow |
87 | | - |
88 | 90 | ### Fixed |
89 | | -- Replace "|" with "__" in filenames when saving figures (Windows compatibility) |
90 | | -- Fixed bug that prevented the load factor from working without InvestmentParameters |
| 91 | +* **Windows Compatibility**: Replace "|" with "__" in figure filenames |
| 92 | +* Fixed load factor functionality without InvestmentParameters |
| 93 | + |
| 94 | +### Added |
| 95 | +* Logger warning for `relative_minimum` usage without `on_off_parameters` in Flow |
91 | 96 |
|
92 | 97 | ## [2.0.0] - 2025-03-29 |
93 | 98 |
|
94 | | -### Changed |
95 | | -- **BREAKING**: Complete migration from Pyomo to Linopy optimization framework |
96 | | -- **BREAKING**: Redesigned data handling to rely on xarray.Dataset throughout the package |
97 | | -- **BREAKING**: Framework renamed from flixOpt to flixopt (`import flixopt as fx`) |
98 | | -- **BREAKING**: Results handling completely redesigned with new `CalculationResults` class |
| 99 | +### 🚨 Breaking Changes |
| 100 | +* **🚨 BREAKING**: Complete migration from Pyomo to Linopy optimization framework |
| 101 | +* **🚨 BREAKING**: Redesigned data handling using xarray.Dataset throughout |
| 102 | +* **🚨 BREAKING**: Framework renamed from flixOpt to flixopt (`import flixopt as fx`) |
| 103 | +* **🚨 BREAKING**: Complete redesign of Results handling with new `CalculationResults` class |
| 104 | +* **🚨 BREAKING**: Removed Pyomo dependency |
| 105 | +* **🚨 BREAKING**: Removed Period concepts (simplified to timesteps) |
99 | 106 |
|
100 | 107 | ### Added |
101 | | -- Full model serialization support - save and restore unsolved Models |
102 | | -- Enhanced model documentation with YAML export containing human-readable mathematical formulations |
103 | | -- Extend flixopt models with native linopy language support |
104 | | -- Full Model Export/Import capabilities via linopy.Model |
105 | | -- Unified solution exploration through `Calculation.results` attribute |
106 | | -- Compression support for result files |
107 | | -- `to_netcdf/from_netcdf` methods for FlowSystem and core components |
108 | | -- xarray integration for TimeSeries with improved datatypes support |
109 | | -- Google Style Docstrings throughout the codebase |
| 108 | +#### Major Features |
| 109 | +* **Full model serialization**: Save and restore unsolved Models |
| 110 | +* **Enhanced model documentation**: YAML export with human-readable mathematical formulations |
| 111 | +* **Native linopy integration**: Extend flixopt models with linopy language support |
| 112 | +* **Model Export/Import**: Full capabilities via linopy.Model |
| 113 | + |
| 114 | +#### Results & Analysis |
| 115 | +* **Unified solution exploration** through `Calculation.results` attribute |
| 116 | +* **Compression support** for result files |
| 117 | +* **xarray integration** for TimeSeries with improved datatypes support |
| 118 | + |
| 119 | +#### API Improvements |
| 120 | +* `to_netcdf/from_netcdf` methods for FlowSystem and core components |
| 121 | +* Google Style Docstrings throughout codebase |
110 | 122 |
|
111 | 123 | ### Fixed |
112 | | -- Improved infeasible model detection and reporting |
113 | | -- Enhanced time series management and serialization |
114 | | -- Reduced file size through improved compression |
| 124 | +* **Improved infeasible model detection and reporting** |
| 125 | +* Enhanced time series management and serialization |
| 126 | +* Reduced file sizes through better compression |
115 | 127 |
|
116 | 128 | ### Removed |
117 | | -- **BREAKING**: Pyomo dependency (replaced by linopy) |
118 | | -- Period concepts in time management (simplified to timesteps) |
| 129 | +- **🚨 BREAKING**: Pyomo dependency (replaced by linopy) |
| 130 | +- **🚨 BREAKING**: Period concepts in time management (simplified to timesteps) |
0 commit comments