pulpo
A Python-based optimization tool for life cycle assessment (LCA) that aims to import, optimize, solve, retrieve, save, and summarize LCA results.
https://github.com/flechtenberg/pulpo
Category: Industrial Ecology
Sub Category: Life Cycle Assessment
Keywords
brightway ecoinvent lca lifecycle optimization pyomo
Last synced: about 15 hours ago
JSON representation
Repository metadata
Python package for life cycle optimization
- Host: GitHub
- URL: https://github.com/flechtenberg/pulpo
- Owner: flechtenberg
- License: bsd-3-clause
- Created: 2023-09-12T14:30:05.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2026-08-11T10:27:33.000Z (15 days ago)
- Last Synced: 2026-08-17T20:35:04.518Z (9 days ago)
- Topics: brightway, ecoinvent, lca, lifecycle, optimization, pyomo
- Language: Python
- Homepage: https://flechtenberg.github.io/pulpo/
- Size: 31.6 MB
- Stars: 36
- Watchers: 2
- Forks: 8
- Open Issues: 3
- Releases: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGES.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
README.md
📍 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 tasksLinkℹ️ 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:
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.1?
- Windows solve-hang fix — Unspecified limits are now truly infinite instead of ±1e20/±1e24, removing HiGHS bound warnings that deadlocked pyomo ≥ 6.6's output capture during model construction.
- Python 3.13 & numpy 2 — numpy 2 is unpinned (the
<2cap remains only in the legacybw2extra) and pyomo is relaxed to>=6.8,<7. - From 1.6.0: time-dependent optimization — The
pulpo.pulpo_timemodule (PulpoOptimizerTime) adds a time-indexed formulation with inter-timestep storage / carry-over, alongside several-times-faster model instantiation.
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
- @flechtenberg
- @robyistrate
- @vtulus
- Bartolomeus Haeussling Loewgren
Owner metadata
- Name: Fabian Lechtenberg
- Login: flechtenberg
- Email:
- Kind: user
- Description:
- Website:
- Location: Barcelona
- Twitter:
- Company: Universitat Politècnica de Catalunya
- Icon url: https://avatars.githubusercontent.com/u/67694245?u=fe33f5029f1012462fa7ec7729ef6553a2505bcf&v=4
- Repositories: 1
- Last ynced at: 2023-10-05T13:38:58.535Z
- Profile URL: https://github.com/flechtenberg
GitHub Events
Total
- Delete event: 22
- Member event: 1
- Pull request event: 17
- Fork event: 5
- Issues event: 12
- Watch event: 11
- Issue comment event: 6
- Push event: 70
- Create event: 20
Last Year
- Delete event: 6
- Watch event: 5
- Push event: 16
- Create event: 1
Committers metadata
Last synced: about 19 hours ago
Total Commits: 368
Total Committers: 4
Avg Commits per committer: 92.0
Development Distribution Score (DDS): 0.448
Commits in past year: 201
Committers in past year: 4
Avg Commits per committer in past year: 50.25
Development Distribution Score (DDS) in past year: 0.353
| Name | Commits | |
|---|---|---|
| Fabian Lechtenberg | f****n@l****t | 203 |
| flechtenberg | f****g@c****h | 86 |
| Bartolomeus Haeussling Loewgren | b****n@c****l | 75 |
| copilot-swe-agent[bot] | 1****t | 4 |
Committer domains:
- cml.leidenuniv.nl: 1
- chem.ethz.ch: 1
- lechtenberg.net: 1
Issue and Pull Request metadata
Last synced: 1 day ago
Total issues: 12
Total pull requests: 31
Average time to close issues: 7 months
Average time to close pull requests: about 23 hours
Total issue authors: 4
Total pull request authors: 2
Average comments per issue: 0.5
Average comments per pull request: 0.03
Merged pull request: 29
Bot issues: 0
Bot pull requests: 0
Past year issues: 1
Past year pull requests: 2
Past year average time to close issues: 19 days
Past year average time to close pull requests: 2 days
Past year issue authors: 1
Past year pull request authors: 1
Past year average comments per issue: 0.0
Past year average comments per pull request: 0.5
Past year merged pull request: 0
Past year bot issues: 0
Past year bot pull requests: 0
Top Issue Authors
- flechtenberg (9)
- Blowgren (1)
- akrestnik (1)
- jacopocipriani (1)
Top Pull Request Authors
- flechtenberg (29)
- Copilot (2)
Top Issue Labels
- enhancement (5)
- bug (2)
Top Pull Request Labels
- enhancement (2)
Package metadata
- Total packages: 2
-
Total downloads:
- pypi: 200 last-month
- Total dependent packages: 0 (may contain duplicates)
- Total dependent repositories: 0 (may contain duplicates)
- Total versions: 33
- Total maintainers: 1
proxy.golang.org: github.com/flechtenberg/pulpo
- Homepage:
- Documentation: https://pkg.go.dev/github.com/flechtenberg/pulpo#section-documentation
- Licenses: bsd-3-clause
- Latest release: v1.7.0 (published 15 days ago)
- Last Synced: 2026-08-25T00:04:07.019Z (1 day ago)
- Versions: 12
- Dependent Packages: 0
- Dependent Repositories: 0
-
Rankings:
- Dependent packages count: 5.395%
- Average: 5.576%
- Dependent repos count: 5.758%
pypi.org: pulpo-dev
Pulpo package for optimization in LCI databases
- Homepage:
- Documentation: https://pulpo-dev.readthedocs.io/
- Licenses: BSD-3-Clause
- Latest release: 1.7.0 (published 15 days ago)
- Last Synced: 2026-08-25T00:03:50.162Z (1 day ago)
- Versions: 21
- Dependent Packages: 0
- Dependent Repositories: 0
- Downloads: 200 Last month
-
Rankings:
- Dependent packages count: 7.303%
- Forks count: 29.948%
- Average: 36.151%
- Stargazers count: 38.914%
- Dependent repos count: 68.439%
- Maintainers (1)
Dependencies
- graphviz 11.0.0
- ipython
- myst-nb 1.1.0
- myst-parser 3.0.1
- pip
- pydata-sphinx-theme 0.15.3
- python 3.11
- sphinx 7.3.7
- sphinx-autoapi 3.0.0
- sphinx-autobuild 2024.4.16
- sphinx-copybutton 0.5.2
- sphinx-design 0.5.0
- sphinx-favicon 1.0.1
- sphinx-notfound-page 1.0.0
- sphinxcontrib-mermaid 0.9.2
- fs ==2.4.16
- highspy ==1.15.1
- ipython ==8.14.0
- joblib *
- jupyterlab *
- numpy <3.0.0
- openpyxl *
- pandas *
- pyomo >=6.8.0,<7.0.0
- pypardiso >=0.4.7; sys_platform != 'darwin'
- scipy <=1.14.1
- tqdm *
- xlsxwriter *
Score: 10.353160915308612