Skip to main content

Python-based User-defined Lifecycle Production Optimization

Jupyter Python Markdown

License Last Commit Commit Activity

PyPI - Version GitHub Stars launch - renku


📍 Overview

PULPO is a Python package for Life Cycle Optimization (LCO) based on life cycle inventories. It is designed to serve as a platform for optimization tasks of varying complexity.

The package builds on top of the Brightway LCA framework and the Pyomo optimization modeling framework.


✨ Capabilities

Applying optimization is recommended when the system of study has (1) many degrees of freedom that would otherwise prompt the manual assessment of a large number of scenarios, or (2) any of the following capabilities is relevant to the goal and scope of the study:

  • Specify technology and regional choices throughout the entire supply chain (fore- and background), such as the production technology of electricity or the origin of metal resources. Consistently accounting for background changes in large-scale decisions can be significant.
  • Specify constraints on any activity in the life cycle inventories, interpreted as tangible limitations such as raw material availability, production capacity, or environmental regulations.
  • Optimize for or constrain any impact category for which characterization factors are available.
  • Specify supply values instead of final demands, which is relevant when only production volumes are known (e.g. here).
  • Optimize under uncertainty via a dedicated pipeline: import and filter uncertain LCI parameters, apply uncertainty strategies, run Global Sensitivity Analysis (Sobol), perform Monte Carlo sampling, or solve Chance-Constrained programs to obtain Pareto-optimal solutions at user-defined probability levels.

Features recently completed:

  • ℹ️ Optimization under uncertainty [chance-constraints, Monte Carlo, global sensitivity analysis]
  • ℹ️ Development of a GUI for simple optimization tasks Link
  • ℹ️ Enable PULPO to work on both bw2 and bw25 projects
  • ℹ️ Thorough documentation hosted on flechtenberg.github.io/pulpo/

Features currently under development:

  • ℹ️ Multi-objective optimization [bi-objective epsilon constrained, goal programming ...]
  • ℹ️ Integration of economic and social indicators in the optimization problem formulation

Feature requests are more than welcome!


🔧 Installation

PULPO is available on PyPI. Depending on the version of Brightway you want to work with, install either the bw2 or bw25 variant:

pip install "pulpo-dev[bw2]"

or

pip install "pulpo-dev[bw25]"

🤖 Running PULPO

Use this link to start a cloud session and test PULPO right away:

launch - renku

The main reference is the PULPO showcase notebook, which revolves around methanol production and covers both the core optimization features (Sections 1–9) and the full workflow of the pulpo_unc module (Section 10): uncertainty data import and filtering, gap-filling strategies, Monte Carlo from prepared distributions, Chance-Constrained optimization, and Global Sensitivity Analysis.

Additional example notebooks are available for a hydrogen case, an electricity case, and a plastic case.

There is also a workshop repository (here) created for the Brightcon 2024 conference, with guided notebooks and exercises.

🧪 Tests

Run from the package folder:

python -m unittest discover -s tests

What's new in 1.6.0?

  • Time-dependent optimization — New pulpo.pulpo_time module (PulpoOptimizerTime) adds a time-indexed formulation with inter-timestep storage / carry-over.
  • Faster model building — Several-times-faster instantiation on ecoinvent-scale databases, plus a quicker and order-independent Brightway data import.

See the changelog for the full details and earlier releases.


🤝 Contributing

Contributions are very welcome. To request a feature or report a bug, please open an Issue. If you are confident in your coding skills, feel free to implement your suggestions and send a Pull Request.


📄 License

This project is licensed under the ℹ️ BSD 3-Clause License. See the LICENSE file for additional info.
Copyright (c) 2026, Fabian Lechtenberg. All rights reserved.


👏 Acknowledgments

We would like to express our gratitude to the authors and contributors of the following packages that PULPO builds upon:

We also acknowledge the pioneering ideas and contributions from the following works:

The development of PULPO culminated in the following publication, which details the approach and outlines its implementation:

Fabian Lechtenberg, Robert Istrate, Victor Tulus, Antonio Espuña, Moisès Graells, and Gonzalo Guillén‐Gosálbez.
“PULPO: A Framework for Efficient Integration of Life Cycle Inventory Models into Life Cycle Product Optimization.”
Journal of Industrial Ecology, October 10, 2024.
https://doi.org/10.1111/jiec.13561

Please cite this article if PULPO is used to produce results for a publication or project.


Authors


↑ Return

Download files

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

Source Distribution

pulpo_dev-1.6.0.tar.gz (91.8 kB view details)

Uploaded Source

Built Distribution

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

pulpo_dev-1.6.0-py3-none-any.whl (90.3 kB view details)

Uploaded Python 3

File details

Details for the file pulpo_dev-1.6.0.tar.gz.

File metadata

  • Download URL: pulpo_dev-1.6.0.tar.gz
  • Upload date:
  • Size: 91.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.2

File hashes

Hashes for pulpo_dev-1.6.0.tar.gz
Algorithm Hash digest
SHA256 a85ebf0680c5d73089d335e81c404dde0a05741f58bf30b0397acc9c5155a660
MD5 105a8453bb2cadd63b18ddf6cabbb12c
BLAKE2b-256 cca7b4d3ab614e40ae2861dc2d10f624ec00d05b44a342399e62a2331af7b26e

See more details on using hashes here.

File details

Details for the file pulpo_dev-1.6.0-py3-none-any.whl.

File metadata

  • Download URL: pulpo_dev-1.6.0-py3-none-any.whl
  • Upload date:
  • Size: 90.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.2

File hashes

Hashes for pulpo_dev-1.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0353b67b24a85b49305dd8aa3a59033bf3041ee851a16e318fa3770887949363
MD5 dafc3f96fcac50ebf5bfeb644fdfd5b2
BLAKE2b-256 2ee7f0a1b6cae4cf8a3a39e21dafffbe82d31c8c78718d0b89ba28ca459d09d1

See more details on using hashes here.

Release history Release notifications | RSS feed

1.7.0

2 files

1.6.1

2 files

This release

1.6.0 This release

2 files

1.5.2

2 files

1.5.1

2 files

1.5.0

2 files

1.4.3

2 files

1.4.2

2 files

1.4.1

2 files

1.4.0

2 files

1.3.0

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

0.0.4

2 files

0.0.3

2 files

0.0.2

2 files

0.0.1

2 files

Supported by

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