Source code for postreise.analyze.transmission.congestion
import numpy as np
import pandas as pd
from powersimdata.input.helpers import summarize_plant_to_bus
from powersimdata.scenario.check import _check_scenario_is_in_analyze_state
[docs]def calculate_congestion_surplus(scenario):
"""Calculates hourly congestion surplus.
:param powersimdata.scenario.scenario.Scenario scenario: scenario instance.
:return: (*pandas.DataFrame*) -- congestion surplus.
"""
_check_scenario_is_in_analyze_state(scenario)
grid = scenario.get_grid()
lmp = scenario.get_lmp()
pg = scenario.get_pg()
bus_demand = scenario.get_bus_demand()
bus_pg = summarize_plant_to_bus(pg, grid, all_buses=True)
congestion_surplus = (lmp.to_numpy() * (bus_demand - bus_pg)).sum(axis=1)
# Remove any negative values caused by barrier method imprecision
congestion_surplus = np.clip(congestion_surplus, a_min=0, a_max=None)
# Return a pandas Series with same index as pg
congestion_surplus = pd.Series(data=congestion_surplus, index=pg.index)
congestion_surplus.rename_axis(pg.index.name)
return congestion_surplus