Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Post-Combustion CO₂ Capture — ML Surrogate Model

A physics-grounded machine-learning surrogate for an MEA-based absorption column.
Predicts capture efficiency, reboiler duty (the key CCS economic lever), and
solvent degradation as functions of operating conditions — then finds the operating
envelope that minimises energy penalty at ≥90 % capture.

Background

Post-combustion capture using 30 wt% monoethanolamine (MEA) is the benchmark CCS
technology. The absorption column physics follow:

  • Mass transfer: two-film theory with chemical enhancement
    K_OG = 1 / (1/k_G + 1/(k_L · E))
    where the enhancement factor E ≈ √(k₂·C_MEA / k_L²) (Hatta regime)
  • NTU-HTU model for column sizing
  • VLE: simplified Austgen correlation
    P*_CO₂ = 10⁴ · α² · exp(4000·(1/333 − 1/T_lean))
  • Reboiler duty decomposed into sensible heat + heat of absorption + stripping steam
  • Degradation: thermal + oxidative + carbamate precipitation pathways

Surrogate ML replaces expensive rigorous simulations (Aspen Plus / gPROMS) for
real-time optimisation.

Targets

Target Unit Typical range
capture_efficiency fraction 0.20 – 0.995
reboiler_duty_GJ_t GJ / t CO₂ 2.5 – 5.0
solvent_degradation_pct_per_1000h % MEA / 1000 h 0.3 – 7.5

Features (inputs)

Feature Description Range
y_CO2 CO₂ mole fraction in flue gas 0.04 – 0.16
y_O2 O₂ mole fraction 0.02 – 0.08
y_N2 N₂ mole fraction (balance)
T_flue_K Flue-gas temperature [K] 313 – 363
LG_ratio Liquid/gas mass ratio [kg/kg] 2.5 – 8.0
lean_loading Lean solvent loading [mol CO₂/mol MEA] 0.15 – 0.40
MEA_conc_mol_L MEA concentration [mol/L] 3.0 – 7.0
P_total_bar Column pressure [bar] 1.0 – 1.5
T_lean_K Lean solvent temperature [K] 308 – 328
col_height_m Packing height [m] 5 – 20

Quick Start

pip install -r requirements.txt

# 1. Generate synthetic dataset
python src/data_generation.py

# 2. Train surrogate models
python src/train.py

# 3. Find optimal operating envelope
python src/optimize.py --target_capture 0.90 --max_degradation 4.0

# 4. Evaluate and plot
python src/evaluate.py

Models

Three model families are compared:

  • Gradient Boosted Trees (XGBoost) — best overall accuracy
  • Random Forest — interpretable feature importance
  • Neural Network (MLPRegressor) — captures high-order interactions

Multi-output wrapper trains one model per target. Best model is saved to models/.

Results (example)

Model: XGBoost
─────────────────────────────────────────────────────
Target                        R²      MAE
capture_efficiency           0.984   0.009
reboiler_duty_GJ_t           0.971   0.052 GJ/t
solvent_degradation          0.966   0.083%/1000h
─────────────────────────────────────────────────────

Optimal operating point (η_cap ≥ 0.90, Q_reb minimised):
  LG_ratio        = 5.8
  lean_loading    = 0.32
  MEA_conc_mol_L  = 5.5
  T_lean_K        = 315
  → Q_reb = 2.91 GJ/t CO₂   |   η_cap = 0.927   |   deg = 1.2%/1000h

Results Visualisations

Parity plots SHAP feature importance

Project Layout

src/data_generation.py   Physics-based LHS data generation
src/features.py          Feature engineering (interaction terms, scaling)
src/train.py             Train + CV + save best model
src/optimize.py          Constrained optimisation over surrogate
src/evaluate.py          Metrics, parity plots, SHAP feature importance
notebooks/               Exploratory analysis
tests/                   Unit tests for data + model pipeline
docs/                    Physics derivation notes

References

  • Austgen et al. (1989) — MEA VLE correlation
  • Kvamsdal & Rochelle (2008) — Temperature bulge & NTU modelling
  • Nuchitprasittichai & Cremaschi (2011) — Surrogate-based CCS optimisation
  • Liao et al. (2022) — ML surrogate for amine scrubbing

About

Physics-grounded ML surrogate for MEA-based CO2 capture, optimizing for minimum energy penalty

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages