Simulation Info
Purpose
The simulation estimates the technical and economic performance of several Battery Energy Storage System (BESS) sizes for Venice Airport.
It models how a BESS can charge from surplus energy or from the grid, discharge to reduce grid imports, and generate value through avoided energy cost.
Method
The simulation model is implemented as a linear optimization problem.
The simulation is run independently for each BESS size. The optimization horizon is one calendar month, and each interval represents 15 minutes.
The battery state of charge is constrained between 10% and 90% of nominal capacity. Charging and discharging power is based on a 0.5C rate. Round-trip efficiency is 90%, split symmetrically between charging and discharging.
Operating Logic
The model uses ex-ante masks to decide when charging or discharging is allowed.
For each monthly window, charging is allowed in lower-cost intervals, while discharging is allowed in higher-value intervals with positive grid import. If an interval qualifies for both actions, charging has priority, preventing simultaneous charge and discharge without binary variables.
In the current configuration, surplus energy is intentionally modeled as available in every charge-allowed interval up to the BESS power limit. The goal is not to reproduce the measured surplus profile, but to let the optimizer determine how much surplus energy would be needed to make each BESS size economically convenient.
The resulting surplus charge should therefore be read as a mathematical requirement, not as a forecast of actual available surplus
The masks are mutually exclusive. If an interval qualifies for both actions, the configured priority resolves the conflict before optimization.
Contract Type
The airport currently has an electricity supply contract indexed to the F1, F2 and F3 tariff bands.
These bands cover relatively long time periods, so they flatten intra-day price differences and reduce the measurable value of energy arbitrage.
For this reason, the simulation is based on a hypothetical supply contract indexed to the hourly PUN. This structure exposes the BESS to hourly price variability and makes it possible to estimate the economic value of charging in lower-price hours and discharging in higher-price hours.
For the base electricity component, the model uses the hourly PUN plus the contractual spread. The other bill components are calculated using the same criteria applied in the current electricity bill.
The bill model used in the simulation is:
| Component | Formula |
|---|---|
| Base electricity price | Hourly PUN + contractual spread |
| Avoided import cost | Energy cost + network cost + dispatching cost x (1 + losses) + capacity market cost |
| Grid charging cost | Grid charge kWh x avoided import cost |
| Surplus opportunity cost | Surplus charge kWh x hourly export price |
| Monthly peak-shaving value | Monthly peak reduction kWh x peak-shaving unit value |
Economic Logic
The optimization objective is built as the maximization of net operating value.
For each interval, discharge is rewarded with the avoided import cost. Surplus charging is penalized with the export revenue that would be lost by storing that energy instead of selling it to the grid. Grid charging is penalized with the cost of buying that energy from the grid. All charged and discharged energy is also penalized with the degradation cost.
In simplified form:
Net value = avoided import value - lost export value - grid charging cost - degradation cost
Monthly peak shaving is calculated after the optimization. It is added to the economic result but is not part of the linear optimization objective.
Investment metrics are calculated from annual savings, capex, project life, discount rate and annual battery degradation. The outputs include NPV, IRR and simple payback.
Source Data
The simulation uses three input files from the project root.
| File | Granularity | Main role | Rows used |
|---|---|---|---|
ENERGY_INPUT.csv | 15 minutes | Site load, gas plant generation, grid import/export and PV energy | 35,039 valid timestamps |
HOURLY_PUN_ENERGY_IMPORTED.csv | 15 minutes | Import PUN index and energy cost applied to each interval | 35,039 valid timestamps |
HOURLY_PUN_ENERGY_EXPORTED.csv | Hourly | Export price used as the opportunity cost of surplus charging | 8,760 rows |
The energy and import-price data cover the period from 2025-01-01 00:15:00 to 2025-12-31 23:45:00.
Energy Data Summary
Values in this table are based on ENERGY_INPUT.csv. Energy columns are expressed in kWh per 15-minute interval.
| Column | Annual total (kWh) | Average per interval (kWh) | Max interval (kWh) |
|---|---|---|---|
| Exported to grid | 253,351.146 | 7.230 | 253.146 |
| Energy from gas plant | 33,732,857.000 | 962.723 | 1,273.000 |
| Site load | 40,083,078.010 | 1,143.956 | 2,277.109 |
| PV energy total | 1,312,264.000 | 37.452 | 206.000 |
| Imported from grid | 5,286,646.000 | 150.879 | 1,414.000 |
Price Data Summary
Import prices are read from HOURLY_PUN_ENERGY_IMPORTED.csv. Export prices are read from HOURLY_PUN_ENERGY_EXPORTED.csv.
| Source | Field | Average (€/kWh) | Min (€/kWh) | Max (€/kWh) |
|---|---|---|---|---|
| Import price file | PUN index hourly | 0.115941 | 0.000 | 0.289 |
| Import price file | Energy cost | 0.131218 | 0.015 | 0.304 |
| Export price file | Export price | 0.115938 | 0.000 | 0.289 |
Simulation Parameters
| Parameter | Value |
|---|---|
| Optimization horizon | Monthly |
| Interval length | 0.25 h |
| Round-trip efficiency | 90% |
| Minimum SOC | 10% |
| Maximum SOC | 90% |
| Power C-rate | 0.5C |
| Grid charging | Enabled |
| Actual surplus column | Disabled |
| Charge low-cost quantile | 0.60 |
| Discharge high-value quantile | 0.40 |
| Conflict priority | Charge |
| Degradation cost | 10 €/MWh throughput |
| Monthly peak-shaving value | 0.4 €/kWh |
BESS Sizes
| Nominal size (MWh) | Usable capacity (MWh) | Power (MW) | Capex (€) |
|---|---|---|---|
| 0.2 | 0.16 | 0.10 | 40,000 |
| 0.4 | 0.32 | 0.20 | 80,000 |
| 0.6 | 0.48 | 0.30 | 120,000 |
| 0.8 | 0.64 | 0.40 | 160,000 |
| 1.0 | 0.80 | 0.50 | 200,000 |
| 1.5 | 1.20 | 0.75 | 300,000 |
| 2.0 | 1.60 | 1.00 | 400,000 |
| 3.0 | 2.40 | 1.50 | 600,000 |