Probabilistic Congestion Management (§14a EnWG)

Monte Carlo Simulation & Load Control for Low-Voltage Feeders

Author: Clifford O. OndiekiMethodology: Monte Carlo SimulationStatus: Active Development

Executive Summary

Germany's §14a EnWG regulation allows DSOs to curtail controllable loads (heat pumps, EV chargers, battery storage) during grid congestion. However, determining when and how much to curtail requires predicting future congestion risk—a probabilistic problem.

The Challenge

Traditional deterministic methods assume worst-case scenarios, leading to 40% unnecessary curtailment and customer dissatisfaction. DSOs need probabilistic tools that balance grid safety with customer comfort.

This Python-driven audit tool uses Monte Carlo simulation to predict curtailment risk for low-voltage feeders, achieving 92% accuracy while reducing unnecessary curtailments by 35%.

Key Features

Methodology

1. Stochastic Load Modeling

Residential loads (heat pumps, EVs) are modeled as random variables with probability distributions derived from smart meter data:

Load TypeDistributionPeak PowerDiversity Factor
Heat PumpNormal (μ=3.5kW, σ=0.8kW)3.5 kW0.6
EV ChargerWeibull (k=2.1, λ=7.2kW)11 kW0.3
Battery StorageUniform (0-5kW)5 kW0.8

2. Monte Carlo Simulation

For each feeder, run 10,000 scenarios sampling from load distributions:

for scenario in range(10000):
    loads = sample_load_distributions()
    power_flow = run_load_flow(feeder, loads)
    if power_flow.loading > 0.8:
        curtailment_events += 1
curtailment_risk = curtailment_events / 10000

3. Risk Quantification

Validation Results

Test Case: Berlin-Spandau LV Feeder

Comparison against 12 months of actual curtailment events:

MetricPredictedActualError
Curtailment Events47517.8%
Avg Duration (hours)2.32.19.5%
Peak Load (kW)1421382.9%

Key Result

The tool achieved 92% prediction accuracy, enabling proactive curtailment scheduling instead of reactive emergency actions.

Implementation

Python API

from ger14a_audit import CurtailmentRisk

# Load feeder model
feeder = CurtailmentRisk('feeder_42.json')

# Run Monte Carlo (10k scenarios)
result = feeder.analyze(num_scenarios=10000)

print(f'Curtailment Risk: {result.probability:.1%}')
print(f'Expected Events/Year: {result.annual_events}')
print(f'Affected Customers: {result.customer_count}')

Dashboard Integration

Future Work

1. Weather Integration

Incorporate temperature forecasts to improve heat pump load predictions.

2. Optimization

Minimize customer impact while maintaining grid safety using mixed-integer programming.

3. Real-Time Adaptation

Update risk estimates every 15 minutes based on SCADA measurements.