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.
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 factorE ≈ √(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.
| 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 |
| 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 |
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.pyThree 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/.
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
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
- 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

