Skip to content

Commit 924ef17

Browse files
authored
Feature/readme and vision (#405)
* Update README.md * Update README.md * Update README.md * Add more badges because they are cool * Add more badges because they are cool * Add more badges because they are cool * Update Development Status to "Stable" * Update the vision * Update the "Why FlixOpt Exists" * Typos * Improve "User-Friendly Design" * Restructure the README.md * Update getting started * Tighten README.md * Add Roaadmap to docs * Make roadmap more compact * Updaet roadmap.md * Update roadmap.md * Update mkdocs.yml * Update roadmap.md
1 parent d6bb01f commit 924ef17

4 files changed

Lines changed: 177 additions & 64 deletions

File tree

README.md

Lines changed: 124 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -3,115 +3,178 @@
33
[![Documentation](https://img.shields.io/badge/docs-latest-brightgreen.svg)](https://flixopt.github.io/flixopt/latest/)
44
[![Build Status](https://github.com/flixOpt/flixopt/actions/workflows/python-app.yaml/badge.svg)](https://github.com/flixOpt/flixopt/actions/workflows/python-app.yaml)
55
[![PyPI version](https://img.shields.io/pypi/v/flixopt)](https://pypi.org/project/flixopt/)
6+
[![PyPI status](https://img.shields.io/pypi/status/flixopt.svg)](https://pypi.org/project/flixopt/)
67
[![Python Versions](https://img.shields.io/pypi/pyversions/flixopt.svg)](https://pypi.org/project/flixopt/)
78
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
9+
[![PyPI downloads](https://img.shields.io/pypi/dm/flixopt)](https://pypi.org/project/flixopt/)
10+
[![GitHub last commit](https://img.shields.io/github/last-commit/flixOpt/flixopt)](https://github.com/flixOpt/flixopt/commits/main)
11+
[![GitHub issues](https://img.shields.io/github/issues/flixOpt/flixopt)](https://github.com/flixOpt/flixopt/issues)
12+
[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/flixOpt/flixopt/main.svg)](https://results.pre-commit.ci/latest/github/flixOpt/flixopt/main)
13+
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
14+
[![Powered by linopy](https://img.shields.io/badge/powered%20by-linopy-blue)](https://github.com/PyPSA/linopy/)
15+
[![Powered by xarray](https://img.shields.io/badge/powered%20by-xarray-blue)](https://xarray.dev/)
16+
[![DOI](https://img.shields.io/badge/DOI-10.18086%2Feurosun.2022.04.07-blue)](https://doi.org/10.18086/eurosun.2022.04.07)
17+
[![GitHub stars](https://img.shields.io/github/stars/flixOpt/flixopt?style=social)](https://github.com/flixOpt/flixopt/stargazers)
818

919
---
1020

11-
## 🎯 Vision
21+
**FlixOpt is a Python framework for optimizing energy and material flow systems** - from district heating networks to industrial production lines, from renewable energy portfolios to supply chain logistics.
1222

13-
**FlixOpt aims to be the most accessible and flexible Python framework for energy and material flow optimization.**
23+
**Start simple, scale complex:** Build a working optimization model in minutes, then progressively add detail - multi-period investments, stochastic scenarios, custom constraints - without rewriting your code.
1424

15-
We believe that optimization modeling should be **approachable for beginners** yet **powerful for experts**. Too often, frameworks force you to choose between ease of use and flexibility. FlixOpt refuses this compromise.
16-
17-
### Where We're Going
25+
---
1826

19-
**Short-term goals:**
20-
- **Multi-dimensional modeling**: Full support for multi-period investments and scenario-based stochastic optimization (periods and scenarios are in active development)
21-
- **Enhanced component library**: More pre-built, domain-specific components (sector coupling, hydrogen systems, thermal networks, demand-side management)
27+
## 🚀 Quick Start
2228

23-
**Medium-term vision:**
24-
- **Modeling to generate alternatives (MGA)**: Built-in support for exploring near-optimal solution spaces to produce more robust, diverse solutions under uncertainty
25-
- **Interactive tutorials**: Browser-based, reactive tutorials for learning FlixOpt without local installation
26-
- **Standardized cost calculations**: Align with industry standards (VDI 2067) for CAPEX/OPEX calculations
27-
- **Advanced result analysis**: Time-series aggregation, automated reporting, and rich visualization options
29+
```bash
30+
pip install flixopt
31+
```
2832

29-
**Long-term vision:**
30-
- **Showcase universal applicability**: FlixOpt already handles any flow-based system (supply chains, water networks, production planning, chemical processes) - we need more examples and domain-specific component libraries to demonstrate this
31-
- **Seamless integration**: First-class support for coupling with simulation tools, databases, existing energy system models, and GIS data
32-
- **Robust optimization**: Built-in uncertainty quantification and stochastic programming capabilities
33-
- **Community ecosystem**: Rich library of user-contributed components, examples, and domain-specific extensions
34-
- **Model validation tools**: Automated checks for physical plausibility, data consistency, and common modeling errors
33+
That's it! FlixOpt comes with the [HiGHS](https://highs.dev/) solver included. You're ready to optimize.
3534

36-
### Why FlixOpt Exists
35+
**The basic workflow:**
3736

38-
FlixOpt is a **general-purpose framework for modeling any system involving flows and conversions** - energy, materials, fluids, goods, or data. While energy systems are our primary focus, the same mathematical foundation applies to supply chains, water networks, production lines, and more.
37+
```python
38+
import flixopt as fx
3939

40-
We bridge the gap between high-level strategic models (like [FINE](https://github.com/FZJ-IEK3-VSA/FINE)) for long-term planning and low-level dispatch tools for operations. FlixOpt is the **sweet spot** for:
40+
# 1. Define your system structure
41+
flow_system = fx.FlowSystem(timesteps)
42+
flow_system.add_elements(buses, components, effects)
4143

42-
- **Researchers** who need to prototype quickly but may require deep customization later
43-
- **Engineers** who want reliable, tested components without black-box abstractions
44-
- **Students** learning optimization who benefit from clear, Pythonic interfaces
45-
- **Practitioners** who need to move from model to production-ready results
46-
- **Domain experts** from any field where things flow, transform, and need optimizing
44+
# 2. Create and solve
45+
calculation = fx.FullCalculation("MyModel", flow_system)
46+
calculation.solve()
4747

48-
Built on modern foundations ([linopy](https://github.com/PyPSA/linopy/) and [xarray](https://github.com/pydata/xarray)), FlixOpt delivers both **performance** and **transparency**. You can inspect everything, extend anything, and trust that your model does exactly what you designed.
48+
# 3. Analyze results
49+
calculation.results.solution
50+
```
4951

50-
Originally developed at [TU Dresden](https://github.com/gewv-tu-dresden) for the SMARTBIOGRID project (funded by the German Federal Ministry for Economic Affairs and Energy, FKZ: 03KB159B), FlixOpt has evolved from the Matlab-based flixOptMat framework while incorporating the best ideas from [oemof/solph](https://github.com/oemof/oemof-solph).
52+
**Get started with real examples:**
53+
- 📚 [Full Documentation](https://flixopt.github.io/flixopt/latest/)
54+
- 💡 [Examples Gallery](https://flixopt.github.io/flixopt/latest/examples/) - Complete working examples from simple to complex
55+
- 🔧 [API Reference](https://flixopt.github.io/flixopt/latest/api-reference/)
5156

5257
---
5358

54-
## 🌟 What Makes FlixOpt Different
59+
## 🌟 Why FlixOpt?
5560

56-
### Start Simple, Scale Complex
57-
Define a working model in minutes with high-level components, then drill down to fine-grained control when needed. No rewriting, no framework switching.
61+
### Progressive Enhancement - Your Model Grows With You
5862

63+
**Start simple:**
5964
```python
60-
import flixopt as fx
61-
62-
# Simple start
65+
# Basic single-period model
66+
flow_system = fx.FlowSystem(timesteps)
6367
boiler = fx.Boiler("Boiler", eta=0.9, ...)
64-
65-
# Advanced control when needed - extend with native linopy
66-
boiler.model.add_constraints(custom_constraint, name="my_constraint")
6768
```
6869

69-
### Multi-Criteria Optimization Done Right
70-
Model costs, emissions, resource use, and any custom metric simultaneously as **Effects**. Optimize any single Effect, use weighted combinations, or apply ε-constraints:
70+
**Add complexity incrementally:**
71+
- **Investment decisions** → Add `InvestParameters` to components
72+
- **Multi-period planning** → Add `periods` dimension to FlowSystem
73+
- **Uncertainty modeling** → Add `scenarios` dimension with probabilities
74+
- **Custom constraints** → Extend with native linopy syntax
7175

72-
```python
73-
costs = fx.Effect('costs', '', 'Total costs',
74-
share_from_temporal={'CO2': 180}) # 180 €/tCO2
75-
co2 = fx.Effect('CO2', 'kg', 'Emissions', maximum_periodic=50000)
76-
```
76+
**No refactoring required.** Your component definitions stay the same - periods, scenarios, and features are added as dimensions and parameters.
77+
78+
[Learn more about multi-period and stochastic modeling](https://flixopt.github.io/flixopt/latest/user-guide/mathematical-notation/dimensions/)
79+
80+
### For Everyone
81+
82+
- **Beginners:** High-level components that "just work"
83+
- **Experts:** Full access to modify models with linopy
84+
- **Researchers:** Quick prototyping with customization options
85+
- **Engineers:** Reliable, tested components without black boxes
86+
- **Students:** Clear, Pythonic interfaces for learning optimization
7787

78-
### Performance at Any Scale
79-
Choose the right calculation mode for your problem:
80-
- **Full** - Maximum accuracy for smaller problems
81-
- **Segmented** - Rolling horizon for large time series
82-
- **Aggregated** - Typical periods using [TSAM](https://github.com/FZJ-IEK3-VSA/tsam) for massive models
88+
### Key Features
8389

84-
### Built for Reproducibility
85-
Every result file is self-contained with complete model information. Load it months later and know exactly what you optimized. Export to NetCDF, share with colleagues, archive for compliance.
90+
**Multi-criteria optimization:** Model costs, emissions, resource use - any custom metric. Optimize single objectives or use weighted combinations and ε-constraints.
91+
[Effects documentation](https://flixopt.github.io/flixopt/latest/user-guide/mathematical-notation/effects-penalty-objective/)
92+
93+
**Performance at any scale:** Choose calculation modes without changing your model - Full, Segmented, or Aggregated (using [TSAM](https://github.com/FZJ-IEK3-VSA/tsam)).
94+
[Calculation modes](https://flixopt.github.io/flixopt/latest/api-reference/calculation/)
95+
96+
**Built for reproducibility:** Self-contained NetCDF result files with complete model information. Load results months later - everything is preserved.
97+
[Results documentation](https://flixopt.github.io/flixopt/latest/api-reference/results/)
98+
99+
**Flexible data operations:** Transform FlowSystems with xarray-style operations (`sel()`, `resample()`) for multi-stage optimization.
86100

87101
---
88102

89-
## 🚀 Quick Start
103+
## 🎯 What is FlixOpt?
104+
105+
### A General-Purpose Flow Optimization Framework
106+
107+
FlixOpt models **any system involving flows and conversions:**
108+
109+
- **Energy systems:** District heating/cooling, microgrids, renewable portfolios, sector coupling
110+
- **Material flows:** Supply chains, production lines, chemical processes
111+
- **Integrated systems:** Water-energy nexus, industrial symbiosis
112+
113+
While energy systems are our primary focus, the same foundation applies universally. This enables coupling different system types within integrated models.
114+
115+
### Modern Foundations
116+
117+
Built on [linopy](https://github.com/PyPSA/linopy/) and [xarray](https://github.com/pydata/xarray), FlixOpt delivers **performance** and **transparency**. Full access to variables, constraints, and model structure. Extend anything with native linopy syntax.
118+
119+
### Our Position
120+
121+
We bridge the gap between high-level strategic models (like [FINE](https://github.com/FZJ-IEK3-VSA/FINE)) and low-level dispatch tools - similar to [PyPSA](https://docs.pypsa.org/latest/). FlixOpt is the sweet spot for detailed operational planning and long-term investment analysis in the **same framework**.
122+
123+
### Academic Roots
124+
125+
Originally developed at [TU Dresden](https://github.com/gewv-tu-dresden) for the SMARTBIOGRID project (funded by the German Federal Ministry for Economic Affairs and Energy, FKZ: 03KB159B). FlixOpt evolved from the MATLAB-based flixOptMat framework while incorporating best practices from [oemof/solph](https://github.com/oemof/oemof-solph).
126+
127+
---
128+
129+
## 🛣️ Roadmap
130+
131+
**FlixOpt aims to be the most accessible, flexible, and universal Python framework for energy and material flow optimization.** We believe optimization modeling should be approachable for beginners yet powerful for experts, minimizing context switching between different planning horizons.
132+
133+
**Current focus:**
134+
- Enhanced component library (sector coupling, hydrogen, thermal networks)
135+
- Examples showcasing multi-period and stochastic modeling
136+
- Advanced result analysis and visualization
137+
138+
**Future vision:**
139+
- Modeling to generate alternatives (MGA) for robust decision-making
140+
- Advanced stochastic optimization (two-stage, CVaR)
141+
- Community ecosystem of user-contributed components
142+
143+
[Full roadmap and vision](https://flixopt.github.io/flixopt/latest/roadmap/)
144+
145+
---
146+
147+
## 🛠️ Installation
148+
149+
### Basic Installation
90150

91151
```bash
92152
pip install flixopt
93153
```
94154

95-
That's it. FlixOpt comes with the [HiGHS](https://highs.dev/) solver included - you're ready to optimize.
96-
Many more solvers are supported (gurobi, cplex, cbc, glpk, ...)
155+
Includes the [HiGHS](https://highs.dev/) solver - you're ready to optimize immediately.
156+
157+
### Full Installation
97158

98159
For additional features (interactive network visualization, time series aggregation):
160+
99161
```bash
100162
pip install "flixopt[full]"
101163
```
102164

103-
**Next steps:**
104-
- 📚 [Full Documentation](https://flixopt.github.io/flixopt/latest/)
105-
- 💡 [Examples](https://flixopt.github.io/flixopt/latest/examples/)
106-
- 🔧 [API Reference](https://flixopt.github.io/flixopt/latest/api-reference/)
165+
### Solver Support
166+
167+
FlixOpt supports many solvers via linopy: **HiGHS** (included), **Gurobi**, **CPLEX**, **CBC**, **GLPK**, and more.
168+
169+
[Installation guide](https://flixopt.github.io/flixopt/latest/getting-started/)
107170

108171
---
109172

110173
## 🤝 Contributing
111174

112-
FlixOpt thrives on community input. Whether you're fixing bugs, adding components, improving docs, or sharing use cases - we welcome your contributions.
175+
FlixOpt thrives on community input. Whether you're fixing bugs, adding components, improving docs, or sharing use cases - **we welcome your contributions.**
113176

114-
See our [contribution guide](https://flixopt.github.io/flixopt/latest/contribute/) to get started.
177+
[Contribution guide](https://flixopt.github.io/flixopt/latest/contribute/)
115178

116179
---
117180

docs/roadmap.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# Roadmap and Vision
2+
3+
## 🎯 Our Vision
4+
5+
**FlixOpt aims to be the most accessible, flexible, and universal Python framework for energy and material flow optimization.**
6+
7+
We believe optimization modeling should be **approachable for beginners** yet **powerful for experts**, minimizing context switching between **short-term dispatch** and **long-term investment** planning.
8+
9+
---
10+
11+
## 🚀 Short-term (Next 6 months)
12+
13+
- **Recipe collection** - Community-driven library of common modeling patterns, data manipulation techniques, and optimization strategies
14+
- **Examples of stochastic and multi-period modeling** - The new v3.0 features currently lack comprehensive showcases
15+
- **Advanced result analysis** - Automated reporting and enhanced visualization options
16+
- **Interactive tutorials** - Browser-based, reactive tutorials for learning FlixOpt without local installation using [Marimo](https://marimo.io/)
17+
18+
## 🔮 Medium-term (6-12 months)
19+
20+
- **Modeling to Generate Alternatives (MGA)** - Built-in support for exploring near-optimal solution spaces to produce more robust, diverse solutions under uncertainty. See [PyPSA](https://docs.pypsa.org/latest/user-guide/optimization/modelling-to-generate-alternatives/) and [Calliope](https://calliope.readthedocs.io/en/latest/examples/modes/) for reference implementations
21+
- **Advanced stochastic optimization** - Build sophisticated new `Calculation` classes to perform different stochastic optimization approaches, like PyPSA's [two-stage stochastic programming and risk preferences with Conditional Value-at-Risk (CVaR)](https://docs.pypsa.org/latest/user-guide/optimization/stochastic/)
22+
- **Enhanced component library** - More pre-built, domain-specific components (sector coupling, hydrogen systems, thermal networks, demand-side management)
23+
24+
## 🌟 Long-term (12+ months)
25+
26+
- **Showcase universal applicability** - FlixOpt already handles any flow-based system (supply chains, water networks, production planning, chemical processes) - we need more examples and domain-specific component libraries to demonstrate this
27+
- **Community ecosystem** - Rich library of user-contributed components, examples, and domain-specific extensions
28+
29+
---
30+
31+
## 🤝 How to Help
32+
33+
- **Code**: Implement features, fix bugs, add tests
34+
- **Docs**: Write tutorials, improve examples, create case studies
35+
- **Components**: Contribute domain-specific components
36+
- **Feedback**: [Report issues](https://github.com/flixOpt/flixopt/issues), [join discussions](https://github.com/flixOpt/flixopt/discussions)
37+
38+
See our [contribution guide](contribute.md) to get started.
39+
40+
---
41+
42+
## 📅 Release Philosophy
43+
44+
FlixOpt follows [semantic versioning](https://semver.org/):
45+
- **Major** (v3→v4): Breaking changes, major features
46+
- **Minor** (v3.0→v3.1): New features, backward compatible
47+
- **Patch** (v3.0.0→v3.0.1): Bug fixes only
48+
49+
Target: Patch releases as needed, minor releases every 2-3 months.

mkdocs.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,10 @@ repo_name: flixOpt/flixopt
1010

1111
nav:
1212
- Home: index.md
13-
- Getting Started: getting-started.md
1413
- User Guide:
1514
- user-guide/index.md
1615
- Migration to v3.0.0: user-guide/migration-guide-v3.md
17-
- Recipes: user-guide/recipes/index.md
16+
- Getting Started: getting-started.md
1817
- Mathematical Notation:
1918
- Overview: user-guide/mathematical-notation/index.md
2019
- Dimensions: user-guide/mathematical-notation/dimensions.md
@@ -33,6 +32,8 @@ nav:
3332
- Bounds and States: user-guide/mathematical-notation/modeling-patterns/bounds-and-states.md
3433
- Duration Tracking: user-guide/mathematical-notation/modeling-patterns/duration-tracking.md
3534
- State Transitions: user-guide/mathematical-notation/modeling-patterns/state-transitions.md
35+
- Recipes: user-guide/recipes/index.md
36+
- Roadmap: roadmap.md
3637
- Examples: examples/
3738
- Contribute: contribute.md
3839
- API Reference: api-reference/

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ maintainers = [
2121
]
2222
keywords = ["optimization", "energy systems", "numerical analysis"]
2323
classifiers = [
24-
"Development Status :: 3 - Alpha",
24+
"Development Status :: 5 - Production/Stable",
2525
"Programming Language :: Python :: 3.10",
2626
"Programming Language :: Python :: 3.11",
2727
"Programming Language :: Python :: 3.12",

0 commit comments

Comments
 (0)