Skip to main content

Energy system optimization with linopy — progressive modeling, from simple to complex.

Project description

fluxopt

Energy system optimization with linopy — detailed dispatch, scaled to multi period planning.

PyPI Downloads License: MIT Python 3.12+ Ruff

Early development — the API may change between releases. Planned features and progress are tracked in Issues.

Installation

pip install fluxopt

Includes the HiGHS solver out of the box.

Quick Start

# A gas boiler covers a heat demand, minimizing fuel cost
from datetime import datetime
from fluxopt import Carrier, Converter, Effect, Flow, Port, optimize

result = optimize(
    timesteps=[datetime(2024, 1, 1, h) for h in range(4)],
    carriers=[Carrier(id='gas'), Carrier(id='heat')],
    effects=[Effect(id='cost')],
    ports=[
        Port(id='grid', imports=[
            Flow(carrier='gas', size=500, effects_per_flow_hour={'cost': 0.04})
        ]),
        Port(id='demand', exports=[
            Flow(carrier='heat', size=100, fixed_relative_profile=[0.4, 0.7, 0.5, 0.6])
        ])
    ],
    converters=[
        Converter.boiler(
            'boiler',
            thermal_efficiency=0.9,
            fuel_flow=Flow(carrier='gas', size=300),
            thermal_flow=Flow(carrier='heat', size=200)
        )
    ],
    objective_effects='cost',
)

print(f"Total cost: {result.objective:.2f}")
print(result.flow_rates)

Roadmap

fluxopt is evolving into a family of packages with a lean core and optional companions:

                          ┌──────────────┐
                          │   fluxopt    │  core: model building, solving, results, IO
                          └──────┬───────┘
        ┌──────────────┬─────────┼──────────────┬──────────────┐
        │              │         │              │              │
 fluxopt-plot   fluxopt-yaml  fluxopt-tsam  fluxopt-marimo  (examples)
   plotting      YAML+CSV    time series    interactive     cross-package
   (plotly)       loader     aggregation       apps          notebooks

Companion packages depend on core — core has no knowledge of companions.

Companion packages

Package Role Versioning · Tier fluxopt pin Status
fluxopt-plot Result visualization (Plotly) Semver · Experimental — method signatures may change Tight (>=A.B,<A.C), validated per release Scaffolded — docs · #51
fluxopt-yaml Declarative model loader (YAML + CSV → Elements) Semver · Experimental — YAML schema may change Tight (>=A.B,<A.C), validated per release Scaffolded — docs · #52
fluxopt-tsam Time series aggregation — input pre-processing, possibly result disaggregation Semver · Experimental — round-trip schema may evolve Undecided — depends on whether representative-period primitives live in core (→ loose) or in this package (→ tight) Planned
fluxopt-marimo Interactive exploration & dashboards (marimo apps) CalVer (YYYY.MM.PATCH) · Experimental — apps are templates Tight (>=A.B,<A.C), validated per release Planned

Tight-pinned companions release on every fluxopt minor; validation is automated via scheduled CI. fluxopt-tsam's pin policy is blocked on an architectural decision — if representative-period primitives live in core, tsam stays a thin adapter (loose pin); if they live in tsam, the package owns deep round-trip behavior (tight pin).

Milestones

Cross-cutting work not tied to a single companion package:

Milestone Description Status Issue
Result.stats accessor Cached xarray properties for post-processing Planned #49
.plot stub on Result Discoverable property, helpful error if plot package absent Planned #50
ReadTheDocs migration Automatic versioned docs from git tags Planned #53
Remove plotly from core Keep core lean — plotting deps in fluxopt-plot only Planned #54

Stability Tiers

Component Tier Policy
Core modeling API Stable Semver. Deprecation warnings before removal.
Stats accessor Semi-stable Breaking changes allowed between minor versions with changelog entry.

Companion packages have their own stability policies — see the table above.

See #47 for the full architecture discussion.

Development

Requires uv and Python >= 3.12.

uv sync --group dev      # Install deps
uv run pytest -v         # Run tests
uv run ruff check .      # Lint
uv run ruff format .     # Format

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fluxopt-0.1.0.tar.gz (65.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fluxopt-0.1.0-py3-none-any.whl (72.1 kB view details)

Uploaded Python 3

File details

Details for the file fluxopt-0.1.0.tar.gz.

File metadata

  • Download URL: fluxopt-0.1.0.tar.gz
  • Upload date:
  • Size: 65.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for fluxopt-0.1.0.tar.gz
Algorithm Hash digest
SHA256 faa62e4c279525b429d94c9b7c19d121245b3f30fe314975222a7f1c6d088dae
MD5 6ea1f825a8bbccce6dd275fa8d4bc3df
BLAKE2b-256 3ad5a979708d89357bd343d35c8cafd57912e8152652a19c960df756c5fba8b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for fluxopt-0.1.0.tar.gz:

Publisher: publish.yaml on fluxopt/fluxopt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fluxopt-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: fluxopt-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 72.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for fluxopt-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 625a3e0695ae706658a8779f923b49791a8a54d0d73343f046e795905e6ea81a
MD5 28bd81ffdf6db7babee64c4b3e0431d2
BLAKE2b-256 e6955fe616d47c2fc46b3d0cb504999b23cae1024853dabda8f93312253e1c76

See more details on using hashes here.

Provenance

The following attestation bundles were made for fluxopt-0.1.0-py3-none-any.whl:

Publisher: publish.yaml on fluxopt/fluxopt

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page