Skip to content

Emissions limits (multiple years)

This constraint implements a decarbonisation pathway by capping emissions across multiple investment periods. It's useful for long-term planning scenarios where you need to model gradual emissions reductions aligned with net-zero targets or policy trajectories.

Common use cases:

  • Modeling decarbonisation pathways aligned with climate targets (e.g., Paris Agreement)
  • Long-term capacity expansion planning under carbon budget constraints
  • Exploring technology deployment strategies needed to achieve net-zero emissions

Note that in the code block below, n refers to the network object.

python
import math
# Configure your emission pathway parameters
baseline_year = 2023
baseline_emissions_mtco2 = 30.0  # Peak emissions in MtCO2
net_zero_year = 2050
start_year = 2025  # First constraint year
end_year = 2050    # Last constraint year

def smooth_cap(year, baseline_year, baseline_emissions, net_zero_year):
    """Square-root decay: steeper early reduction, smooth tail-off."""
    if year <= baseline_year:
        return baseline_emissions
    frac = (year - baseline_year) / float(net_zero_year - baseline_year)
    frac = min(max(frac, 0.0), 1.0)
    # Square-root decay: high early reduction, flatter later
    remaining_fraction = (1.0 - math.sqrt(frac))
    return round(baseline_emissions * remaining_fraction, 6)

# Add emission constraints for each year in the pathway
for year in range(start_year, end_year + 1):
    cap_mtco2 = smooth_cap(year, baseline_year, baseline_emissions_mtco2, net_zero_year)
    
    n.add(
        "GlobalConstraint",
        f"co2_limit_{year}",
        type="primary_energy",
        carrier_attribute="co2_emissions",
        sense="<=",
        investment_period=year,
        constant=cap_mtco2 * 1_000_000 # convert units
    )
    
    # print statement for your logs
    print(f"Added CO2 emissions limit for {year}: {cap_mtco2:.2f} MtCO2 ({cap_mtco2*1_000_000:.0f} tCO2)")

© Copyright 2025 Bayesian Energy