Skip to content

Commit bdcfa61

Browse files
committed
Improved CHANGELOG readibility
1 parent eebc894 commit bdcfa61

1 file changed

Lines changed: 86 additions & 74 deletions

File tree

CHANGELOG.md

Lines changed: 86 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -2,117 +2,129 @@
22

33
All notable changes to this project will be documented in this file.
44

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)
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

88
## [Unreleased]
99

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`
1714

1815
### 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.
3043

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)
3946

4047
### Known Issues
4148
* Scenarios are not yet supported in `AggregatedCalculation` and `SegmentedCalculation`
4249

43-
### Development
44-
* Greatly improved testing by directly asserting for the correctness of the created equations and variables (and their bounds).
45-
4650
## [2.1.2] - 2025-06-14
4751

4852
### 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`
5257

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)
5560

5661
## [2.1.1] - 2025-05-08
5762

5863
### 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
6065

6166
### Changed
62-
- Improved docstring and tests
67+
* Improved docstrings and tests
6368

6469
## [2.1.0] - 2025-04-11
6570

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+
6678
### 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
7082

7183
### 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)
8287

8388
## [2.0.1] - 2025-04-10
8489

85-
### Added
86-
- Logger warning if relative_minimum is used without on_off_parameters in Flow
87-
8890
### 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
9196

9297
## [2.0.0] - 2025-03-29
9398

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)
99106

100107
### 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
110122

111123
### 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
115127

116128
### 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

Comments
 (0)